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 <cstring>
18 
19 #include "asy_key_generator.h"
20 #include "blob.h"
21 #include "sm2_openssl.h"
22 #include "memory.h"
23 #include "securec.h"
24 #include "signature.h"
25 #include "memory_mock.h"
26 #include "openssl_adapter_mock.h"
27 
28 using namespace std;
29 using namespace testing::ext;
30 
31 namespace {
32 class CryptoSm2SignTest : public testing::Test {
33 public:
34     static void SetUpTestCase();
35     static void TearDownTestCase();
36     void SetUp();
37     void TearDown();
38 
39     static HcfKeyPair *sm2256KeyPair_;
40 };
41 
42 HcfKeyPair *CryptoSm2SignTest::sm2256KeyPair_ = nullptr;
43 
44 static const char *g_mockMessage = "hello world";
45 static HcfBlob g_mockInput = {
46     .data = (uint8_t *)g_mockMessage,
47     .len = 12
48 };
49 
SetUp()50 void CryptoSm2SignTest::SetUp() {}
TearDown()51 void CryptoSm2SignTest::TearDown() {}
52 
SetUpTestCase()53 void CryptoSm2SignTest::SetUpTestCase()
54 {
55     HcfAsyKeyGenerator *generator = nullptr;
56     HcfResult res = HcfAsyKeyGeneratorCreate("SM2_256", &generator);
57     ASSERT_EQ(res, HCF_SUCCESS);
58     ASSERT_NE(generator, nullptr);
59 
60     HcfKeyPair *keyPair = nullptr;
61     res = generator->generateKeyPair(generator, nullptr, &keyPair);
62     ASSERT_EQ(res, HCF_SUCCESS);
63     ASSERT_NE(keyPair, nullptr);
64 
65     sm2256KeyPair_ = keyPair;
66 
67     HcfObjDestroy(generator);
68 }
69 
TearDownTestCase()70 void CryptoSm2SignTest::TearDownTestCase()
71 {
72     HcfObjDestroy(sm2256KeyPair_);
73 }
74 
GetMockClass(void)75 static const char *GetMockClass(void)
76 {
77     return "HcfMock";
78 }
79 
80 static HcfObjectBase obj = {
81     .getClass = GetMockClass,
82     .destroy = nullptr
83 };
84 
HcfSignCreateTest(const char * algName)85 static HcfResult HcfSignCreateTest(const char *algName)
86 {
87     HcfSign *sign = nullptr;
88     HcfResult res = HcfSignCreate(algName, &sign);
89     if (res == HCF_SUCCESS) {
90         HcfObjDestroy(sign);
91     }
92     return res;
93 }
94 
95 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest001, TestSize.Level0)
96 {
97     HcfResult res = HcfSignCreateTest("SM2|SM3");
98     ASSERT_EQ(res, HCF_SUCCESS);
99 }
100 
101 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest002, TestSize.Level0)
102 {
103     HcfResult res = HcfSignCreateTest(nullptr);
104     ASSERT_EQ(res, HCF_INVALID_PARAMS);
105 }
106 
107 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest003, TestSize.Level0)
108 {
109     HcfResult res = HcfSignCreateTest("ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCD"
110         "ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCD");
111     ASSERT_EQ(res, HCF_INVALID_PARAMS);
112 }
113 
114 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest004, TestSize.Level0)
115 {
116     HcfResult res = HcfSignCreateTest("SM5|SM3");
117     ASSERT_NE(res, HCF_SUCCESS);
118 }
119 
120 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest005, TestSize.Level0)
121 {
122     HcfResult res = HcfSignCreateTest("SM2|SM5");
123     ASSERT_NE(res, HCF_SUCCESS);
124 }
125 
126 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest006, TestSize.Level0)
127 {
128     HcfResult res = HcfSignCreateTest("SM2|MD5");
129     ASSERT_NE(res, HCF_SUCCESS);
130 }
131 
132 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest007, TestSize.Level0)
133 {
134     HcfResult res = HcfSignCreateTest("SM2SM3");
135     ASSERT_NE(res, HCF_SUCCESS);
136 }
137 
138 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest008, TestSize.Level0)
139 {
140     HcfResult res = HcfSignCreate("SM2|SM3", nullptr);
141 
142     ASSERT_EQ(res, HCF_INVALID_PARAMS);
143 }
144 
145 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest009, TestSize.Level0)
146 {
147     HcfSign *sign = nullptr;
148     int32_t res = HcfSignCreate("SM2|SM3", &sign);
149 
150     ASSERT_EQ(res, HCF_SUCCESS);
151     ASSERT_NE(sign, nullptr);
152 
153     const char *className = sign->base.getClass();
154 
155     ASSERT_NE(className, nullptr);
156 
157     HcfObjDestroy(sign);
158 }
159 
160 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest010, TestSize.Level0)
161 {
162     HcfSign *sign = nullptr;
163     int32_t res = HcfSignCreate("SM2|SM3", &sign);
164 
165     ASSERT_EQ(res, HCF_SUCCESS);
166     ASSERT_NE(sign, nullptr);
167 
168     sign->base.destroy((HcfObjectBase *)sign);
169 }
170 
171 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest011, TestSize.Level0)
172 {
173     HcfSign *sign = nullptr;
174     int32_t res = HcfSignCreate("SM2|SM3", &sign);
175 
176     ASSERT_EQ(res, HCF_SUCCESS);
177     ASSERT_NE(sign, nullptr);
178 
179     sign->base.destroy(nullptr);
180 
181     HcfObjDestroy(sign);
182 }
183 
184 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest012, TestSize.Level0)
185 {
186     HcfSign *sign = nullptr;
187     int32_t res = HcfSignCreate("SM2|SM3", &sign);
188 
189     ASSERT_EQ(res, HCF_SUCCESS);
190     ASSERT_NE(sign, nullptr);
191 
192     sign->base.destroy(&obj);
193 
194     HcfObjDestroy(sign);
195 }
196 
197 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest013, TestSize.Level0)
198 {
199     HcfSign *sign = nullptr;
200     int32_t res = HcfSignCreate("SM2|SM3", &sign);
201 
202     ASSERT_EQ(res, HCF_SUCCESS);
203     ASSERT_NE(sign, nullptr);
204 
205     const char *algName = sign->getAlgoName(sign);
206 
207     ASSERT_NE(algName, nullptr);
208 
209     HcfObjDestroy(sign);
210 }
211 
212 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest014, TestSize.Level0)
213 {
214     HcfSign *sign = nullptr;
215     int32_t res = HcfSignCreate("SM2|SM3", &sign);
216 
217     ASSERT_EQ(res, HCF_SUCCESS);
218     ASSERT_NE(sign, nullptr);
219 
220     const char *algName = sign->getAlgoName(nullptr);
221 
222     ASSERT_EQ(algName, nullptr);
223 
224     HcfObjDestroy(sign);
225 }
226 
227 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest015, TestSize.Level0)
228 {
229     HcfSign *sign = nullptr;
230     int32_t res = HcfSignCreate("SM2|SM3", &sign);
231 
232     ASSERT_EQ(res, HCF_SUCCESS);
233     ASSERT_NE(sign, nullptr);
234 
235     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
236 
237     ASSERT_EQ(res, HCF_SUCCESS);
238 
239     HcfObjDestroy(sign);
240 }
241 
242 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest016, TestSize.Level0)
243 {
244     HcfSign *sign = nullptr;
245     int32_t res = HcfSignCreate("SM2|SM3", &sign);
246 
247     ASSERT_EQ(res, HCF_SUCCESS);
248     ASSERT_NE(sign, nullptr);
249 
250     res = sign->init(nullptr, nullptr, sm2256KeyPair_->priKey);
251 
252     ASSERT_EQ(res, HCF_INVALID_PARAMS);
253 
254     HcfObjDestroy(sign);
255 }
256 
257 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest017, TestSize.Level0)
258 {
259     HcfSign *sign = nullptr;
260     int32_t res = HcfSignCreate("SM2|SM3", &sign);
261 
262     ASSERT_EQ(res, HCF_SUCCESS);
263     ASSERT_NE(sign, nullptr);
264 
265     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
266 
267     ASSERT_EQ(res, HCF_SUCCESS);
268 
269     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
270 
271     ASSERT_EQ(res, HCF_INVALID_PARAMS);
272 
273     HcfObjDestroy(sign);
274 }
275 
276 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest018, TestSize.Level0)
277 {
278     HcfSign *sign = nullptr;
279     int32_t res = HcfSignCreate("SM2|SM3", &sign);
280 
281     ASSERT_EQ(res, HCF_SUCCESS);
282     ASSERT_NE(sign, nullptr);
283 
284     res = sign->init(sign, nullptr, nullptr);
285 
286     ASSERT_EQ(res, HCF_INVALID_PARAMS);
287 
288     HcfObjDestroy(sign);
289 }
290 
291 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest019, TestSize.Level0)
292 {
293     HcfSign *sign = nullptr;
294     int32_t res = HcfSignCreate("SM2|SM3", &sign);
295 
296     ASSERT_EQ(res, HCF_SUCCESS);
297     ASSERT_NE(sign, nullptr);
298 
299     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
300 
301     ASSERT_EQ(res, HCF_SUCCESS);
302 
303     res = sign->update(sign, &g_mockInput);
304 
305     ASSERT_EQ(res, HCF_SUCCESS);
306 
307     HcfObjDestroy(sign);
308 }
309 
310 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest020, TestSize.Level0)
311 {
312     HcfSign *sign = nullptr;
313     int32_t res = HcfSignCreate("SM2|SM3", &sign);
314 
315     ASSERT_EQ(res, HCF_SUCCESS);
316     ASSERT_NE(sign, nullptr);
317 
318     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
319 
320     ASSERT_EQ(res, HCF_SUCCESS);
321 
322     res = sign->update(nullptr, &g_mockInput);
323 
324     ASSERT_EQ(res, HCF_INVALID_PARAMS);
325 
326     HcfObjDestroy(sign);
327 }
328 
329 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest021, TestSize.Level0)
330 {
331     HcfSign *sign = nullptr;
332     int32_t res = HcfSignCreate("SM2|SM3", &sign);
333 
334     ASSERT_EQ(res, HCF_SUCCESS);
335     ASSERT_NE(sign, nullptr);
336 
337     res = sign->update(sign, &g_mockInput);
338 
339     ASSERT_EQ(res, HCF_INVALID_PARAMS);
340 
341     HcfObjDestroy(sign);
342 }
343 
344 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest022, TestSize.Level0)
345 {
346     HcfSign *sign = nullptr;
347     int32_t res = HcfSignCreate("SM2|SM3", &sign);
348 
349     ASSERT_EQ(res, HCF_SUCCESS);
350     ASSERT_NE(sign, nullptr);
351 
352     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
353 
354     ASSERT_EQ(res, HCF_SUCCESS);
355 
356     res = sign->update(sign, nullptr);
357 
358     ASSERT_EQ(res, HCF_INVALID_PARAMS);
359 
360     HcfObjDestroy(sign);
361 }
362 
363 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest023, TestSize.Level0)
364 {
365     HcfSign *sign = nullptr;
366     int32_t res = HcfSignCreate("SM2|SM3", &sign);
367 
368     ASSERT_EQ(res, HCF_SUCCESS);
369     ASSERT_NE(sign, nullptr);
370 
371     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
372 
373     ASSERT_EQ(res, HCF_SUCCESS);
374 
375     HcfBlob input = {
376         .data = nullptr,
377         .len = 1
378     };
379     res = sign->update(sign, &input);
380 
381     ASSERT_EQ(res, HCF_INVALID_PARAMS);
382 
383     HcfObjDestroy(sign);
384 }
385 
386 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest024, TestSize.Level0)
387 {
388     HcfSign *sign = nullptr;
389     int32_t res = HcfSignCreate("SM2|SM3", &sign);
390 
391     ASSERT_EQ(res, HCF_SUCCESS);
392     ASSERT_NE(sign, nullptr);
393 
394     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
395 
396     ASSERT_EQ(res, HCF_SUCCESS);
397 
398     HcfBlob input = {
399         .data = (uint8_t *)g_mockMessage,
400         .len = 0
401     };
402     res = sign->update(sign, &input);
403 
404     ASSERT_EQ(res, HCF_INVALID_PARAMS);
405 
406     HcfObjDestroy(sign);
407 }
408 
409 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest025, TestSize.Level0)
410 {
411     HcfSign *sign = nullptr;
412     int32_t res = HcfSignCreate("SM2|SM3", &sign);
413 
414     ASSERT_EQ(res, HCF_SUCCESS);
415     ASSERT_NE(sign, nullptr);
416 
417     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
418 
419     ASSERT_EQ(res, HCF_SUCCESS);
420 
421     res = sign->update(sign, &g_mockInput);
422 
423     ASSERT_EQ(res, HCF_SUCCESS);
424 
425     HcfBlob out = { .data = nullptr, .len = 0 };
426     res = sign->sign(sign, nullptr, &out);
427 
428     ASSERT_EQ(res, HCF_SUCCESS);
429     ASSERT_NE(out.data, nullptr);
430     ASSERT_NE(out.len, (const unsigned int)0);
431 
432     HcfFree(out.data);
433     HcfObjDestroy(sign);
434 }
435 
436 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest026, TestSize.Level0)
437 {
438     HcfSign *sign = nullptr;
439     int32_t res = HcfSignCreate("SM2|SM3", &sign);
440 
441     ASSERT_EQ(res, HCF_SUCCESS);
442     ASSERT_NE(sign, nullptr);
443 
444     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
445 
446     ASSERT_EQ(res, HCF_SUCCESS);
447 
448     HcfBlob out = { .data = nullptr, .len = 0 };
449     res = sign->sign(sign, &g_mockInput, &out);
450 
451     ASSERT_EQ(res, HCF_SUCCESS);
452     ASSERT_NE(out.data, nullptr);
453     ASSERT_NE(out.len, (const unsigned int)0);
454 
455     HcfFree(out.data);
456     HcfObjDestroy(sign);
457 }
458 
459 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest027, TestSize.Level0)
460 {
461     HcfSign *sign = nullptr;
462     int32_t res = HcfSignCreate("SM2|SM3", &sign);
463 
464     ASSERT_EQ(res, HCF_SUCCESS);
465     ASSERT_NE(sign, nullptr);
466 
467     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
468 
469     ASSERT_EQ(res, HCF_SUCCESS);
470 
471     res = sign->update(sign, &g_mockInput);
472 
473     ASSERT_EQ(res, HCF_SUCCESS);
474 
475     HcfBlob out = { .data = nullptr, .len = 0 };
476     res = sign->sign(nullptr, nullptr, &out);
477 
478     ASSERT_EQ(res, HCF_INVALID_PARAMS);
479 
480     HcfObjDestroy(sign);
481 }
482 
483 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest028, TestSize.Level0)
484 {
485     HcfSign *sign = nullptr;
486     int32_t res = HcfSignCreate("SM2|SM3", &sign);
487 
488     ASSERT_EQ(res, HCF_SUCCESS);
489     ASSERT_NE(sign, nullptr);
490 
491     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
492 
493     ASSERT_EQ(res, HCF_SUCCESS);
494 
495     HcfBlob out = { .data = nullptr, .len = 0 };
496     res = sign->sign(sign, nullptr, &out);
497 
498     ASSERT_EQ(res, HCF_INVALID_PARAMS);
499 
500     HcfObjDestroy(sign);
501 }
502 
503 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest029, TestSize.Level0)
504 {
505     HcfSign *sign = nullptr;
506     int32_t res = HcfSignCreate("SM2|SM3", &sign);
507 
508     ASSERT_EQ(res, HCF_SUCCESS);
509     ASSERT_NE(sign, nullptr);
510 
511     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
512 
513     ASSERT_EQ(res, HCF_SUCCESS);
514 
515     HcfBlob input = {
516         .data = nullptr,
517         .len = 1
518     };
519     HcfBlob out = { .data = nullptr, .len = 0 };
520     res = sign->sign(sign, &input, &out);
521 
522     ASSERT_EQ(res, HCF_INVALID_PARAMS);
523 
524     HcfObjDestroy(sign);
525 }
526 
527 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest030, TestSize.Level0)
528 {
529     HcfSign *sign = nullptr;
530     int32_t res = HcfSignCreate("SM2|SM3", &sign);
531 
532     ASSERT_EQ(res, HCF_SUCCESS);
533     ASSERT_NE(sign, nullptr);
534 
535     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
536 
537     ASSERT_EQ(res, HCF_SUCCESS);
538 
539     HcfBlob input = {
540         .data = (uint8_t *)g_mockMessage,
541         .len = 0
542     };
543     HcfBlob out = { .data = nullptr, .len = 0 };
544     res = sign->sign(sign, &input, &out);
545 
546     ASSERT_EQ(res, HCF_INVALID_PARAMS);
547 
548     HcfObjDestroy(sign);
549 }
550 
551 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest031, TestSize.Level0)
552 {
553     HcfSign *sign = nullptr;
554     int32_t res = HcfSignCreate("SM2|SM3", &sign);
555 
556     ASSERT_EQ(res, HCF_SUCCESS);
557     ASSERT_NE(sign, nullptr);
558 
559     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
560 
561     ASSERT_EQ(res, HCF_SUCCESS);
562 
563     res = sign->update(sign, &g_mockInput);
564 
565     ASSERT_EQ(res, HCF_SUCCESS);
566 
567     res = sign->sign(sign, nullptr, nullptr);
568 
569     ASSERT_EQ(res, HCF_INVALID_PARAMS);
570 
571     HcfObjDestroy(sign);
572 }
573 
574 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest032, TestSize.Level0)
575 {
576     HcfSign *sign = nullptr;
577     int32_t res = HcfSignCreate("SM2|SM3", &sign);
578 
579     ASSERT_EQ(res, HCF_SUCCESS);
580     ASSERT_NE(sign, nullptr);
581 
582     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
583 
584     ASSERT_EQ(res, HCF_SUCCESS);
585 
586     const char *message = "hello world";
587     HcfBlob input = {
588         .data = (uint8_t *)message,
589         .len = 12
590     };
591     res = sign->update(sign, &input);
592 
593     ASSERT_EQ(res, HCF_SUCCESS);
594 
595     HcfBlob out = { .data = nullptr, .len = 0 };
596     res = sign->sign(sign, nullptr, &out);
597 
598     ASSERT_EQ(res, HCF_SUCCESS);
599     ASSERT_NE(out.data, nullptr);
600     ASSERT_NE(out.len, (const unsigned int)0);
601 
602     res = sign->update(sign, &input);
603 
604     ASSERT_EQ(res, HCF_SUCCESS);
605 
606     HcfBlob out2 = { .data = nullptr, .len = 0 };
607     res = sign->sign(sign, nullptr, &out2);
608 
609     HcfVerify *verify = nullptr;
610     res = HcfVerifyCreate("SM2|SM3", &verify);
611     ASSERT_EQ(res, HCF_SUCCESS);
612     ASSERT_NE(verify, nullptr);
613 
614     verify->init(verify, nullptr, sm2256KeyPair_->pubKey);
615     ASSERT_EQ(res, HCF_SUCCESS);
616 
617     verify->update(verify, &input);
618     ASSERT_EQ(res, HCF_SUCCESS);
619 
620     bool flag = verify->verify(verify, nullptr, &out);
621     ASSERT_EQ(flag, true);
622 
623     verify->update(verify, &input);
624     ASSERT_EQ(res, HCF_SUCCESS);
625 
626     flag = verify->verify(verify, nullptr, &out2);
627     ASSERT_EQ(flag, true);
628 
629     HcfFree(out.data);
630     HcfFree(out2.data);
631     HcfObjDestroy(sign);
632     HcfObjDestroy(verify);
633 }
634 
635 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest033, TestSize.Level0)
636 {
637     HcfSign *sign = nullptr;
638     int32_t res = HcfSignCreate("SM2|SM3", &sign);
639 
640     ASSERT_EQ(res, HCF_SUCCESS);
641     ASSERT_NE(sign, nullptr);
642 
643     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
644 
645     ASSERT_EQ(res, HCF_SUCCESS);
646 
647     const char *message = "hello world";
648     HcfBlob input = {
649         .data = (uint8_t *)message,
650         .len = 12
651     };
652     res = sign->update(sign, &input);
653 
654     ASSERT_EQ(res, HCF_SUCCESS);
655 
656     res = sign->update(sign, &input);
657 
658     ASSERT_EQ(res, HCF_SUCCESS);
659 
660     HcfBlob out2 = { .data = nullptr, .len = 0 };
661     res = sign->sign(sign, nullptr, &out2);
662 
663     HcfFree(out2.data);
664     HcfObjDestroy(sign);
665 }
666 
667 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest034, TestSize.Level0)
668 {
669     HcfSign *sign = nullptr;
670     HcfResult res = HcfSignCreate("SM2|SM3", &sign);
671     ASSERT_EQ(res, HCF_SUCCESS);
672     ASSERT_NE(sign, nullptr);
673 
674     HcfParamsSpec params;
675     res = sign->init(sign, &params, sm2256KeyPair_->priKey);
676     ASSERT_EQ(res, HCF_SUCCESS);
677 
678     const char *message = "hello world";
679     HcfBlob input = {
680         .data = (uint8_t *)message,
681         .len = 12
682     };
683 
684     HcfBlob out = { .data = nullptr, .len = 0 };
685     res = sign->sign(sign, &input, &out);
686     ASSERT_EQ(res, HCF_SUCCESS);
687     ASSERT_NE(out.data, nullptr);
688     ASSERT_NE(out.len, (const unsigned int)0);
689 
690     HcfFree(out.data);
691     HcfObjDestroy(sign);
692 }
693 
694 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest035, TestSize.Level0)
695 {
696     HcfSign *sign = nullptr;
697     HcfResult res = HcfSignCreate("SM2|SM3", &sign);
698     ASSERT_EQ(res, HCF_SUCCESS);
699     ASSERT_NE(sign, nullptr);
700 
701     HcfParamsSpec params;
702     res = sign->init(sign, &params, sm2256KeyPair_->priKey);
703     ASSERT_EQ(res, HCF_SUCCESS);
704 
705     const char *message = "hello world";
706     HcfBlob input = {
707         .data = (uint8_t *)message,
708         .len = 12
709     };
710     res = sign->update(sign, &input);
711     ASSERT_EQ(res, HCF_SUCCESS);
712 
713     HcfBlob out = { .data = nullptr, .len = 0 };
714     res = sign->sign(sign, nullptr, &out);
715     ASSERT_EQ(res, HCF_SUCCESS);
716     ASSERT_NE(out.data, nullptr);
717     ASSERT_NE(out.len, (const unsigned int)0);
718 
719     HcfFree(out.data);
720     HcfObjDestroy(sign);
721 }
722 
723 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest036, TestSize.Level0)
724 {
725     HcfSignSpi *spiObj = nullptr;
726     HcfResult res = HcfSignSpiSm2Create(nullptr, &spiObj);
727 
728     ASSERT_EQ(res, HCF_INVALID_PARAMS);
729     ASSERT_EQ(spiObj, nullptr);
730 }
731 
732 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest037, TestSize.Level0)
733 {
734     HcfSignatureParams params = {
735         .algo = HCF_ALG_SM2,
736         .md = HCF_OPENSSL_DIGEST_SM3,
737     };
738     HcfResult res = HcfSignSpiSm2Create(&params, nullptr);
739     ASSERT_EQ(res, HCF_INVALID_PARAMS);
740 }
741 
742 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest038, TestSize.Level0)
743 {
744     HcfSignatureParams params = {
745         .algo = HCF_ALG_SM2,
746         .md = HCF_OPENSSL_DIGEST_SM3,
747     };
748     HcfSignSpi *spiObj = nullptr;
749     HcfResult res = HcfSignSpiSm2Create(&params, &spiObj);
750 
751     ASSERT_EQ(res, HCF_SUCCESS);
752     ASSERT_NE(spiObj, nullptr);
753 
754     res = spiObj->engineInit((HcfSignSpi *)&obj, nullptr, sm2256KeyPair_->priKey);
755     ASSERT_EQ(res, HCF_INVALID_PARAMS);
756 
757     HcfObjDestroy(spiObj);
758 }
759 
760 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest039, TestSize.Level0)
761 {
762     HcfSignatureParams params = {
763         .algo = HCF_ALG_SM2,
764         .md = HCF_OPENSSL_DIGEST_SM3,
765     };
766     HcfSignSpi *spiObj = nullptr;
767     HcfResult res = HcfSignSpiSm2Create(&params, &spiObj);
768 
769     ASSERT_EQ(res, HCF_SUCCESS);
770     ASSERT_NE(spiObj, nullptr);
771 
772     const char *message = "hello world";
773     HcfBlob input = {
774         .data = (uint8_t *)message,
775         .len = 12
776     };
777     res = spiObj->engineUpdate(nullptr, &input);
778     ASSERT_EQ(res, HCF_INVALID_PARAMS);
779 
780     HcfObjDestroy(spiObj);
781 }
782 
783 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest040, TestSize.Level0)
784 {
785     HcfSignatureParams params = {
786         .algo = HCF_ALG_SM2,
787         .md = HCF_OPENSSL_DIGEST_SM3,
788     };
789     HcfSignSpi *spiObj = nullptr;
790     int32_t res = HcfSignSpiSm2Create(&params, &spiObj);
791 
792     ASSERT_EQ(res, HCF_SUCCESS);
793     ASSERT_NE(spiObj, nullptr);
794 
795     res = spiObj->engineUpdate(spiObj, nullptr);
796     ASSERT_EQ(res, HCF_INVALID_PARAMS);
797 
798     HcfObjDestroy(spiObj);
799 }
800 
801 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest041, TestSize.Level0)
802 {
803     HcfSignatureParams params = {
804         .algo = HCF_ALG_SM2,
805         .md = HCF_OPENSSL_DIGEST_SM3,
806     };
807     HcfSignSpi *spiObj = nullptr;
808     int32_t res = HcfSignSpiSm2Create(&params, &spiObj);
809 
810     ASSERT_EQ(res, HCF_SUCCESS);
811     ASSERT_NE(spiObj, nullptr);
812 
813     spiObj->base.destroy(nullptr);
814 
815     HcfObjDestroy(spiObj);
816 }
817 
MemoryMallocTestFunc(uint32_t mallocCount,HcfBlob * input)818 static void MemoryMallocTestFunc(uint32_t mallocCount, HcfBlob *input)
819 {
820     for (uint32_t i = 0; i < mallocCount; i++) {
821         ResetRecordMallocNum();
822         SetMockMallocIndex(i);
823         HcfAsyKeyGenerator *generator = nullptr;
824         int32_t res = HcfAsyKeyGeneratorCreate("SM2_256", &generator);
825         if (res != HCF_SUCCESS) {
826             continue;
827         }
828         HcfKeyPair *keyPair = nullptr;
829         res = generator->generateKeyPair(generator, nullptr, &keyPair);
830         HcfObjDestroy(generator);
831         if (res != HCF_SUCCESS) {
832             continue;
833         }
834         HcfSign *sign = nullptr;
835         res = HcfSignCreate("SM2|SM3", &sign);
836         if (res != HCF_SUCCESS) {
837             HcfObjDestroy(keyPair);
838             continue;
839         }
840         res = sign->init(sign, nullptr, keyPair->priKey);
841         if (res != HCF_SUCCESS) {
842             HcfObjDestroy(sign);
843             HcfObjDestroy(keyPair);
844             continue;
845         }
846         res = sign->update(sign, input);
847         if (res != HCF_SUCCESS) {
848             HcfObjDestroy(sign);
849             HcfObjDestroy(keyPair);
850             continue;
851         }
852         HcfBlob out = {
853             .data = nullptr,
854             .len = 0
855         };
856         res = sign->sign(sign, nullptr, &out);
857         HcfObjDestroy(sign);
858         HcfObjDestroy(keyPair);
859         if (res == HCF_SUCCESS) {
860             HcfFree(out.data);
861         }
862     }
863 }
864 
865 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest042, TestSize.Level0)
866 {
867     StartRecordMallocNum();
868     HcfAsyKeyGenerator *generator = nullptr;
869     int32_t res = HcfAsyKeyGeneratorCreate("SM2_256", &generator);
870     ASSERT_EQ(res, HCF_SUCCESS);
871     ASSERT_NE(generator, nullptr);
872 
873     HcfKeyPair *keyPair = nullptr;
874     res = generator->generateKeyPair(generator, nullptr, &keyPair);
875     ASSERT_EQ(res, HCF_SUCCESS);
876     ASSERT_NE(keyPair, nullptr);
877 
878     HcfObjDestroy(generator);
879 
880     HcfSign *sign = nullptr;
881     res = HcfSignCreate("SM2|SM3", &sign);
882     ASSERT_EQ(res, HCF_SUCCESS);
883     ASSERT_NE(sign, nullptr);
884 
885     HcfParamsSpec params;
886     res = sign->init(sign, &params, keyPair->priKey);
887     ASSERT_EQ(res, HCF_SUCCESS);
888 
889     const char *message = "hello world";
890     HcfBlob input = {
891         .data = (uint8_t *)message,
892         .len = 12
893     };
894     res = sign->update(sign, &input);
895     ASSERT_EQ(res, HCF_SUCCESS);
896 
897     HcfBlob out = { .data = nullptr, .len = 0 };
898     res = sign->sign(sign, nullptr, &out);
899     ASSERT_EQ(res, HCF_SUCCESS);
900     ASSERT_NE(out.data, nullptr);
901     ASSERT_NE(out.len, (const unsigned int)0);
902 
903     HcfFree(out.data);
904     HcfObjDestroy(keyPair);
905     HcfObjDestroy(sign);
906 
907     uint32_t mallocCount = GetMallocNum();
908     MemoryMallocTestFunc(mallocCount, &input);
909 
910     EndRecordMallocNum();
911 }
912 
OpensslMockTestFunc(uint32_t mallocCount,HcfBlob * input)913 static void OpensslMockTestFunc(uint32_t mallocCount, HcfBlob *input)
914 {
915     for (uint32_t i = 0; i < mallocCount; i++) {
916         ResetOpensslCallNum();
917         SetOpensslCallMockIndex(i);
918         HcfAsyKeyGenerator *generator = nullptr;
919         int32_t res = HcfAsyKeyGeneratorCreate("SM2_256", &generator);
920         if (res != HCF_SUCCESS) {
921             continue;
922         }
923         HcfKeyPair *keyPair = nullptr;
924         res = generator->generateKeyPair(generator, nullptr, &keyPair);
925         HcfObjDestroy(generator);
926         if (res != HCF_SUCCESS) {
927             continue;
928         }
929         HcfSign *sign = nullptr;
930         res = HcfSignCreate("SM2|SM3", &sign);
931         if (res != HCF_SUCCESS) {
932             HcfObjDestroy(keyPair);
933             continue;
934         }
935         res = sign->init(sign, nullptr, keyPair->priKey);
936         if (res != HCF_SUCCESS) {
937             HcfObjDestroy(sign);
938             HcfObjDestroy(keyPair);
939             continue;
940         }
941         uint8_t pSourceData[] = "1234567812345678\0";
942         HcfBlob pSource = {.data = (uint8_t *)pSourceData, .len = strlen((char *)pSourceData)};
943         res = sign->setSignSpecUint8Array(sign, SM2_USER_ID_UINT8ARR, pSource);
944         if (res != HCF_SUCCESS) {
945             HcfObjDestroy(sign);
946             continue;
947         }
948         res = sign->update(sign, input);
949         if (res != HCF_SUCCESS) {
950             HcfObjDestroy(sign);
951             HcfObjDestroy(keyPair);
952             continue;
953         }
954         HcfBlob out = {
955             .data = nullptr,
956             .len = 0
957         };
958         res = sign->sign(sign, input, &out);
959         HcfObjDestroy(sign);
960         HcfObjDestroy(keyPair);
961         if (res == HCF_SUCCESS) {
962             HcfFree(out.data);
963         }
964     }
965 }
966 
967 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest043, TestSize.Level0)
968 {
969     StartRecordOpensslCallNum();
970     HcfAsyKeyGenerator *generator = nullptr;
971     int32_t res = HcfAsyKeyGeneratorCreate("SM2_256", &generator);
972     ASSERT_EQ(res, HCF_SUCCESS);
973     ASSERT_NE(generator, nullptr);
974 
975     HcfKeyPair *keyPair = nullptr;
976     res = generator->generateKeyPair(generator, nullptr, &keyPair);
977     ASSERT_EQ(res, HCF_SUCCESS);
978     ASSERT_NE(keyPair, nullptr);
979 
980     HcfObjDestroy(generator);
981 
982     HcfSign *sign = nullptr;
983     res = HcfSignCreate("SM2|SM3", &sign);
984     ASSERT_EQ(res, HCF_SUCCESS);
985     ASSERT_NE(sign, nullptr);
986 
987     HcfParamsSpec params;
988     res = sign->init(sign, &params, keyPair->priKey);
989     ASSERT_EQ(res, HCF_SUCCESS);
990 
991     uint8_t pSourceData[] = "1234567812345678\0";
992     HcfBlob pSource = {.data = (uint8_t *)pSourceData, .len = strlen((char *)pSourceData)};
993     res = sign->setSignSpecUint8Array(sign, SM2_USER_ID_UINT8ARR, pSource);
994     ASSERT_EQ(res, HCF_SUCCESS);
995     const char *message = "hello world";
996     HcfBlob input = {
997         .data = (uint8_t *)message,
998         .len = 12
999     };
1000     res = sign->update(sign, &input);
1001     ASSERT_EQ(res, HCF_SUCCESS);
1002 
1003     HcfBlob out = { .data = nullptr, .len = 0 };
1004     res = sign->sign(sign, &input, &out);
1005     ASSERT_EQ(res, HCF_SUCCESS);
1006     ASSERT_NE(out.data, nullptr);
1007     ASSERT_NE(out.len, (const unsigned int)0);
1008 
1009     HcfFree(out.data);
1010     HcfObjDestroy(sign);
1011     HcfObjDestroy(keyPair);
1012 
1013     uint32_t mallocCount = GetOpensslCallNum();
1014     OpensslMockTestFunc(mallocCount, &input);
1015 
1016     EndRecordOpensslCallNum();
1017 }
1018 
1019 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest044, TestSize.Level0)
1020 {
1021     HcfSign *sign = nullptr;
1022     int32_t res = HcfSignCreate("SM2|SM3", &sign);
1023 
1024     ASSERT_EQ(res, HCF_SUCCESS);
1025     ASSERT_NE(sign, nullptr);
1026 
1027     uint8_t pSourceData[] = "1234567812345678\0";
1028     HcfBlob pSource = {.data = (uint8_t *)pSourceData, .len = strlen((char *)pSourceData)};
1029     res = sign->setSignSpecUint8Array(sign, SM2_USER_ID_UINT8ARR, pSource);
1030 
1031     ASSERT_EQ(res, HCF_SUCCESS);
1032 
1033     HcfObjDestroy(sign);
1034 }
1035 
1036 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest045, TestSize.Level0)
1037 {
1038     HcfSign *sign = nullptr;
1039     int32_t res = HcfSignCreate("SM2|SM3", &sign);
1040 
1041     ASSERT_EQ(res, HCF_SUCCESS);
1042     ASSERT_NE(sign, nullptr);
1043 
1044     HcfBlob pSource = {.data = nullptr, .len = 0};
1045     res = sign->setSignSpecUint8Array(sign, SM2_USER_ID_UINT8ARR, pSource);
1046 
1047     ASSERT_EQ(res, HCF_SUCCESS);
1048 
1049     HcfObjDestroy(sign);
1050 }
1051 
1052 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest046, TestSize.Level0)
1053 {
1054     HcfSign *sign = nullptr;
1055     int32_t res = HcfSignCreate("SM2|SM3", &sign);
1056 
1057     ASSERT_EQ(res, HCF_SUCCESS);
1058     ASSERT_NE(sign, nullptr);
1059 
1060     uint8_t pSourceData[] = "1234567812345678\0";
1061     HcfBlob pSource = {.data = (uint8_t *)pSourceData, .len = strlen((char *)pSourceData)};
1062     res = sign->setSignSpecUint8Array(nullptr, SM2_USER_ID_UINT8ARR, pSource);
1063 
1064     ASSERT_EQ(res, HCF_INVALID_PARAMS);
1065 
1066     HcfObjDestroy(sign);
1067 }
1068 
1069 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest047, TestSize.Level0)
1070 {
1071     HcfSign *sign = nullptr;
1072     int32_t res = HcfSignCreate("SM2|SM3", &sign);
1073 
1074     ASSERT_EQ(res, HCF_SUCCESS);
1075     ASSERT_NE(sign, nullptr);
1076 
1077     uint8_t pSourceData[] = "1234567812345678\0";
1078     HcfBlob pSource = {.data = (uint8_t *)pSourceData, .len = strlen((char *)pSourceData)};
1079     res = sign->setSignSpecUint8Array(sign, PSS_SALT_LEN_INT, pSource);
1080 
1081     ASSERT_EQ(res, HCF_INVALID_PARAMS);
1082 
1083     HcfObjDestroy(sign);
1084 }
1085 
1086 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest048, TestSize.Level0)
1087 {
1088     HcfSign *sign = nullptr;
1089     int32_t res = HcfSignCreate("SM2|SM3", &sign);
1090 
1091     ASSERT_EQ(res, HCF_SUCCESS);
1092     ASSERT_NE(sign, nullptr);
1093 
1094     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
1095     ASSERT_EQ(res, HCF_SUCCESS);
1096 
1097     uint8_t pSourceData[] = "1234567812345678\0";
1098     HcfBlob pSource = {.data = (uint8_t *)pSourceData, .len = strlen((char *)pSourceData)};
1099     res = sign->setSignSpecUint8Array(sign, SM2_USER_ID_UINT8ARR, pSource);
1100 
1101     ASSERT_EQ(res, HCF_SUCCESS);
1102 
1103     HcfObjDestroy(sign);
1104 }
1105 
1106 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest049, TestSize.Level0)
1107 {
1108     HcfSign *sign = nullptr;
1109     int32_t res = HcfSignCreate("SM2|SM3", &sign);
1110 
1111     ASSERT_EQ(res, HCF_SUCCESS);
1112     ASSERT_NE(sign, nullptr);
1113 
1114     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
1115     ASSERT_EQ(res, HCF_SUCCESS);
1116 
1117     HcfBlob pSource = {.data = nullptr, .len = 0};
1118     res = sign->setSignSpecUint8Array(sign, SM2_USER_ID_UINT8ARR, pSource);
1119 
1120     ASSERT_EQ(res, HCF_SUCCESS);
1121 
1122     HcfObjDestroy(sign);
1123 }
1124 
1125 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest050, TestSize.Level0)
1126 {
1127     HcfSign *sign = nullptr;
1128     int32_t res = HcfSignCreate("SM2|SM3", &sign);
1129 
1130     ASSERT_EQ(res, HCF_SUCCESS);
1131     ASSERT_NE(sign, nullptr);
1132 
1133     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
1134     ASSERT_EQ(res, HCF_SUCCESS);
1135 
1136     uint8_t pSourceData[] = "1234567812345678\0";
1137     HcfBlob pSource = {.data = (uint8_t *)pSourceData, .len = strlen((char *)pSourceData)};
1138     res = sign->setSignSpecUint8Array(nullptr, SM2_USER_ID_UINT8ARR, pSource);
1139 
1140     ASSERT_NE(res, HCF_SUCCESS);
1141 
1142     HcfObjDestroy(sign);
1143 }
1144 
1145 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest051, TestSize.Level0)
1146 {
1147     HcfSign *sign = nullptr;
1148     int32_t res = HcfSignCreate("SM2|SM3", &sign);
1149 
1150     ASSERT_EQ(res, HCF_SUCCESS);
1151     ASSERT_NE(sign, nullptr);
1152 
1153     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
1154     ASSERT_EQ(res, HCF_SUCCESS);
1155 
1156     uint8_t pSourceData[] = "1234567812345678\0";
1157     HcfBlob pSource = {.data = (uint8_t *)pSourceData, .len = strlen((char *)pSourceData)};
1158     res = sign->setSignSpecUint8Array(sign, PSS_SALT_LEN_INT, pSource);
1159 
1160     ASSERT_NE(res, HCF_SUCCESS);
1161 
1162     HcfObjDestroy(sign);
1163 }
1164 
1165 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest052, TestSize.Level0)
1166 {
1167     HcfSign *sign = nullptr;
1168     int32_t res = HcfSignCreate("SM2|SM3", &sign);
1169 
1170     ASSERT_EQ(res, HCF_SUCCESS);
1171     ASSERT_NE(sign, nullptr);
1172 
1173     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
1174     ASSERT_EQ(res, HCF_SUCCESS);
1175 
1176     int32_t saltlen = 0;
1177     res = sign->setSignSpecInt(sign, PSS_SALT_LEN_INT, saltlen);
1178 
1179     ASSERT_EQ(res, HCF_NOT_SUPPORT);
1180 
1181     HcfObjDestroy(sign);
1182 }
1183 
1184 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest053, TestSize.Level0)
1185 {
1186     HcfSign *sign = nullptr;
1187     int32_t res = HcfSignCreate("SM2|SM3", &sign);
1188 
1189     ASSERT_EQ(res, HCF_SUCCESS);
1190     ASSERT_NE(sign, nullptr);
1191 
1192     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
1193     ASSERT_EQ(res, HCF_SUCCESS);
1194 
1195     int32_t returnInt = 0;
1196     res = sign->getSignSpecInt(sign, PSS_SALT_LEN_INT, &returnInt);
1197 
1198     ASSERT_EQ(res, HCF_NOT_SUPPORT);
1199 
1200     HcfObjDestroy(sign);
1201 }
1202 
1203 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest054, TestSize.Level0)
1204 {
1205     HcfSign *sign = nullptr;
1206     int32_t res = HcfSignCreate("SM2|SM3", &sign);
1207 
1208     ASSERT_EQ(res, HCF_SUCCESS);
1209     ASSERT_NE(sign, nullptr);
1210 
1211     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
1212     ASSERT_EQ(res, HCF_SUCCESS);
1213 
1214     res = sign->getSignSpecInt(sign, PSS_SALT_LEN_INT, nullptr);
1215 
1216     ASSERT_EQ(res, HCF_INVALID_PARAMS);
1217 
1218     HcfObjDestroy(sign);
1219 }
1220 
1221 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest055, TestSize.Level0)
1222 {
1223     HcfSign *sign = nullptr;
1224     int32_t res = HcfSignCreate("SM2|SM3", &sign);
1225 
1226     ASSERT_EQ(res, HCF_SUCCESS);
1227     ASSERT_NE(sign, nullptr);
1228 
1229     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
1230     ASSERT_EQ(res, HCF_SUCCESS);
1231 
1232     char *returnStr = nullptr;
1233     res = sign->getSignSpecString(sign, SM2_USER_ID_UINT8ARR, &returnStr);
1234 
1235     ASSERT_EQ(res, HCF_NOT_SUPPORT);
1236 
1237     HcfObjDestroy(sign);
1238 }
1239 
1240 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest056, TestSize.Level0)
1241 {
1242     HcfSign *sign = nullptr;
1243     int32_t res = HcfSignCreate("SM2|SM3", &sign);
1244 
1245     ASSERT_EQ(res, HCF_SUCCESS);
1246     ASSERT_NE(sign, nullptr);
1247 
1248     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
1249     ASSERT_EQ(res, HCF_SUCCESS);
1250 
1251     res = sign->getSignSpecString(sign, SM2_USER_ID_UINT8ARR, nullptr);
1252 
1253     ASSERT_EQ(res, HCF_INVALID_PARAMS);
1254 
1255     HcfObjDestroy(sign);
1256 }
1257 
1258 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest057, TestSize.Level0)
1259 {
1260     HcfSign *sign = nullptr;
1261     int32_t res = HcfSignCreate("SM2|SM3", &sign);
1262 
1263     ASSERT_EQ(res, HCF_SUCCESS);
1264     ASSERT_NE(sign, nullptr);
1265 
1266     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
1267     ASSERT_EQ(res, HCF_SUCCESS);
1268 
1269     char *returnStr = nullptr;
1270     res = sign->getSignSpecString(nullptr, SM2_USER_ID_UINT8ARR, &returnStr);
1271 
1272     ASSERT_EQ(res, HCF_INVALID_PARAMS);
1273 
1274     HcfObjDestroy(sign);
1275 }
1276 
1277 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest058, TestSize.Level0)
1278 {
1279     HcfSign *sign = nullptr;
1280     int32_t res = HcfSignCreate("SM2|SM3", &sign);
1281 
1282     ASSERT_EQ(res, HCF_SUCCESS);
1283     ASSERT_NE(sign, nullptr);
1284 
1285     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
1286     ASSERT_EQ(res, HCF_SUCCESS);
1287 
1288     char *returnStr = nullptr;
1289     res = sign->getSignSpecString(sign, PSS_MD_NAME_STR, &returnStr);
1290     ASSERT_EQ(res, HCF_NOT_SUPPORT);
1291     HcfObjDestroy(sign);
1292 }
1293 
1294 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest059, TestSize.Level0)
1295 {
1296     HcfSignatureParams params = {
1297         .algo = HCF_ALG_SM2,
1298         .md = HCF_OPENSSL_DIGEST_SM3,
1299     };
1300     HcfSignSpi *spiObj = nullptr;
1301     int32_t res = HcfSignSpiSm2Create(&params, &spiObj);
1302 
1303     ASSERT_EQ(res, HCF_SUCCESS);
1304     ASSERT_NE(spiObj, nullptr);
1305 
1306     uint8_t pSourceData[] = "1234567812345678\0";
1307     HcfBlob pSource = {.data = (uint8_t *)pSourceData, .len = strlen((char *)pSourceData)};
1308     res = spiObj->engineSetSignSpecUint8Array(nullptr, SM2_USER_ID_UINT8ARR, pSource);
1309     ASSERT_EQ(res, HCF_INVALID_PARAMS);
1310 
1311     HcfObjDestroy(spiObj);
1312 }
1313 
1314 // sign设置userid参数,进行签名,verify不设置参数进行验签
1315 HWTEST_F(CryptoSm2SignTest, CryptoSm2SignTest060, TestSize.Level0)
1316 {
1317     HcfSign *sign = nullptr;
1318     int32_t res = HcfSignCreate("SM2|SM3", &sign);
1319 
1320     ASSERT_EQ(res, HCF_SUCCESS);
1321     ASSERT_NE(sign, nullptr);
1322 
1323     res = sign->init(sign, nullptr, sm2256KeyPair_->priKey);
1324     ASSERT_EQ(res, HCF_SUCCESS);
1325 
1326     uint8_t pSourceData[] = "1234567812345678\0";
1327     HcfBlob pSource = {.data = (uint8_t *)pSourceData, .len = strlen((char *)pSourceData)};
1328     res = sign->setSignSpecUint8Array(sign, SM2_USER_ID_UINT8ARR, pSource);
1329     ASSERT_EQ(res, HCF_SUCCESS);
1330 
1331     HcfBlob out = { .data = nullptr, .len = 0 };
1332     res = sign->sign(sign, &g_mockInput, &out);
1333 
1334     ASSERT_EQ(res, HCF_SUCCESS);
1335     ASSERT_NE(out.data, nullptr);
1336     ASSERT_NE(out.len, (const unsigned int)0);
1337 
1338     HcfVerify *verify = nullptr;
1339     res = HcfVerifyCreate("SM2|SM3", &verify);
1340 
1341     ASSERT_EQ(res, HCF_SUCCESS);
1342     ASSERT_NE(verify, nullptr);
1343 
1344     res = verify->init(verify, nullptr, sm2256KeyPair_->pubKey);
1345 
1346     ASSERT_EQ(res, HCF_SUCCESS);
1347 
1348     bool flag = verify->verify(verify, &g_mockInput, &out);
1349 
1350     ASSERT_EQ(flag, true);
1351 
1352     HcfFree(out.data);
1353     HcfObjDestroy(sign);
1354     HcfObjDestroy(verify);
1355 }
1356 }
1357