11e934351Sopenharmony_ci/* 21e934351Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 31e934351Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 41e934351Sopenharmony_ci * you may not use this file except in compliance with the License. 51e934351Sopenharmony_ci * You may obtain a copy of the License at 61e934351Sopenharmony_ci * 71e934351Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 81e934351Sopenharmony_ci * 91e934351Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 101e934351Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 111e934351Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 121e934351Sopenharmony_ci * See the License for the specific language governing permissions and 131e934351Sopenharmony_ci * limitations under the License. 141e934351Sopenharmony_ci */ 151e934351Sopenharmony_ci 161e934351Sopenharmony_ci#include <gtest/gtest.h> 171e934351Sopenharmony_ci#include <iostream> 181e934351Sopenharmony_ci#include <string> 191e934351Sopenharmony_ci 201e934351Sopenharmony_ci#define private public 211e934351Sopenharmony_ci#include "tls.h" 221e934351Sopenharmony_ci#include "tls_key.h" 231e934351Sopenharmony_ci 241e934351Sopenharmony_cinamespace OHOS { 251e934351Sopenharmony_cinamespace NetStack { 261e934351Sopenharmony_cinamespace TlsSocket { 271e934351Sopenharmony_cinamespace { 281e934351Sopenharmony_ciusing namespace testing::ext; 291e934351Sopenharmony_ciconstexpr int FILE_READ_KEY_LEN = 4096; 301e934351Sopenharmony_cistatic char g_keyFile[] = 311e934351Sopenharmony_ci "-----BEGIN RSA PRIVATE KEY-----\r\n" 321e934351Sopenharmony_ci "MIIEowIBAAKCAQEAqVzrf6PkLu0uhp5yl2HPNm0vLyI1KLqgsdz5s+JvVdbPXNxD\r\n" 331e934351Sopenharmony_ci "g6fmdwa64tJXZPKx7i1KwNs/Jx3xv1N6rqB0au+Ku0Zdq7zbMCqej63SbFW1XWvQ\r\n" 341e934351Sopenharmony_ci "6RJ76GcitgrFMTlQN4AzfX0xLFaUJHRuDS4QC5UE9CmV3kD09BNgItu/hxPAHSwg\r\n" 351e934351Sopenharmony_ci "q6myc1uufYCwCUIV3bzxd65M343zubTlwOSmsCSqQIl8C1Gd6NWT69tL4fq2hHc/\r\n" 361e934351Sopenharmony_ci "09VAlcLvugztwM6NHwDCmRFEDz3RdRahAvCEde8OkY/Aor6UucYWzCJofLeyKVQg\r\n" 371e934351Sopenharmony_ci "6J3CTsT/zUE6pdKTvuhQbpRCtWKWSa7qDv1WywIDAQABAoIBAFGpbCPvcmbuFjDy\r\n" 381e934351Sopenharmony_ci "1W4Iy1EC9G1VoSwyUKlyUzRZSjWpjfLIggVJP+bEZ/hWU61pGEIvtIupK5pA5f/K\r\n" 391e934351Sopenharmony_ci "0KzC0V9+gPYrx563QTjIVAwTVBLIgNq60dCQCQ7WK/Z62voRGIyqVCl94+ftFyE8\r\n" 401e934351Sopenharmony_ci "wpO4UiRDhk/0fT7dMz882G32ZzNJmY9eHu+yOaRctJW2gRBROHpQfDGBCz7w8s2j\r\n" 411e934351Sopenharmony_ci "ulIcnvwGOrvVllsL+vgY95M0LOq0W8ObbUSlawTnNTSRxFL68Hz5EaVJ19EYvEcC\r\n" 421e934351Sopenharmony_ci "eWnpEqIfF8OhQ+mYbdrAutXCkqJLz3rdu5P2Lbk5Ht5ETfr7rtUzvb4+ExIcxVOs\r\n" 431e934351Sopenharmony_ci "eys8EgECgYEA29tTxJOy2Cb4DKB9KwTErD1sFt9Ed+Z/A3RGmnM+/h75DHccqS8n\r\n" 441e934351Sopenharmony_ci "g9DpvHVMcMWYFVYGlEHC1F+bupM9CgxqQcVhGk/ysJ5kXF6lSTnOQxORnku3HXnV\r\n" 451e934351Sopenharmony_ci "4QzgKtLfHbukW1Y2RZM3aCz+Hg+bJrpacWyWZ4tRWNYsO58JRaubZjsCgYEAxTSP\r\n" 461e934351Sopenharmony_ci "yUBleQejl5qO76PGUUs2W8+GPr492NJGb63mEiM1zTYLVN0uuDJ2JixzHb6o1NXZ\r\n" 471e934351Sopenharmony_ci "6i00pSksT3+s0eiBTRnF6BJ0y/8J07ZnfQQXRAP8ypiZtd3jdOnUxEHfBw2QaIdP\r\n" 481e934351Sopenharmony_ci "tVdUc2mpIhosAYT9sWpHYvlUqTCdeLwhkYfgeLECgYBoajjVcmQM3i0OKiZoCOKy\r\n" 491e934351Sopenharmony_ci "/pTYI/8rho+p/04MylEPdXxIXEWDYD6/DrgDZh4ArQc2kt2bCcRTAnk+WfEyVYUd\r\n" 501e934351Sopenharmony_ci "aXVdfry+/uqhJ94N8eMw3hlZeZIk8JkQQgIwtGd8goJjUoWB85Hr6vphIn5IHVcY\r\n" 511e934351Sopenharmony_ci "6T5hPLxMmaL2SeioawDpwwKBgQCFXjDH6Hc3zQTEKND2HIqou/b9THH7yOlG056z\r\n" 521e934351Sopenharmony_ci "NKZeKdXe/OfY8uT/yZDB7FnGCgVgO2huyTfLYvcGpNAZ/eZEYGPJuYGn3MmmlruS\r\n" 531e934351Sopenharmony_ci "fsvFQfUahu2dY3zKusEcIXhV6sR5DNnJSFBi5VhvKcgNFwYDkF7K/thUu/4jgwgo\r\n" 541e934351Sopenharmony_ci "xf33YQKBgDQffkP1jWqT/pzlVLFtF85/3eCC/uedBfxXknVMrWE+CM/Vsx9cvBZw\r\n" 551e934351Sopenharmony_ci "hi15LA5+hEdbgvj87hmMiCOc75e0oz2Rd12ZoRlBVfbncH9ngfqBNQElM7Bueqoc\r\n" 561e934351Sopenharmony_ci "JOpKV+gw0gQtiu4beIdFnYsdZoZwrTjC4rW7OI0WYoLJabMFFh3I\r\n" 571e934351Sopenharmony_ci "-----END RSA PRIVATE KEY-----\r\n"; 581e934351Sopenharmony_ci} // namespace 591e934351Sopenharmony_ci 601e934351Sopenharmony_ciclass TlsKeyTest : public testing::Test { 611e934351Sopenharmony_cipublic: 621e934351Sopenharmony_ci static void SetUpTestCase() {} 631e934351Sopenharmony_ci 641e934351Sopenharmony_ci static void TearDownTestCase() {} 651e934351Sopenharmony_ci 661e934351Sopenharmony_ci virtual void SetUp() {} 671e934351Sopenharmony_ci 681e934351Sopenharmony_ci virtual void TearDown() {} 691e934351Sopenharmony_ci}; 701e934351Sopenharmony_ci 711e934351Sopenharmony_ciHWTEST_F(TlsKeyTest, AlgorithmTest, TestSize.Level2) 721e934351Sopenharmony_ci{ 731e934351Sopenharmony_ci SecureData structureData(g_keyFile); 741e934351Sopenharmony_ci std::string keyPassStr = ""; 751e934351Sopenharmony_ci SecureData keyPass(keyPassStr); 761e934351Sopenharmony_ci TLSKey tlsKey = TLSKey(structureData, ALGORITHM_RSA, keyPass); 771e934351Sopenharmony_ci KeyAlgorithm algorithm = tlsKey.Algorithm(); 781e934351Sopenharmony_ci EXPECT_EQ(algorithm, ALGORITHM_RSA); 791e934351Sopenharmony_ci} 801e934351Sopenharmony_ci 811e934351Sopenharmony_ciHWTEST_F(TlsKeyTest, DecodePemTest, TestSize.Level2) 821e934351Sopenharmony_ci{ 831e934351Sopenharmony_ci std::string fileName = ""; 841e934351Sopenharmony_ci std::string keyPassStr = ""; 851e934351Sopenharmony_ci SecureData keyPass(keyPassStr); 861e934351Sopenharmony_ci TLSKey tlsKey1 = TLSKey(fileName, ALGORITHM_RSA, keyPass); 871e934351Sopenharmony_ci TLSKey tlsKey2 = TLSKey(fileName, ALGORITHM_RSA, keyPass, EncodingFormat::DER); 881e934351Sopenharmony_ci std::string fileName2 = "/system/lib"; 891e934351Sopenharmony_ci TLSKey tlsKey3 = TLSKey(fileName2, ALGORITHM_RSA, keyPass); 901e934351Sopenharmony_ci TLSKey tlsKey4 = TLSKey(fileName2, ALGORITHM_RSA, keyPass, EncodingFormat::DER); 911e934351Sopenharmony_ci SecureData structureData(g_keyFile); 921e934351Sopenharmony_ci structureData.length_ = sizeof(g_keyFile); 931e934351Sopenharmony_ci TLSKey tlsKey = TLSKey(structureData, ALGORITHM_RSA, keyPass); 941e934351Sopenharmony_ci EXPECT_EQ(tlsKey.keyIsNull_, false); 951e934351Sopenharmony_ci} 961e934351Sopenharmony_ci 971e934351Sopenharmony_ciHWTEST_F(TlsKeyTest, CopyConstruction, TestSize.Level2) 981e934351Sopenharmony_ci{ 991e934351Sopenharmony_ci SecureData structureData(g_keyFile); 1001e934351Sopenharmony_ci std::string keyPassStr = ""; 1011e934351Sopenharmony_ci SecureData keyPass(keyPassStr); 1021e934351Sopenharmony_ci TLSKey tlsKey = TLSKey(structureData, ALGORITHM_RSA, keyPass); 1031e934351Sopenharmony_ci TLSKey tlsKeyCopy = TLSKey(tlsKey); 1041e934351Sopenharmony_ci KeyAlgorithm algorithm = tlsKeyCopy.Algorithm(); 1051e934351Sopenharmony_ci EXPECT_EQ(algorithm, ALGORITHM_RSA); 1061e934351Sopenharmony_ci} 1071e934351Sopenharmony_ci 1081e934351Sopenharmony_ciHWTEST_F(TlsKeyTest, AssignmentConstruction, TestSize.Level2) 1091e934351Sopenharmony_ci{ 1101e934351Sopenharmony_ci SecureData structureData(g_keyFile); 1111e934351Sopenharmony_ci std::string keyPassStr = ""; 1121e934351Sopenharmony_ci SecureData keyPass(keyPassStr); 1131e934351Sopenharmony_ci TLSKey tlsKey = TLSKey(structureData, ALGORITHM_RSA, keyPass); 1141e934351Sopenharmony_ci TLSKey key = tlsKey; 1151e934351Sopenharmony_ci KeyAlgorithm algorithm = key.Algorithm(); 1161e934351Sopenharmony_ci EXPECT_EQ(algorithm, ALGORITHM_RSA); 1171e934351Sopenharmony_ci} 1181e934351Sopenharmony_ci 1191e934351Sopenharmony_ciHWTEST_F(TlsKeyTest, HandleTest, TestSize.Level2) 1201e934351Sopenharmony_ci{ 1211e934351Sopenharmony_ci SecureData structureData(g_keyFile); 1221e934351Sopenharmony_ci std::string keyPassStr = ""; 1231e934351Sopenharmony_ci SecureData keyPass(keyPassStr); 1241e934351Sopenharmony_ci TLSKey tlsKey = TLSKey(structureData, ALGORITHM_RSA, keyPass); 1251e934351Sopenharmony_ci Handle handle = tlsKey.handle(); 1261e934351Sopenharmony_ci EXPECT_NE(handle, nullptr); 1271e934351Sopenharmony_ci tlsKey.Clear(true); 1281e934351Sopenharmony_ci TLSKey tlsKeyDsa = TLSKey(structureData, ALGORITHM_DSA, keyPass); 1291e934351Sopenharmony_ci Handle handleDsa = tlsKeyDsa.handle(); 1301e934351Sopenharmony_ci EXPECT_EQ(handleDsa, nullptr); 1311e934351Sopenharmony_ci tlsKeyDsa.Clear(true); 1321e934351Sopenharmony_ci TLSKey tlsKeyEc = TLSKey(structureData, ALGORITHM_EC, keyPass); 1331e934351Sopenharmony_ci Handle handleEc = tlsKeyEc.handle(); 1341e934351Sopenharmony_ci EXPECT_EQ(handleEc, nullptr); 1351e934351Sopenharmony_ci tlsKeyEc.Clear(true); 1361e934351Sopenharmony_ci TLSKey tlsKeyDh = TLSKey(structureData, ALGORITHM_DH, keyPass); 1371e934351Sopenharmony_ci Handle handleDh = tlsKeyDh.handle(); 1381e934351Sopenharmony_ci EXPECT_EQ(handleDh, nullptr); 1391e934351Sopenharmony_ci tlsKeyDh.Clear(true); 1401e934351Sopenharmony_ci TLSKey tlsKeyOpaque = TLSKey(structureData, OPAQUE, keyPass); 1411e934351Sopenharmony_ci Handle handleOpaque = tlsKeyOpaque.handle(); 1421e934351Sopenharmony_ci EXPECT_EQ(handleOpaque, nullptr); 1431e934351Sopenharmony_ci tlsKeyOpaque.Clear(true); 1441e934351Sopenharmony_ci TLSKey keyOpaque = tlsKeyOpaque; 1451e934351Sopenharmony_ci EXPECT_NE(handle, nullptr); 1461e934351Sopenharmony_ci} 1471e934351Sopenharmony_ci 1481e934351Sopenharmony_ciHWTEST_F(TlsKeyTest, GetKeyPassTest, TestSize.Level2) 1491e934351Sopenharmony_ci{ 1501e934351Sopenharmony_ci SecureData structureData(g_keyFile); 1511e934351Sopenharmony_ci std::string keyPassStr = ""; 1521e934351Sopenharmony_ci SecureData keyPass(keyPassStr); 1531e934351Sopenharmony_ci TLSKey tlsKey = TLSKey(structureData, ALGORITHM_RSA, keyPass); 1541e934351Sopenharmony_ci SecureData getKeyPass = tlsKey.GetKeyPass(); 1551e934351Sopenharmony_ci EXPECT_EQ(getKeyPass.Length(), keyPass.Length()); 1561e934351Sopenharmony_ci} 1571e934351Sopenharmony_ci 1581e934351Sopenharmony_ciHWTEST_F(TlsKeyTest, GetKeyDataTest, TestSize.Level2) 1591e934351Sopenharmony_ci{ 1601e934351Sopenharmony_ci SecureData structureData(g_keyFile); 1611e934351Sopenharmony_ci std::string keyPassStr = ""; 1621e934351Sopenharmony_ci SecureData keyPass(keyPassStr); 1631e934351Sopenharmony_ci TLSKey tlsKey = TLSKey(structureData, ALGORITHM_RSA, keyPass); 1641e934351Sopenharmony_ci SecureData getKeyData = tlsKey.GetKeyData(); 1651e934351Sopenharmony_ci EXPECT_EQ(getKeyData.Length(), structureData.Length()); 1661e934351Sopenharmony_ci} 1671e934351Sopenharmony_ci 1681e934351Sopenharmony_ciHWTEST_F(TlsKeyTest, AlgorithmTest2, TestSize.Level2) 1691e934351Sopenharmony_ci{ 1701e934351Sopenharmony_ci SecureData structureData(g_keyFile); 1711e934351Sopenharmony_ci std::string keyPassStr = ""; 1721e934351Sopenharmony_ci SecureData keyPass(keyPassStr); 1731e934351Sopenharmony_ci TLSKey tlsKeyDsa = TLSKey(structureData, ALGORITHM_DSA, keyPass); 1741e934351Sopenharmony_ci TLSKey keyDsa = tlsKeyDsa; 1751e934351Sopenharmony_ci TLSKey tlsKeyEc = TLSKey(structureData, ALGORITHM_EC, keyPass); 1761e934351Sopenharmony_ci TLSKey keyEc = tlsKeyEc; 1771e934351Sopenharmony_ci TLSKey tlsKeyDh = TLSKey(structureData, ALGORITHM_DH, keyPass); 1781e934351Sopenharmony_ci TLSKey keyDh = tlsKeyDh; 1791e934351Sopenharmony_ci TLSKey tlsKeyOpaque = TLSKey(structureData, OPAQUE, keyPass); 1801e934351Sopenharmony_ci TLSKey keyOpaque = tlsKeyOpaque; 1811e934351Sopenharmony_ci SecureData getKeyData = tlsKeyDsa.GetKeyData(); 1821e934351Sopenharmony_ci EXPECT_EQ(getKeyData.Length(), structureData.Length()); 1831e934351Sopenharmony_ci} 1841e934351Sopenharmony_ci 1851e934351Sopenharmony_ciHWTEST_F(TlsKeyTest, SwitchAlgorithmTest, TestSize.Level2) 1861e934351Sopenharmony_ci{ 1871e934351Sopenharmony_ci SecureData structureData(g_keyFile); 1881e934351Sopenharmony_ci std::string keyPassStr = ""; 1891e934351Sopenharmony_ci 1901e934351Sopenharmony_ci KeyType typePublic = KeyType::PUBLIC_KEY; 1911e934351Sopenharmony_ci SecureData keyPass(keyPassStr); 1921e934351Sopenharmony_ci KeyType typePrivate = KeyType::PRIVATE_KEY; 1931e934351Sopenharmony_ci char privateKey[FILE_READ_KEY_LEN] = {0}; 1941e934351Sopenharmony_ci const char *privateKeyData = static_cast<const char *>(privateKey); 1951e934351Sopenharmony_ci BIO *bio = BIO_new_mem_buf(privateKeyData, -1); 1961e934351Sopenharmony_ci TLSKey tlsKeyRsa = TLSKey(structureData, ALGORITHM_RSA, keyPass); 1971e934351Sopenharmony_ci tlsKeyRsa.SwitchAlgorithm(typePrivate, ALGORITHM_RSA, bio); 1981e934351Sopenharmony_ci tlsKeyRsa.SwitchAlgorithm(typePublic, ALGORITHM_RSA, bio); 1991e934351Sopenharmony_ci TLSKey tlsKeyDsa = TLSKey(structureData, ALGORITHM_DSA, keyPass); 2001e934351Sopenharmony_ci tlsKeyDsa.SwitchAlgorithm(typePrivate, ALGORITHM_DSA, bio); 2011e934351Sopenharmony_ci tlsKeyDsa.SwitchAlgorithm(typePublic, ALGORITHM_DSA, bio); 2021e934351Sopenharmony_ci TLSKey tlsKeyEc = TLSKey(structureData, ALGORITHM_EC, keyPass); 2031e934351Sopenharmony_ci tlsKeyEc.SwitchAlgorithm(typePrivate, ALGORITHM_EC, bio); 2041e934351Sopenharmony_ci tlsKeyEc.SwitchAlgorithm(typePublic, ALGORITHM_EC, bio); 2051e934351Sopenharmony_ci TLSKey tlsKeyDh = TLSKey(structureData, ALGORITHM_DH, keyPass); 2061e934351Sopenharmony_ci tlsKeyDh.SwitchAlgorithm(typePrivate, ALGORITHM_DH, bio); 2071e934351Sopenharmony_ci tlsKeyDh.SwitchAlgorithm(typePublic, ALGORITHM_DH, bio); 2081e934351Sopenharmony_ci TLSKey tlsKeyOpaque = TLSKey(structureData, OPAQUE, keyPass); 2091e934351Sopenharmony_ci tlsKeyOpaque.SwitchAlgorithm(typePrivate, OPAQUE, bio); 2101e934351Sopenharmony_ci tlsKeyOpaque.SwitchAlgorithm(typePublic, OPAQUE, bio); 2111e934351Sopenharmony_ci SecureData getKeyData = tlsKeyDsa.GetKeyData(); 2121e934351Sopenharmony_ci EXPECT_EQ(getKeyData.Length(), structureData.Length()); 2131e934351Sopenharmony_ci} 2141e934351Sopenharmony_ci 2151e934351Sopenharmony_ciHWTEST_F(TlsKeyTest, ClearTest, TestSize.Level2) 2161e934351Sopenharmony_ci{ 2171e934351Sopenharmony_ci SecureData structureData(g_keyFile); 2181e934351Sopenharmony_ci std::string keyPassStr = ""; 2191e934351Sopenharmony_ci SecureData keyPass(keyPassStr); 2201e934351Sopenharmony_ci TLSKey tlsKeyDsa = TLSKey(structureData, ALGORITHM_DSA, keyPass); 2211e934351Sopenharmony_ci tlsKeyDsa.dsa_ = DSA_new(); 2221e934351Sopenharmony_ci tlsKeyDsa.Clear(true); 2231e934351Sopenharmony_ci TLSKey tlsKeyDh = TLSKey(structureData, ALGORITHM_DH, keyPass); 2241e934351Sopenharmony_ci tlsKeyDh.dh_ = DH_new(); 2251e934351Sopenharmony_ci tlsKeyDh.Clear(true); 2261e934351Sopenharmony_ci TLSKey tlsKeyEc = TLSKey(structureData, ALGORITHM_EC, keyPass); 2271e934351Sopenharmony_ci tlsKeyEc.ec_ = EC_KEY_new(); 2281e934351Sopenharmony_ci tlsKeyEc.Clear(true); 2291e934351Sopenharmony_ci TLSKey tlsKeyOpaque = TLSKey(structureData, OPAQUE, keyPass); 2301e934351Sopenharmony_ci tlsKeyOpaque.genericKey_ = EVP_PKEY_new(); 2311e934351Sopenharmony_ci tlsKeyOpaque.Clear(true); 2321e934351Sopenharmony_ci EXPECT_EQ(tlsKeyOpaque.keyIsNull_, true); 2331e934351Sopenharmony_ci} 2341e934351Sopenharmony_ci 2351e934351Sopenharmony_ciHWTEST_F(TlsKeyTest, DecodeDataTest, TestSize.Level2) 2361e934351Sopenharmony_ci{ 2371e934351Sopenharmony_ci SecureData data; 2381e934351Sopenharmony_ci std::string keyPassStr = ""; 2391e934351Sopenharmony_ci SecureData keyPass(keyPassStr); 2401e934351Sopenharmony_ci TLSKey tlsKey = TLSKey(data, ALGORITHM_DSA, keyPass); 2411e934351Sopenharmony_ci tlsKey.DecodeData(data, ALGORITHM_DSA, keyPass); 2421e934351Sopenharmony_ci SecureData getKeyData = tlsKey.GetKeyData(); 2431e934351Sopenharmony_ci EXPECT_EQ(getKeyData.Length(), data.Length()); 2441e934351Sopenharmony_ci} 2451e934351Sopenharmony_ci} // namespace TlsSocket 2461e934351Sopenharmony_ci} // namespace NetStack 2471e934351Sopenharmony_ci} // namespace OHOS