• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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(&paramSpec);
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(&paramSpec);
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(&paramSpec);
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(&paramSpec);
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