1 /*
2 * Copyright (c) 2025 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include <stdlib.h>
16 #include <stdio.h>
17 #include <pthread.h>
18 #include <string.h>
19
20 #include "crypto_framework_asym_key_test.h"
21 #include "blob.h"
22 #include "log.h"
23
24 #include <gtest/gtest.h>
25
26 using namespace testing::ext;
27 namespace Unittest::CryptoFrameworkAsymKeyNapiTest {
28 class OHCryptoFrameworkAsymKeyNapiTest : public testing::Test {
29 public:
30 static void SetUpTestCase(void);
31
32 static void TearDownTestCase(void);
33
34 void SetUp();
35
36 void TearDown();
37 };
38
SetUpTestCase(void)39 void OHCryptoFrameworkAsymKeyNapiTest::SetUpTestCase(void)
40 {
41 }
42
TearDownTestCase(void)43 void OHCryptoFrameworkAsymKeyNapiTest::TearDownTestCase(void)
44 {
45 }
46
SetUp()47 void OHCryptoFrameworkAsymKeyNapiTest::SetUp()
48 {
49 }
50
TearDown()51 void OHCryptoFrameworkAsymKeyNapiTest::TearDown()
52 {
53 }
54
55 class ASYMKEY_TEST : public testing::TestWithParam<AsymKeySpec> {
56 public:
SetUpTestCase()57 static void SetUpTestCase() {}
TearDownTestCase()58 static void TearDownTestCase() {}
59 };
60
61 class ASYMKEY_PRIV_TEST : public testing::TestWithParam<AsymPrivKeySpec> {
62 public:
SetUpTestCase()63 static void SetUpTestCase() {}
TearDownTestCase()64 static void TearDownTestCase() {}
65 };
66
67 class ASYMKEY_ECC_KEYPAIR_TEST : public testing::TestWithParam<CommonECCSpec> {
68 public:
SetUpTestCase()69 static void SetUpTestCase() {}
TearDownTestCase()70 static void TearDownTestCase() {}
71 };
72
73 class ASYMKEY_RSA_KEYPAIR_TEST : public testing::TestWithParam<CommonRSASpec> {
74 public:
SetUpTestCase()75 static void SetUpTestCase() {}
TearDownTestCase()76 static void TearDownTestCase() {}
77 };
78
79 class ASYMKEY_DH_KEYPAIR_TEST : public testing::TestWithParam<CommonDHSpec> {
80 public:
SetUpTestCase()81 static void SetUpTestCase() {}
TearDownTestCase()82 static void TearDownTestCase() {}
83 };
84
85 class ASYMKEY_DSA_KEYPAIR_TEST : public testing::TestWithParam<CommonDSASpec> {
86 public:
SetUpTestCase()87 static void SetUpTestCase() {}
TearDownTestCase()88 static void TearDownTestCase() {}
89 };
90
91 class ASYMKEY_KEYPAIR_TEST : public testing::TestWithParam<CommonSpec> {
92 public:
SetUpTestCase()93 static void SetUpTestCase() {}
TearDownTestCase()94 static void TearDownTestCase() {}
95 };
96
97 class ASYMKEY_EC_POINT_TEST : public testing::TestWithParam<ECPointSpec> {
98 public:
SetUpTestCase()99 static void SetUpTestCase() {}
TearDownTestCase()100 static void TearDownTestCase() {}
101 };
102
103 AsymKeySpec g_asymKeyData[] = {
104 {(uint8_t *)"DSA1024", "DSA"},
105 {(uint8_t *)"DSA2048", "DSA"},
106 {(uint8_t *)"DSA3072", "DSA"},
107 {(uint8_t *)"Ed25519", "Ed25519"},
108 {(uint8_t *)"X25519", "X25519"},
109 {(uint8_t *)"DH_modp1536", "DH"},
110 {(uint8_t *)"DH_modp2048", "DH"},
111 {(uint8_t *)"DH_modp3072", "DH"},
112 {(uint8_t *)"DH_modp4096", "DH"},
113 {(uint8_t *)"DH_modp6144", "DH"},
114 {(uint8_t *)"DH_modp8192", "DH"},
115 {(uint8_t *)"DH_ffdhe2048", "DH"},
116 {(uint8_t *)"DH_ffdhe3072", "DH"},
117 {(uint8_t *)"DH_ffdhe4096", "DH"},
118 {(uint8_t *)"DH_ffdhe6144", "DH"},
119 {(uint8_t *)"DH_ffdhe8192", "DH"},
120 {(uint8_t *)"RSA512|PRIMES_2", "RSA"},
121 {(uint8_t *)"RSA768|PRIMES_2", "RSA"},
122 {(uint8_t *)"RSA1024|PRIMES_2", "RSA"},
123 {(uint8_t *)"RSA1024|PRIMES_3", "RSA"},
124 {(uint8_t *)"RSA2048|PRIMES_2", "RSA"},
125 {(uint8_t *)"RSA2048|PRIMES_3", "RSA"},
126 {(uint8_t *)"RSA3072|PRIMES_2", "RSA"},
127 {(uint8_t *)"RSA3072|PRIMES_3", "RSA"},
128 {(uint8_t *)"RSA4096|PRIMES_2", "RSA"},
129 {(uint8_t *)"RSA4096|PRIMES_3", "RSA"},
130 {(uint8_t *)"RSA4096|PRIMES_4", "RSA"},
131 {(uint8_t *)"RSA8192|PRIMES_2", "RSA"},
132 {(uint8_t *)"RSA8192|PRIMES_3", "RSA"},
133 {(uint8_t *)"RSA8192|PRIMES_4", "RSA"},
134 {(uint8_t *)"RSA8192|PRIMES_5", "RSA"},
135 {(uint8_t *)"SM2_256", "SM2"},
136 {(uint8_t *)"ECC224", "ECC"},
137 {(uint8_t *)"ECC256", "ECC"},
138 {(uint8_t *)"ECC384", "ECC"},
139 {(uint8_t *)"ECC521", "ECC"},
140 {(uint8_t *)"ECC_BrainPoolP160r1", "ECC"},
141 {(uint8_t *)"ECC_BrainPoolP160t1", "ECC"},
142 {(uint8_t *)"ECC_BrainPoolP192r1", "ECC"},
143 {(uint8_t *)"ECC_BrainPoolP192t1", "ECC"},
144 {(uint8_t *)"ECC_BrainPoolP224r1", "ECC"},
145 {(uint8_t *)"ECC_BrainPoolP224t1", "ECC"},
146 {(uint8_t *)"ECC_BrainPoolP256r1", "ECC"},
147 {(uint8_t *)"ECC_BrainPoolP256t1", "ECC"},
148 {(uint8_t *)"ECC_BrainPoolP320r1", "ECC"},
149 {(uint8_t *)"ECC_BrainPoolP320t1", "ECC"},
150 {(uint8_t *)"ECC_BrainPoolP384r1", "ECC"},
151 {(uint8_t *)"ECC_BrainPoolP384t1", "ECC"},
152 {(uint8_t *)"ECC_BrainPoolP512r1", "ECC"},
153 {(uint8_t *)"ECC_BrainPoolP512t1", "ECC"},
154 };
155
Rsa_PubkeyEncode(OH_CryptoAsymKeyGenerator * ctx,OH_CryptoPubKey * pubKey,OH_CryptoKeyPair ** dupKeyPair)156 static OH_Crypto_ErrCode Rsa_PubkeyEncode(OH_CryptoAsymKeyGenerator *ctx, OH_CryptoPubKey *pubKey, OH_CryptoKeyPair **dupKeyPair)
157 {
158 Crypto_DataBlob retBlob = { .data = nullptr, .len = 0 };
159 OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
160 ret = OH_CryptoPubKey_Encode(pubKey, CRYPTO_PEM, "PKCS1", &retBlob);
161 if (ret != CRYPTO_SUCCESS) {
162 return ret;
163 }
164
165 ret = OH_CryptoAsymKeyGenerator_Convert(ctx, CRYPTO_PEM, &retBlob, nullptr, dupKeyPair);
166 OH_Crypto_FreeDataBlob(&retBlob);
167 if (ret != CRYPTO_SUCCESS) {
168 return ret;
169 }
170 return ret;
171 }
172
Ecc_PubkeyEncode(OH_CryptoAsymKeyGenerator * ctx,OH_CryptoPubKey * pubKey,OH_CryptoKeyPair ** dupKeyPair)173 static OH_Crypto_ErrCode Ecc_PubkeyEncode(OH_CryptoAsymKeyGenerator *ctx, OH_CryptoPubKey *pubKey, OH_CryptoKeyPair **dupKeyPair)
174 {
175 Crypto_DataBlob retBlob = { .data = nullptr, .len = 0 };
176 OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
177 ret = OH_CryptoPubKey_Encode(pubKey, CRYPTO_DER, "X509|COMPRESSED", &retBlob);
178 if (ret != CRYPTO_SUCCESS) {
179 return ret;
180 }
181
182 ret = OH_CryptoAsymKeyGenerator_Convert(ctx, CRYPTO_DER, &retBlob, nullptr, dupKeyPair);
183 OH_Crypto_FreeDataBlob(&retBlob);
184 if (ret != CRYPTO_SUCCESS) {
185 return ret;
186 }
187 return ret;
188 }
189
PubkeyEncode(OH_CryptoAsymKeyGenerator * ctx,OH_CryptoPubKey * pubKey,OH_CryptoKeyPair ** dupKeyPair)190 static OH_Crypto_ErrCode PubkeyEncode(OH_CryptoAsymKeyGenerator *ctx, OH_CryptoPubKey *pubKey, OH_CryptoKeyPair **dupKeyPair)
191 {
192 Crypto_DataBlob retBlob = { .data = nullptr, .len = 0 };
193 OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
194 ret = OH_CryptoPubKey_Encode(pubKey, CRYPTO_DER, nullptr, &retBlob);
195 if (ret != CRYPTO_SUCCESS) {
196 return ret;
197 }
198
199 ret = OH_CryptoAsymKeyGenerator_Convert(ctx, CRYPTO_DER, &retBlob, nullptr, dupKeyPair);
200 OH_Crypto_FreeDataBlob(&retBlob);
201 if (ret != CRYPTO_SUCCESS) {
202 return ret;
203 }
204 return ret;
205 }
206
Ecc_GetEncode(OH_CryptoPubKey * pubKey,Crypto_DataBlob * value)207 static OH_Crypto_ErrCode Ecc_GetEncode(OH_CryptoPubKey *pubKey, Crypto_DataBlob *value)
208 {
209 OH_Crypto_ErrCode ret = OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ECC_FP_P_DATABLOB, value);
210 return ret;
211 }
212
Rsa_GetEncode(OH_CryptoPubKey * pubKey,Crypto_DataBlob * value)213 static OH_Crypto_ErrCode Rsa_GetEncode(OH_CryptoPubKey *pubKey, Crypto_DataBlob *value)
214 {
215 OH_Crypto_ErrCode ret = OH_CryptoPubKey_GetParam(pubKey, CRYPTO_RSA_N_DATABLOB, value);
216 return ret;
217 }
218
GetEncode(const char * name,OH_CryptoPubKey * pubKey,Crypto_DataBlob * value)219 static OH_Crypto_ErrCode GetEncode(const char *name, OH_CryptoPubKey *pubKey, Crypto_DataBlob *value)
220 {
221 CryptoAsymKey_ParamType item;
222 if (strcmp(name, "DH") == 0) {
223 item = CRYPTO_DH_P_DATABLOB;
224 } else if (strcmp(name, "Ed25519") == 0) {
225 item = CRYPTO_ED25519_PK_DATABLOB;
226 } else if (strcmp(name, "X25519") == 0) {
227 item = CRYPTO_X25519_PK_DATABLOB;
228 } else if (strcmp(name, "DSA") == 0) {
229 item = CRYPTO_DSA_P_DATABLOB;
230 } else {
231 item = CRYPTO_ECC_H_INT;
232 }
233
234 OH_Crypto_ErrCode ret = OH_CryptoPubKey_GetParam(pubKey, item, value);
235 return ret;
236 }
237
238 INSTANTIATE_TEST_CASE_P(OHCryptoFrameworkAsymKeyNapiTest, ASYMKEY_TEST, ::testing::ValuesIn(g_asymKeyData));
239
240 /**
241 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0100
242 * @tc.name OHCryptoFrameworkAsymKeyNapiTest/ASYMKEY_TEST.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0100/x
243 * @tc.desc algorithm is Asym Key
244 * @tc.size Medium
245 * @tc.type Func
246 * @tc.level Level0
247 */
248 HWTEST_P(ASYMKEY_TEST, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0100, TestSize.Level0)
249 {
250 AsymKeySpec AsymKeyData = GetParam();
251 OH_CryptoAsymKeyGenerator *ctx = nullptr;
252 OH_CryptoKeyPair *keyPair = nullptr;
253 OH_Crypto_ErrCode ret;
254
255 ret = OH_CryptoAsymKeyGenerator_Create((const char *)AsymKeyData.algName, &ctx);
256 ASSERT_EQ(ret, CRYPTO_SUCCESS);
257
258 ret = OH_CryptoAsymKeyGenerator_Generate(ctx, &keyPair);
259 ASSERT_EQ(ret, CRYPTO_SUCCESS);
260
261 const char *algoName = OH_CryptoAsymKeyGenerator_GetAlgoName(ctx);
262 EXPECT_NE(algoName, nullptr);
263
264 OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
265 ASSERT_EQ(ret, CRYPTO_SUCCESS);
266
267 OH_CryptoKeyPair *dupKeyPair = nullptr;
268 Crypto_DataBlob dataBlob = { .data = nullptr, .len = 0 };
269 if (strcmp(AsymKeyData.name, "RSA") == 0) {
270 ret = Rsa_PubkeyEncode(ctx, pubKey, &dupKeyPair);
271 ASSERT_EQ(ret, CRYPTO_SUCCESS);
272 OH_CryptoPubKey *pubKey1 = OH_CryptoKeyPair_GetPubKey(dupKeyPair);
273 ASSERT_EQ(ret, CRYPTO_SUCCESS);
274 ret = Rsa_GetEncode(pubKey1, &dataBlob);
275 ASSERT_EQ(ret, CRYPTO_SUCCESS);
276 } else if (strcmp(AsymKeyData.name, "ECC") == 0) {
277 ret = Ecc_PubkeyEncode(ctx, pubKey, &dupKeyPair);
278 ASSERT_EQ(ret, CRYPTO_SUCCESS);
279 OH_CryptoPubKey *pubKey1 = OH_CryptoKeyPair_GetPubKey(dupKeyPair);
280 ASSERT_EQ(ret, CRYPTO_SUCCESS);
281 ret = Ecc_GetEncode(pubKey1, &dataBlob);
282 ASSERT_EQ(ret, CRYPTO_SUCCESS);
283 } else {
284 ret = PubkeyEncode(ctx, pubKey, &dupKeyPair);
285 ASSERT_EQ(ret, CRYPTO_SUCCESS);
286 OH_CryptoPubKey *pubKey1 = OH_CryptoKeyPair_GetPubKey(dupKeyPair);
287 ASSERT_EQ(ret, CRYPTO_SUCCESS);
288 ret = GetEncode(AsymKeyData.name, pubKey1, &dataBlob);
289 ASSERT_EQ(ret, CRYPTO_SUCCESS);
290 }
291
292 ASSERT_NE(dataBlob.data, nullptr);
293 ASSERT_NE(dataBlob.len, 0);
294 OH_Crypto_FreeDataBlob(&dataBlob);
295
296 OH_CryptoAsymKeyGenerator_Destroy(ctx);
297 OH_CryptoKeyPair_Destroy(keyPair);
298 OH_CryptoKeyPair_Destroy(dupKeyPair);
299 }
300
301 /**
302 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0200
303 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0200
304 * @tc.desc algorithm is Asym Key
305 * @tc.size Medium
306 * @tc.type Func
307 * @tc.level Level0
308 */
309 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0200, TestSize.Level0)
310 {
311 OH_CryptoAsymKeyGenerator *ctx = nullptr;
312 OH_Crypto_ErrCode ret;
313 ret = OH_CryptoAsymKeyGenerator_Create("SM9", &ctx);
314 EXPECT_NE(ret, CRYPTO_SUCCESS);
315 OH_CryptoAsymKeyGenerator_Destroy(ctx);
316 }
317
318 /**
319 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0300
320 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0300
321 * @tc.desc algorithm is Asym Key
322 * @tc.size Medium
323 * @tc.type Func
324 * @tc.level Level0
325 */
326 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0300, TestSize.Level0)
327 {
328 OH_CryptoAsymKeyGenerator *ctx = nullptr;
329 OH_Crypto_ErrCode ret;
330 ret = OH_CryptoAsymKeyGenerator_Create("SM", &ctx);
331 EXPECT_NE(ret, CRYPTO_SUCCESS);
332 OH_CryptoAsymKeyGenerator_Destroy(ctx);
333 }
334
335 /**
336 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0400
337 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0400
338 * @tc.desc algorithm is Asym Key
339 * @tc.size Medium
340 * @tc.type Func
341 * @tc.level Level0
342 */
343 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0400, TestSize.Level0)
344 {
345 OH_CryptoAsymKeyGenerator *ctx = nullptr;
346 OH_CryptoKeyPair *dupKeyPair = nullptr;
347 OH_Crypto_ErrCode ret;
348 ret = OH_CryptoAsymKeyGenerator_Create("ECC224", &ctx);
349 EXPECT_EQ(ret, CRYPTO_SUCCESS);
350 uint8_t array[] = {48, 50, 48, 16, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 5, 43, 129, 4, 0,
351 33, 3, 30, 0, 2, 62, 18, 146, 41, 146, 160, 136, 78, 124, 38, 148, 1, 204, 24, 45, 172,
352 101, 234, 253, 74, 133, 28, 184, 168, 153, 170, 203, 134};
353 Crypto_DataBlob dataBlob = { .data = array, .len = sizeof(array) };
354 ret = OH_CryptoAsymKeyGenerator_Convert(ctx, CRYPTO_DER, &dataBlob, nullptr, &dupKeyPair);
355 ASSERT_EQ(ret, CRYPTO_SUCCESS);
356 OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(dupKeyPair);
357 ASSERT_NE(pubKey, nullptr);
358
359 OH_CryptoAsymKeyGenerator_Destroy(ctx);
360 OH_CryptoKeyPair_Destroy(dupKeyPair);
361 }
362
363 /**
364 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0500
365 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0500
366 * @tc.desc algorithm is Asym Key
367 * @tc.size Medium
368 * @tc.type Func
369 * @tc.level Level0
370 */
371 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0500, TestSize.Level0)
372 {
373 OH_CryptoAsymKeyGenerator *ctx = nullptr;
374 OH_CryptoKeyPair *dupKeyPair = nullptr;
375 OH_Crypto_ErrCode ret;
376 ret = OH_CryptoAsymKeyGenerator_Create("ECC521", &ctx);
377 EXPECT_EQ(ret, CRYPTO_SUCCESS);
378 uint8_t array[] = { 48, 90, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43, 36, 3,
379 3, 2, 8, 1, 1, 7, 3, 66, 0, 4, 143, 39, 57, 249, 145, 50, 63, 222, 35, 70, 178, 121,
380 202, 154, 21, 146, 129, 75, 76, 63, 8, 195, 157, 111, 40, 217, 215, 148, 120, 224,
381 205, 82, 83, 92, 185, 21, 211, 184, 5, 19, 114, 33, 86, 85, 228, 123, 242, 206, 200,
382 98, 178, 184, 130, 35, 232, 45, 5, 202, 189, 11, 46, 163, 156, 152};
383 Crypto_DataBlob dataBlob = { .data = array, .len = sizeof(array) };
384 ret = OH_CryptoAsymKeyGenerator_Convert(ctx, CRYPTO_DER, &dataBlob, nullptr, &dupKeyPair);
385 ASSERT_EQ(ret, CRYPTO_SUCCESS);
386 OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(dupKeyPair);
387 ASSERT_NE(pubKey, nullptr);
388
389 OH_CryptoAsymKeyGenerator_Destroy(ctx);
390 OH_CryptoKeyPair_Destroy(dupKeyPair);
391 }
392
393 /**
394 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0600
395 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0600
396 * @tc.desc algorithm is Asym Key
397 * @tc.size Medium
398 * @tc.type Func
399 * @tc.level Level0
400 */
401 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0600, TestSize.Level0)
402 {
403 OH_CryptoAsymKeyGenerator *ctx = nullptr;
404 OH_CryptoKeyPair *keyPair = nullptr;
405 Crypto_DataBlob dsaPBlob = { .data = nullptr, .len = 0 };
406 Crypto_DataBlob dsaQBlob = { .data = nullptr, .len = 0 };
407 Crypto_DataBlob dsaGBlob = { .data = nullptr, .len = 0 };
408 Crypto_DataBlob dsaPKBlob = { .data = nullptr, .len = 0 };
409 Crypto_DataBlob dsaSKBlob = { .data = nullptr, .len = 0 };
410
411 ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"DSA1024", &ctx), CRYPTO_SUCCESS);
412 ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(ctx, &keyPair), CRYPTO_SUCCESS);
413 OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
414
415 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_DSA_P_DATABLOB, &dsaPBlob), CRYPTO_SUCCESS);
416 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_DSA_Q_DATABLOB, &dsaQBlob), CRYPTO_SUCCESS);
417 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_DSA_G_DATABLOB, &dsaGBlob), CRYPTO_SUCCESS);
418 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_DSA_SK_DATABLOB, &dsaSKBlob), CRYPTO_INVALID_PARAMS);
419 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_DSA_PK_DATABLOB, &dsaPKBlob), CRYPTO_SUCCESS);
420
421 OH_Crypto_FreeDataBlob(&dsaPBlob);
422 OH_Crypto_FreeDataBlob(&dsaQBlob);
423 OH_Crypto_FreeDataBlob(&dsaGBlob);
424 OH_Crypto_FreeDataBlob(&dsaPKBlob);
425 OH_Crypto_FreeDataBlob(&dsaSKBlob);
426 OH_CryptoAsymKeyGenerator_Destroy(ctx);
427 OH_CryptoKeyPair_Destroy(keyPair);
428 }
429
430 /**
431 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0700
432 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0700
433 * @tc.desc algorithm is Asym Key
434 * @tc.size Medium
435 * @tc.type Func
436 * @tc.level Level0
437 */
438 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0700, TestSize.Level0)
439 {
440 OH_CryptoAsymKeyGenerator *ctx = nullptr;
441 OH_CryptoKeyPair *keyPair = nullptr;
442 Crypto_DataBlob ecc_FP_PBlob = { .data = nullptr, .len = 0 };
443 Crypto_DataBlob ecc_ABlob = { .data = nullptr, .len = 0 };
444 Crypto_DataBlob ecc_BBlob = { .data = nullptr, .len = 0 };
445 Crypto_DataBlob ecc_G_XBlob = { .data = nullptr, .len = 0 };
446 Crypto_DataBlob ecc_G_YBlob = { .data = nullptr, .len = 0 };
447 Crypto_DataBlob ecc_NBlob = { .data = nullptr, .len = 0 };
448 Crypto_DataBlob ecc_SKBlob = { .data = nullptr, .len = 0 };
449 Crypto_DataBlob ecc_PK_XBlob = { .data = nullptr, .len = 0 };
450 Crypto_DataBlob ecc_PK_YBlob = { .data = nullptr, .len = 0 };
451 Crypto_DataBlob ecc_HBlob = { .data = nullptr, .len = 0 };
452 Crypto_DataBlob ecc_FIELD_TYPEBlob = { .data = nullptr, .len = 0 };
453 Crypto_DataBlob ecc_FELD_SIZEBlob = { .data = nullptr, .len = 0 };
454 Crypto_DataBlob ecc_NAMEBlob = { .data = nullptr, .len = 0 };
455
456 ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"ECC224", &ctx), CRYPTO_SUCCESS);
457 ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(ctx, &keyPair), CRYPTO_SUCCESS);
458 OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
459 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ECC_FP_P_DATABLOB, &ecc_FP_PBlob), CRYPTO_SUCCESS);
460 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ECC_A_DATABLOB, &ecc_ABlob), CRYPTO_SUCCESS);
461 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ECC_B_DATABLOB, &ecc_BBlob), CRYPTO_SUCCESS);
462 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ECC_G_X_DATABLOB, &ecc_G_XBlob), CRYPTO_SUCCESS);
463 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ECC_G_Y_DATABLOB, &ecc_G_YBlob), CRYPTO_SUCCESS);
464 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ECC_N_DATABLOB, &ecc_NBlob), CRYPTO_SUCCESS);
465 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ECC_H_INT, &ecc_HBlob), CRYPTO_SUCCESS);
466 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ECC_SK_DATABLOB, &ecc_SKBlob), CRYPTO_INVALID_PARAMS);
467 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ECC_PK_X_DATABLOB, &ecc_PK_XBlob), CRYPTO_SUCCESS);
468 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ECC_PK_Y_DATABLOB, &ecc_PK_YBlob), CRYPTO_SUCCESS);
469 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ECC_FIELD_TYPE_STR, &ecc_FIELD_TYPEBlob), CRYPTO_SUCCESS);
470 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ECC_FIELD_SIZE_INT, &ecc_FELD_SIZEBlob), CRYPTO_SUCCESS);
471 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ECC_CURVE_NAME_STR, &ecc_NAMEBlob), CRYPTO_SUCCESS);
472
473 OH_Crypto_FreeDataBlob(&ecc_FP_PBlob);
474 OH_Crypto_FreeDataBlob(&ecc_ABlob);
475 OH_Crypto_FreeDataBlob(&ecc_BBlob);
476 OH_Crypto_FreeDataBlob(&ecc_G_XBlob);
477 OH_Crypto_FreeDataBlob(&ecc_G_YBlob);
478 OH_Crypto_FreeDataBlob(&ecc_NBlob);
479 OH_Crypto_FreeDataBlob(&ecc_SKBlob);
480 OH_Crypto_FreeDataBlob(&ecc_PK_XBlob);
481 OH_Crypto_FreeDataBlob(&ecc_PK_YBlob);
482 OH_Crypto_FreeDataBlob(&ecc_HBlob);
483 OH_Crypto_FreeDataBlob(&ecc_NAMEBlob);
484 OH_Crypto_FreeDataBlob(&ecc_FIELD_TYPEBlob);
485 OH_Crypto_FreeDataBlob(&ecc_FELD_SIZEBlob);
486 OH_CryptoAsymKeyGenerator_Destroy(ctx);
487 OH_CryptoKeyPair_Destroy(keyPair);
488 }
489
490 /**
491 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0800
492 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0800
493 * @tc.desc algorithm is Asym Key
494 * @tc.size Medium
495 * @tc.type Func
496 * @tc.level Level0
497 */
498 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0800, TestSize.Level0)
499 {
500 OH_CryptoAsymKeyGenerator *ctx = nullptr;
501 OH_CryptoKeyPair *keyPair = nullptr;
502 Crypto_DataBlob rsaNBlob = { .data = nullptr, .len = 0 };
503 Crypto_DataBlob rsaDBlob = { .data = nullptr, .len = 0 };
504 Crypto_DataBlob rsaEBlob = { .data = nullptr, .len = 0 };
505
506 ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA512", &ctx), CRYPTO_SUCCESS);
507 ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(ctx, &keyPair), CRYPTO_SUCCESS);
508 OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
509 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_RSA_N_DATABLOB, &rsaNBlob), CRYPTO_SUCCESS);
510 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_RSA_D_DATABLOB, &rsaDBlob), CRYPTO_INVALID_PARAMS);
511 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_RSA_E_DATABLOB, &rsaEBlob), CRYPTO_SUCCESS);
512
513 OH_Crypto_FreeDataBlob(&rsaNBlob);
514 OH_Crypto_FreeDataBlob(&rsaDBlob);
515 OH_Crypto_FreeDataBlob(&rsaEBlob);
516 OH_CryptoAsymKeyGenerator_Destroy(ctx);
517 OH_CryptoKeyPair_Destroy(keyPair);
518 }
519
520 /**
521 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0900
522 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0900
523 * @tc.desc algorithm is Asym Key
524 * @tc.size Medium
525 * @tc.type Func
526 * @tc.level Level0
527 */
528 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_0900, TestSize.Level0)
529 {
530 OH_CryptoAsymKeyGenerator *ctx = nullptr;
531 OH_CryptoKeyPair *keyPair = nullptr;
532 Crypto_DataBlob dhPBlob = { .data = nullptr, .len = 0 };
533 Crypto_DataBlob dhGBlob = { .data = nullptr, .len = 0 };
534 Crypto_DataBlob dhLBlob = { .data = nullptr, .len = 0 };
535 Crypto_DataBlob dhSKBlob = { .data = nullptr, .len = 0 };
536 Crypto_DataBlob dhPKBlob = { .data = nullptr, .len = 0 };
537
538 ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"DH_modp1536", &ctx), CRYPTO_SUCCESS);
539 ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(ctx, &keyPair), CRYPTO_SUCCESS);
540 OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
541 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_DH_P_DATABLOB, &dhPBlob), CRYPTO_SUCCESS);
542 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_DH_G_DATABLOB, &dhGBlob), CRYPTO_SUCCESS);
543 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_DH_L_INT, &dhLBlob), CRYPTO_NOT_SUPPORTED);
544 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_DH_SK_DATABLOB, &dhSKBlob), CRYPTO_INVALID_PARAMS);
545 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_DH_PK_DATABLOB, &dhPKBlob), CRYPTO_SUCCESS);
546
547 OH_Crypto_FreeDataBlob(&dhPBlob);
548 OH_Crypto_FreeDataBlob(&dhGBlob);
549 OH_Crypto_FreeDataBlob(&dhLBlob);
550 OH_Crypto_FreeDataBlob(&dhSKBlob);
551 OH_Crypto_FreeDataBlob(&dhPKBlob);
552 OH_CryptoAsymKeyGenerator_Destroy(ctx);
553 OH_CryptoKeyPair_Destroy(keyPair);
554 }
555
556 /**
557 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1000
558 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1000
559 * @tc.desc algorithm is Asym Key
560 * @tc.size Medium
561 * @tc.type Func
562 * @tc.level Level0
563 */
564 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1000, TestSize.Level0)
565 {
566 OH_CryptoAsymKeyGenerator *ctx = nullptr;
567 OH_CryptoKeyPair *keyPair = nullptr;
568 Crypto_DataBlob ed25519SKBlob = { .data = nullptr, .len = 0 };
569 Crypto_DataBlob ed25519PKBlob = { .data = nullptr, .len = 0 };
570
571 ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"Ed25519", &ctx), CRYPTO_SUCCESS);
572 ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(ctx, &keyPair), CRYPTO_SUCCESS);
573 OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
574 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ED25519_SK_DATABLOB, &ed25519SKBlob), CRYPTO_INVALID_PARAMS);
575 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ED25519_PK_DATABLOB, &ed25519PKBlob), CRYPTO_SUCCESS);
576
577 OH_Crypto_FreeDataBlob(&ed25519SKBlob);
578 OH_Crypto_FreeDataBlob(&ed25519PKBlob);
579 OH_CryptoAsymKeyGenerator_Destroy(ctx);
580 OH_CryptoKeyPair_Destroy(keyPair);
581 }
582
583 /**
584 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1100
585 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1100
586 * @tc.desc algorithm is Asym Key
587 * @tc.size Medium
588 * @tc.type Func
589 * @tc.level Level0
590 */
591 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1100, TestSize.Level0)
592 {
593 OH_CryptoAsymKeyGenerator *ctx = nullptr;
594 OH_CryptoKeyPair *keyPair = nullptr;
595 Crypto_DataBlob x25519SKBlob = { .data = nullptr, .len = 0 };
596 Crypto_DataBlob x25519PKBlob = { .data = nullptr, .len = 0 };
597
598 ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"X25519", &ctx), CRYPTO_SUCCESS);
599 ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(ctx, &keyPair), CRYPTO_SUCCESS);
600 OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
601 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_X25519_SK_DATABLOB, &x25519SKBlob), CRYPTO_INVALID_PARAMS);
602 ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_X25519_PK_DATABLOB, &x25519PKBlob), CRYPTO_SUCCESS);
603
604 OH_Crypto_FreeDataBlob(&x25519SKBlob);
605 OH_Crypto_FreeDataBlob(&x25519PKBlob);
606 OH_CryptoAsymKeyGenerator_Destroy(ctx);
607 OH_CryptoKeyPair_Destroy(keyPair);
608 }
609
OHTEST_GenerateKeyPair(const char * algoName,const char * algKeyName)610 static OH_CryptoKeyPair *OHTEST_GenerateKeyPair(const char *algoName, const char *algKeyName)
611 {
612 OH_CryptoAsymKeyGenerator *ctx = nullptr;
613 OH_CryptoKeyPair *keyPair = nullptr;
614
615 EXPECT_EQ(OH_CryptoAsymKeyGenerator_Create(algKeyName, &ctx), CRYPTO_SUCCESS);
616 if (strcmp(algoName, "RSA8192") == 0) {
617 Crypto_DataBlob pubKeyBlob = { .data = g_rsa8192pubKey, .len = sizeof(g_rsa8192pubKey) };
618 Crypto_DataBlob priKeyBlob = { .data = g_rsa8192priKey, .len = sizeof(g_rsa8192priKey) };
619 EXPECT_EQ(OH_CryptoAsymKeyGenerator_Convert(ctx, CRYPTO_DER, &pubKeyBlob, &priKeyBlob, &keyPair), CRYPTO_SUCCESS);
620 } else if (strcmp(algoName, "RSA4096") == 0) {
621 Crypto_DataBlob pubKeyBlob = { .data = g_rsa4096pubKey, .len = sizeof(g_rsa4096pubKey) };
622 Crypto_DataBlob priKeyBlob = { .data = g_rsa4096priKey, .len = sizeof(g_rsa4096priKey) };
623 EXPECT_EQ(OH_CryptoAsymKeyGenerator_Convert(ctx, CRYPTO_DER, &pubKeyBlob, &priKeyBlob, &keyPair), CRYPTO_SUCCESS);
624 } else if (strcmp(algoName, "RSA3072") == 0) {
625 Crypto_DataBlob pubKeyBlob = { .data = g_rsa3072pubKey, .len = sizeof(g_rsa3072pubKey) };
626 Crypto_DataBlob priKeyBlob = { .data = g_rsa3072priKey, .len = sizeof(g_rsa3072priKey) };
627 EXPECT_EQ(OH_CryptoAsymKeyGenerator_Convert(ctx, CRYPTO_DER, &pubKeyBlob, &priKeyBlob, &keyPair), CRYPTO_SUCCESS);
628 } else {
629 EXPECT_EQ(OH_CryptoAsymKeyGenerator_Generate(ctx, &keyPair), CRYPTO_SUCCESS);
630 }
631
632 OH_CryptoAsymKeyGenerator_Destroy(ctx);
633 return keyPair;
634 }
635
OHTEST_ConvertKeyPair(const char * algoName,Crypto_EncodingType type,Crypto_DataBlob * privKey,Crypto_DataBlob * pubKey,Crypto_DataBlob * password)636 static OH_CryptoKeyPair *OHTEST_ConvertKeyPair(const char *algoName, Crypto_EncodingType type,
637 Crypto_DataBlob *privKey, Crypto_DataBlob *pubKey, Crypto_DataBlob *password)
638 {
639 OH_CryptoAsymKeyGenerator *ctx = nullptr;
640 OH_CryptoKeyPair *keyPair = nullptr;
641 OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
642
643 ret = OH_CryptoAsymKeyGenerator_Create(algoName, &ctx);
644 if (ret != CRYPTO_SUCCESS) {
645 goto EXIT;
646 }
647 if (password != nullptr && password->data != nullptr) {
648 ret = OH_CryptoAsymKeyGenerator_SetPassword(ctx, password->data, password->len);
649 if (ret != CRYPTO_SUCCESS) {
650 goto EXIT;
651 }
652 }
653 ret = OH_CryptoAsymKeyGenerator_Convert(ctx, type, pubKey, privKey, &keyPair);
654
655 EXIT:
656 OH_CryptoAsymKeyGenerator_Destroy(ctx);
657 return keyPair;
658 }
659
OHTEST_SetParam(Crypto_DataBlob * password,Crypto_DataBlob * cipher)660 static OH_CryptoPrivKeyEncodingParams *OHTEST_SetParam(Crypto_DataBlob *password, Crypto_DataBlob *cipher)
661 {
662 OH_CryptoPrivKeyEncodingParams *params = nullptr;
663 OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
664
665 ret = OH_CryptoPrivKeyEncodingParams_Create(¶ms);
666 if (params == nullptr || ret != CRYPTO_SUCCESS) {
667 goto EXIT;
668 }
669 ret = OH_CryptoPrivKeyEncodingParams_SetParam(params, CRYPTO_PRIVATE_KEY_ENCODING_PASSWORD_STR, password);
670 if (ret != CRYPTO_SUCCESS) {
671 OH_CryptoPrivKeyEncodingParams_Destroy(params);
672 params = nullptr;
673 goto EXIT;
674 }
675 ret = OH_CryptoPrivKeyEncodingParams_SetParam(params, CRYPTO_PRIVATE_KEY_ENCODING_SYMMETRIC_CIPHER_STR, cipher);
676 if (ret != CRYPTO_SUCCESS) {
677 OH_CryptoPrivKeyEncodingParams_Destroy(params);
678 params = nullptr;
679 goto EXIT;
680 }
681
682 EXIT:
683 return params;
684 }
685
686
687 AsymPrivKeySpec g_asymPrivKeyData[] = {
688 /* RSA privKey format not support der type,RSA privKey support der type */
689 /* RSA512*/
690 {"PKCS1", (uint8_t *)"RSA512", (uint8_t *)"RSA512|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 0
691 {"PKCS1", (uint8_t *)"RSA512", (uint8_t *)"RSA512|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 1
692 {"PKCS1", (uint8_t *)"RSA512", (uint8_t *)"RSA512|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 2
693 {"PKCS1", (uint8_t *)"RSA512", (uint8_t *)"RSA512|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 3
694 {"PKCS1", (uint8_t *)"RSA512", (uint8_t *)"RSA512|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 4
695 {"PKCS1", (uint8_t *)"RSA512", (uint8_t *)"RSA512|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 5
696 {"PKCS1", (uint8_t *)"RSA512", (uint8_t *)"RSA512|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 6
697 {"PKCS1", (uint8_t *)"RSA512", (uint8_t *)"RSA512|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 7
698 {"PKCS1", (uint8_t *)"RSA512", (uint8_t *)"RSA512|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 8
699 {"PKCS1", (uint8_t *)"RSA512", (uint8_t *)"RSA512|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 9
700 {"PKCS1", (uint8_t *)"RSA512", (uint8_t *)"RSA512|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 10
701 {"PKCS1", (uint8_t *)"RSA512", (uint8_t *)"RSA512|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 11
702 {"PKCS1", (uint8_t *)"RSA512", (uint8_t *)"RSA512|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 12
703 {"PKCS1", (uint8_t *)"RSA512", (uint8_t *)"RSA512|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 13
704 {"PKCS1", (uint8_t *)"RSA512", (uint8_t *)"RSA512|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 14
705 {"PKCS1", (uint8_t *)"RSA512", (uint8_t *)"RSA512|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 15
706 /* RSA768 */
707 {"PKCS1", (uint8_t *)"RSA768", (uint8_t *)"RSA768|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 16
708 {"PKCS1", (uint8_t *)"RSA768", (uint8_t *)"RSA768|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 17
709 {"PKCS1", (uint8_t *)"RSA768", (uint8_t *)"RSA768|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 18
710 {"PKCS1", (uint8_t *)"RSA768", (uint8_t *)"RSA768|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 19
711 {"PKCS1", (uint8_t *)"RSA768", (uint8_t *)"RSA768|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 20
712 {"PKCS1", (uint8_t *)"RSA768", (uint8_t *)"RSA768|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 21
713 {"PKCS1", (uint8_t *)"RSA768", (uint8_t *)"RSA768|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 22
714 {"PKCS1", (uint8_t *)"RSA768", (uint8_t *)"RSA768|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 23
715 {"PKCS1", (uint8_t *)"RSA768", (uint8_t *)"RSA768|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 24
716 {"PKCS1", (uint8_t *)"RSA768", (uint8_t *)"RSA768|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 25
717 {"PKCS1", (uint8_t *)"RSA768", (uint8_t *)"RSA768|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 26
718 {"PKCS1", (uint8_t *)"RSA768", (uint8_t *)"RSA768|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 27
719 {"PKCS1", (uint8_t *)"RSA768", (uint8_t *)"RSA768|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 28
720 {"PKCS1", (uint8_t *)"RSA768", (uint8_t *)"RSA768|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 29
721 {"PKCS1", (uint8_t *)"RSA768", (uint8_t *)"RSA768|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 30
722 {"PKCS1", (uint8_t *)"RSA768", (uint8_t *)"RSA768|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 31
723 /* RSA1024 */
724 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 16
725 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 17
726 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 18
727 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 19
728 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 20
729 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 21
730 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 22
731 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 23
732 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 24
733 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 25
734 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 26
735 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 27
736 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 28
737 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 29
738 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 30
739 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 31
740 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 16
741 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 17
742 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 18
743 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 19
744 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 20
745 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 21
746 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 22
747 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 23
748 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 24
749 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 25
750 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 26
751 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 27
752 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 28
753 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 29
754 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 30
755 {"PKCS1", (uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 31
756 /* RSA2048 */
757 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 16
758 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 17
759 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 18
760 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 19
761 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 20
762 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 21
763 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 22
764 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 23
765 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 24
766 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 25
767 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 26
768 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 27
769 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 28
770 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 29
771 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 30
772 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 31
773 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 16
774 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 17
775 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 18
776 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 19
777 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 20
778 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 21
779 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 22
780 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 23
781 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 24
782 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 25
783 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 26
784 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 27
785 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 28
786 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 29
787 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 30
788 {"PKCS1", (uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 31
789 /* RSA3072 */
790 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 16
791 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 17
792 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 18
793 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 19
794 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 20
795 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 21
796 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 22
797 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 23
798 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 24
799 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 25
800 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 26
801 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 27
802 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 28
803 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 29
804 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 30
805 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 31
806 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 16
807 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 17
808 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 18
809 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 19
810 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 20
811 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 21
812 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 22
813 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 23
814 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 24
815 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 25
816 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 26
817 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 27
818 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 28
819 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 29
820 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 30
821 {"PKCS1", (uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 31
822 /* RSA4096 */
823 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 16
824 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 17
825 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 18
826 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 19
827 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 20
828 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 21
829 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 22
830 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 23
831 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 24
832 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 25
833 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 26
834 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 27
835 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 28
836 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 29
837 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 30
838 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 31
839 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 16
840 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 17
841 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 18
842 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 19
843 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 20
844 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 21
845 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 22
846 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 23
847 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 24
848 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 25
849 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 26
850 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 27
851 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 28
852 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 29
853 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 30
854 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 31
855 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_4", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 16
856 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_4", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 17
857 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_4", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 18
858 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_4", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 19
859 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_4", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 20
860 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_4", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 21
861 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_4", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 22
862 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_4", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 23
863 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_4", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 24
864 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_4", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 25
865 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_4", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 26
866 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_4", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 27
867 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_4", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 28
868 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_4", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 29
869 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_4", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 30
870 {"PKCS1", (uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PRIMES_4", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 31
871 /* RSA8192 */
872 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 16
873 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 17
874 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 18
875 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 19
876 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 20
877 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 21
878 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 22
879 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_2", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 23
880 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 24
881 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 25
882 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 26
883 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 27
884 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 28
885 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 29
886 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 30
887 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_2", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 31
888 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 16
889 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 17
890 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 18
891 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 19
892 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 20
893 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 21
894 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 22
895 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_3", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 23
896 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 24
897 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 25
898 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 26
899 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 27
900 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 28
901 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 29
902 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 30
903 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_3", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 31
904 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_4", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 16
905 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_4", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 17
906 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_4", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 18
907 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_4", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 19
908 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_4", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 20
909 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_4", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 21
910 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_4", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 22
911 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_4", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 23
912 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_4", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 24
913 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_4", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 25
914 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_4", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 26
915 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_4", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 27
916 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_4", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 28
917 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_4", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 29
918 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_4", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 30
919 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_4", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 31
920 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_5", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 16
921 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_5", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 17
922 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_5", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 18
923 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_5", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 19
924 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_5", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 20
925 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_5", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 21
926 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_5", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 22
927 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_5", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 23
928 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_5", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 24
929 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_5", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 25
930 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_5", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 26
931 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_5", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_PEM}, // 27
932 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_5", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 28
933 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_5", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 29
934 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_5", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 30
935 {"PKCS1", (uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PRIMES_5", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS1", CRYPTO_PEM}, // 31
936 /* ECC privKey not support pem、pkcs1 type */
937 /* ECC224 */
938 {"X509|UNCOMPRESSED", (uint8_t *)"ECC224", (uint8_t *)"ECC224", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
939 {"X509|UNCOMPRESSED", (uint8_t *)"ECC224", (uint8_t *)"ECC224", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 18
940 {"X509|UNCOMPRESSED", (uint8_t *)"ECC224", (uint8_t *)"ECC224", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_DER}, // 19
941 {"X509|UNCOMPRESSED", (uint8_t *)"ECC224", (uint8_t *)"ECC224", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
942 /* ECC256 */
943 {"X509|COMPRESSED", (uint8_t *)"ECC256", (uint8_t *)"ECC256", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
944 {"X509|COMPRESSED", (uint8_t *)"ECC256", (uint8_t *)"ECC256", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 18
945 {"X509|COMPRESSED", (uint8_t *)"ECC256", (uint8_t *)"ECC256", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_DER}, // 19
946 {"X509|COMPRESSED", (uint8_t *)"ECC256", (uint8_t *)"ECC256", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
947 /* ECC384 */
948 {"X509|COMPRESSED", (uint8_t *)"ECC384", (uint8_t *)"ECC384", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
949 {"X509|COMPRESSED", (uint8_t *)"ECC384", (uint8_t *)"ECC384", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 18
950 {"X509|COMPRESSED", (uint8_t *)"ECC384", (uint8_t *)"ECC384", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_DER}, // 19
951 {"X509|COMPRESSED", (uint8_t *)"ECC384", (uint8_t *)"ECC384", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
952 /* ECC521 */
953 {"X509|COMPRESSED", (uint8_t *)"ECC521", (uint8_t *)"ECC521", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
954 {"X509|COMPRESSED", (uint8_t *)"ECC521", (uint8_t *)"ECC521", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 18
955 {"X509|COMPRESSED", (uint8_t *)"ECC521", (uint8_t *)"ECC521", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_DER}, // 19
956 {"X509|COMPRESSED", (uint8_t *)"ECC521", (uint8_t *)"ECC521", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
957 /* ECC_BrainPoolP160r1 */
958 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP160r1", (uint8_t *)"ECC_BrainPoolP160r1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
959 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP160r1", (uint8_t *)"ECC_BrainPoolP160r1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 18
960 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP160r1", (uint8_t *)"ECC_BrainPoolP160r1", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_DER}, // 19
961 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP160r1", (uint8_t *)"ECC_BrainPoolP160r1", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
962 /* ECC_BrainPoolP160t1 */
963 {"X509|UNCOMPRESSED", (uint8_t *)"ECC_BrainPoolP160t1", (uint8_t *)"ECC_BrainPoolP160t1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
964 {"X509|UNCOMPRESSED", (uint8_t *)"ECC_BrainPoolP160t1", (uint8_t *)"ECC_BrainPoolP160t1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 18
965 {"X509|UNCOMPRESSED", (uint8_t *)"ECC_BrainPoolP160t1", (uint8_t *)"ECC_BrainPoolP160t1", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_DER}, // 19
966 {"X509|UNCOMPRESSED", (uint8_t *)"ECC_BrainPoolP160t1", (uint8_t *)"ECC_BrainPoolP160t1", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
967 /* ECC_BrainPoolP192r1 */
968 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP192r1", (uint8_t *)"ECC_BrainPoolP192r1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
969 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP192r1", (uint8_t *)"ECC_BrainPoolP192r1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 18
970 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP192r1", (uint8_t *)"ECC_BrainPoolP192r1", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_DER}, // 19
971 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP192r1", (uint8_t *)"ECC_BrainPoolP192r1", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
972 /* ECC_BrainPoolP192t1 */
973 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP192t1", (uint8_t *)"ECC_BrainPoolP192t1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
974 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP192t1", (uint8_t *)"ECC_BrainPoolP192t1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 18
975 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP192t1", (uint8_t *)"ECC_BrainPoolP192t1", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_DER}, // 19
976 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP192t1", (uint8_t *)"ECC_BrainPoolP192t1", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
977 /* ECC_BrainPoolP224r1 */
978 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP224r1", (uint8_t *)"ECC_BrainPoolP224r1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
979 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP224r1", (uint8_t *)"ECC_BrainPoolP224r1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 18
980 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP224r1", (uint8_t *)"ECC_BrainPoolP224r1", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_DER}, // 19
981 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP224r1", (uint8_t *)"ECC_BrainPoolP224r1", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
982 /* ECC_BrainPoolP224t1 */
983 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP224t1", (uint8_t *)"ECC_BrainPoolP224t1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
984 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP224t1", (uint8_t *)"ECC_BrainPoolP224t1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 18
985 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP224t1", (uint8_t *)"ECC_BrainPoolP224t1", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_DER}, // 19
986 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP224t1", (uint8_t *)"ECC_BrainPoolP224t1", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
987 /* ECC_BrainPoolP256r1 */
988 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP256r1", (uint8_t *)"ECC_BrainPoolP256r1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
989 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP256r1", (uint8_t *)"ECC_BrainPoolP256r1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 18
990 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP256r1", (uint8_t *)"ECC_BrainPoolP256r1", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_DER}, // 19
991 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP256r1", (uint8_t *)"ECC_BrainPoolP256r1", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
992 /* ECC_BrainPoolP256t1 */
993 {"X509|UNCOMPRESSED", (uint8_t *)"ECC_BrainPoolP256t1", (uint8_t *)"ECC_BrainPoolP256t1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
994 {"X509|UNCOMPRESSED", (uint8_t *)"ECC_BrainPoolP256t1", (uint8_t *)"ECC_BrainPoolP256t1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 18
995 {"X509|UNCOMPRESSED", (uint8_t *)"ECC_BrainPoolP256t1", (uint8_t *)"ECC_BrainPoolP256t1", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_DER}, // 19
996 {"X509|UNCOMPRESSED", (uint8_t *)"ECC_BrainPoolP256t1", (uint8_t *)"ECC_BrainPoolP256t1", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
997 /* ECC_BrainPoolP320r1 */
998 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP320r1", (uint8_t *)"ECC_BrainPoolP320r1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
999 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP320r1", (uint8_t *)"ECC_BrainPoolP320r1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 18
1000 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP320r1", (uint8_t *)"ECC_BrainPoolP320r1", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_DER}, // 19
1001 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP320r1", (uint8_t *)"ECC_BrainPoolP320r1", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
1002 /* ECC_BrainPoolP320t1 */
1003 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP320t1", (uint8_t *)"ECC_BrainPoolP320t1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
1004 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP320t1", (uint8_t *)"ECC_BrainPoolP320t1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 18
1005 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP320t1", (uint8_t *)"ECC_BrainPoolP320t1", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_DER}, // 19
1006 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP320t1", (uint8_t *)"ECC_BrainPoolP320t1", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
1007 /* ECC_BrainPoolP384r1 */
1008 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP384r1", (uint8_t *)"ECC_BrainPoolP384r1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
1009 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP384r1", (uint8_t *)"ECC_BrainPoolP384r1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 18
1010 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP384r1", (uint8_t *)"ECC_BrainPoolP384r1", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_DER}, // 19
1011 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP384r1", (uint8_t *)"ECC_BrainPoolP384r1", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
1012 /* ECC_BrainPoolP384t1 */
1013 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP384t1", (uint8_t *)"ECC_BrainPoolP384t1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
1014 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP384t1", (uint8_t *)"ECC_BrainPoolP384t1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 18
1015 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP384t1", (uint8_t *)"ECC_BrainPoolP384t1", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_DER}, // 19
1016 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP384t1", (uint8_t *)"ECC_BrainPoolP384t1", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
1017 /* ECC_BrainPoolP512r1 */
1018 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP512r1", (uint8_t *)"ECC_BrainPoolP512r1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
1019 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP512r1", (uint8_t *)"ECC_BrainPoolP512r1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 18
1020 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP512r1", (uint8_t *)"ECC_BrainPoolP512r1", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_DER}, // 19
1021 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP512r1", (uint8_t *)"ECC_BrainPoolP512r1", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
1022 /* ECC_BrainPoolP512t1 */
1023 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP512t1", (uint8_t *)"ECC_BrainPoolP512t1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
1024 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP512t1", (uint8_t *)"ECC_BrainPoolP512t1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 18
1025 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP512t1", (uint8_t *)"ECC_BrainPoolP512t1", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_DER}, // 19
1026 {"X509|COMPRESSED", (uint8_t *)"ECC_BrainPoolP512t1", (uint8_t *)"ECC_BrainPoolP512t1", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
1027 /* ECC_Secp256k1 */
1028 {"X509|COMPRESSED", (uint8_t *)"ECC_Secp256k1", (uint8_t *)"ECC_Secp256k1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-192-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
1029 {"X509|COMPRESSED", (uint8_t *)"ECC_Secp256k1", (uint8_t *)"ECC_Secp256k1", (uint8_t *)"0123456789", 10, (uint8_t *)"AES-256-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_DER}, // 18
1030 {"X509|COMPRESSED", (uint8_t *)"ECC_Secp256k1", (uint8_t *)"ECC_Secp256k1", (uint8_t *)"0123456789", 10, (uint8_t *)"DES-EDE3-CBC", 12, (uint8_t *)"PKCS8", CRYPTO_DER}, // 19
1031 {"X509|COMPRESSED", (uint8_t *)"ECC_Secp256k1", (uint8_t *)"ECC_Secp256k1", nullptr, 0, nullptr, 0, (uint8_t *)"PKCS8", CRYPTO_DER}, // 17
1032 /* DSA not format not support pem、der */
1033 {nullptr, (uint8_t *)"DSA1024", (uint8_t *)"DSA1024", nullptr, 0, nullptr, 0, nullptr, CRYPTO_DER}, // 17
1034 {nullptr, (uint8_t *)"DSA2048", (uint8_t *)"DSA2048", nullptr, 0, nullptr, 0, nullptr, CRYPTO_DER}, // 17
1035 {nullptr, (uint8_t *)"DSA3072", (uint8_t *)"DSA3072", nullptr, 0, nullptr, 0, nullptr, CRYPTO_DER}, // 17
1036 /* SM2 not format not support pem、der */
1037 {nullptr, (uint8_t *)"SM2_256", (uint8_t *)"SM2_256", nullptr, 0, nullptr, 0, nullptr, CRYPTO_DER}, // 17
1038 /* Ed25519 not format not support pem、der */
1039 {nullptr, (uint8_t *)"Ed25519", (uint8_t *)"Ed25519", nullptr, 0, nullptr, 0, nullptr, CRYPTO_DER}, // 17
1040 /* X25519 not format not support pem、der */
1041 {nullptr, (uint8_t *)"X25519", (uint8_t *)"X25519", nullptr, 0, nullptr, 0, nullptr, CRYPTO_DER}, // 17
1042 /* DH not format not support pem、der */
1043 {nullptr, (uint8_t *)"DH_modp1536", (uint8_t *)"DH_modp1536", nullptr, 0, nullptr, 0, nullptr, CRYPTO_DER}, // 17
1044 {nullptr, (uint8_t *)"DH_modp2048", (uint8_t *)"DH_modp2048", nullptr, 0, nullptr, 0, nullptr, CRYPTO_DER}, // 17
1045 {nullptr, (uint8_t *)"DH_modp3072", (uint8_t *)"DH_modp3072", nullptr, 0, nullptr, 0, nullptr, CRYPTO_DER}, // 17
1046 {nullptr, (uint8_t *)"DH_modp4096", (uint8_t *)"DH_modp4096", nullptr, 0, nullptr, 0, nullptr, CRYPTO_DER}, // 17
1047 {nullptr, (uint8_t *)"DH_modp6144", (uint8_t *)"DH_modp6144", nullptr, 0, nullptr, 0, nullptr, CRYPTO_DER}, // 17
1048 {nullptr, (uint8_t *)"DH_modp8192", (uint8_t *)"DH_modp8192", nullptr, 0, nullptr, 0, nullptr, CRYPTO_DER}, // 17
1049 {nullptr, (uint8_t *)"DH_ffdhe2048", (uint8_t *)"DH_ffdhe2048", nullptr, 0, nullptr, 0, nullptr, CRYPTO_DER}, // 17
1050 {nullptr, (uint8_t *)"DH_ffdhe3072", (uint8_t *)"DH_ffdhe3072", nullptr, 0, nullptr, 0, nullptr, CRYPTO_DER}, // 17
1051 {nullptr, (uint8_t *)"DH_ffdhe4096", (uint8_t *)"DH_ffdhe4096", nullptr, 0, nullptr, 0, nullptr, CRYPTO_DER}, // 17
1052 {nullptr, (uint8_t *)"DH_ffdhe6144", (uint8_t *)"DH_ffdhe6144", nullptr, 0, nullptr, 0, nullptr, CRYPTO_DER}, // 17
1053 {nullptr, (uint8_t *)"DH_ffdhe8192", (uint8_t *)"DH_ffdhe8192", nullptr, 0, nullptr, 0, nullptr, CRYPTO_DER}, // 17
1054 };
1055
1056 INSTANTIATE_TEST_CASE_P(OHCryptoFrameworkAsymKeyNapiTest, ASYMKEY_PRIV_TEST, ::testing::ValuesIn(g_asymPrivKeyData));
1057
1058 /**
1059 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1200
1060 * @tc.name OHCryptoFrameworkAsymKeyNapiTest/ASYMKEY_PRIV_TEST.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1200/x
1061 * @tc.desc algorithm is Asym Key
1062 * @tc.size Medium
1063 * @tc.type Func
1064 * @tc.level Level0
1065 */
1066 HWTEST_P(ASYMKEY_PRIV_TEST, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1200, TestSize.Level0)
1067 {
1068 AsymPrivKeySpec asymInfo = GetParam();
1069 Crypto_DataBlob pwBlob = {.data = asymInfo.password, .len = asymInfo.pwLen};
1070 Crypto_DataBlob cipherBlob = {.data = asymInfo.cipher, .len = asymInfo.cipherLen};
1071 Crypto_DataBlob out = { .data = nullptr, .len = 0 };
1072 Crypto_DataBlob outPub = { .data = nullptr, .len = 0 };
1073 Crypto_DataBlob new_out = { .data = nullptr, .len = 0 };
1074 OH_CryptoPrivKeyEncodingParams *params = nullptr;
1075 uint8_t *type = nullptr;
1076
1077 OH_CryptoKeyPair *keyPair = OHTEST_GenerateKeyPair((const char *)asymInfo.algName, (const char *)asymInfo.algKeyName);
1078 ASSERT_TRUE(keyPair != nullptr);
1079 OH_CryptoPrivKey *privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1080 ASSERT_TRUE(privKey != nullptr);
1081 OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1082 ASSERT_TRUE(pubKey != nullptr);
1083 if (asymInfo.password != nullptr) {
1084 params = OHTEST_SetParam(&pwBlob, &cipherBlob);
1085 ASSERT_TRUE(params != nullptr);
1086 }
1087 type = asymInfo.type ? asymInfo.type : nullptr;
1088 ASSERT_EQ(OH_CryptoPrivKey_Encode(privKey, asymInfo.encoding, (const char *)type, params, &out), CRYPTO_SUCCESS);
1089 ASSERT_EQ(OH_CryptoPubKey_Encode(pubKey, asymInfo.encoding, asymInfo.pubType, &outPub), CRYPTO_SUCCESS);
1090 OH_CryptoKeyPair *new_keyPair = OHTEST_ConvertKeyPair((const char *)asymInfo.algName, asymInfo.encoding, &out, &outPub, &pwBlob);
1091 ASSERT_TRUE(new_keyPair != nullptr);
1092 OH_CryptoPrivKey *new_privKey = OH_CryptoKeyPair_GetPrivKey(new_keyPair);
1093 ASSERT_TRUE(new_privKey != nullptr);
1094 ASSERT_EQ(OH_CryptoPrivKey_Encode(new_privKey, asymInfo.encoding, (const char *)type, params, &new_out), CRYPTO_SUCCESS);
1095 EXPECT_TRUE(new_out.len == out.len);
1096
1097 OH_Crypto_FreeDataBlob(&out);
1098 OH_Crypto_FreeDataBlob(&new_out);
1099 OH_Crypto_FreeDataBlob(&outPub);
1100 OH_CryptoPrivKeyEncodingParams_Destroy(params);
1101 OH_CryptoKeyPair_Destroy(keyPair);
1102 OH_CryptoKeyPair_Destroy(new_keyPair);
1103 }
1104
OHTEST_GenEcCommonParamsSpec(OH_CryptoPubKey * pubKey)1105 static OH_CryptoAsymKeySpec *OHTEST_GenEcCommonParamsSpec(OH_CryptoPubKey *pubKey)
1106 {
1107 OH_CryptoAsymKeySpec *specCtx = nullptr;
1108 Crypto_DataBlob fp = { .data = nullptr, .len = 0};
1109 Crypto_DataBlob a = { .data = nullptr, .len = 0};
1110 Crypto_DataBlob b = { .data = nullptr, .len = 0};
1111 Crypto_DataBlob g_x = { .data = nullptr, .len = 0};
1112 Crypto_DataBlob g_y = { .data = nullptr, .len = 0};
1113 Crypto_DataBlob n = { .data = nullptr, .len = 0};
1114 Crypto_DataBlob h = { .data = nullptr, .len = 0};
1115 Crypto_DataBlob gh = { .data = nullptr, .len = 0};
1116
1117 EXPECT_EQ(OH_CryptoAsymKeySpec_Create("ECC", CRYPTO_ASYM_KEY_COMMON_PARAMS_SPEC, &specCtx), CRYPTO_SUCCESS);
1118 EXPECT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ECC_FP_P_DATABLOB, &fp), CRYPTO_SUCCESS);
1119 EXPECT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ECC_A_DATABLOB, &a), CRYPTO_SUCCESS);
1120 EXPECT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ECC_B_DATABLOB, &b), CRYPTO_SUCCESS);
1121 EXPECT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ECC_G_X_DATABLOB, &g_x), CRYPTO_SUCCESS);
1122 EXPECT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ECC_G_Y_DATABLOB, &g_y), CRYPTO_SUCCESS);
1123 EXPECT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ECC_N_DATABLOB, &n), CRYPTO_SUCCESS);
1124 EXPECT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ECC_H_INT, &h), CRYPTO_SUCCESS);
1125 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_ECC_FP_P_DATABLOB, &fp), CRYPTO_SUCCESS);
1126 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_ECC_A_DATABLOB, &a), CRYPTO_SUCCESS);
1127 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_ECC_B_DATABLOB, &b), CRYPTO_SUCCESS);
1128 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_ECC_G_X_DATABLOB, &g_x), CRYPTO_SUCCESS);
1129 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_ECC_G_Y_DATABLOB, &g_y), CRYPTO_SUCCESS);
1130 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_ECC_N_DATABLOB, &n), CRYPTO_SUCCESS);
1131 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_ECC_H_INT, &h), CRYPTO_SUCCESS);
1132 EXPECT_EQ(OH_CryptoAsymKeySpec_GetParam(specCtx, CRYPTO_ECC_H_INT, &gh), CRYPTO_SUCCESS);
1133
1134 OH_Crypto_FreeDataBlob(&g_x);
1135 OH_Crypto_FreeDataBlob(&g_y);
1136 OH_Crypto_FreeDataBlob(&a);
1137 OH_Crypto_FreeDataBlob(&b);
1138 OH_Crypto_FreeDataBlob(&n);
1139 OH_Crypto_FreeDataBlob(&h);
1140 OH_Crypto_FreeDataBlob(&gh);
1141 OH_Crypto_FreeDataBlob(&fp);
1142 return specCtx;
1143 }
1144
OHTEST_GenDhCommonParamsSpec(OH_CryptoPubKey * pubKey)1145 static OH_CryptoAsymKeySpec *OHTEST_GenDhCommonParamsSpec(OH_CryptoPubKey *pubKey)
1146 {
1147 OH_CryptoAsymKeySpec *specCtx = nullptr;
1148 Crypto_DataBlob p = { .data = nullptr, .len = 0};
1149 Crypto_DataBlob g = { .data = nullptr, .len = 0};
1150 Crypto_DataBlob l = { .data = nullptr, .len = 0};
1151
1152 EXPECT_EQ(OH_CryptoAsymKeySpec_Create("DH", CRYPTO_ASYM_KEY_COMMON_PARAMS_SPEC, &specCtx), CRYPTO_SUCCESS);
1153 EXPECT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_DH_P_DATABLOB, &p), CRYPTO_SUCCESS);
1154 EXPECT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_DH_G_DATABLOB, &g), CRYPTO_SUCCESS);
1155 EXPECT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_DH_L_INT, &l), CRYPTO_NOT_SUPPORTED);
1156 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_DH_P_DATABLOB, &p), CRYPTO_SUCCESS);
1157 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_DH_G_DATABLOB, &g), CRYPTO_SUCCESS);
1158 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_DH_L_INT, &l), CRYPTO_PARAMETER_CHECK_FAILED);
1159
1160 OH_Crypto_FreeDataBlob(&g);
1161 OH_Crypto_FreeDataBlob(&p);
1162 OH_Crypto_FreeDataBlob(&l);
1163 return specCtx;
1164 }
1165
1166 CommonECCSpec g_commonEccSpec[] = {
1167 {"ECC224", "ECC", "NID_secp224r1", false},
1168 {"ECC256", "ECC", "NID_X9_62_prime256v1", false},
1169 {"ECC384", "ECC", "NID_secp384r1", false},
1170 {"ECC521", "ECC", "NID_secp521r1", false},
1171 {"ECC_BrainPoolP160r1", "ECC", "NID_brainpoolP160r1", false},
1172 {"ECC_BrainPoolP160t1", "ECC", "NID_brainpoolP160t1", false},
1173 {"ECC_BrainPoolP192r1", "ECC", "NID_brainpoolP192r1", false},
1174 {"ECC_BrainPoolP192t1", "ECC", "NID_brainpoolP192t1", false},
1175 {"ECC_BrainPoolP224r1", "ECC", "NID_brainpoolP224r1", false},
1176 {"ECC_BrainPoolP224t1", "ECC", "NID_brainpoolP224t1", false},
1177 {"ECC_BrainPoolP256r1", "ECC", "NID_brainpoolP256r1", false},
1178 {"ECC_BrainPoolP256t1", "ECC", "NID_brainpoolP256t1", false},
1179 {"ECC_BrainPoolP320r1", "ECC", "NID_brainpoolP320r1", false},
1180 {"ECC_BrainPoolP320t1", "ECC", "NID_brainpoolP320t1", false},
1181 {"ECC_BrainPoolP384r1", "ECC", "NID_brainpoolP384r1", false},
1182 {"ECC_BrainPoolP384t1", "ECC", "NID_brainpoolP384t1", false},
1183 {"ECC_BrainPoolP512r1", "ECC", "NID_brainpoolP512r1", false},
1184 {"ECC_BrainPoolP512t1", "ECC", "NID_brainpoolP512t1", false},
1185 {"ECC_Secp256k1", "ECC", "NID_secp256k1", false},
1186 {"ECC224", "ECC", "NID_secp224r1", true},
1187 {"ECC256", "ECC", "NID_X9_62_prime256v1", true},
1188 {"ECC384", "ECC", "NID_secp384r1", true},
1189 {"ECC521", "ECC", "NID_secp521r1", true},
1190 {"ECC_BrainPoolP160r1", "ECC", "NID_brainpoolP160r1", true},
1191 {"ECC_BrainPoolP160t1", "ECC", "NID_brainpoolP160t1", true},
1192 {"ECC_BrainPoolP192r1", "ECC", "NID_brainpoolP192r1", true},
1193 {"ECC_BrainPoolP192t1", "ECC", "NID_brainpoolP192t1", true},
1194 {"ECC_BrainPoolP224r1", "ECC", "NID_brainpoolP224r1", true},
1195 {"ECC_BrainPoolP224t1", "ECC", "NID_brainpoolP224t1", true},
1196 {"ECC_BrainPoolP256r1", "ECC", "NID_brainpoolP256r1", true},
1197 {"ECC_BrainPoolP256t1", "ECC", "NID_brainpoolP256t1", true},
1198 {"ECC_BrainPoolP320r1", "ECC", "NID_brainpoolP320r1", true},
1199 {"ECC_BrainPoolP320t1", "ECC", "NID_brainpoolP320t1", true},
1200 {"ECC_BrainPoolP384r1", "ECC", "NID_brainpoolP384r1", true},
1201 {"ECC_BrainPoolP384t1", "ECC", "NID_brainpoolP384t1", true},
1202 {"ECC_BrainPoolP512r1", "ECC", "NID_brainpoolP512r1", true},
1203 {"ECC_BrainPoolP512t1", "ECC", "NID_brainpoolP512t1", true},
1204 {"ECC_Secp256k1", "ECC", "NID_secp256k1", true},
1205 {"SM2_256", "SM2", "NID_sm2", false},
1206 {"SM2_256", "SM2", "NID_sm2", true},
1207 };
1208
1209 INSTANTIATE_TEST_CASE_P(OHCryptoFrameworkAsymKeyNapiTest, ASYMKEY_ECC_KEYPAIR_TEST, ::testing::ValuesIn(g_commonEccSpec));
1210
1211 /**
1212 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1300
1213 * @tc.name OHCryptoFrameworkAsymKeyNapiTest/ASYMKEY_COMMON_TEST.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1300
1214 * @tc.desc algorithm is Asym Key
1215 * @tc.size Medium
1216 * @tc.type Func
1217 * @tc.level Level0
1218 */
1219 HWTEST_P(ASYMKEY_ECC_KEYPAIR_TEST, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1300, TestSize.Level0)
1220 {
1221 CommonECCSpec asymInfo = GetParam();
1222 const char *algoName = asymInfo.algoName;
1223 const char *curve = asymInfo.curve;
1224 const char *curveNid = asymInfo.curveNid;
1225 OH_CryptoAsymKeySpec *commonSpec = nullptr;
1226 OH_CryptoAsymKeySpec *specCtx = nullptr;
1227 OH_CryptoAsymKeyGeneratorWithSpec *generator = nullptr;
1228 OH_CryptoKeyPair *newKeyPair = nullptr;
1229 Crypto_DataBlob sk = { .data = nullptr, .len = 0};
1230 Crypto_DataBlob pk_x = { .data = nullptr, .len = 0};
1231 Crypto_DataBlob pk_y = { .data = nullptr, .len = 0};
1232 Crypto_DataBlob new_sk = { .data = nullptr, .len = 0};
1233 Crypto_DataBlob new_pk_x = { .data = nullptr, .len = 0};
1234 Crypto_DataBlob new_pk_y = { .data = nullptr, .len = 0};
1235
1236 OH_CryptoKeyPair *keyPair = OHTEST_GenerateKeyPair(algoName, algoName);
1237 EXPECT_TRUE(keyPair != nullptr);
1238 OH_CryptoPrivKey *privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1239 EXPECT_TRUE(privKey != nullptr);
1240 OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1241 EXPECT_TRUE(pubKey != nullptr);
1242 EXPECT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ECC_PK_X_DATABLOB, &pk_x), CRYPTO_SUCCESS);
1243 EXPECT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ECC_PK_Y_DATABLOB, &pk_y), CRYPTO_SUCCESS);
1244 EXPECT_EQ(OH_CryptoPrivKey_GetParam(privKey, CRYPTO_ECC_SK_DATABLOB, &sk), CRYPTO_SUCCESS);
1245 EXPECT_EQ(OH_CryptoAsymKeySpec_Create(curve, CRYPTO_ASYM_KEY_KEY_PAIR_SPEC, &specCtx), CRYPTO_SUCCESS);
1246 if (asymInfo.isGetCommonSpec) {
1247 commonSpec = OHTEST_GenEcCommonParamsSpec(pubKey);
1248 } else {
1249 EXPECT_EQ(OH_CryptoAsymKeySpec_GenEcCommonParamsSpec(curveNid, &commonSpec), CRYPTO_SUCCESS);
1250 }
1251 EXPECT_TRUE(commonSpec != nullptr);
1252 EXPECT_EQ(OH_CryptoAsymKeySpec_SetCommonParamsSpec(specCtx, commonSpec), CRYPTO_SUCCESS);
1253 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_ECC_SK_DATABLOB, &sk), CRYPTO_SUCCESS);
1254 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_ECC_PK_X_DATABLOB, &pk_x), CRYPTO_SUCCESS);
1255 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_ECC_PK_Y_DATABLOB, &pk_y), CRYPTO_SUCCESS);
1256 EXPECT_EQ(OH_CryptoAsymKeyGeneratorWithSpec_Create(specCtx, &generator), CRYPTO_SUCCESS);
1257 EXPECT_TRUE(generator != nullptr);
1258 EXPECT_EQ(OH_CryptoAsymKeyGeneratorWithSpec_GenKeyPair(generator, &newKeyPair), CRYPTO_SUCCESS);
1259 EXPECT_TRUE(newKeyPair != nullptr);
1260 OH_CryptoPrivKey *new_privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1261 EXPECT_TRUE(new_privKey != nullptr);
1262 OH_CryptoPubKey *new_pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1263 EXPECT_TRUE(new_pubKey != nullptr);
1264 EXPECT_EQ(OH_CryptoPubKey_GetParam(new_pubKey, CRYPTO_ECC_PK_X_DATABLOB, &new_pk_x), CRYPTO_SUCCESS);
1265 EXPECT_EQ(OH_CryptoPubKey_GetParam(new_pubKey, CRYPTO_ECC_PK_Y_DATABLOB, &new_pk_y), CRYPTO_SUCCESS);
1266 EXPECT_EQ(OH_CryptoPrivKey_GetParam(new_privKey, CRYPTO_ECC_SK_DATABLOB, &new_sk), CRYPTO_SUCCESS);
1267 EXPECT_TRUE(memcmp(new_pk_x.data, pk_x.data, new_pk_x.len) == 0);
1268 EXPECT_TRUE(memcmp(new_pk_y.data, pk_y.data, new_pk_y.len) == 0);
1269 EXPECT_TRUE(memcmp(new_sk.data, sk.data, new_sk.len) == 0);
1270
1271 OH_Crypto_FreeDataBlob(&sk);
1272 OH_Crypto_FreeDataBlob(&pk_x);
1273 OH_Crypto_FreeDataBlob(&pk_y);
1274 OH_Crypto_FreeDataBlob(&new_sk);
1275 OH_Crypto_FreeDataBlob(&new_pk_x);
1276 OH_Crypto_FreeDataBlob(&new_pk_y);
1277 OH_CryptoKeyPair_Destroy(keyPair);
1278 OH_CryptoKeyPair_Destroy(newKeyPair);
1279 OH_CryptoAsymKeyGeneratorWithSpec_Destroy(generator);
1280 OH_CryptoAsymKeySpec_Destroy(specCtx);
1281 OH_CryptoAsymKeySpec_Destroy(commonSpec);
1282 }
1283
1284 CommonDHSpec g_commonDhSpec[] = {
1285 {"DH_modp1536", "DH", 0, 0, false},
1286 {"DH_modp2048", "DH", 0, 0, false},
1287 {"DH_modp3072", "DH", 0, 0, false},
1288 {"DH_modp4096", "DH", 0, 0, false},
1289 {"DH_modp6144", "DH", 0, 0, false},
1290 {"DH_modp8192", "DH", 0, 0, false},
1291 {"DH_ffdhe2048", "DH", 0, 0, false},
1292 {"DH_ffdhe3072", "DH", 0, 0, false},
1293 {"DH_ffdhe4096", "DH", 0, 0, false},
1294 {"DH_ffdhe6144", "DH", 0, 0, false},
1295 {"DH_ffdhe8192", "DH", 0, 0, false},
1296 {"DH_modp1536", "DH", 1536, 200, true},
1297 {"DH_modp2048", "DH", 2048, 1024, true},
1298 {"DH_modp3072", "DH", 3072, 1536, true},
1299 {"DH_modp4096", "DH", 4096, 1536, true},
1300 {"DH_modp6144", "DH", 6144, 1536, true},
1301 {"DH_modp8192", "DH", 8192, 1536, true},
1302 {"DH_ffdhe2048", "DH", 2048, 1536, true},
1303 {"DH_ffdhe3072", "DH", 3072, 1536, true},
1304 {"DH_ffdhe4096", "DH", 4096, 1536, true},
1305 {"DH_ffdhe6144", "DH", 6144, 1536, true},
1306 {"DH_ffdhe8192", "DH", 8192, 1536, true},
1307 };
1308
1309 INSTANTIATE_TEST_CASE_P(OHCryptoFrameworkAsymKeyNapiTest, ASYMKEY_DH_KEYPAIR_TEST, ::testing::ValuesIn(g_commonDhSpec));
1310
1311 /**
1312 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1400
1313 * @tc.name OHCryptoFrameworkAsymKeyNapiTest/ASYMKEY_DH_KEYPAIR_TEST.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1400
1314 * @tc.desc algorithm is Asym Key
1315 * @tc.size Medium
1316 * @tc.type Func
1317 * @tc.level Level0
1318 */
1319 HWTEST_P(ASYMKEY_DH_KEYPAIR_TEST, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1400, TestSize.Level0)
1320 {
1321 CommonDHSpec asymInfo = GetParam();
1322 const char *algoName = asymInfo.algoName;
1323 const char *curve = asymInfo.curve;
1324 OH_CryptoAsymKeySpec *commonSpec = nullptr;
1325 OH_CryptoAsymKeySpec *specCtx = nullptr;
1326 OH_CryptoAsymKeyGeneratorWithSpec *generator = nullptr;
1327 OH_CryptoKeyPair *newKeyPair = nullptr;
1328 Crypto_DataBlob sk = { .data = nullptr, .len = 0};
1329 Crypto_DataBlob pk = { .data = nullptr, .len = 0};
1330 Crypto_DataBlob new_sk = { .data = nullptr, .len = 0};
1331 Crypto_DataBlob new_pk = { .data = nullptr, .len = 0};
1332
1333 OH_CryptoKeyPair *keyPair = OHTEST_GenerateKeyPair(algoName, algoName);
1334 EXPECT_TRUE(keyPair != nullptr);
1335 OH_CryptoPrivKey *privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1336 EXPECT_TRUE(privKey != nullptr);
1337 OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1338 EXPECT_TRUE(pubKey != nullptr);
1339 EXPECT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_DH_PK_DATABLOB, &pk), CRYPTO_SUCCESS);
1340 EXPECT_EQ(OH_CryptoPrivKey_GetParam(privKey, CRYPTO_DH_SK_DATABLOB, &sk), CRYPTO_SUCCESS);
1341 EXPECT_EQ(OH_CryptoAsymKeySpec_Create(curve, CRYPTO_ASYM_KEY_KEY_PAIR_SPEC, &specCtx), CRYPTO_SUCCESS);
1342 if (!asymInfo.isGetCommonSpec) {
1343 commonSpec = OHTEST_GenDhCommonParamsSpec(pubKey);
1344 } else {
1345 EXPECT_EQ(OH_CryptoAsymKeySpec_GenDhCommonParamsSpec(asymInfo.pLen, asymInfo.skLen, &commonSpec), CRYPTO_SUCCESS);
1346 }
1347 EXPECT_TRUE(commonSpec != nullptr);
1348 EXPECT_EQ(OH_CryptoAsymKeySpec_SetCommonParamsSpec(specCtx, commonSpec), CRYPTO_SUCCESS);
1349 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_DH_SK_DATABLOB, &sk), CRYPTO_SUCCESS);
1350 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_DH_PK_DATABLOB, &pk), CRYPTO_SUCCESS);
1351 EXPECT_EQ(OH_CryptoAsymKeyGeneratorWithSpec_Create(specCtx, &generator), CRYPTO_SUCCESS);
1352 EXPECT_TRUE(generator != nullptr);
1353 EXPECT_EQ(OH_CryptoAsymKeyGeneratorWithSpec_GenKeyPair(generator, &newKeyPair), CRYPTO_SUCCESS);
1354 EXPECT_TRUE(newKeyPair != nullptr);
1355 OH_CryptoPrivKey *new_privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1356 EXPECT_TRUE(new_privKey != nullptr);
1357 OH_CryptoPubKey *new_pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1358 EXPECT_TRUE(new_pubKey != nullptr);
1359 EXPECT_EQ(OH_CryptoPubKey_GetParam(new_pubKey, CRYPTO_DH_PK_DATABLOB, &new_pk), CRYPTO_SUCCESS);
1360 EXPECT_EQ(OH_CryptoPrivKey_GetParam(new_privKey, CRYPTO_DH_SK_DATABLOB, &new_sk), CRYPTO_SUCCESS);
1361 EXPECT_TRUE(memcmp(new_pk.data, pk.data, new_pk.len) == 0);
1362 EXPECT_TRUE(memcmp(new_sk.data, sk.data, new_sk.len) == 0);
1363
1364 OH_Crypto_FreeDataBlob(&sk);
1365 OH_Crypto_FreeDataBlob(&pk);
1366 OH_Crypto_FreeDataBlob(&new_sk);
1367 OH_Crypto_FreeDataBlob(&new_pk);
1368 OH_CryptoKeyPair_Destroy(keyPair);
1369 OH_CryptoKeyPair_Destroy(newKeyPair);
1370 OH_CryptoAsymKeyGeneratorWithSpec_Destroy(generator);
1371 OH_CryptoAsymKeySpec_Destroy(specCtx);
1372 OH_CryptoAsymKeySpec_Destroy(commonSpec);
1373 }
1374
1375 CommonRSASpec g_commonRsaSpec[] = {
1376 {"RSA", "RSA512", "RSA512|PRIMES_2"},
1377 {"RSA", "RSA768", "RSA768|PRIMES_2"},
1378 {"RSA", "RSA1024", "RSA1024|PRIMES_2"},
1379 {"RSA", "RSA1024", "RSA1024|PRIMES_3"},
1380 {"RSA", "RSA2048", "RSA2048|PRIMES_2"},
1381 {"RSA", "RSA2048", "RSA2048|PRIMES_3"},
1382 {"RSA", "RSA3072", "RSA3072|PRIMES_2"},
1383 {"RSA", "RSA3072", "RSA3072|PRIMES_3"},
1384 {"RSA", "RSA4096", "RSA4096|PRIMES_2"},
1385 {"RSA", "RSA4096", "RSA4096|PRIMES_3"},
1386 {"RSA", "RSA4096", "RSA4096|PRIMES_4"},
1387 {"RSA", "RSA8192", "RSA8192|PRIMES_2"},
1388 {"RSA", "RSA8192", "RSA8192|PRIMES_3"},
1389 {"RSA", "RSA8192", "RSA8192|PRIMES_4"},
1390 {"RSA", "RSA8192", "RSA8192|PRIMES_5"},
1391 };
1392
1393 INSTANTIATE_TEST_CASE_P(OHCryptoFrameworkAsymKeyNapiTest, ASYMKEY_RSA_KEYPAIR_TEST, ::testing::ValuesIn(g_commonRsaSpec));
1394
1395 /**
1396 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1500
1397 * @tc.name OHCryptoFrameworkAsymKeyNapiTest/ASYMKEY_RSA_KEYPAIR_TEST.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1500
1398 * @tc.desc algorithm is Asym Key
1399 * @tc.size Medium
1400 * @tc.type Func
1401 * @tc.level Level0
1402 */
1403 HWTEST_P(ASYMKEY_RSA_KEYPAIR_TEST, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1500, TestSize.Level0)
1404 {
1405 CommonRSASpec asymInfo = GetParam();
1406 const char *algoName = asymInfo.algoName;
1407 const char *specName = asymInfo.specName;
1408 const char *algoKeyName = asymInfo.algoKeyName;
1409 OH_CryptoAsymKeySpec *specCtx = nullptr;
1410 OH_CryptoAsymKeyGeneratorWithSpec *generator = nullptr;
1411 OH_CryptoKeyPair *newKeyPair = nullptr;
1412 Crypto_DataBlob sk = { .data = nullptr, .len = 0};
1413 Crypto_DataBlob pk = { .data = nullptr, .len = 0};
1414 Crypto_DataBlob new_sk = { .data = nullptr, .len = 0};
1415 Crypto_DataBlob new_pk = { .data = nullptr, .len = 0};
1416 Crypto_DataBlob n = { .data = nullptr, .len = 0};
1417
1418 OH_CryptoKeyPair *keyPair = OHTEST_GenerateKeyPair(algoName, algoKeyName);
1419 EXPECT_TRUE(keyPair != nullptr);
1420 OH_CryptoPrivKey *privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1421 EXPECT_TRUE(privKey != nullptr);
1422 OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1423 EXPECT_TRUE(pubKey != nullptr);
1424 EXPECT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_RSA_E_DATABLOB, &pk), CRYPTO_SUCCESS);
1425 EXPECT_EQ(OH_CryptoPrivKey_GetParam(privKey, CRYPTO_RSA_D_DATABLOB, &sk), CRYPTO_SUCCESS);
1426 EXPECT_EQ(OH_CryptoAsymKeySpec_Create(specName, CRYPTO_ASYM_KEY_KEY_PAIR_SPEC, &specCtx), CRYPTO_SUCCESS);
1427 EXPECT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_RSA_N_DATABLOB, &n), CRYPTO_SUCCESS);
1428 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_RSA_N_DATABLOB, &n), CRYPTO_SUCCESS);
1429 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_RSA_D_DATABLOB, &sk), CRYPTO_SUCCESS);
1430 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_RSA_E_DATABLOB, &pk), CRYPTO_SUCCESS);
1431 EXPECT_EQ(OH_CryptoAsymKeyGeneratorWithSpec_Create(specCtx, &generator), CRYPTO_SUCCESS);
1432 EXPECT_TRUE(generator != nullptr);
1433 EXPECT_EQ(OH_CryptoAsymKeyGeneratorWithSpec_GenKeyPair(generator, &newKeyPair), CRYPTO_SUCCESS);
1434 EXPECT_TRUE(newKeyPair != nullptr);
1435 OH_CryptoPrivKey *new_privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1436 EXPECT_TRUE(new_privKey != nullptr);
1437 OH_CryptoPubKey *new_pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1438 EXPECT_TRUE(new_pubKey != nullptr);
1439 EXPECT_EQ(OH_CryptoPubKey_GetParam(new_pubKey, CRYPTO_RSA_E_DATABLOB, &new_pk), CRYPTO_SUCCESS);
1440 EXPECT_EQ(OH_CryptoPrivKey_GetParam(new_privKey, CRYPTO_RSA_D_DATABLOB, &new_sk), CRYPTO_SUCCESS);
1441 EXPECT_TRUE(memcmp(new_pk.data, pk.data, new_pk.len) == 0);
1442 EXPECT_TRUE(memcmp(new_sk.data, sk.data, new_sk.len) == 0);
1443
1444 OH_Crypto_FreeDataBlob(&sk);
1445 OH_Crypto_FreeDataBlob(&pk);
1446 OH_Crypto_FreeDataBlob(&new_sk);
1447 OH_Crypto_FreeDataBlob(&new_pk);
1448 OH_Crypto_FreeDataBlob(&n);
1449 OH_CryptoKeyPair_Destroy(keyPair);
1450 OH_CryptoKeyPair_Destroy(newKeyPair);
1451 OH_CryptoAsymKeyGeneratorWithSpec_Destroy(generator);
1452 OH_CryptoAsymKeySpec_Destroy(specCtx);
1453 }
1454
1455 CommonDSASpec g_commonDsaSpec[] = {
1456 {"DSA", "DSA1024"},
1457 {"DSA", "DSA2048"},
1458 {"DSA", "DSA3072"},
1459 };
1460
1461 INSTANTIATE_TEST_CASE_P(OHCryptoFrameworkAsymKeyNapiTest, ASYMKEY_DSA_KEYPAIR_TEST, ::testing::ValuesIn(g_commonDsaSpec));
1462
1463 /**
1464 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1600
1465 * @tc.name OHCryptoFrameworkAsymKeyNapiTest/ASYMKEY_DSA_KEYPAIR_TEST.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1600/x
1466 * @tc.desc algorithm is Asym Key
1467 * @tc.size Medium
1468 * @tc.type Func
1469 * @tc.level Level0
1470 */
1471 HWTEST_P(ASYMKEY_DSA_KEYPAIR_TEST, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1600, TestSize.Level0)
1472 {
1473 CommonDSASpec asymInfo = GetParam();
1474 const char *algoName = asymInfo.algoName;
1475 const char *specName = asymInfo.specName;
1476 OH_CryptoAsymKeySpec *specCtx = nullptr;
1477 OH_CryptoAsymKeyGeneratorWithSpec *generator = nullptr;
1478 OH_CryptoKeyPair *newKeyPair = nullptr;
1479 Crypto_DataBlob sk = { .data = nullptr, .len = 0};
1480 Crypto_DataBlob pk = { .data = nullptr, .len = 0};
1481 Crypto_DataBlob new_sk = { .data = nullptr, .len = 0};
1482 Crypto_DataBlob new_pk = { .data = nullptr, .len = 0};
1483 Crypto_DataBlob g = { .data = nullptr, .len = 0};
1484 Crypto_DataBlob p = { .data = nullptr, .len = 0};
1485 Crypto_DataBlob q = { .data = nullptr, .len = 0};
1486
1487 OH_CryptoKeyPair *keyPair = OHTEST_GenerateKeyPair(algoName, algoName);
1488 EXPECT_TRUE(keyPair != nullptr);
1489 OH_CryptoPrivKey *privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1490 EXPECT_TRUE(privKey != nullptr);
1491 OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1492 EXPECT_TRUE(pubKey != nullptr);
1493 EXPECT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_DSA_PK_DATABLOB, &pk), CRYPTO_SUCCESS);
1494 EXPECT_EQ(OH_CryptoPrivKey_GetParam(privKey, CRYPTO_DSA_SK_DATABLOB, &sk), CRYPTO_SUCCESS);
1495 EXPECT_EQ(OH_CryptoAsymKeySpec_Create(specName, CRYPTO_ASYM_KEY_KEY_PAIR_SPEC, &specCtx), CRYPTO_SUCCESS);
1496 EXPECT_TRUE(specCtx != nullptr);
1497 EXPECT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_DSA_P_DATABLOB, &p), CRYPTO_SUCCESS);
1498 EXPECT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_DSA_Q_DATABLOB, &q), CRYPTO_SUCCESS);
1499 EXPECT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_DSA_G_DATABLOB, &g), CRYPTO_SUCCESS);
1500 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_DSA_P_DATABLOB, &p), CRYPTO_SUCCESS);
1501 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_DSA_Q_DATABLOB, &q), CRYPTO_SUCCESS);
1502 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_DSA_G_DATABLOB, &g), CRYPTO_SUCCESS);
1503 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_DSA_SK_DATABLOB, &sk), CRYPTO_SUCCESS);
1504 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_DSA_PK_DATABLOB, &pk), CRYPTO_SUCCESS);
1505 EXPECT_EQ(OH_CryptoAsymKeyGeneratorWithSpec_Create(specCtx, &generator), CRYPTO_SUCCESS);
1506 EXPECT_TRUE(generator != nullptr);
1507 EXPECT_EQ(OH_CryptoAsymKeyGeneratorWithSpec_GenKeyPair(generator, &newKeyPair), CRYPTO_SUCCESS);
1508 EXPECT_TRUE(newKeyPair != nullptr);
1509 OH_CryptoPrivKey *new_privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1510 EXPECT_TRUE(new_privKey != nullptr);
1511 OH_CryptoPubKey *new_pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1512 EXPECT_TRUE(new_pubKey != nullptr);
1513 EXPECT_EQ(OH_CryptoPubKey_GetParam(new_pubKey, CRYPTO_DSA_PK_DATABLOB, &new_pk), CRYPTO_SUCCESS);
1514 EXPECT_EQ(OH_CryptoPrivKey_GetParam(new_privKey, CRYPTO_DSA_SK_DATABLOB, &new_sk), CRYPTO_SUCCESS);
1515 EXPECT_TRUE(memcmp(new_pk.data, pk.data, new_pk.len) == 0);
1516 EXPECT_TRUE(memcmp(new_sk.data, sk.data, new_sk.len) == 0);
1517
1518 OH_Crypto_FreeDataBlob(&sk);
1519 OH_Crypto_FreeDataBlob(&pk);
1520 OH_Crypto_FreeDataBlob(&new_sk);
1521 OH_Crypto_FreeDataBlob(&new_pk);
1522 OH_Crypto_FreeDataBlob(&p);
1523 OH_Crypto_FreeDataBlob(&q);
1524 OH_Crypto_FreeDataBlob(&g);
1525 OH_CryptoKeyPair_Destroy(keyPair);
1526 OH_CryptoKeyPair_Destroy(newKeyPair);
1527 OH_CryptoAsymKeyGeneratorWithSpec_Destroy(generator);
1528 OH_CryptoAsymKeySpec_Destroy(specCtx);
1529 }
1530
1531 CommonSpec g_CommonSpec[] = {
1532 {"X25519", CRYPTO_X25519_SK_DATABLOB, CRYPTO_X25519_PK_DATABLOB},
1533 {"Ed25519", CRYPTO_ED25519_SK_DATABLOB, CRYPTO_ED25519_PK_DATABLOB},
1534 };
1535
1536 INSTANTIATE_TEST_CASE_P(OHCryptoFrameworkAsymKeyNapiTest, ASYMKEY_KEYPAIR_TEST, ::testing::ValuesIn(g_CommonSpec));
1537
1538 /**
1539 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1700
1540 * @tc.name OHCryptoFrameworkAsymKeyNapiTest/ASYMKEY_KEYPAIR_TEST.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1700/x
1541 * @tc.desc algorithm is Asym Key
1542 * @tc.size Medium
1543 * @tc.type Func
1544 * @tc.level Level0
1545 */
1546 HWTEST_P(ASYMKEY_KEYPAIR_TEST, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1700, TestSize.Level0)
1547 {
1548 CommonSpec asymInfo = GetParam();
1549 const char *algoName = asymInfo.algoName;
1550 OH_CryptoAsymKeySpec *specCtx = nullptr;
1551 OH_CryptoAsymKeyGeneratorWithSpec *generator = nullptr;
1552 OH_CryptoKeyPair *newKeyPair = nullptr;
1553 Crypto_DataBlob sk = { .data = nullptr, .len = 0};
1554 Crypto_DataBlob pk = { .data = nullptr, .len = 0};
1555 Crypto_DataBlob new_sk = { .data = nullptr, .len = 0};
1556 Crypto_DataBlob new_pk = { .data = nullptr, .len = 0};
1557
1558 OH_CryptoKeyPair *keyPair = OHTEST_GenerateKeyPair(algoName, algoName);
1559 EXPECT_TRUE(keyPair != nullptr);
1560 OH_CryptoPrivKey *privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1561 EXPECT_TRUE(privKey != nullptr);
1562 OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1563 EXPECT_TRUE(pubKey != nullptr);
1564 EXPECT_EQ(OH_CryptoPubKey_GetParam(pubKey, asymInfo.pk, &pk), CRYPTO_SUCCESS);
1565 EXPECT_EQ(OH_CryptoPrivKey_GetParam(privKey, asymInfo.sk, &sk), CRYPTO_SUCCESS);
1566 EXPECT_EQ(OH_CryptoAsymKeySpec_Create(algoName, CRYPTO_ASYM_KEY_KEY_PAIR_SPEC, &specCtx), CRYPTO_SUCCESS);
1567 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, asymInfo.sk, &sk), CRYPTO_SUCCESS);
1568 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, asymInfo.pk, &pk), CRYPTO_SUCCESS);
1569 EXPECT_EQ(OH_CryptoAsymKeyGeneratorWithSpec_Create(specCtx, &generator), CRYPTO_SUCCESS);
1570 EXPECT_TRUE(generator != nullptr);
1571 EXPECT_EQ(OH_CryptoAsymKeyGeneratorWithSpec_GenKeyPair(generator, &newKeyPair), CRYPTO_SUCCESS);
1572 EXPECT_TRUE(newKeyPair != nullptr);
1573 OH_CryptoPrivKey *new_privKey = OH_CryptoKeyPair_GetPrivKey(newKeyPair);
1574 EXPECT_TRUE(new_privKey != nullptr);
1575 OH_CryptoPubKey *new_pubKey = OH_CryptoKeyPair_GetPubKey(newKeyPair);
1576 EXPECT_TRUE(new_pubKey != nullptr);
1577 EXPECT_EQ(OH_CryptoPubKey_GetParam(new_pubKey, asymInfo.pk, &new_pk), CRYPTO_SUCCESS);
1578 EXPECT_EQ(OH_CryptoPrivKey_GetParam(new_privKey, asymInfo.sk, &new_sk), CRYPTO_SUCCESS);
1579 EXPECT_TRUE(memcmp(new_pk.data, pk.data, new_pk.len) == 0);
1580 EXPECT_TRUE(memcmp(new_sk.data, sk.data, new_sk.len) == 0);
1581
1582 OH_Crypto_FreeDataBlob(&sk);
1583 OH_Crypto_FreeDataBlob(&pk);
1584 OH_Crypto_FreeDataBlob(&new_sk);
1585 OH_Crypto_FreeDataBlob(&new_pk);
1586 OH_CryptoKeyPair_Destroy(keyPair);
1587 OH_CryptoKeyPair_Destroy(newKeyPair);
1588 OH_CryptoAsymKeyGeneratorWithSpec_Destroy(generator);
1589 OH_CryptoAsymKeySpec_Destroy(specCtx);
1590 }
1591
1592 /**
1593 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1800
1594 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1800
1595 * @tc.desc algorithm is Asym Key
1596 * @tc.size Medium
1597 * @tc.type Func
1598 * @tc.level Level0
1599 */
1600 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1800, TestSize.Level0)
1601 {
1602 Crypto_DataBlob password = {.data = (uint8_t *)"", .len = 0};
1603 Crypto_DataBlob cipher = {.data = (uint8_t *)"AES-128-CBC", .len = 11};
1604 Crypto_DataBlob out = { .data = nullptr, .len = 0 };
1605 OH_CryptoPrivKeyEncodingParams *params = nullptr;
1606
1607 OH_CryptoKeyPair *keyPair = OHTEST_GenerateKeyPair((const char *)"RSA512", (const char *)"RSA512");
1608 ASSERT_TRUE(keyPair != nullptr);
1609 OH_CryptoPrivKey *privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1610 ASSERT_TRUE(privKey != nullptr);
1611 EXPECT_EQ(OH_CryptoPrivKeyEncodingParams_Create(¶ms), CRYPTO_SUCCESS);
1612 ASSERT_TRUE(params != nullptr);
1613 EXPECT_EQ(OH_CryptoPrivKeyEncodingParams_SetParam(params, CRYPTO_PRIVATE_KEY_ENCODING_PASSWORD_STR, &password), CRYPTO_PARAMETER_CHECK_FAILED);
1614 EXPECT_EQ(OH_CryptoPrivKeyEncodingParams_SetParam(params, CRYPTO_PRIVATE_KEY_ENCODING_SYMMETRIC_CIPHER_STR, &cipher), CRYPTO_SUCCESS);
1615 ASSERT_EQ(OH_CryptoPrivKey_Encode(privKey, CRYPTO_PEM, (const char *)"PKCS8", params, &out), CRYPTO_OPERTION_ERROR);
1616
1617 OH_Crypto_FreeDataBlob(&out);
1618 OH_CryptoPrivKeyEncodingParams_Destroy(params);
1619 OH_CryptoKeyPair_Destroy(keyPair);
1620 }
1621
1622 /**
1623 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1900
1624 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1900
1625 * @tc.desc algorithm is Asym Key
1626 * @tc.size Medium
1627 * @tc.type Func
1628 * @tc.level Level0
1629 */
1630 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_1900, TestSize.Level0)
1631 {
1632 Crypto_DataBlob password = {.data = (uint8_t *)"0123456789", .len = 10};
1633 Crypto_DataBlob cipher = {.data = (uint8_t *)"SM4-128-CBC", .len = 11};
1634 Crypto_DataBlob out = { .data = nullptr, .len = 0 };
1635 OH_CryptoPrivKeyEncodingParams *params = nullptr;
1636
1637 OH_CryptoKeyPair *keyPair = OHTEST_GenerateKeyPair((const char *)"RSA512", (const char *)"RSA512");
1638 ASSERT_TRUE(keyPair != nullptr);
1639 OH_CryptoPrivKey *privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1640 ASSERT_TRUE(privKey != nullptr);
1641 EXPECT_EQ(OH_CryptoPrivKeyEncodingParams_Create(¶ms), CRYPTO_SUCCESS);
1642 ASSERT_TRUE(params != nullptr);
1643 EXPECT_EQ(OH_CryptoPrivKeyEncodingParams_SetParam(params, CRYPTO_PRIVATE_KEY_ENCODING_PASSWORD_STR, &password), CRYPTO_SUCCESS);
1644 EXPECT_EQ(OH_CryptoPrivKeyEncodingParams_SetParam(params, CRYPTO_PRIVATE_KEY_ENCODING_SYMMETRIC_CIPHER_STR, &cipher), CRYPTO_SUCCESS);
1645 ASSERT_EQ(OH_CryptoPrivKey_Encode(privKey, CRYPTO_PEM, (const char *)"PKCS8", params, &out), CRYPTO_NOT_SUPPORTED);
1646
1647 OH_Crypto_FreeDataBlob(&out);
1648 OH_CryptoPrivKeyEncodingParams_Destroy(params);
1649 OH_CryptoKeyPair_Destroy(keyPair);
1650 }
1651
1652 /**
1653 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2000
1654 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2000
1655 * @tc.desc algorithm is Asym Key
1656 * @tc.size Medium
1657 * @tc.type Func
1658 * @tc.level Level0
1659 */
1660 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2000, TestSize.Level0)
1661 {
1662 Crypto_DataBlob password = {.data = (uint8_t *)"0123456789", .len = 10};
1663 Crypto_DataBlob cipher = {.data = (uint8_t *)"AES-128-CBC", .len = 11};
1664 Crypto_DataBlob out = { .data = nullptr, .len = 0 };
1665 OH_CryptoPrivKeyEncodingParams *params = nullptr;
1666
1667 OH_CryptoKeyPair *keyPair = OHTEST_GenerateKeyPair((const char *)"RSA512", (const char *)"RSA512");
1668 ASSERT_TRUE(keyPair != nullptr);
1669 OH_CryptoPrivKey *privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1670 ASSERT_TRUE(privKey != nullptr);
1671 EXPECT_EQ(OH_CryptoPrivKeyEncodingParams_Create(¶ms), CRYPTO_SUCCESS);
1672 ASSERT_TRUE(params != nullptr);
1673 EXPECT_EQ(OH_CryptoPrivKeyEncodingParams_SetParam(params, CRYPTO_PRIVATE_KEY_ENCODING_PASSWORD_STR, &password), CRYPTO_SUCCESS);
1674 EXPECT_EQ(OH_CryptoPrivKeyEncodingParams_SetParam(params, CRYPTO_PRIVATE_KEY_ENCODING_SYMMETRIC_CIPHER_STR, &cipher), CRYPTO_SUCCESS);
1675 ASSERT_EQ(OH_CryptoPrivKey_Encode(privKey, CRYPTO_PEM, (const char *)"X509", params, &out), CRYPTO_PARAMETER_CHECK_FAILED);
1676
1677 OH_Crypto_FreeDataBlob(&out);
1678 OH_CryptoPrivKeyEncodingParams_Destroy(params);
1679 OH_CryptoKeyPair_Destroy(keyPair);
1680 }
1681
1682 /**
1683 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2100
1684 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2100
1685 * @tc.desc algorithm is Asym Key
1686 * @tc.size Medium
1687 * @tc.type Func
1688 * @tc.level Level0
1689 */
1690 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2100, TestSize.Level0)
1691 {
1692 OH_CryptoAsymKeySpec *specCtx = nullptr;
1693 OH_CryptoAsymKeyGeneratorWithSpec *generator = nullptr;
1694
1695 EXPECT_EQ(OH_CryptoAsymKeySpec_Create("ECC", CRYPTO_ASYM_KEY_PRIVATE_KEY_SPEC, &specCtx), CRYPTO_SUCCESS);
1696 EXPECT_TRUE(specCtx != nullptr);
1697 EXPECT_EQ(OH_CryptoAsymKeyGeneratorWithSpec_Create(specCtx, &generator), CRYPTO_PARAMETER_CHECK_FAILED);
1698 EXPECT_TRUE(generator == nullptr);
1699
1700 OH_CryptoAsymKeyGeneratorWithSpec_Destroy(generator);
1701 OH_CryptoAsymKeySpec_Destroy(specCtx);
1702 }
1703
1704 /**
1705 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2200
1706 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2200
1707 * @tc.desc algorithm is Asym Key
1708 * @tc.size Medium
1709 * @tc.type Func
1710 * @tc.level Level0
1711 */
1712 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2200, TestSize.Level0)
1713 {
1714 OH_CryptoAsymKeySpec *specCtx = nullptr;
1715 OH_CryptoAsymKeySpec *commonSpec = nullptr;
1716 OH_CryptoAsymKeyGeneratorWithSpec *generator = nullptr;
1717 OH_CryptoKeyPair *keyPair = nullptr;
1718 uint8_t sk_data[] = {
1719 0xc1, 0xef, 0x9c, 0xd1, 0xb0, 0xd7, 0xf3, 0xcc, 0x99, 0xf7, 0x6d, 0x93, 0x07, 0x26, 0x9e, 0xcc,
1720 0xa9, 0x39, 0x09, 0x4f, 0x8a, 0x59, 0xbb, 0x1d, 0xb8, 0x61, 0xf6, 0xc1, 0x2f, 0x95, 0x6b, 0x60,
1721 0x61, 0xf9, 0x62, 0xaa, 0x3e, 0x22, 0x94, 0xee, 0x3d, 0x0a, 0x19, 0x46, 0x39, 0x96, 0xdf, 0x94,
1722 0x24, 0x10, 0xdf, 0x0a, 0x1c, 0x40, 0x55, 0x10, 0x5a, 0x89, 0x6a, 0x43, 0xd5, 0xe4, 0x47, 0x3c,
1723 0xf1, 0x40, 0xf1, 0xb9, 0x68, 0xa8, 0x63, 0x38, 0xbc, 0x97, 0xfa, 0x82, 0xb4, 0xdf, 0xf1, 0x51,
1724 0x31, 0x82, 0xb2, 0x05, 0xe4, 0x3f, 0x8a, 0xdc, 0xc3, 0xf3, 0xfa, 0xa4, 0x88, 0xd3, 0xca, 0x9b,
1725 0x5c, 0x03, 0x3b, 0x0a, 0x7c, 0xd9, 0xff, 0xc2, 0x3b, 0x36, 0xff, 0xfe, 0x06, 0xc9, 0x3b, 0x26,
1726 0x1d, 0xfe, 0xe7, 0x23, 0xde, 0xda, 0xe5, 0xa6, 0x91, 0x91, 0x64, 0xe3, 0x44, 0x4f, 0x75, 0x60,
1727 0x4b, 0x76, 0x59, 0x2b, 0x9e, 0x09, 0x87, 0xd4, 0x5c, 0xd9, 0x7a, 0x9d, 0x35, 0x94, 0x03, 0x23,
1728 0xeb, 0xe9, 0xea, 0x32, 0x4e, 0x3b, 0x4c, 0xa3, 0xce, 0x36, 0xac, 0xd4, 0x5e, 0x1c, 0xdc, 0x29,
1729 0xc4, 0x51, 0x98, 0xfa, 0x1f, 0xd4, 0x72, 0x30, 0x10, 0xd3, 0x77, 0x48, 0x43, 0x94, 0xa1, 0x96,
1730 0xc0, 0x63, 0x14, 0xc5, 0x83, 0x45, 0x00, 0xb4, 0xe5, 0x05, 0xe8, 0x1a, 0x99, 0x13, 0x1d
1731 };
1732 uint8_t pk_data[] = {
1733 0x09, 0x0a, 0xf6, 0x16, 0x5e, 0x80, 0x54, 0x1e, 0x61, 0x83, 0xeb, 0xb4, 0x1e, 0xb9, 0x7d, 0x5a,
1734 0x65, 0xac, 0x7b, 0x57, 0x7d, 0x4d, 0xeb, 0x3f
1735 };
1736 Crypto_DataBlob sk = { .data = sk_data, .len = sizeof(sk_data)};
1737 Crypto_DataBlob pk = { .data = pk_data, .len = sizeof(pk_data)};
1738 Crypto_DataBlob new_sk = { .data = nullptr, .len = 0};
1739 Crypto_DataBlob new_pk = { .data = nullptr, .len = 0};
1740
1741 EXPECT_EQ(OH_CryptoAsymKeySpec_Create("DH", CRYPTO_ASYM_KEY_KEY_PAIR_SPEC, &specCtx), CRYPTO_SUCCESS);
1742 EXPECT_TRUE(specCtx != nullptr);
1743 EXPECT_EQ(OH_CryptoAsymKeySpec_GenDhCommonParamsSpec(1536, 200, &commonSpec), CRYPTO_SUCCESS);
1744 EXPECT_TRUE(commonSpec != nullptr);
1745 EXPECT_EQ(OH_CryptoAsymKeySpec_SetCommonParamsSpec(specCtx, commonSpec), CRYPTO_SUCCESS);
1746 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_DH_SK_DATABLOB, &sk), CRYPTO_SUCCESS);
1747 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_DH_PK_DATABLOB, &pk), CRYPTO_SUCCESS);
1748 EXPECT_EQ(OH_CryptoAsymKeyGeneratorWithSpec_Create(specCtx, &generator), CRYPTO_SUCCESS);
1749 EXPECT_TRUE(generator != nullptr);
1750 EXPECT_EQ(OH_CryptoAsymKeyGeneratorWithSpec_GenKeyPair(generator, &keyPair), CRYPTO_SUCCESS);
1751 EXPECT_TRUE(keyPair != nullptr);
1752 OH_CryptoPrivKey *privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1753 EXPECT_TRUE(privKey != nullptr);
1754 OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1755 EXPECT_TRUE(pubKey != nullptr);
1756 EXPECT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_DH_PK_DATABLOB, &new_pk), CRYPTO_SUCCESS);
1757 EXPECT_EQ(OH_CryptoPrivKey_GetParam(privKey, CRYPTO_DH_SK_DATABLOB, &new_sk), CRYPTO_SUCCESS);
1758 EXPECT_TRUE(memcmp(new_pk.data, pk.data, new_pk.len) == 0);
1759 EXPECT_TRUE(memcmp(new_sk.data, sk.data, new_sk.len) == 0);
1760 EXPECT_EQ(new_pk.len, pk.len);
1761 EXPECT_EQ(new_sk.len, sk.len);
1762
1763 OH_Crypto_FreeDataBlob(&new_sk);
1764 OH_Crypto_FreeDataBlob(&new_pk);
1765 OH_CryptoKeyPair_Destroy(keyPair);
1766 OH_CryptoAsymKeyGeneratorWithSpec_Destroy(generator);
1767 OH_CryptoAsymKeySpec_Destroy(specCtx);
1768 OH_CryptoAsymKeySpec_Destroy(commonSpec);
1769 }
1770
1771 /**
1772 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2300
1773 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2300
1774 * @tc.desc algorithm is Asym Key
1775 * @tc.size Medium
1776 * @tc.type Func
1777 * @tc.level Level0
1778 */
1779 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2300, TestSize.Level0)
1780 {
1781 OH_CryptoAsymKeySpec *specCtx = nullptr;
1782 uint8_t pk_data[] = {
1783 0x09, 0x0a, 0xf6, 0x16, 0x5e, 0x80, 0x54, 0x1e, 0x61, 0x83, 0xeb, 0xb4, 0x1e, 0xb9, 0x7d, 0x5a,
1784 0x65, 0xac, 0x7b, 0x57, 0x7d, 0x4d, 0xeb, 0x3f, 0x61, 0x83, 0xeb, 0xb4, 0x1e, 0xb9, 0x7d, 0x5a
1785 };
1786 uint8_t sk_data[] = {
1787 0x09, 0x0a, 0xf6, 0x16, 0x5e, 0x80, 0x54, 0x1e, 0x61, 0x83, 0xeb, 0xb4, 0x1e, 0xb9, 0x7d, 0x5a,
1788 0x65, 0xac, 0x7b, 0x57, 0x7d, 0x4d, 0xeb, 0x3f, 0x61, 0x83, 0xeb, 0xb4, 0x1e, 0xb9, 0x7d, 0x5a
1789 };
1790 Crypto_DataBlob pk = { .data = pk_data, .len = sizeof(pk_data)};
1791 Crypto_DataBlob sk = { .data = sk_data, .len = sizeof(sk_data)};
1792
1793 EXPECT_EQ(OH_CryptoAsymKeySpec_Create("ECC", CRYPTO_ASYM_KEY_PRIVATE_KEY_SPEC, &specCtx), CRYPTO_SUCCESS);
1794 EXPECT_TRUE(specCtx != nullptr);
1795 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_ED25519_PK_DATABLOB, &pk), CRYPTO_PARAMETER_CHECK_FAILED);
1796 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_X25519_SK_DATABLOB, &sk), CRYPTO_PARAMETER_CHECK_FAILED);
1797
1798 OH_CryptoAsymKeySpec_Destroy(specCtx);
1799 }
1800
1801 /**
1802 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2400
1803 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2400
1804 * @tc.desc algorithm is Asym Key
1805 * @tc.size Medium
1806 * @tc.type Func
1807 * @tc.level Level0
1808 */
1809 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2400, TestSize.Level0)
1810 {
1811 OH_CryptoAsymKeySpec *specCtx1 = nullptr;
1812 OH_CryptoAsymKeySpec *specCtx2 = nullptr;
1813 uint8_t pk_x_data[] = {
1814 0x09, 0x0a, 0xf6, 0x16, 0x5e, 0x80, 0x54, 0x1e, 0x61, 0x83, 0xeb, 0xb4, 0x1e, 0xb9, 0x7d, 0x5a,
1815 0x65, 0xac, 0x7b, 0x57, 0x7d, 0x4d, 0xeb, 0x3f, 0x61, 0x83, 0xeb, 0xb4, 0x1e, 0xb9, 0x7d, 0x5a
1816 };
1817 uint8_t sk_data[] = {
1818 0x09, 0x0a, 0xf6, 0x16, 0x5e, 0x80, 0x54, 0x1e, 0x61, 0x83, 0xeb, 0xb4, 0x1e, 0xb9, 0x7d, 0x5a,
1819 0x65, 0xac, 0x7b, 0x57, 0x7d, 0x4d, 0xeb, 0x3f, 0x61, 0x83, 0xeb, 0xb4, 0x1e, 0xb9, 0x7d, 0x5a
1820 };
1821 Crypto_DataBlob pk_x = { .data = pk_x_data, .len = sizeof(pk_x_data)};
1822 Crypto_DataBlob sk = { .data = sk_data, .len = sizeof(sk_data)};
1823 EXPECT_EQ(OH_CryptoAsymKeySpec_Create("ECC", CRYPTO_ASYM_KEY_PUBLIC_KEY_SPEC, &specCtx1), CRYPTO_SUCCESS);
1824 EXPECT_EQ(OH_CryptoAsymKeySpec_Create("ECC", CRYPTO_ASYM_KEY_PRIVATE_KEY_SPEC, &specCtx2), CRYPTO_SUCCESS);
1825 EXPECT_TRUE(specCtx1 != nullptr && specCtx2 != nullptr);
1826 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx1, CRYPTO_ECC_SK_DATABLOB, &sk), CRYPTO_PARAMETER_CHECK_FAILED);
1827 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx2, CRYPTO_ECC_PK_X_DATABLOB, &pk_x), CRYPTO_PARAMETER_CHECK_FAILED);
1828
1829 OH_CryptoAsymKeySpec_Destroy(specCtx1);
1830 OH_CryptoAsymKeySpec_Destroy(specCtx2);
1831 }
1832
1833 /**
1834 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2500
1835 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2500
1836 * @tc.desc algorithm is Asym Key
1837 * @tc.size Medium
1838 * @tc.type Func
1839 * @tc.level Level0
1840 */
1841 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2500, TestSize.Level0)
1842 {
1843 OH_CryptoAsymKeySpec *specCtx = nullptr;
1844 OH_CryptoAsymKeySpec *commonSpec = nullptr;
1845 OH_CryptoAsymKeyGeneratorWithSpec *generator = nullptr;
1846 OH_CryptoKeyPair *keyPair = nullptr;
1847 uint8_t pk_data[] = {
1848 0x09, 0x0a, 0xf6, 0x16, 0x5e, 0x80, 0x54, 0x1e, 0x61, 0x83, 0xeb, 0xb4, 0x1e, 0xb9, 0x7d, 0x5a,
1849 0x65, 0xac, 0x7b, 0x57, 0x7d, 0x4d, 0xeb, 0x3f, 0x45
1850 };
1851 Crypto_DataBlob pk = { .data = pk_data, .len = sizeof(pk_data)};
1852
1853 EXPECT_EQ(OH_CryptoAsymKeySpec_Create("DH", CRYPTO_ASYM_KEY_PUBLIC_KEY_SPEC, &specCtx), CRYPTO_SUCCESS);
1854 EXPECT_TRUE(specCtx != nullptr);
1855 EXPECT_EQ(OH_CryptoAsymKeySpec_GenDhCommonParamsSpec(1536, 200, &commonSpec), CRYPTO_SUCCESS);
1856 EXPECT_TRUE(commonSpec != nullptr);
1857 EXPECT_EQ(OH_CryptoAsymKeySpec_SetCommonParamsSpec(specCtx, commonSpec), CRYPTO_SUCCESS);
1858 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_DH_PK_DATABLOB, &pk), CRYPTO_SUCCESS);
1859 EXPECT_EQ(OH_CryptoAsymKeyGeneratorWithSpec_Create(specCtx, &generator), CRYPTO_SUCCESS);
1860 EXPECT_TRUE(generator != nullptr);
1861 EXPECT_EQ(OH_CryptoAsymKeyGeneratorWithSpec_GenKeyPair(generator, &keyPair), CRYPTO_SUCCESS);
1862 EXPECT_TRUE(keyPair != nullptr);
1863 OH_CryptoPrivKey *privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1864 EXPECT_TRUE(privKey == nullptr);
1865
1866 OH_CryptoKeyPair_Destroy(keyPair);
1867 OH_CryptoAsymKeyGeneratorWithSpec_Destroy(generator);
1868 OH_CryptoAsymKeySpec_Destroy(specCtx);
1869 OH_CryptoAsymKeySpec_Destroy(commonSpec);
1870 }
1871
1872 /**
1873 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2600
1874 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2600
1875 * @tc.desc algorithm is Asym Key
1876 * @tc.size Medium
1877 * @tc.type Func
1878 * @tc.level Level0
1879 */
1880 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2600, TestSize.Level0)
1881 {
1882 OH_CryptoAsymKeySpec *specCtx = nullptr;
1883 OH_CryptoAsymKeySpec *commonSpec = nullptr;
1884 OH_CryptoAsymKeyGeneratorWithSpec *generator = nullptr;
1885 OH_CryptoKeyPair *keyPair = nullptr;
1886 uint8_t sk_data[] = {
1887 0xc1, 0xef, 0x9c, 0xd1, 0xb0, 0xd7, 0xf3, 0xcc, 0x99, 0xf7, 0x6d, 0x93, 0x07, 0x26, 0x9e, 0xcc,
1888 0xa9, 0x39, 0x09, 0x4f, 0x8a, 0x59, 0xbb, 0x1d, 0xb8, 0x61, 0xf6, 0xc1, 0x2f, 0x95, 0x6b, 0x60,
1889 0x61, 0xf9, 0x62, 0xaa, 0x3e, 0x22, 0x94, 0xee, 0x3d, 0x0a, 0x19, 0x46, 0x39, 0x96, 0xdf, 0x94,
1890 0x24, 0x10, 0xdf, 0x0a, 0x1c, 0x40, 0x55, 0x10, 0x5a, 0x89, 0x6a, 0x43, 0xd5, 0xe4, 0x47, 0x3c,
1891 0xf1, 0x40, 0xf1, 0xb9, 0x68, 0xa8, 0x63, 0x38, 0xbc, 0x97, 0xfa, 0x82, 0xb4, 0xdf, 0xf1, 0x51,
1892 0x31, 0x82, 0xb2, 0x05, 0xe4, 0x3f, 0x8a, 0xdc, 0xc3, 0xf3, 0xfa, 0xa4, 0x88, 0xd3, 0xca, 0x9b,
1893 0x5c, 0x03, 0x3b, 0x0a, 0x7c, 0xd9, 0xff, 0xc2, 0x3b, 0x36, 0xff, 0xfe, 0x06, 0xc9, 0x3b, 0x26,
1894 0x1d, 0xfe, 0xe7, 0x23, 0xde, 0xda, 0xe5, 0xa6, 0x91, 0x91, 0x64, 0xe3, 0x44, 0x4f, 0x75, 0x60,
1895 0x4b, 0x76, 0x59, 0x2b, 0x9e, 0x09, 0x87, 0xd4, 0x5c, 0xd9, 0x7a, 0x9d, 0x35, 0x94, 0x03, 0x23,
1896 0xeb, 0xe9, 0xea, 0x32, 0x4e, 0x3b, 0x4c, 0xa3, 0xce, 0x36, 0xac, 0xd4, 0x5e, 0x1c, 0xdc, 0x29,
1897 0xc4, 0x51, 0x98, 0xfa, 0x1f, 0xd4, 0x72, 0x30, 0x10, 0xd3, 0x77, 0x48, 0x43, 0x94, 0xa1, 0x96,
1898 0xc0, 0x63, 0x14, 0xc5, 0x83, 0x45, 0x00, 0xb4, 0xe5, 0x05, 0xe8, 0x1a, 0x99, 0x13, 0x1d, 0xd9
1899 };
1900 Crypto_DataBlob sk = { .data = sk_data, .len = sizeof(sk_data)};
1901
1902 EXPECT_EQ(OH_CryptoAsymKeySpec_Create("DH", CRYPTO_ASYM_KEY_PRIVATE_KEY_SPEC, &specCtx), CRYPTO_SUCCESS);
1903 EXPECT_TRUE(specCtx != nullptr);
1904 EXPECT_EQ(OH_CryptoAsymKeySpec_GenDhCommonParamsSpec(1536, 200, &commonSpec), CRYPTO_SUCCESS);
1905 EXPECT_TRUE(commonSpec != nullptr);
1906 EXPECT_EQ(OH_CryptoAsymKeySpec_SetCommonParamsSpec(specCtx, commonSpec), CRYPTO_SUCCESS);
1907 EXPECT_EQ(OH_CryptoAsymKeySpec_SetParam(specCtx, CRYPTO_DH_SK_DATABLOB, &sk), CRYPTO_SUCCESS);
1908 EXPECT_EQ(OH_CryptoAsymKeyGeneratorWithSpec_Create(specCtx, &generator), CRYPTO_SUCCESS);
1909 EXPECT_TRUE(generator != nullptr);
1910 EXPECT_EQ(OH_CryptoAsymKeyGeneratorWithSpec_GenKeyPair(generator, &keyPair), CRYPTO_SUCCESS);
1911 EXPECT_TRUE(keyPair != nullptr);
1912 OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1913 EXPECT_TRUE(pubKey == nullptr);
1914
1915 OH_CryptoKeyPair_Destroy(keyPair);
1916 OH_CryptoAsymKeyGeneratorWithSpec_Destroy(generator);
1917 OH_CryptoAsymKeySpec_Destroy(specCtx);
1918 OH_CryptoAsymKeySpec_Destroy(commonSpec);
1919 }
1920
1921 ECPointSpec g_ecPointSpec[] = {
1922 {"ECC224", "NID_secp224r1", "UNCOMPRESSED"},
1923 {"ECC256", "NID_X9_62_prime256v1", "UNCOMPRESSED"},
1924 {"ECC384", "NID_secp384r1", "UNCOMPRESSED"},
1925 {"ECC521", "NID_secp521r1", "UNCOMPRESSED"},
1926 {"ECC_BrainPoolP160r1", "NID_brainpoolP160r1", "UNCOMPRESSED"},
1927 {"ECC_BrainPoolP160t1", "NID_brainpoolP160t1", "UNCOMPRESSED"},
1928 {"ECC_BrainPoolP192r1", "NID_brainpoolP192r1", "UNCOMPRESSED"},
1929 {"ECC_BrainPoolP192t1", "NID_brainpoolP192t1", "UNCOMPRESSED"},
1930 {"ECC_BrainPoolP224r1", "NID_brainpoolP224r1", "UNCOMPRESSED"},
1931 {"ECC_BrainPoolP224t1", "NID_brainpoolP224t1", "UNCOMPRESSED"},
1932 {"ECC_BrainPoolP256r1", "NID_brainpoolP256r1", "UNCOMPRESSED"},
1933 {"ECC_BrainPoolP256t1", "NID_brainpoolP256t1", "UNCOMPRESSED"},
1934 {"ECC_BrainPoolP320r1", "NID_brainpoolP320r1", "UNCOMPRESSED"},
1935 {"ECC_BrainPoolP320t1", "NID_brainpoolP320t1", "UNCOMPRESSED"},
1936 {"ECC_BrainPoolP384r1", "NID_brainpoolP384r1", "UNCOMPRESSED"},
1937 {"ECC_BrainPoolP384t1", "NID_brainpoolP384t1", "UNCOMPRESSED"},
1938 {"ECC_BrainPoolP512r1", "NID_brainpoolP512r1", "UNCOMPRESSED"},
1939 {"ECC_BrainPoolP512t1", "NID_brainpoolP512t1", "UNCOMPRESSED"},
1940 {"ECC_Secp256k1", "NID_secp256k1", "UNCOMPRESSED"},
1941 {"SM2_256", "NID_sm2", "UNCOMPRESSED"},
1942 {"SM2_256", "NID_sm2", "COMPRESSED"},
1943 {"ECC224", "NID_secp224r1", "COMPRESSED"},
1944 {"ECC256", "NID_X9_62_prime256v1", "COMPRESSED"},
1945 {"ECC384", "NID_secp384r1", "COMPRESSED"},
1946 {"ECC521", "NID_secp521r1", "COMPRESSED"},
1947 {"ECC_BrainPoolP160r1", "NID_brainpoolP160r1", "COMPRESSED"},
1948 {"ECC_BrainPoolP160t1", "NID_brainpoolP160t1", "COMPRESSED"},
1949 {"ECC_BrainPoolP192r1", "NID_brainpoolP192r1", "COMPRESSED"},
1950 {"ECC_BrainPoolP192t1", "NID_brainpoolP192t1", "COMPRESSED"},
1951 {"ECC_BrainPoolP224r1", "NID_brainpoolP224r1", "COMPRESSED"},
1952 {"ECC_BrainPoolP224t1", "NID_brainpoolP224t1", "COMPRESSED"},
1953 {"ECC_BrainPoolP256r1", "NID_brainpoolP256r1", "COMPRESSED"},
1954 {"ECC_BrainPoolP256t1", "NID_brainpoolP256t1", "COMPRESSED"},
1955 {"ECC_BrainPoolP320r1", "NID_brainpoolP320r1", "COMPRESSED"},
1956 {"ECC_BrainPoolP320t1", "NID_brainpoolP320t1", "COMPRESSED"},
1957 {"ECC_BrainPoolP384r1", "NID_brainpoolP384r1", "COMPRESSED"},
1958 {"ECC_BrainPoolP384t1", "NID_brainpoolP384t1", "COMPRESSED"},
1959 {"ECC_BrainPoolP512r1", "NID_brainpoolP512r1", "COMPRESSED"},
1960 {"ECC_BrainPoolP512t1", "NID_brainpoolP512t1", "COMPRESSED"},
1961 {"ECC_Secp256k1", "NID_secp256k1", "COMPRESSED"},
1962 };
1963
1964 INSTANTIATE_TEST_CASE_P(OHCryptoFrameworkAsymKeyNapiTest, ASYMKEY_EC_POINT_TEST, ::testing::ValuesIn(g_ecPointSpec));
1965
1966 /**
1967 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2700
1968 * @tc.name OHCryptoFrameworkAsymKeyNapiTest/ASYMKEY_EC_POINT_TEST.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2700/x
1969 * @tc.desc algorithm is Asym Key
1970 * @tc.size Medium
1971 * @tc.type Func
1972 * @tc.level Level0
1973 */
1974 HWTEST_P(ASYMKEY_EC_POINT_TEST, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2700, TestSize.Level0)
1975 {
1976 ECPointSpec asymInfo = GetParam();
1977 OH_CryptoAsymKeyGenerator *ctx = nullptr;
1978 OH_CryptoKeyPair *keyPair = nullptr;
1979 OH_CryptoEcPoint *point = nullptr;
1980 Crypto_DataBlob ecKeyData = { .data = nullptr, .len = 0};
1981 Crypto_DataBlob pk_x = { .data = nullptr, .len = 0};
1982 Crypto_DataBlob pk_y = { .data = nullptr, .len = 0};
1983 Crypto_DataBlob new_pk_x = { .data = nullptr, .len = 0};
1984 Crypto_DataBlob new_pk_y = { .data = nullptr, .len = 0};
1985
1986 EXPECT_EQ(OH_CryptoAsymKeyGenerator_Create(asymInfo.curve, &ctx), CRYPTO_SUCCESS);
1987 EXPECT_EQ(OH_CryptoAsymKeyGenerator_Generate(ctx, &keyPair), CRYPTO_SUCCESS);
1988 EXPECT_TRUE(keyPair != nullptr);
1989 OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1990 EXPECT_TRUE(pubKey != nullptr);
1991 EXPECT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ECC_PK_X_DATABLOB, &pk_x), CRYPTO_SUCCESS);
1992 EXPECT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_ECC_PK_Y_DATABLOB, &pk_y), CRYPTO_SUCCESS);
1993 EXPECT_EQ(OH_CryptoEcPoint_Create(asymInfo.curveNid, nullptr, &point), CRYPTO_SUCCESS);
1994 EXPECT_TRUE(point != nullptr);
1995 EXPECT_EQ(OH_CryptoEcPoint_SetCoordinate(point, &pk_x, &pk_y), CRYPTO_SUCCESS);
1996 EXPECT_EQ(OH_CryptoEcPoint_Encode(point, asymInfo.format, &ecKeyData), CRYPTO_SUCCESS);
1997 OH_CryptoEcPoint_Destroy(point);
1998 point = nullptr;
1999 EXPECT_EQ(OH_CryptoEcPoint_Create(asymInfo.curveNid, &ecKeyData, &point), CRYPTO_SUCCESS);
2000 EXPECT_TRUE(point != nullptr);
2001 EXPECT_EQ(OH_CryptoEcPoint_GetCoordinate(point, &new_pk_x, &new_pk_y), CRYPTO_SUCCESS);
2002 EXPECT_TRUE(memcmp(new_pk_y.data, pk_y.data, new_pk_y.len) == 0);
2003 EXPECT_TRUE(memcmp(new_pk_x.data, new_pk_x.data, new_pk_x.len) == 0);
2004 EXPECT_EQ(new_pk_x.len, pk_x.len);
2005 EXPECT_EQ(pk_y.len, new_pk_y.len);
2006
2007 OH_CryptoAsymKeyGenerator_Destroy(ctx);
2008 OH_CryptoKeyPair_Destroy(keyPair);
2009 OH_CryptoEcPoint_Destroy(point);
2010 OH_Crypto_FreeDataBlob(&new_pk_x);
2011 OH_Crypto_FreeDataBlob(&new_pk_y);
2012 OH_Crypto_FreeDataBlob(&pk_x);
2013 OH_Crypto_FreeDataBlob(&pk_y);
2014 OH_Crypto_FreeDataBlob(&ecKeyData);
2015 }
2016
2017 /**
2018 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2800
2019 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2800
2020 * @tc.desc algorithm is Asym Key
2021 * @tc.size Medium
2022 * @tc.type Func
2023 * @tc.level Level0
2024 */
2025 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2800, TestSize.Level0)
2026 {
2027 const char *curveNid = "NID_X9_62_prime256v1";
2028 OH_CryptoEcPoint *point = nullptr;
2029 Crypto_DataBlob ecKeyData = { .data = nullptr, .len = 0};
2030 uint8_t x[] = {
2031 0x59, 0xfb, 0xf8, 0xce, 0xe6, 0xd1, 0xf3, 0xd6, 0xe0, 0x20, 0x9e, 0x88, 0xa9, 0x59, 0x22, 0xa4,
2032 0xd4, 0x23, 0xe2, 0x93, 0xfd, 0xd3, 0xcd, 0x11, 0xf1, 0x11, 0xa1, 0x9e, 0x9c, 0x81, 0x78, 0x27
2033 };
2034 uint8_t y[] = {
2035 0x03, 0xb0, 0x17, 0x54, 0x62, 0xb9, 0x38, 0x88, 0xc4, 0xca, 0x7e, 0x55, 0x50, 0xa7, 0x6d, 0xe6,
2036 0x0c, 0xc2, 0xd7, 0xd5, 0x07, 0x57, 0xa4, 0x4b, 0x22, 0x8e, 0xc5, 0x54, 0xbd, 0x24, 0xc4, 0x8a
2037 };
2038 Crypto_DataBlob pk_x = { .data = x, .len = sizeof(x)};
2039 Crypto_DataBlob pk_y = { .data = y, .len = sizeof(y)};
2040
2041 EXPECT_EQ(OH_CryptoEcPoint_Create(curveNid, nullptr, &point), CRYPTO_SUCCESS);
2042 EXPECT_TRUE(point != nullptr);
2043 EXPECT_EQ(OH_CryptoEcPoint_SetCoordinate(point, &pk_x, &pk_y), CRYPTO_SUCCESS);
2044 EXPECT_EQ(OH_CryptoEcPoint_Encode(point, "UNCOMPRESSED", &ecKeyData), CRYPTO_OPERTION_ERROR);
2045 EXPECT_EQ(OH_CryptoEcPoint_Encode(point, "COMPRESSED", &ecKeyData), CRYPTO_OPERTION_ERROR);
2046
2047 OH_CryptoEcPoint_Destroy(point);
2048 OH_Crypto_FreeDataBlob(&ecKeyData);
2049 }
2050
2051 /**
2052 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2900
2053 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2900
2054 * @tc.desc algorithm is Asym Key
2055 * @tc.size Medium
2056 * @tc.type Func
2057 * @tc.level Level0
2058 */
2059 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_2900, TestSize.Level0)
2060 {
2061 const char *curveNid = "NID_X9_62_prime256v1";
2062 OH_CryptoEcPoint *point = nullptr;
2063 Crypto_DataBlob ecKeyData = { .data = nullptr, .len = 0};
2064 uint8_t x[] = {
2065 0x59, 0xfb, 0xf8, 0xce, 0xe6, 0xd1, 0xf3, 0xd6, 0xe0, 0x20, 0x9e, 0x88, 0xa9, 0x59, 0x22, 0xa4,
2066 0xd4, 0x23, 0xe2, 0x93, 0xfd, 0xd3, 0xcd, 0x11, 0xf1, 0x11, 0xa1, 0x9e, 0x9c, 0x81, 0x78, 0x27
2067 };
2068 uint8_t y[] = {
2069 0x94, 0x73, 0x65, 0x53, 0x8b, 0xeb, 0x1f, 0x06, 0x80, 0x17, 0xc1, 0x08, 0xf6, 0x94, 0x7c, 0xf2,
2070 0x5a, 0x3e, 0x5e, 0x08, 0x2e, 0x6e, 0x42, 0xb2, 0x15, 0x18, 0x8d, 0x1f, 0x69, 0xac, 0xdf, 0x12
2071 };
2072 Crypto_DataBlob pk_x = { .data = x, .len = sizeof(x)};
2073 Crypto_DataBlob pk_y = { .data = y, .len = sizeof(y)};
2074
2075 EXPECT_EQ(OH_CryptoEcPoint_Create(curveNid, nullptr, &point), CRYPTO_SUCCESS);
2076 EXPECT_TRUE(point != nullptr);
2077 EXPECT_EQ(OH_CryptoEcPoint_SetCoordinate(point, &pk_x, &pk_y), CRYPTO_SUCCESS);
2078 EXPECT_EQ(OH_CryptoEcPoint_Encode(point, "UNCOMPRESSED", &ecKeyData), CRYPTO_OPERTION_ERROR);
2079 EXPECT_EQ(OH_CryptoEcPoint_Encode(point, "COMPRESSED", &ecKeyData), CRYPTO_OPERTION_ERROR);
2080
2081 OH_CryptoEcPoint_Destroy(point);
2082 OH_Crypto_FreeDataBlob(&ecKeyData);
2083 }
2084
2085 /**
2086 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3000
2087 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3000
2088 * @tc.desc algorithm is Asym Key
2089 * @tc.size Medium
2090 * @tc.type Func
2091 * @tc.level Level0
2092 */
2093 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3000, TestSize.Level0)
2094 {
2095 const char *curveNid = "NID_sm2";
2096 OH_CryptoEcPoint *point = nullptr;
2097 uint8_t ec[] = {
2098 0x03, 0x64, 0xaf, 0x65, 0x68, 0x6c, 0x49, 0xd6, 0xe3, 0x3d, 0x4e, 0x15, 0x74, 0xda, 0xc1, 0xbf,
2099 0xeb, 0x60, 0xc5, 0x03, 0x51, 0xd8, 0xd9, 0x96, 0xbf, 0xdc, 0x7d, 0xb2, 0xe8, 0x15, 0x65, 0xcc,
2100 0x05
2101 };
2102 Crypto_DataBlob ecKeyData = { .data = ec, .len = sizeof(ec)};
2103 Crypto_DataBlob new_ecKeyData = { .data = nullptr, .len = 0};
2104
2105 EXPECT_EQ(OH_CryptoEcPoint_Create(curveNid, &ecKeyData, &point), CRYPTO_SUCCESS);
2106 EXPECT_TRUE(point != nullptr);
2107 EXPECT_EQ(OH_CryptoEcPoint_Encode(point, "COMPRESSED", &new_ecKeyData), CRYPTO_SUCCESS);
2108 EXPECT_TRUE(memcmp(new_ecKeyData.data, ecKeyData.data, new_ecKeyData.len) == 0);
2109 EXPECT_EQ(new_ecKeyData.len, ecKeyData.len);
2110
2111 OH_CryptoEcPoint_Destroy(point);
2112 OH_Crypto_FreeDataBlob(&new_ecKeyData);
2113 }
2114
2115 /**
2116 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3100
2117 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3100
2118 * @tc.desc algorithm is Asym Key
2119 * @tc.size Medium
2120 * @tc.type Func
2121 * @tc.level Level0
2122 */
2123 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3100, TestSize.Level0)
2124 {
2125 const char *curveNid = "NID_X9_62_prime256v1";
2126 OH_CryptoEcPoint *point = nullptr;
2127 uint8_t ec[] = {
2128 0x02, 0x42, 0x7f, 0x7a, 0xa1, 0x7e, 0x79, 0x89, 0x77, 0x98, 0x77, 0x2f, 0xcc, 0xcb, 0x43, 0x65,
2129 0x8f, 0x77, 0xe8, 0xef, 0x26, 0xad, 0x76, 0x25, 0x0d, 0x12, 0x5e, 0xcf, 0x26, 0xf1, 0xfd, 0x0b,
2130 0x6f
2131 };
2132 Crypto_DataBlob ecKeyData = { .data = ec, .len = sizeof(ec)};
2133 Crypto_DataBlob new_ecKeyData = { .data = nullptr, .len = 0};
2134
2135 EXPECT_EQ(OH_CryptoEcPoint_Create(curveNid, &ecKeyData, &point), CRYPTO_SUCCESS);
2136 EXPECT_TRUE(point != nullptr);
2137 EXPECT_EQ(OH_CryptoEcPoint_Encode(point, "COMPRESSED", &new_ecKeyData), CRYPTO_SUCCESS);
2138 EXPECT_TRUE(memcmp(new_ecKeyData.data, ecKeyData.data, new_ecKeyData.len) == 0);
2139 EXPECT_EQ(new_ecKeyData.len, ecKeyData.len);
2140
2141 OH_CryptoEcPoint_Destroy(point);
2142 OH_Crypto_FreeDataBlob(&new_ecKeyData);
2143 }
2144
2145 /**
2146 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3200
2147 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3200
2148 * @tc.desc algorithm is Asym Key
2149 * @tc.size Medium
2150 * @tc.type Func
2151 * @tc.level Level0
2152 */
2153 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3200, TestSize.Level0)
2154 {
2155 const char *curveNid = "NID_X9_62_prime256v1";
2156 OH_CryptoEcPoint *point = nullptr;
2157 uint8_t ec[] = {
2158 0x06, 0xb4, 0x2d, 0x9f, 0xa7, 0x68, 0x6f, 0xed, 0x95, 0x1b, 0xf0, 0x02, 0x72, 0x89, 0x96, 0x95,
2159 0x1b, 0x39, 0x4c, 0x6e, 0xc6, 0x63, 0x86, 0xb7, 0x78, 0x49, 0xac, 0xc5, 0x30, 0x24, 0xb8, 0x4f,
2160 0x5a, 0xd7, 0xf3, 0x0e, 0x51, 0xe7, 0x6a, 0x9d, 0x12, 0x7a, 0x96, 0x00, 0x0a, 0xd1, 0xcb, 0xf3,
2161 0xd7, 0xf7, 0x69, 0xfd, 0x58, 0xd9, 0xac, 0x7d, 0xab, 0xac, 0xde, 0xf9, 0xbe, 0xb1, 0xc6, 0x5b,
2162 0xe7
2163 };
2164 Crypto_DataBlob ecKeyData = { .data = ec, .len = sizeof(ec)};
2165
2166 EXPECT_EQ(OH_CryptoEcPoint_Create(curveNid, &ecKeyData, &point), CRYPTO_OPERTION_ERROR);
2167 EXPECT_TRUE(point == nullptr);
2168
2169 OH_CryptoEcPoint_Destroy(point);
2170 }
2171
2172 /**
2173 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3300
2174 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3300
2175 * @tc.desc algorithm is Asym Key
2176 * @tc.size Medium
2177 * @tc.type Func
2178 * @tc.level Level0
2179 */
2180 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3300, TestSize.Level0)
2181 {
2182 const char *curveNid = "NID_X9_62_prime256v1";
2183 OH_CryptoEcPoint *point = nullptr;
2184 uint8_t ec_ge[] = {
2185 0x03, 0x42, 0x7f, 0x6a, 0xa1, 0x6e, 0x39, 0x89, 0xb7, 0x78, 0x77, 0x2f, 0xcc, 0xcb, 0x43, 0x65,
2186 0x8f, 0x77, 0xe8, 0xef, 0x26, 0xad, 0x76, 0x25, 0x0d, 0x12, 0x5e, 0xcf, 0x26, 0xf1, 0xfd, 0x0b,
2187 };
2188 uint8_t ec_le[] = {
2189 0x03, 0x42, 0x7f, 0x6a, 0xa1, 0x6e, 0x39, 0x89, 0xb7, 0x78, 0x77, 0x2f, 0xcc, 0xcb, 0x43, 0x65,
2190 0x8f, 0x77, 0xe8, 0xef, 0x26, 0xad, 0x76, 0x25, 0x0d, 0x12, 0x5e, 0xcf, 0x26, 0xf1, 0xfd, 0x0b,
2191 0x6f, 0x6f
2192 };
2193 uint8_t infinity_point[] = {
2194 0x00
2195 };
2196 Crypto_DataBlob ecKeyDataGe = { .data = ec_ge, .len = sizeof(ec_ge)};
2197 Crypto_DataBlob ecKeyDataLe = { .data = ec_le, .len = sizeof(ec_le)};
2198 Crypto_DataBlob ecKeyData = { .data = infinity_point, .len = sizeof(infinity_point)};
2199
2200 EXPECT_EQ(OH_CryptoEcPoint_Create(curveNid, &ecKeyDataGe, &point), CRYPTO_OPERTION_ERROR);
2201 EXPECT_TRUE(point == nullptr);
2202 EXPECT_EQ(OH_CryptoEcPoint_Create(curveNid, &ecKeyDataLe, &point), CRYPTO_OPERTION_ERROR);
2203 EXPECT_TRUE(point == nullptr);
2204 EXPECT_EQ(OH_CryptoEcPoint_Create(curveNid, &ecKeyData, &point), CRYPTO_OPERTION_ERROR);
2205 EXPECT_TRUE(point == nullptr);
2206
2207 OH_CryptoEcPoint_Destroy(point);
2208 }
2209
2210 /**
2211 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3400
2212 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3400
2213 * @tc.desc algorithm is Asym Key
2214 * @tc.size Medium
2215 * @tc.type Func
2216 * @tc.level Level0
2217 */
2218 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3400, TestSize.Level0)
2219 {
2220 const char *curveNid = "NID_X9_62_prime256v1";
2221 OH_CryptoEcPoint *point = nullptr;
2222 Crypto_DataBlob ecKeyData = { .data = nullptr, .len = 0};
2223 uint8_t x_le[] = {
2224 0xce, 0x9f, 0xee, 0x1b, 0xca, 0x74, 0x09, 0x8c, 0xef, 0x35, 0x01, 0x57, 0x0c, 0xb5, 0x16, 0x3a,
2225 0x73, 0x95, 0xb5, 0x94, 0x41, 0xc7, 0xc5, 0x81, 0xd4, 0x56, 0x8f, 0xa7, 0x29, 0xfe, 0x21, 0xc1,
2226 0xc1
2227 };
2228 uint8_t y_le[] = {
2229 0x94, 0x73, 0x65, 0x53, 0x8b, 0xeb, 0x1f, 0x06, 0x80, 0x17, 0xc1, 0x08, 0xf6, 0x94, 0x7c, 0xf2,
2230 0x5a, 0x3e, 0x5e, 0x08, 0x2e, 0x6e, 0x42, 0xb2, 0x15, 0x18, 0x8d, 0x1f, 0x69, 0xac, 0xdf, 0x12,
2231 0x12
2232 };
2233 uint8_t x_ge[] = {
2234 0xce, 0x9f, 0xee, 0x1b, 0xca, 0x74, 0x09, 0x8c, 0xef, 0x35, 0x01, 0x57, 0x0c, 0xb5, 0x16, 0x3a,
2235 0x73, 0x95, 0xb5, 0x94, 0x41, 0xc7, 0xc5, 0x81, 0xd4, 0x56, 0x8f, 0xa7, 0x29, 0xfe, 0x21,
2236 };
2237 uint8_t y_ge[] = {
2238 0x94, 0x73, 0x65, 0x53, 0x8b, 0xeb, 0x1f, 0x06, 0x80, 0x17, 0xc1, 0x08, 0xf6, 0x94, 0x7c, 0xf2,
2239 0x5a, 0x3e, 0x5e, 0x08, 0x2e, 0x6e, 0x42, 0xb2, 0x15, 0x18, 0x8d, 0x1f, 0x69, 0xac, 0xdf,
2240 };
2241 Crypto_DataBlob pk_x_le = { .data = x_le, .len = sizeof(x_le)};
2242 Crypto_DataBlob pk_y_le = { .data = y_le, .len = sizeof(y_le)};
2243 Crypto_DataBlob pk_x_ge = { .data = x_ge, .len = sizeof(x_ge)};
2244 Crypto_DataBlob pk_y_ge = { .data = y_ge, .len = sizeof(y_ge)};
2245
2246 EXPECT_EQ(OH_CryptoEcPoint_Create(curveNid, nullptr, &point), CRYPTO_SUCCESS);
2247 EXPECT_TRUE(point != nullptr);
2248 EXPECT_EQ(OH_CryptoEcPoint_SetCoordinate(point, &pk_x_le, &pk_y_le), CRYPTO_SUCCESS);
2249 EXPECT_EQ(OH_CryptoEcPoint_Encode(point, "UNCOMPRESSED", &ecKeyData), CRYPTO_OPERTION_ERROR);
2250 EXPECT_EQ(OH_CryptoEcPoint_Encode(point, "COMPRESSED", &ecKeyData), CRYPTO_OPERTION_ERROR);
2251 OH_CryptoEcPoint_Destroy(point);
2252 point = nullptr;
2253 EXPECT_EQ(OH_CryptoEcPoint_Create(curveNid, nullptr, &point), CRYPTO_SUCCESS);
2254 EXPECT_TRUE(point != nullptr);
2255 EXPECT_EQ(OH_CryptoEcPoint_SetCoordinate(point, &pk_x_ge, &pk_y_ge), CRYPTO_SUCCESS);
2256 EXPECT_EQ(OH_CryptoEcPoint_Encode(point, "UNCOMPRESSED", &ecKeyData), CRYPTO_OPERTION_ERROR);
2257 EXPECT_EQ(OH_CryptoEcPoint_Encode(point, "COMPRESSED", &ecKeyData), CRYPTO_OPERTION_ERROR);
2258
2259 OH_CryptoEcPoint_Destroy(point);
2260 OH_Crypto_FreeDataBlob(&ecKeyData);
2261 }
2262
2263 /**
2264 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3500
2265 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3500
2266 * @tc.desc algorithm is Asym Key
2267 * @tc.size Medium
2268 * @tc.type Func
2269 * @tc.level Level0
2270 */
2271 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3500, TestSize.Level0)
2272 {
2273 AsymPrivKeySpec asymInfo = {
2274 "PKCS1", (uint8_t *)"RSA512", (uint8_t *)"RSA512|PRIMES_2", (uint8_t *)"0123456789",
2275 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM
2276 };
2277 Crypto_DataBlob pwBlob = {.data = asymInfo.password, .len = asymInfo.pwLen};
2278 Crypto_DataBlob cipherBlob = {.data = asymInfo.cipher, .len = asymInfo.cipherLen};
2279 Crypto_DataBlob out = { .data = nullptr, .len = 0 };
2280 OH_CryptoPrivKeyEncodingParams *params = nullptr;
2281 uint8_t new_password[] = "9876543210";
2282
2283 OH_CryptoKeyPair *keyPair = OHTEST_GenerateKeyPair((const char *)asymInfo.algName, (const char *)asymInfo.algKeyName);
2284 ASSERT_TRUE(keyPair != nullptr);
2285 OH_CryptoPrivKey *privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
2286 ASSERT_TRUE(privKey != nullptr);
2287 if (asymInfo.password != nullptr) {
2288 params = OHTEST_SetParam(&pwBlob, &cipherBlob);
2289 ASSERT_TRUE(params != nullptr);
2290 }
2291 ASSERT_EQ(OH_CryptoPrivKey_Encode(privKey, asymInfo.encoding, (const char *)asymInfo.type, params, &out), CRYPTO_SUCCESS);
2292 pwBlob.data = new_password;
2293 OH_CryptoKeyPair *new_keyPair = OHTEST_ConvertKeyPair((const char *)asymInfo.algName, asymInfo.encoding, &out, nullptr, &pwBlob);
2294 ASSERT_TRUE(new_keyPair == nullptr);
2295
2296 OH_Crypto_FreeDataBlob(&out);
2297 OH_CryptoPrivKeyEncodingParams_Destroy(params);
2298 OH_CryptoKeyPair_Destroy(keyPair);
2299 }
2300
2301 /**
2302 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3600
2303 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3600
2304 * @tc.desc algorithm is Asym Key
2305 * @tc.size Medium
2306 * @tc.type Func
2307 * @tc.level Level0
2308 */
2309 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3600, TestSize.Level0)
2310 {
2311 AsymPrivKeySpec asymInfo = {
2312 "PKCS1", (uint8_t *)"RSA512", (uint8_t *)"RSA512|PRIMES_2",
2313 (uint8_t *)"0123456789", 10, (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM
2314 };
2315 Crypto_DataBlob pwBlob = {.data = asymInfo.password, .len = asymInfo.pwLen};
2316 Crypto_DataBlob cipherBlob = {.data = asymInfo.cipher, .len = asymInfo.cipherLen};
2317 Crypto_DataBlob out = { .data = nullptr, .len = 0 };
2318 OH_CryptoPrivKeyEncodingParams *params = nullptr;
2319
2320 OH_CryptoKeyPair *keyPair = OHTEST_GenerateKeyPair((const char *)asymInfo.algName, (const char *)asymInfo.algKeyName);
2321 ASSERT_TRUE(keyPair != nullptr);
2322 OH_CryptoPrivKey *privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
2323 ASSERT_TRUE(privKey != nullptr);
2324 if (asymInfo.password != nullptr) {
2325 params = OHTEST_SetParam(&pwBlob, &cipherBlob);
2326 ASSERT_TRUE(params != nullptr);
2327 }
2328 ASSERT_EQ(OH_CryptoPrivKey_Encode(privKey, asymInfo.encoding, (const char *)asymInfo.type, params, &out), CRYPTO_SUCCESS);
2329 OH_CryptoKeyPair *new_keyPair = OHTEST_ConvertKeyPair((const char *)asymInfo.algName, asymInfo.encoding, &out, nullptr, nullptr);
2330 ASSERT_TRUE(new_keyPair == nullptr);
2331
2332 OH_Crypto_FreeDataBlob(&out);
2333 OH_CryptoPrivKeyEncodingParams_Destroy(params);
2334 OH_CryptoKeyPair_Destroy(keyPair);
2335 }
2336
2337 /**
2338 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3700
2339 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3700
2340 * @tc.desc algorithm is Asym Key
2341 * @tc.size Medium
2342 * @tc.type Func
2343 * @tc.level Level0
2344 */
2345 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3700, TestSize.Level0)
2346 {
2347 AsymPrivKeySpec asymInfo = {
2348 "PKCS1", (uint8_t *)"RSA512", (uint8_t *)"RSA512|PRIMES_2", (uint8_t *)"0123456789", 10,
2349 (uint8_t *)"AES-128-CBC", 11, (uint8_t *)"PKCS8", CRYPTO_PEM
2350 };
2351 Crypto_DataBlob pwBlob = {.data = asymInfo.password, .len = asymInfo.pwLen};
2352 Crypto_DataBlob cipherBlob = {.data = asymInfo.cipher, .len = asymInfo.cipherLen};
2353 Crypto_DataBlob out = { .data = nullptr, .len = 0 };
2354 OH_CryptoPrivKeyEncodingParams *params = nullptr;
2355
2356 OH_CryptoKeyPair *keyPair = OHTEST_GenerateKeyPair((const char *)asymInfo.algName, (const char *)asymInfo.algKeyName);
2357 ASSERT_TRUE(keyPair != nullptr);
2358 OH_CryptoPrivKey *privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
2359 ASSERT_TRUE(privKey != nullptr);
2360 if (asymInfo.password != nullptr) {
2361 params = OHTEST_SetParam(&pwBlob, &cipherBlob);
2362 ASSERT_TRUE(params != nullptr);
2363 }
2364 ASSERT_EQ(OH_CryptoPrivKey_Encode(privKey, asymInfo.encoding, (const char *)asymInfo.type, params, &out), CRYPTO_SUCCESS);
2365 out.data[0]++;
2366 OH_CryptoKeyPair *new_keyPair1 = OHTEST_ConvertKeyPair((const char *)asymInfo.algName, asymInfo.encoding, &out, nullptr, &pwBlob);
2367 ASSERT_TRUE(new_keyPair1 == nullptr);
2368 out.data[0]--;
2369 out.data[160]++;
2370 OH_CryptoKeyPair *new_keyPair2 = OHTEST_ConvertKeyPair((const char *)asymInfo.algName, asymInfo.encoding, &out, nullptr, &pwBlob);
2371 ASSERT_TRUE(new_keyPair2 == nullptr);
2372
2373 OH_Crypto_FreeDataBlob(&out);
2374 OH_CryptoPrivKeyEncodingParams_Destroy(params);
2375 OH_CryptoKeyPair_Destroy(keyPair);
2376 }
2377
2378 /**
2379 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3800
2380 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3800
2381 * @tc.desc algorithm is Asym Key
2382 * @tc.size Medium
2383 * @tc.type Func
2384 * @tc.level Level0
2385 */
2386 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3800, TestSize.Level0)
2387 {
2388 const unsigned char *password = (const unsigned char *)"123456";
2389 const char *algoName = "RSA512";
2390 uint32_t passLen = 6;
2391 OH_CryptoAsymKeyGenerator *ctx = nullptr;
2392 OH_CryptoKeyPair *keyPair = nullptr;
2393 Crypto_DataBlob privBlob = { .data = g_privData, .len = sizeof(g_privData) };
2394
2395 EXPECT_EQ(OH_CryptoAsymKeyGenerator_Create(algoName, &ctx), CRYPTO_SUCCESS);
2396 EXPECT_EQ(OH_CryptoAsymKeyGenerator_SetPassword(ctx, password, passLen), CRYPTO_SUCCESS);
2397 EXPECT_EQ(OH_CryptoAsymKeyGenerator_Convert(ctx, CRYPTO_PEM, nullptr, &privBlob, &keyPair), CRYPTO_OPERTION_ERROR);
2398
2399 OH_CryptoAsymKeyGenerator_Destroy(ctx);
2400 OH_CryptoKeyPair_Destroy(keyPair);
2401 }
2402
2403 /**
2404 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3900
2405 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3900
2406 * @tc.desc algorithm is Asym Key
2407 * @tc.size Medium
2408 * @tc.type Func
2409 * @tc.level Level0
2410 */
2411 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_3900, TestSize.Level0)
2412 {
2413 const char *algoName = "RSA512";
2414 OH_CryptoAsymKeyGenerator *ctx = nullptr;
2415 OH_CryptoKeyPair *keyPair = nullptr;
2416 Crypto_DataBlob privBlob = { .data = g_privDerData, .len = sizeof(g_privDerData) };
2417
2418 EXPECT_EQ(OH_CryptoAsymKeyGenerator_Create(algoName, &ctx), CRYPTO_SUCCESS);
2419 EXPECT_EQ(OH_CryptoAsymKeyGenerator_Convert(ctx, CRYPTO_DER, nullptr, &privBlob, &keyPair), CRYPTO_SUCCESS);
2420
2421 OH_CryptoAsymKeyGenerator_Destroy(ctx);
2422 OH_CryptoKeyPair_Destroy(keyPair);
2423 }
2424
2425 /**
2426 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_4000
2427 * @tc.name OHCryptoFrameworkAsymKeyNapiTest/ASYMKEY_PRIV_TEST.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_4000/x
2428 * @tc.desc algorithm is Asym Key
2429 * @tc.size Medium
2430 * @tc.type Func
2431 * @tc.level Level0
2432 */
2433 HWTEST_P(ASYMKEY_PRIV_TEST, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_4000, TestSize.Level0)
2434 {
2435 AsymPrivKeySpec asymInfo = GetParam();
2436 Crypto_DataBlob out = { .data = nullptr, .len = 0 };
2437 Crypto_DataBlob outPub = { .data = nullptr, .len = 0 };
2438 Crypto_DataBlob new_out = { .data = nullptr, .len = 0 };
2439 uint8_t *type = nullptr;
2440
2441 OH_CryptoKeyPair *keyPair = OHTEST_GenerateKeyPair((const char *)asymInfo.algName, (const char *)asymInfo.algKeyName);
2442 ASSERT_TRUE(keyPair != nullptr);
2443 OH_CryptoPrivKey *privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
2444 ASSERT_TRUE(privKey != nullptr);
2445 OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
2446 ASSERT_TRUE(pubKey != nullptr);
2447 type = asymInfo.type ? asymInfo.type : nullptr;
2448 if (type != nullptr && strstr((const char *)type, "ECC") != nullptr) {
2449 ASSERT_EQ(OH_CryptoPrivKey_Encode(privKey, CRYPTO_DER, (const char *)type, nullptr, &out), CRYPTO_SUCCESS);
2450 ASSERT_EQ(OH_CryptoPubKey_Encode(pubKey, CRYPTO_DER, asymInfo.pubType, &outPub), CRYPTO_SUCCESS);
2451 } else {
2452 ASSERT_EQ(OH_CryptoPrivKey_Encode(privKey, CRYPTO_DER, nullptr, nullptr, &out), CRYPTO_SUCCESS);
2453 ASSERT_EQ(OH_CryptoPubKey_Encode(pubKey, CRYPTO_DER, nullptr, &outPub), CRYPTO_SUCCESS);
2454 }
2455 OH_CryptoKeyPair *new_keyPair = OHTEST_ConvertKeyPair((const char *)asymInfo.algName, CRYPTO_DER, &out, &outPub, nullptr);
2456 ASSERT_TRUE(new_keyPair != nullptr);
2457 OH_CryptoPrivKey *new_privKey = OH_CryptoKeyPair_GetPrivKey(new_keyPair);
2458 ASSERT_TRUE(new_privKey != nullptr);
2459 if (type != nullptr && strstr((const char *)type, "ECC") != nullptr) {
2460 ASSERT_EQ(OH_CryptoPrivKey_Encode(new_privKey, CRYPTO_DER, (const char *)type, nullptr, &new_out), CRYPTO_SUCCESS);
2461 } else {
2462 ASSERT_EQ(OH_CryptoPrivKey_Encode(new_privKey, CRYPTO_DER, nullptr, nullptr, &new_out), CRYPTO_SUCCESS);
2463 }
2464 if (new_out.len == out.len) {
2465 EXPECT_TRUE(memcmp(new_out.data, out.data, new_out.len) == 0);
2466 }
2467 EXPECT_TRUE(new_out.len == out.len);
2468
2469 OH_Crypto_FreeDataBlob(&out);
2470 OH_Crypto_FreeDataBlob(&new_out);
2471 OH_Crypto_FreeDataBlob(&outPub);
2472 OH_CryptoKeyPair_Destroy(keyPair);
2473 OH_CryptoKeyPair_Destroy(new_keyPair);
2474 }
2475
2476 /**
2477 * @tc.number SUB_Security_CryptoFramework_NAPI_AsymKey_Test_4100
2478 * @tc.name OHCryptoFrameworkAsymKeyNapiTest.SUB_Security_CryptoFramework_NAPI_AsymKey_Test_4100
2479 * @tc.desc algorithm is Asym Key
2480 * @tc.size Medium
2481 * @tc.type Func
2482 * @tc.level Level0
2483 */
2484 HWTEST_F(OHCryptoFrameworkAsymKeyNapiTest, SUB_Security_CryptoFramework_NAPI_AsymKey_Test_4100, TestSize.Level0)
2485 {
2486 const char *algoName = "RSA512";
2487 OH_CryptoAsymKeyGenerator *ctx = nullptr;
2488 OH_CryptoKeyPair *keyPair = nullptr;
2489 Crypto_DataBlob privBlob = { .data = g_privDerData, .len = sizeof(g_privDerData) };
2490
2491 EXPECT_EQ(OH_CryptoAsymKeyGenerator_Create(algoName, &ctx), CRYPTO_SUCCESS);
2492 EXPECT_EQ(OH_CryptoAsymKeyGenerator_Convert(ctx, CRYPTO_PEM, nullptr, &privBlob, &keyPair), CRYPTO_OPERTION_ERROR);
2493
2494 OH_CryptoAsymKeyGenerator_Destroy(ctx);
2495 OH_CryptoKeyPair_Destroy(keyPair);
2496 }
2497
2498 } // namespace Unittest::CryptoFrameworkAsymKeyNapiTest
2499