1 /*
2 * Copyright (C) 2023 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
16 #include <gtest/gtest.h>
17 #include "securec.h"
18
19 #include "asy_key_generator.h"
20 #include "detailed_ecc_key_params.h"
21 #include "ecc_openssl_common.h"
22 #include "ecc_openssl_common_param_spec.h"
23 #include "ecc_common.h"
24 #include "ecdh_openssl.h"
25 #include "key_agreement.h"
26 #include "memory.h"
27 #include "memory_mock.h"
28 #include "openssl_adapter_mock.h"
29 #include "openssl_common.h"
30 #include "params_parser.h"
31
32 using namespace std;
33 using namespace testing::ext;
34
35 namespace {
36 class CryptoEccKeyAgreementBySpecTest : public testing::Test {
37 public:
38 static void CryptoEccNoLengthSignTestSubEcc224(void);
39 static void CryptoEccNoLengthSignTestSubEcc256(void);
40 static void CryptoEccNoLengthSignTestSubEcc384(void);
41 static void CryptoEccNoLengthSignTestSubEcc521(void);
42
43 static void SetUpTestCase();
44 static void TearDownTestCase();
45 void SetUp();
46 void TearDown();
47
48 static HcfKeyPair *ecc224KeyPair_;
49 static HcfKeyPair *ecc256KeyPair_;
50 static HcfKeyPair *ecc384KeyPair_;
51 static HcfKeyPair *ecc521KeyPair_;
52 };
53
54 HcfKeyPair *CryptoEccKeyAgreementBySpecTest::ecc224KeyPair_ = nullptr;
55 HcfKeyPair *CryptoEccKeyAgreementBySpecTest::ecc256KeyPair_ = nullptr;
56 HcfKeyPair *CryptoEccKeyAgreementBySpecTest::ecc384KeyPair_ = nullptr;
57 HcfKeyPair *CryptoEccKeyAgreementBySpecTest::ecc521KeyPair_ = nullptr;
58
SetUp()59 void CryptoEccKeyAgreementBySpecTest::SetUp() {}
TearDown()60 void CryptoEccKeyAgreementBySpecTest::TearDown() {}
61
62 static const bool IS_BIG_ENDIAN = IsBigEndian();
63
64 static string g_eccAlgName = "ECC";
65 static string g_eccFieldType = "Fp";
66 static int32_t g_ecc224CorrectH = 1;
67 static int32_t g_ecc256CorrectH = 1;
68 static int32_t g_ecc384CorrectH = 1;
69 static int32_t g_ecc521CorrectH = 1;
70
71 HcfEccKeyPairParamsSpec g_ecc224KeyPairSpec;
72 HcfEccKeyPairParamsSpec g_ecc256KeyPairSpec;
73 HcfEccKeyPairParamsSpec g_ecc384KeyPairSpec;
74 HcfEccKeyPairParamsSpec g_ecc521KeyPairSpec;
75 HcfECFieldFp g_fieldFp;
76
ConstructEcc224KeyPairParamsSpec(HcfAsyKeyParamsSpec ** spec)77 static HcfResult ConstructEcc224KeyPairParamsSpec(HcfAsyKeyParamsSpec **spec)
78 {
79 HcfEccKeyPairParamsSpec *eccKeyPairSpec = &g_ecc224KeyPairSpec;
80 HcfECField *tmpField = (HcfECField *)(&g_fieldFp);
81
82 eccKeyPairSpec->base.base.algName = const_cast<char *>(g_eccAlgName.c_str());
83 eccKeyPairSpec->base.base.specType = HCF_KEY_PAIR_SPEC;
84 eccKeyPairSpec->base.field = tmpField;
85 eccKeyPairSpec->base.field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
86 ((HcfECFieldFp *)(eccKeyPairSpec->base.field))->p.data =
87 (IS_BIG_ENDIAN ? g_ecc224CorrectBigP : g_ecc224CorrectLittleP);
88 ((HcfECFieldFp *)(eccKeyPairSpec->base.field))->p.len = NID_secp224r1_len;
89 eccKeyPairSpec->base.a.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigA : g_ecc224CorrectLittleA);
90 eccKeyPairSpec->base.a.len = NID_secp224r1_len;
91 eccKeyPairSpec->base.b.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigB : g_ecc224CorrectLittleB);
92 eccKeyPairSpec->base.b.len = NID_secp224r1_len;
93 eccKeyPairSpec->base.g.x.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigGX : g_ecc224CorrectLittleGX);
94 eccKeyPairSpec->base.g.x.len = NID_secp224r1_len;
95 eccKeyPairSpec->base.g.y.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigGY : g_ecc224CorrectLittleGY);
96 eccKeyPairSpec->base.g.y.len = NID_secp224r1_len;
97 eccKeyPairSpec->base.n.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigN : g_ecc224CorrectLittleN);
98 eccKeyPairSpec->base.n.len = NID_secp224r1_len;
99 eccKeyPairSpec->base.h = g_ecc224CorrectH;
100 eccKeyPairSpec->pk.x.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigPkX : g_ecc224CorrectLittlePkX);
101 eccKeyPairSpec->pk.x.len = NID_secp224r1_len;
102 eccKeyPairSpec->pk.y.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigPkY : g_ecc224CorrectLittlePkY);
103 eccKeyPairSpec->pk.y.len = NID_secp224r1_len;
104 eccKeyPairSpec->sk.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigSk : g_ecc224CorrectLittleSk);
105 eccKeyPairSpec->sk.len = NID_secp224r1_len;
106
107 *spec = (HcfAsyKeyParamsSpec *)eccKeyPairSpec;
108 return HCF_SUCCESS;
109 }
110
ConstructEcc256KeyPairParamsSpec(HcfAsyKeyParamsSpec ** spec)111 static HcfResult ConstructEcc256KeyPairParamsSpec(HcfAsyKeyParamsSpec **spec)
112 {
113 HcfEccKeyPairParamsSpec *eccKeyPairSpec = &g_ecc256KeyPairSpec;
114 HcfECField *tmpField = (HcfECField *)(&g_fieldFp);
115
116 eccKeyPairSpec->base.base.algName = const_cast<char *>(g_eccAlgName.c_str());
117 eccKeyPairSpec->base.base.specType = HCF_KEY_PAIR_SPEC;
118 eccKeyPairSpec->base.field = tmpField;
119 eccKeyPairSpec->base.field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
120 ((HcfECFieldFp *)(eccKeyPairSpec->base.field))->p.data =
121 (IS_BIG_ENDIAN ? g_ecc256CorrectBigP : g_ecc256CorrectLittleP);
122 ((HcfECFieldFp *)(eccKeyPairSpec->base.field))->p.len = NID_X9_62_prime256v1_len;
123 eccKeyPairSpec->base.a.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigA : g_ecc256CorrectLittleA);
124 eccKeyPairSpec->base.a.len = NID_X9_62_prime256v1_len;
125 eccKeyPairSpec->base.b.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigB : g_ecc256CorrectLittleB);
126 eccKeyPairSpec->base.b.len = NID_X9_62_prime256v1_len;
127 eccKeyPairSpec->base.g.x.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigGX : g_ecc256CorrectLittleGX);
128 eccKeyPairSpec->base.g.x.len = NID_X9_62_prime256v1_len;
129 eccKeyPairSpec->base.g.y.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigGY : g_ecc256CorrectLittleGY);
130 eccKeyPairSpec->base.g.y.len = NID_X9_62_prime256v1_len;
131 eccKeyPairSpec->base.n.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigN : g_ecc256CorrectLittleN);
132 eccKeyPairSpec->base.n.len = NID_X9_62_prime256v1_len;
133 eccKeyPairSpec->base.h = g_ecc256CorrectH;
134 eccKeyPairSpec->pk.x.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigPkX : g_ecc256CorrectLittlePkX);
135 eccKeyPairSpec->pk.x.len = NID_X9_62_prime256v1_len;
136 eccKeyPairSpec->pk.y.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigPkY : g_ecc256CorrectLittlePkY);
137 eccKeyPairSpec->pk.y.len = NID_X9_62_prime256v1_len;
138 eccKeyPairSpec->sk.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigSk : g_ecc256CorrectLittleSk);
139 eccKeyPairSpec->sk.len = NID_X9_62_prime256v1_len;
140
141 *spec = (HcfAsyKeyParamsSpec *)eccKeyPairSpec;
142 return HCF_SUCCESS;
143 }
144
ConstructEcc384KeyPairParamsSpec(HcfAsyKeyParamsSpec ** spec)145 static HcfResult ConstructEcc384KeyPairParamsSpec(HcfAsyKeyParamsSpec **spec)
146 {
147 HcfEccKeyPairParamsSpec *eccKeyPairSpec = &g_ecc384KeyPairSpec;
148 HcfECField *tmpField = (HcfECField *)(&g_fieldFp);
149
150 eccKeyPairSpec->base.base.algName = const_cast<char *>(g_eccAlgName.c_str());
151 eccKeyPairSpec->base.base.specType = HCF_KEY_PAIR_SPEC;
152 eccKeyPairSpec->base.field = tmpField;
153 eccKeyPairSpec->base.field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
154 ((HcfECFieldFp *)(eccKeyPairSpec->base.field))->p.data =
155 (IS_BIG_ENDIAN ? g_ecc384CorrectBigP : g_ecc384CorrectLittleP);
156 ((HcfECFieldFp *)(eccKeyPairSpec->base.field))->p.len = NID_secp384r1_len;
157 eccKeyPairSpec->base.a.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigA : g_ecc384CorrectLittleA);
158 eccKeyPairSpec->base.a.len = NID_secp384r1_len;
159 eccKeyPairSpec->base.b.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigB : g_ecc384CorrectLittleB);
160 eccKeyPairSpec->base.b.len = NID_secp384r1_len;
161 eccKeyPairSpec->base.g.x.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigGX : g_ecc384CorrectLittleGX);
162 eccKeyPairSpec->base.g.x.len = NID_secp384r1_len;
163 eccKeyPairSpec->base.g.y.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigGY : g_ecc384CorrectLittleGY);
164 eccKeyPairSpec->base.g.y.len = NID_secp384r1_len;
165 eccKeyPairSpec->base.n.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigN : g_ecc384CorrectLittleN);
166 eccKeyPairSpec->base.n.len = NID_secp384r1_len;
167 eccKeyPairSpec->base.h = g_ecc384CorrectH;
168 eccKeyPairSpec->pk.x.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigPkX : g_ecc384CorrectLittlePkX);
169 eccKeyPairSpec->pk.x.len = NID_secp384r1_len;
170 eccKeyPairSpec->pk.y.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigPkY : g_ecc384CorrectLittlePkY);
171 eccKeyPairSpec->pk.y.len = NID_secp384r1_len;
172 eccKeyPairSpec->sk.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigSk : g_ecc384CorrectLittleSk);
173 eccKeyPairSpec->sk.len = NID_secp384r1_len;
174
175 *spec = (HcfAsyKeyParamsSpec *)eccKeyPairSpec;
176 return HCF_SUCCESS;
177 }
178
ConstructEcc521KeyPairParamsSpec(HcfAsyKeyParamsSpec ** spec)179 static HcfResult ConstructEcc521KeyPairParamsSpec(HcfAsyKeyParamsSpec **spec)
180 {
181 HcfEccKeyPairParamsSpec *eccKeyPairSpec = &g_ecc521KeyPairSpec;
182 HcfECField *tmpField = (HcfECField *)(&g_fieldFp);
183
184 eccKeyPairSpec->base.base.algName = const_cast<char *>(g_eccAlgName.c_str());
185 eccKeyPairSpec->base.base.specType = HCF_KEY_PAIR_SPEC;
186 eccKeyPairSpec->base.field = tmpField;
187 eccKeyPairSpec->base.field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
188 ((HcfECFieldFp *)(eccKeyPairSpec->base.field))->p.data =
189 (IS_BIG_ENDIAN ? g_ecc521CorrectBigP : g_ecc521CorrectLittleP);
190 ((HcfECFieldFp *)(eccKeyPairSpec->base.field))->p.len = NID_secp521r1_len;
191 eccKeyPairSpec->base.a.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigA : g_ecc521CorrectLittleA);
192 eccKeyPairSpec->base.a.len = NID_secp521r1_len;
193 eccKeyPairSpec->base.b.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigB : g_ecc521CorrectLittleB);
194 eccKeyPairSpec->base.b.len = NID_secp521r1_len;
195 eccKeyPairSpec->base.g.x.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigGX : g_ecc521CorrectLittleGX);
196 eccKeyPairSpec->base.g.x.len = NID_secp521r1_len;
197 eccKeyPairSpec->base.g.y.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigGY : g_ecc521CorrectLittleGY);
198 eccKeyPairSpec->base.g.y.len = NID_secp521r1_len;
199 eccKeyPairSpec->base.n.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigN : g_ecc521CorrectLittleN);
200 eccKeyPairSpec->base.n.len = NID_secp521r1_len;
201 eccKeyPairSpec->base.h = g_ecc521CorrectH;
202 eccKeyPairSpec->pk.x.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigPkX : g_ecc521CorrectLittlePkX);
203 eccKeyPairSpec->pk.x.len = NID_secp521r1_len;
204 eccKeyPairSpec->pk.y.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigPkY : g_ecc521CorrectLittlePkY);
205 eccKeyPairSpec->pk.y.len = NID_secp521r1_len;
206 eccKeyPairSpec->sk.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigSk : g_ecc521CorrectLittleSk);
207 eccKeyPairSpec->sk.len = NID_secp521r1_len;
208
209 *spec = (HcfAsyKeyParamsSpec *)eccKeyPairSpec;
210 return HCF_SUCCESS;
211 }
212
CryptoEccNoLengthSignTestSubEcc224(void)213 void CryptoEccKeyAgreementBySpecTest::CryptoEccNoLengthSignTestSubEcc224(void)
214 {
215 HcfAsyKeyParamsSpec *paramSpec = nullptr;
216 int32_t res = ConstructEcc224KeyPairParamsSpec(¶mSpec);
217 ASSERT_EQ(res, HCF_SUCCESS);
218
219 HcfAsyKeyGeneratorBySpec *generator = nullptr;
220 res = HcfAsyKeyGeneratorBySpecCreate(paramSpec, &generator);
221 ASSERT_EQ(res, HCF_SUCCESS);
222 ASSERT_NE(generator, nullptr);
223
224 HcfKeyPair *keyPair = nullptr;
225 res = generator->generateKeyPair(generator, &keyPair);
226 ASSERT_EQ(res, HCF_SUCCESS);
227 ASSERT_NE(keyPair, nullptr);
228
229 ecc224KeyPair_ = keyPair;
230
231 HcfObjDestroy(generator);
232 }
233
CryptoEccNoLengthSignTestSubEcc256(void)234 void CryptoEccKeyAgreementBySpecTest::CryptoEccNoLengthSignTestSubEcc256(void)
235 {
236 HcfAsyKeyParamsSpec *paramSpec = nullptr;
237 int32_t res = ConstructEcc256KeyPairParamsSpec(¶mSpec);
238 ASSERT_EQ(res, HCF_SUCCESS);
239
240 HcfAsyKeyGeneratorBySpec *generator = nullptr;
241 res = HcfAsyKeyGeneratorBySpecCreate(paramSpec, &generator);
242 ASSERT_EQ(res, HCF_SUCCESS);
243 ASSERT_NE(generator, nullptr);
244
245 HcfKeyPair *keyPair = nullptr;
246 res = generator->generateKeyPair(generator, &keyPair);
247 ASSERT_EQ(res, HCF_SUCCESS);
248 ASSERT_NE(keyPair, nullptr);
249
250 ecc256KeyPair_ = keyPair;
251
252 HcfObjDestroy(generator);
253 }
254
CryptoEccNoLengthSignTestSubEcc384(void)255 void CryptoEccKeyAgreementBySpecTest::CryptoEccNoLengthSignTestSubEcc384(void)
256 {
257 HcfAsyKeyParamsSpec *paramSpec = nullptr;
258 int32_t res = ConstructEcc384KeyPairParamsSpec(¶mSpec);
259 ASSERT_EQ(res, HCF_SUCCESS);
260
261 HcfAsyKeyGeneratorBySpec *generator = nullptr;
262 res = HcfAsyKeyGeneratorBySpecCreate(paramSpec, &generator);
263 ASSERT_EQ(res, HCF_SUCCESS);
264 ASSERT_NE(generator, nullptr);
265
266 HcfKeyPair *keyPair = nullptr;
267 res = generator->generateKeyPair(generator, &keyPair);
268 ASSERT_EQ(res, HCF_SUCCESS);
269 ASSERT_NE(keyPair, nullptr);
270
271 ecc384KeyPair_ = keyPair;
272 HcfObjDestroy(generator);
273 }
274
CryptoEccNoLengthSignTestSubEcc521(void)275 void CryptoEccKeyAgreementBySpecTest::CryptoEccNoLengthSignTestSubEcc521(void)
276 {
277 HcfAsyKeyParamsSpec *paramSpec = nullptr;
278 int32_t res = ConstructEcc521KeyPairParamsSpec(¶mSpec);
279 ASSERT_EQ(res, HCF_SUCCESS);
280
281 HcfAsyKeyGeneratorBySpec *generator = nullptr;
282 res = HcfAsyKeyGeneratorBySpecCreate(paramSpec, &generator);
283 ASSERT_EQ(res, HCF_SUCCESS);
284 ASSERT_NE(generator, nullptr);
285
286 HcfKeyPair *keyPair = nullptr;
287 res = generator->generateKeyPair(generator, &keyPair);
288 ASSERT_EQ(res, HCF_SUCCESS);
289 ASSERT_NE(keyPair, nullptr);
290
291 ecc521KeyPair_ = keyPair;
292 HcfObjDestroy(generator);
293 }
294
SetUpTestCase()295 void CryptoEccKeyAgreementBySpecTest::SetUpTestCase()
296 {
297 CryptoEccNoLengthSignTestSubEcc224();
298 CryptoEccNoLengthSignTestSubEcc256();
299 CryptoEccNoLengthSignTestSubEcc384();
300 CryptoEccNoLengthSignTestSubEcc521();
301 }
302
TearDownTestCase()303 void CryptoEccKeyAgreementBySpecTest::TearDownTestCase()
304 {
305 HcfObjDestroy(ecc224KeyPair_);
306 HcfObjDestroy(ecc256KeyPair_);
307 HcfObjDestroy(ecc384KeyPair_);
308 HcfObjDestroy(ecc521KeyPair_);
309 }
310
GetMockClass(void)311 static const char *GetMockClass(void)
312 {
313 return "HcfSymKeyGenerator";
314 }
315
316 static HcfObjectBase obj = {
317 .getClass = GetMockClass,
318 .destroy = nullptr
319 };
320
321 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest501, TestSize.Level0)
322 {
323 HcfKeyAgreement *keyAgreement = nullptr;
324 int32_t res = HcfKeyAgreementCreate("ECC", &keyAgreement);
325
326 ASSERT_EQ(res, HCF_SUCCESS);
327 ASSERT_NE(keyAgreement, nullptr);
328
329 HcfObjDestroy(keyAgreement);
330 }
331
332 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest502, TestSize.Level0)
333 {
334 HcfKeyAgreement *keyAgreement = nullptr;
335 int32_t res = HcfKeyAgreementCreate("ecc", &keyAgreement);
336
337 ASSERT_EQ(res, HCF_INVALID_PARAMS);
338 ASSERT_EQ(keyAgreement, nullptr);
339 }
340
341 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementTes503, TestSize.Level0)
342 {
343 int32_t res = HcfKeyAgreementCreate("ECC", nullptr);
344
345 ASSERT_EQ(res, HCF_INVALID_PARAMS);
346 }
347
348 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest601, TestSize.Level0)
349 {
350 HcfKeyAgreement *keyAgreement = nullptr;
351 int32_t res = HcfKeyAgreementCreate("ECC", &keyAgreement);
352
353 ASSERT_EQ(res, HCF_SUCCESS);
354 ASSERT_NE(keyAgreement, nullptr);
355
356 const char *className = keyAgreement->base.getClass();
357
358 ASSERT_NE(className, nullptr);
359
360 HcfObjDestroy(keyAgreement);
361 }
362
363 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest602, TestSize.Level0)
364 {
365 HcfKeyAgreement *keyAgreement = nullptr;
366 int32_t res = HcfKeyAgreementCreate("ECC", &keyAgreement);
367
368 ASSERT_EQ(res, HCF_SUCCESS);
369 ASSERT_NE(keyAgreement, nullptr);
370
371 keyAgreement->base.destroy((HcfObjectBase *)keyAgreement);
372 }
373
374 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest603, TestSize.Level0)
375 {
376 HcfKeyAgreement *keyAgreement = nullptr;
377 int32_t res = HcfKeyAgreementCreate("ECC", &keyAgreement);
378
379 ASSERT_EQ(res, HCF_SUCCESS);
380 ASSERT_NE(keyAgreement, nullptr);
381
382 keyAgreement->base.destroy(nullptr);
383
384 HcfObjDestroy(keyAgreement);
385 }
386
387 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest604, TestSize.Level0)
388 {
389 HcfKeyAgreement *keyAgreement = nullptr;
390 int32_t res = HcfKeyAgreementCreate("ECC", &keyAgreement);
391
392 ASSERT_EQ(res, HCF_SUCCESS);
393 ASSERT_NE(keyAgreement, nullptr);
394
395 keyAgreement->base.destroy(&obj);
396
397 HcfObjDestroy(keyAgreement);
398 }
399
400 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest605, TestSize.Level0)
401 {
402 HcfKeyAgreement *keyAgreement = nullptr;
403 int32_t res = HcfKeyAgreementCreate("ECC", &keyAgreement);
404
405 ASSERT_EQ(res, HCF_SUCCESS);
406 ASSERT_NE(keyAgreement, nullptr);
407
408 const char *algName = keyAgreement->getAlgoName(keyAgreement);
409
410 ASSERT_NE(algName, nullptr);
411
412 HcfObjDestroy(keyAgreement);
413 }
414
415 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest606, TestSize.Level0)
416 {
417 HcfKeyAgreement *keyAgreement = nullptr;
418 int32_t res = HcfKeyAgreementCreate("ECC", &keyAgreement);
419
420 ASSERT_EQ(res, HCF_SUCCESS);
421 ASSERT_NE(keyAgreement, nullptr);
422
423 const char *algName = keyAgreement->getAlgoName(nullptr);
424
425 ASSERT_EQ(algName, nullptr);
426
427 HcfObjDestroy(keyAgreement);
428 }
429
430 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest607, TestSize.Level0)
431 {
432 HcfKeyAgreement *keyAgreement = nullptr;
433 int32_t res = HcfKeyAgreementCreate("ECC", &keyAgreement);
434
435 ASSERT_EQ(res, HCF_SUCCESS);
436 ASSERT_NE(keyAgreement, nullptr);
437
438 const char *algName = keyAgreement->getAlgoName((HcfKeyAgreement *)(&obj));
439
440 ASSERT_EQ(algName, nullptr);
441
442 HcfObjDestroy(keyAgreement);
443 }
444
445 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest701, TestSize.Level0)
446 {
447 HcfKeyAgreement *keyAgreement = nullptr;
448 int32_t res = HcfKeyAgreementCreate("ECC", &keyAgreement);
449
450 ASSERT_EQ(res, HCF_SUCCESS);
451 ASSERT_NE(keyAgreement, nullptr);
452
453 HcfBlob out = { .data = nullptr, .len = 0 };
454 res = keyAgreement->generateSecret(keyAgreement, ecc224KeyPair_->priKey, ecc224KeyPair_->pubKey, &out);
455
456 ASSERT_EQ(res, HCF_SUCCESS);
457 ASSERT_NE(out.data, nullptr);
458 ASSERT_NE(out.len, (const unsigned int)0);
459
460 HcfFree(out.data);
461 HcfObjDestroy(keyAgreement);
462 }
463
464 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest702, TestSize.Level0)
465 {
466 HcfKeyAgreement *keyAgreement = nullptr;
467 int32_t res = HcfKeyAgreementCreate("ECC", &keyAgreement);
468
469 ASSERT_EQ(res, HCF_SUCCESS);
470 ASSERT_NE(keyAgreement, nullptr);
471
472 HcfBlob out = { .data = nullptr, .len = 0 };
473 res = keyAgreement->generateSecret(keyAgreement, ecc256KeyPair_->priKey, ecc256KeyPair_->pubKey, &out);
474
475 ASSERT_EQ(res, HCF_SUCCESS);
476 ASSERT_NE(out.data, nullptr);
477 ASSERT_NE(out.len, (const unsigned int)0);
478
479 HcfFree(out.data);
480 HcfObjDestroy(keyAgreement);
481 }
482
483 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest703, TestSize.Level0)
484 {
485 HcfKeyAgreement *keyAgreement = nullptr;
486 int32_t res = HcfKeyAgreementCreate("ECC", &keyAgreement);
487
488 ASSERT_EQ(res, HCF_SUCCESS);
489 ASSERT_NE(keyAgreement, nullptr);
490
491 HcfBlob out = { .data = nullptr, .len = 0 };
492 res = keyAgreement->generateSecret(keyAgreement, ecc384KeyPair_->priKey, ecc384KeyPair_->pubKey, &out);
493
494 ASSERT_EQ(res, HCF_SUCCESS);
495 ASSERT_NE(out.data, nullptr);
496 ASSERT_NE(out.len, (const unsigned int)0);
497
498 HcfFree(out.data);
499 HcfObjDestroy(keyAgreement);
500 }
501
502 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest704, TestSize.Level0)
503 {
504 HcfKeyAgreement *keyAgreement = nullptr;
505 int32_t res = HcfKeyAgreementCreate("ECC", &keyAgreement);
506
507 ASSERT_EQ(res, HCF_SUCCESS);
508 ASSERT_NE(keyAgreement, nullptr);
509
510 HcfBlob out = { .data = nullptr, .len = 0 };
511 res = keyAgreement->generateSecret(keyAgreement, ecc521KeyPair_->priKey, ecc521KeyPair_->pubKey, &out);
512
513 ASSERT_EQ(res, HCF_SUCCESS);
514 ASSERT_NE(out.data, nullptr);
515 ASSERT_NE(out.len, (const unsigned int)0);
516
517 HcfFree(out.data);
518 HcfObjDestroy(keyAgreement);
519 }
520
521 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest705, TestSize.Level0)
522 {
523 HcfKeyAgreement *keyAgreement = nullptr;
524 int32_t res = HcfKeyAgreementCreate("ECC", &keyAgreement);
525
526 ASSERT_EQ(res, HCF_SUCCESS);
527 ASSERT_NE(keyAgreement, nullptr);
528
529 HcfBlob out = { .data = nullptr, .len = 0 };
530 res = keyAgreement->generateSecret(nullptr, ecc256KeyPair_->priKey, ecc256KeyPair_->pubKey, &out);
531
532 ASSERT_EQ(res, HCF_INVALID_PARAMS);
533 ASSERT_EQ(out.data, nullptr);
534 ASSERT_EQ(out.len, 0);
535
536 HcfObjDestroy(keyAgreement);
537 }
538
539 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest706, TestSize.Level0)
540 {
541 HcfKeyAgreement *keyAgreement = nullptr;
542 int32_t res = HcfKeyAgreementCreate("ECC", &keyAgreement);
543
544 ASSERT_EQ(res, HCF_SUCCESS);
545 ASSERT_NE(keyAgreement, nullptr);
546
547 HcfBlob out = { .data = nullptr, .len = 0 };
548 res = keyAgreement->generateSecret((HcfKeyAgreement *)(&obj), ecc256KeyPair_->priKey, ecc256KeyPair_->pubKey, &out);
549
550 ASSERT_EQ(res, HCF_INVALID_PARAMS);
551 ASSERT_EQ(out.data, nullptr);
552 ASSERT_EQ(out.len, 0);
553
554 HcfObjDestroy(keyAgreement);
555 }
556
557 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest707, TestSize.Level0)
558 {
559 HcfKeyAgreement *keyAgreement = nullptr;
560 int32_t res = HcfKeyAgreementCreate("ECC", &keyAgreement);
561
562 ASSERT_EQ(res, HCF_SUCCESS);
563 ASSERT_NE(keyAgreement, nullptr);
564
565 HcfBlob out = { .data = nullptr, .len = 0 };
566 res = keyAgreement->generateSecret(keyAgreement, (HcfPriKey *)(&obj), ecc256KeyPair_->pubKey, &out);
567
568 ASSERT_EQ(res, HCF_INVALID_PARAMS);
569 ASSERT_EQ(out.data, nullptr);
570 ASSERT_EQ(out.len, 0);
571
572 HcfObjDestroy(keyAgreement);
573 }
574
575 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest708, TestSize.Level0)
576 {
577 HcfKeyAgreement *keyAgreement = nullptr;
578 int32_t res = HcfKeyAgreementCreate("ECC", &keyAgreement);
579
580 ASSERT_EQ(res, HCF_SUCCESS);
581 ASSERT_NE(keyAgreement, nullptr);
582
583 HcfBlob out = { .data = nullptr, .len = 0 };
584 res = keyAgreement->generateSecret(keyAgreement, ecc256KeyPair_->priKey, (HcfPubKey *)(&obj), &out);
585
586 ASSERT_EQ(res, HCF_INVALID_PARAMS);
587 ASSERT_EQ(out.data, nullptr);
588 ASSERT_EQ(out.len, 0);
589
590 HcfObjDestroy(keyAgreement);
591 }
592
593 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest709, TestSize.Level0)
594 {
595 HcfKeyAgreement *keyAgreement = nullptr;
596 int32_t res = HcfKeyAgreementCreate("ECC", &keyAgreement);
597
598 ASSERT_EQ(res, HCF_SUCCESS);
599 ASSERT_NE(keyAgreement, nullptr);
600
601 HcfBlob out = { .data = nullptr, .len = 0 };
602 res = keyAgreement->generateSecret(keyAgreement, nullptr, nullptr, &out);
603
604 ASSERT_EQ(res, HCF_INVALID_PARAMS);
605 ASSERT_EQ(out.data, nullptr);
606 ASSERT_EQ(out.len, 0);
607
608 HcfObjDestroy(keyAgreement);
609 }
610
611 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest710, TestSize.Level0)
612 {
613 HcfKeyAgreement *keyAgreement = nullptr;
614 int32_t res = HcfKeyAgreementCreate("ECC", &keyAgreement);
615
616 ASSERT_EQ(res, HCF_SUCCESS);
617 ASSERT_NE(keyAgreement, nullptr);
618
619 res = keyAgreement->generateSecret(keyAgreement, ecc256KeyPair_->priKey, ecc256KeyPair_->pubKey, nullptr);
620
621 ASSERT_EQ(res, HCF_INVALID_PARAMS);
622
623 HcfObjDestroy(keyAgreement);
624 }
625
626 HcfKeyAgreementParams g_params = {
627 .algo = HCF_ALG_ECC
628 };
629
630
631 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest801, TestSize.Level0)
632 {
633 HcfKeyAgreementSpi *spiObj = nullptr;
634 int32_t res = HcfKeyAgreementSpiEcdhCreate(&g_params, &spiObj);
635
636 ASSERT_EQ(res, HCF_SUCCESS);
637 ASSERT_NE(spiObj, nullptr);
638 HcfObjDestroy(spiObj);
639 }
640
641 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest802, TestSize.Level0)
642 {
643 HcfKeyAgreementSpi *spiObj = nullptr;
644 int32_t res = HcfKeyAgreementSpiEcdhCreate(&g_params, &spiObj);
645
646 ASSERT_EQ(res, HCF_SUCCESS);
647 ASSERT_NE(spiObj, nullptr);
648
649 HcfBlob out = { .data = nullptr, .len = 0 };
650 res = spiObj->engineGenerateSecret((HcfKeyAgreementSpi *)&obj,
651 ecc256KeyPair_->priKey, ecc256KeyPair_->pubKey, &out);
652 ASSERT_EQ(res, HCF_INVALID_PARAMS);
653
654 HcfObjDestroy(spiObj);
655 }
656
657 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest803, TestSize.Level0)
658 {
659 HcfKeyAgreementSpi *spiObj = nullptr;
660 int32_t res = HcfKeyAgreementSpiEcdhCreate(&g_params, &spiObj);
661
662 ASSERT_EQ(res, HCF_SUCCESS);
663 ASSERT_NE(spiObj, nullptr);
664
665 HcfBlob out = { .data = nullptr, .len = 0 };
666 res = spiObj->engineGenerateSecret(spiObj, (HcfPriKey *)&obj, ecc256KeyPair_->pubKey, &out);
667 ASSERT_EQ(res, HCF_INVALID_PARAMS);
668
669 HcfObjDestroy(spiObj);
670 }
671
672 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest804, TestSize.Level0)
673 {
674 HcfKeyAgreementSpi *spiObj = nullptr;
675 int32_t res = HcfKeyAgreementSpiEcdhCreate(&g_params, &spiObj);
676
677 ASSERT_EQ(res, HCF_SUCCESS);
678 ASSERT_NE(spiObj, nullptr);
679
680 HcfBlob out = { .data = nullptr, .len = 0 };
681 res = spiObj->engineGenerateSecret(spiObj, ecc256KeyPair_->priKey, (HcfPubKey *)&obj, &out);
682 ASSERT_EQ(res, HCF_INVALID_PARAMS);
683
684 HcfObjDestroy(spiObj);
685 }
686
687 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest805, TestSize.Level0)
688 {
689 HcfKeyAgreementSpi *spiObj = nullptr;
690 int32_t res = HcfKeyAgreementSpiEcdhCreate(&g_params, &spiObj);
691
692 ASSERT_EQ(res, HCF_SUCCESS);
693 ASSERT_NE(spiObj, nullptr);
694
695 spiObj->base.destroy(nullptr);
696
697 HcfObjDestroy(spiObj);
698 }
699
700 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest806, TestSize.Level0)
701 {
702 HcfKeyAgreementSpi *spiObj = nullptr;
703 int32_t res = HcfKeyAgreementSpiEcdhCreate(&g_params, &spiObj);
704
705 ASSERT_EQ(res, HCF_SUCCESS);
706 ASSERT_NE(spiObj, nullptr);
707
708 spiObj->base.destroy(&obj);
709
710 HcfObjDestroy(spiObj);
711 }
712
713 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest901, TestSize.Level0)
714 {
715 StartRecordMallocNum();
716 HcfKeyAgreement *keyAgreement = nullptr;
717 int32_t res = HcfKeyAgreementCreate("ECC", &keyAgreement);
718
719 ASSERT_EQ(res, HCF_SUCCESS);
720 ASSERT_NE(keyAgreement, nullptr);
721
722 HcfBlob out = { .data = nullptr, .len = 0 };
723 res = keyAgreement->generateSecret(keyAgreement, ecc256KeyPair_->priKey, ecc256KeyPair_->pubKey, &out);
724
725 ASSERT_EQ(res, HCF_SUCCESS);
726 HcfFree(out.data);
727
728 HcfObjDestroy(keyAgreement);
729
730 uint32_t mallocCount = GetMallocNum();
731
732 for (uint32_t i = 0; i < mallocCount; i++) {
733 ResetRecordMallocNum();
734 SetMockMallocIndex(i);
735 keyAgreement = nullptr;
736 res = HcfKeyAgreementCreate("ECC", &keyAgreement);
737
738 if (res != HCF_SUCCESS) {
739 continue;
740 }
741
742 out = {
743 .data = nullptr,
744 .len = 0
745 };
746 res = keyAgreement->generateSecret(keyAgreement, ecc256KeyPair_->priKey, ecc256KeyPair_->pubKey, &out);
747
748 if (res != HCF_SUCCESS) {
749 HcfObjDestroy(keyAgreement);
750 continue;
751 }
752
753 HcfObjDestroy(keyAgreement);
754 HcfFree(out.data);
755 }
756 EndRecordMallocNum();
757 }
758
759 HWTEST_F(CryptoEccKeyAgreementBySpecTest, CryptoEccKeyAgreementBySpecTest902, TestSize.Level0)
760 {
761 StartRecordOpensslCallNum();
762 HcfKeyAgreement *keyAgreement = nullptr;
763 int32_t res = HcfKeyAgreementCreate("ECC", &keyAgreement);
764
765 ASSERT_EQ(res, HCF_SUCCESS);
766 ASSERT_NE(keyAgreement, nullptr);
767
768 HcfBlob out = { .data = nullptr, .len = 0 };
769 res = keyAgreement->generateSecret(keyAgreement, ecc256KeyPair_->priKey, ecc256KeyPair_->pubKey, &out);
770
771 ASSERT_EQ(res, HCF_SUCCESS);
772 HcfFree(out.data);
773
774 HcfObjDestroy(keyAgreement);
775
776 uint32_t mallocCount = GetOpensslCallNum();
777
778 for (uint32_t i = 0; i < mallocCount; i++) {
779 ResetOpensslCallNum();
780 SetOpensslCallMockIndex(i);
781 keyAgreement = nullptr;
782 res = HcfKeyAgreementCreate("ECC", &keyAgreement);
783
784 if (res != HCF_SUCCESS) {
785 continue;
786 }
787
788 out = {
789 .data = nullptr,
790 .len = 0
791 };
792 res = keyAgreement->generateSecret(keyAgreement, ecc256KeyPair_->priKey, ecc256KeyPair_->pubKey, &out);
793
794 if (res != HCF_SUCCESS) {
795 HcfObjDestroy(keyAgreement);
796 continue;
797 }
798
799 HcfObjDestroy(keyAgreement);
800 HcfFree(out.data);
801 }
802 EndRecordOpensslCallNum();
803 }
804 }
805