• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *    http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include <stdlib.h>
16 #include <stdio.h>
17 #include <pthread.h>
18 #include <string.h>
19 #include <stdbool.h>
20 #include <gtest/gtest.h>
21 
22 #include "crypto_framework_signature_test.h"
23 #include "blob.h"
24 #include "log.h"
25 #include "rand.h"
26 
27 #define OH_CRYPTO_SIGN_TEST_DATA_SIZE 200
28 
29 
30 using namespace testing::ext;
31 namespace Unittest::CryptoFrameworkSignatureNapiTest {
32 class OHCryptoFrameworkSignatureNapiTest : public testing::Test {
33 public:
34     static void SetUpTestCase(void);
35     static void TearDownTestCase(void);
36     void SetUp();
37     void TearDown();
38 };
39 
SetUpTestCase(void)40 void OHCryptoFrameworkSignatureNapiTest::SetUpTestCase(void)
41 {
42 }
43 
TearDownTestCase(void)44 void OHCryptoFrameworkSignatureNapiTest::TearDownTestCase(void)
45 {
46 }
47 
SetUp()48 void OHCryptoFrameworkSignatureNapiTest::SetUp()
49 {
50 }
51 
TearDown()52 void OHCryptoFrameworkSignatureNapiTest::TearDown()
53 {
54 }
55 
56 SignSpec g_signPkcs1Data[] = {
57     /* RSA512 */
58     {(uint8_t *)"RSA512|PKCS1|MD5", (uint8_t *)"RSA512", 62},        // 0
59     {(uint8_t *)"RSA512|PKCS1|SHA1", (uint8_t *)"RSA512", 62},       // 1
60     {(uint8_t *)"RSA512|PKCS1|SHA224", (uint8_t *)"RSA512", 62},     // 2
61     {(uint8_t *)"RSA512|PKCS1|SHA256", (uint8_t *)"RSA512", 62},     // 3
62     /* RSA768 */
63     {(uint8_t *)"RSA768|PKCS1|MD5", (uint8_t *)"RSA768", 62},        // 4
64     {(uint8_t *)"RSA768|PKCS1|SHA1", (uint8_t *)"RSA768", 62},       // 5
65     {(uint8_t *)"RSA768|PKCS1|SHA224", (uint8_t *)"RSA768", 62},     // 6
66     {(uint8_t *)"RSA768|PKCS1|SHA256", (uint8_t *)"RSA768", 62},     // 7
67     {(uint8_t *)"RSA768|PKCS1|SHA384", (uint8_t *)"RSA768", 62},     // 8
68     {(uint8_t *)"RSA768|PKCS1|SHA512", (uint8_t *)"RSA768", 62},     // 9
69     /* RSA1024 */
70     {(uint8_t *)"RSA1024|PKCS1|MD5", (uint8_t *)"RSA1024", 62},      // 10
71     {(uint8_t *)"RSA1024|PKCS1|SHA1", (uint8_t *)"RSA1024", 62},     // 11
72     {(uint8_t *)"RSA1024|PKCS1|SHA224", (uint8_t *)"RSA1024", 62},   // 12
73     {(uint8_t *)"RSA1024|PKCS1|SHA256", (uint8_t *)"RSA1024", 62},   // 13
74     {(uint8_t *)"RSA1024|PKCS1|SHA384", (uint8_t *)"RSA1024", 62},   // 14
75     {(uint8_t *)"RSA1024|PKCS1|SHA512", (uint8_t *)"RSA1024", 62},   // 15
76     /* RSA2048 */
77     {(uint8_t *)"RSA2048|PKCS1|MD5", (uint8_t *)"RSA2048", 62},      // 16
78     {(uint8_t *)"RSA2048|PKCS1|SHA1", (uint8_t *)"RSA2048", 62},     // 17
79     {(uint8_t *)"RSA2048|PKCS1|SHA224", (uint8_t *)"RSA2048", 62},   // 18
80     {(uint8_t *)"RSA2048|PKCS1|SHA256", (uint8_t *)"RSA2048", 62},   // 19
81     {(uint8_t *)"RSA2048|PKCS1|SHA384", (uint8_t *)"RSA2048", 62},   // 20
82     {(uint8_t *)"RSA2048|PKCS1|SHA512", (uint8_t *)"RSA2048", 62},   // 21
83     /* RSA3072 */
84     {(uint8_t *)"RSA3072|PKCS1|MD5", (uint8_t *)"RSA3072", 62},      // 22
85     {(uint8_t *)"RSA3072|PKCS1|SHA1", (uint8_t *)"RSA3072", 62},     // 23
86     {(uint8_t *)"RSA3072|PKCS1|SHA224", (uint8_t *)"RSA3072", 62},   // 24
87     {(uint8_t *)"RSA3072|PKCS1|SHA256", (uint8_t *)"RSA3072", 62},   // 25
88     {(uint8_t *)"RSA3072|PKCS1|SHA384", (uint8_t *)"RSA3072", 62},   // 26
89     {(uint8_t *)"RSA3072|PKCS1|SHA512", (uint8_t *)"RSA3072", 62},   // 27
90     /* RSA4096 */
91     {(uint8_t *)"RSA4096|PKCS1|MD5", (uint8_t *)"RSA4096", 62},      // 28
92     {(uint8_t *)"RSA4096|PKCS1|SHA1", (uint8_t *)"RSA4096", 62},     // 29
93     {(uint8_t *)"RSA4096|PKCS1|SHA224", (uint8_t *)"RSA4096", 62},   // 30
94     {(uint8_t *)"RSA4096|PKCS1|SHA256", (uint8_t *)"RSA4096", 62},   // 31
95     {(uint8_t *)"RSA4096|PKCS1|SHA384", (uint8_t *)"RSA4096", 62},   // 32
96     {(uint8_t *)"RSA4096|PKCS1|SHA512", (uint8_t *)"RSA4096", 62},   // 33
97     /* RSA8192 */
98     {(uint8_t *)"RSA8192|PKCS1|MD5", (uint8_t *)"RSA8192", 62},      // 34
99     {(uint8_t *)"RSA8192|PKCS1|SHA1", (uint8_t *)"RSA8192", 62},     // 35
100     {(uint8_t *)"RSA8192|PKCS1|SHA224", (uint8_t *)"RSA8192", 62},   // 36
101     {(uint8_t *)"RSA8192|PKCS1|SHA256", (uint8_t *)"RSA8192", 62},   // 37
102     {(uint8_t *)"RSA8192|PKCS1|SHA384", (uint8_t *)"RSA8192", 62},   // 38
103     {(uint8_t *)"RSA8192|PKCS1|SHA512", (uint8_t *)"RSA8192", 62},   // 39
104     /* RSA */
105     {(uint8_t *)"RSA|PKCS1|MD5", (uint8_t *)"RSA512", 62},           // 40
106 };
107 
108 SignSpec g_signPssData[] = {
109     /*RSA PSS MD5 */
110     {(uint8_t *)"RSA|PSS|MD5|MGF1_MD5", (uint8_t *)"RSA512", 62},              // 0
111     /*RSA512 PSS MD5 */
112     {(uint8_t *)"RSA512|PSS|MD5|MGF1_MD5", (uint8_t *)"RSA512", 62},           // 1
113     {(uint8_t *)"RSA512|PSS|MD5|MGF1_SHA1", (uint8_t *)"RSA512", 62},          // 2
114     {(uint8_t *)"RSA512|PSS|MD5|MGF1_SHA224", (uint8_t *)"RSA512", 62},        // 3
115     {(uint8_t *)"RSA512|PSS|MD5|MGF1_SHA256", (uint8_t *)"RSA512", 62},        // 4
116     /*RSA512 PSS SHA1 */
117     {(uint8_t *)"RSA512|PSS|SHA1|MGF1_MD5", (uint8_t *)"RSA512", 62},           // 5
118     {(uint8_t *)"RSA512|PSS|SHA1|MGF1_SHA1", (uint8_t *)"RSA512", 62},          // 6
119     {(uint8_t *)"RSA512|PSS|SHA1|MGF1_SHA224", (uint8_t *)"RSA512", 62},        // 7
120     {(uint8_t *)"RSA512|PSS|SHA1|MGF1_SHA256", (uint8_t *)"RSA512", 62},        // 8
121     /*RSA512 PSS SHA224 */
122     {(uint8_t *)"RSA512|PSS|SHA224|MGF1_MD5", (uint8_t *)"RSA512", 62},           // 9
123     {(uint8_t *)"RSA512|PSS|SHA224|MGF1_SHA1", (uint8_t *)"RSA512", 62},          // 10
124     {(uint8_t *)"RSA512|PSS|SHA224|MGF1_SHA224", (uint8_t *)"RSA512", 62},        // 11
125     {(uint8_t *)"RSA512|PSS|SHA224|MGF1_SHA256", (uint8_t *)"RSA512", 62},        // 12
126     /*RSA512 PSS SHA256 */
127     {(uint8_t *)"RSA512|PSS|SHA256|MGF1_MD5", (uint8_t *)"RSA512", 62},           // 13
128     {(uint8_t *)"RSA512|PSS|SHA256|MGF1_SHA1", (uint8_t *)"RSA512", 62},          // 14
129     {(uint8_t *)"RSA512|PSS|SHA256|MGF1_SHA224", (uint8_t *)"RSA512", 62},        // 15
130     /*RSA768 PSS MD5 */
131     {(uint8_t *)"RSA768|PSS|MD5|MGF1_MD5", (uint8_t *)"RSA768", 62},           // 16
132     {(uint8_t *)"RSA768|PSS|MD5|MGF1_SHA1", (uint8_t *)"RSA768", 62},          // 17
133     {(uint8_t *)"RSA768|PSS|MD5|MGF1_SHA224", (uint8_t *)"RSA768", 62},        // 18
134     {(uint8_t *)"RSA768|PSS|MD5|MGF1_SHA256", (uint8_t *)"RSA768", 62},        // 19
135     {(uint8_t *)"RSA768|PSS|MD5|MGF1_SHA384", (uint8_t *)"RSA768", 62},        // 20
136     {(uint8_t *)"RSA768|PSS|MD5|MGF1_SHA512", (uint8_t *)"RSA768", 62},        // 21
137     /*RSA768 PSS SHA1 */
138     {(uint8_t *)"RSA768|PSS|SHA1|MGF1_MD5", (uint8_t *)"RSA768", 62},           // 22
139     {(uint8_t *)"RSA768|PSS|SHA1|MGF1_SHA1", (uint8_t *)"RSA768", 62},          // 23
140     {(uint8_t *)"RSA768|PSS|SHA1|MGF1_SHA224", (uint8_t *)"RSA768", 62},        // 24
141     {(uint8_t *)"RSA768|PSS|SHA1|MGF1_SHA256", (uint8_t *)"RSA768", 62},        // 25
142     {(uint8_t *)"RSA768|PSS|SHA1|MGF1_SHA384", (uint8_t *)"RSA768", 62},        // 26
143     {(uint8_t *)"RSA768|PSS|SHA1|MGF1_SHA512", (uint8_t *)"RSA768", 62},        // 27
144     /*RSA768 PSS SHA224 */
145     {(uint8_t *)"RSA768|PSS|SHA224|MGF1_MD5", (uint8_t *)"RSA768", 62},           // 28
146     {(uint8_t *)"RSA768|PSS|SHA224|MGF1_SHA1", (uint8_t *)"RSA768", 62},          // 29
147     {(uint8_t *)"RSA768|PSS|SHA224|MGF1_SHA224", (uint8_t *)"RSA768", 62},        // 30
148     {(uint8_t *)"RSA768|PSS|SHA224|MGF1_SHA256", (uint8_t *)"RSA768", 62},        // 31
149     {(uint8_t *)"RSA768|PSS|SHA224|MGF1_SHA384", (uint8_t *)"RSA768", 62},        // 32
150     {(uint8_t *)"RSA768|PSS|SHA224|MGF1_SHA512", (uint8_t *)"RSA768", 62},        // 33
151     /*RSA768 PSS SHA256 */
152     {(uint8_t *)"RSA768|PSS|SHA256|MGF1_MD5", (uint8_t *)"RSA768", 62},           // 34
153     {(uint8_t *)"RSA768|PSS|SHA256|MGF1_SHA1", (uint8_t *)"RSA768", 62},          // 35
154     {(uint8_t *)"RSA768|PSS|SHA256|MGF1_SHA224", (uint8_t *)"RSA768", 62},        // 36
155     {(uint8_t *)"RSA768|PSS|SHA256|MGF1_SHA256", (uint8_t *)"RSA768", 62},        // 37
156     {(uint8_t *)"RSA768|PSS|SHA256|MGF1_SHA384", (uint8_t *)"RSA768", 62},        // 38
157     /*RSA768 PSS SHA384 */
158     {(uint8_t *)"RSA768|PSS|SHA384|MGF1_MD5", (uint8_t *)"RSA768", 62},           // 39
159     {(uint8_t *)"RSA768|PSS|SHA384|MGF1_SHA1", (uint8_t *)"RSA768", 62},          // 40
160     {(uint8_t *)"RSA768|PSS|SHA384|MGF1_SHA224", (uint8_t *)"RSA768", 62},        // 41
161     {(uint8_t *)"RSA768|PSS|SHA384|MGF1_SHA256", (uint8_t *)"RSA768", 62},        // 42
162     /*RSA768 PSS SHA512 */
163     {(uint8_t *)"RSA768|PSS|SHA512|MGF1_MD5", (uint8_t *)"RSA768", 62},           // 43
164     {(uint8_t *)"RSA768|PSS|SHA512|MGF1_SHA1", (uint8_t *)"RSA768", 62},          // 44
165     {(uint8_t *)"RSA768|PSS|SHA512|MGF1_SHA224", (uint8_t *)"RSA768", 62},        // 45
166     /*RSA1024 PSS MD5 */
167     {(uint8_t *)"RSA1024|PSS|MD5|MGF1_MD5", (uint8_t *)"RSA1024", 62},           // 46
168     {(uint8_t *)"RSA1024|PSS|MD5|MGF1_SHA1", (uint8_t *)"RSA1024", 62},          // 47
169     {(uint8_t *)"RSA1024|PSS|MD5|MGF1_SHA224", (uint8_t *)"RSA1024", 62},        // 48
170     {(uint8_t *)"RSA1024|PSS|MD5|MGF1_SHA256", (uint8_t *)"RSA1024", 62},        // 49
171     {(uint8_t *)"RSA1024|PSS|MD5|MGF1_SHA384", (uint8_t *)"RSA1024", 62},        // 50
172     {(uint8_t *)"RSA1024|PSS|MD5|MGF1_SHA512", (uint8_t *)"RSA1024", 62},        // 51
173     /*RSA1024 PSS SHA1 */
174     {(uint8_t *)"RSA1024|PSS|SHA1|MGF1_MD5", (uint8_t *)"RSA1024", 62},           // 52
175     {(uint8_t *)"RSA1024|PSS|SHA1|MGF1_SHA1", (uint8_t *)"RSA1024", 62},          // 53
176     {(uint8_t *)"RSA1024|PSS|SHA1|MGF1_SHA224", (uint8_t *)"RSA1024", 62},        // 54
177     {(uint8_t *)"RSA1024|PSS|SHA1|MGF1_SHA256", (uint8_t *)"RSA1024", 62},        // 55
178     {(uint8_t *)"RSA1024|PSS|SHA1|MGF1_SHA384", (uint8_t *)"RSA1024", 62},        // 56
179     {(uint8_t *)"RSA1024|PSS|SHA1|MGF1_SHA512", (uint8_t *)"RSA1024", 62},        // 57
180     /*RSA1024 PSS SHA224 */
181     {(uint8_t *)"RSA1024|PSS|SHA224|MGF1_MD5", (uint8_t *)"RSA1024", 62},           // 58
182     {(uint8_t *)"RSA1024|PSS|SHA224|MGF1_SHA1", (uint8_t *)"RSA1024", 62},          // 59
183     {(uint8_t *)"RSA1024|PSS|SHA224|MGF1_SHA224", (uint8_t *)"RSA1024", 62},        // 60
184     {(uint8_t *)"RSA1024|PSS|SHA224|MGF1_SHA256", (uint8_t *)"RSA1024", 62},        // 61
185     {(uint8_t *)"RSA1024|PSS|SHA224|MGF1_SHA384", (uint8_t *)"RSA1024", 62},        // 62
186     {(uint8_t *)"RSA1024|PSS|SHA224|MGF1_SHA512", (uint8_t *)"RSA1024", 62},        // 63
187     /*RSA1024 PSS SHA256 */
188     {(uint8_t *)"RSA1024|PSS|SHA256|MGF1_MD5", (uint8_t *)"RSA1024", 62},           // 64
189     {(uint8_t *)"RSA1024|PSS|SHA256|MGF1_SHA1", (uint8_t *)"RSA1024", 62},          // 65
190     {(uint8_t *)"RSA1024|PSS|SHA256|MGF1_SHA224", (uint8_t *)"RSA1024", 62},        // 66
191     {(uint8_t *)"RSA1024|PSS|SHA256|MGF1_SHA256", (uint8_t *)"RSA1024", 62},        // 67
192     {(uint8_t *)"RSA1024|PSS|SHA256|MGF1_SHA384", (uint8_t *)"RSA1024", 62},        // 68
193     {(uint8_t *)"RSA1024|PSS|SHA256|MGF1_SHA512", (uint8_t *)"RSA1024", 62},        // 69
194     /*RSA1024 PSS SHA384 */
195     {(uint8_t *)"RSA1024|PSS|SHA384|MGF1_MD5", (uint8_t *)"RSA1024", 62},           // 70
196     {(uint8_t *)"RSA1024|PSS|SHA384|MGF1_SHA1", (uint8_t *)"RSA1024", 62},          // 71
197     {(uint8_t *)"RSA1024|PSS|SHA384|MGF1_SHA224", (uint8_t *)"RSA1024", 62},        // 72
198     {(uint8_t *)"RSA1024|PSS|SHA384|MGF1_SHA256", (uint8_t *)"RSA1024", 62},        // 73
199     {(uint8_t *)"RSA1024|PSS|SHA384|MGF1_SHA384", (uint8_t *)"RSA1024", 62},        // 74
200     {(uint8_t *)"RSA1024|PSS|SHA384|MGF1_SHA512", (uint8_t *)"RSA1024", 62},        // 75
201     /*RSA1024 PSS SHA512 */
202     {(uint8_t *)"RSA1024|PSS|SHA512|MGF1_MD5", (uint8_t *)"RSA1024", 62},           // 76
203     {(uint8_t *)"RSA1024|PSS|SHA512|MGF1_SHA1", (uint8_t *)"RSA1024", 62},          // 77
204     {(uint8_t *)"RSA1024|PSS|SHA512|MGF1_SHA224", (uint8_t *)"RSA1024", 62},        // 78
205     {(uint8_t *)"RSA1024|PSS|SHA512|MGF1_SHA256", (uint8_t *)"RSA1024", 62},        // 79
206     {(uint8_t *)"RSA1024|PSS|SHA512|MGF1_SHA384", (uint8_t *)"RSA1024", 62},        // 80
207     /*RSA2048 PSS MD5 */
208     {(uint8_t *)"RSA2048|PSS|MD5|MGF1_MD5", (uint8_t *)"RSA2048", 62},           // 81
209     {(uint8_t *)"RSA2048|PSS|MD5|MGF1_SHA1", (uint8_t *)"RSA2048", 62},          // 82
210     {(uint8_t *)"RSA2048|PSS|MD5|MGF1_SHA224", (uint8_t *)"RSA2048", 62},        // 83
211     {(uint8_t *)"RSA2048|PSS|MD5|MGF1_SHA256", (uint8_t *)"RSA2048", 62},        // 84
212     {(uint8_t *)"RSA2048|PSS|MD5|MGF1_SHA384", (uint8_t *)"RSA2048", 62},        // 85
213     {(uint8_t *)"RSA2048|PSS|MD5|MGF1_SHA512", (uint8_t *)"RSA2048", 62},        // 86
214     /*RSA2048 PSS SHA1 */
215     {(uint8_t *)"RSA2048|PSS|SHA1|MGF1_MD5", (uint8_t *)"RSA2048", 62},           // 87
216     {(uint8_t *)"RSA2048|PSS|SHA1|MGF1_SHA1", (uint8_t *)"RSA2048", 62},          // 88
217     {(uint8_t *)"RSA2048|PSS|SHA1|MGF1_SHA224", (uint8_t *)"RSA2048", 62},        // 89
218     {(uint8_t *)"RSA2048|PSS|SHA1|MGF1_SHA256", (uint8_t *)"RSA2048", 62},        // 90
219     {(uint8_t *)"RSA2048|PSS|SHA1|MGF1_SHA384", (uint8_t *)"RSA2048", 62},        // 91
220     {(uint8_t *)"RSA2048|PSS|SHA1|MGF1_SHA512", (uint8_t *)"RSA2048", 62},        // 92
221     /*RSA2048 PSS SHA224 */
222     {(uint8_t *)"RSA2048|PSS|SHA224|MGF1_MD5", (uint8_t *)"RSA2048", 62},           // 93
223     {(uint8_t *)"RSA2048|PSS|SHA224|MGF1_SHA1", (uint8_t *)"RSA2048", 62},          // 94
224     {(uint8_t *)"RSA2048|PSS|SHA224|MGF1_SHA224", (uint8_t *)"RSA2048", 62},        // 95
225     {(uint8_t *)"RSA2048|PSS|SHA224|MGF1_SHA256", (uint8_t *)"RSA2048", 62},        // 96
226     {(uint8_t *)"RSA2048|PSS|SHA224|MGF1_SHA384", (uint8_t *)"RSA2048", 62},        // 97
227     {(uint8_t *)"RSA2048|PSS|SHA224|MGF1_SHA512", (uint8_t *)"RSA2048", 62},        // 98
228     /*RSA2048 PSS SHA256 */
229     {(uint8_t *)"RSA2048|PSS|SHA256|MGF1_MD5", (uint8_t *)"RSA2048", 62},           // 99
230     {(uint8_t *)"RSA2048|PSS|SHA256|MGF1_SHA1", (uint8_t *)"RSA2048", 62},          // 100
231     {(uint8_t *)"RSA2048|PSS|SHA256|MGF1_SHA224", (uint8_t *)"RSA2048", 62},        // 101
232     {(uint8_t *)"RSA2048|PSS|SHA256|MGF1_SHA256", (uint8_t *)"RSA2048", 62},        // 102
233     {(uint8_t *)"RSA2048|PSS|SHA256|MGF1_SHA384", (uint8_t *)"RSA2048", 62},        // 103
234     {(uint8_t *)"RSA2048|PSS|SHA256|MGF1_SHA512", (uint8_t *)"RSA2048", 62},        // 104
235     /*RSA2048 PSS SHA384 */
236     {(uint8_t *)"RSA2048|PSS|SHA384|MGF1_MD5", (uint8_t *)"RSA2048", 62},           // 105
237     {(uint8_t *)"RSA2048|PSS|SHA384|MGF1_SHA1", (uint8_t *)"RSA2048", 62},          // 106
238     {(uint8_t *)"RSA2048|PSS|SHA384|MGF1_SHA224", (uint8_t *)"RSA2048", 62},        // 107
239     {(uint8_t *)"RSA2048|PSS|SHA384|MGF1_SHA256", (uint8_t *)"RSA2048", 62},        // 108
240     {(uint8_t *)"RSA2048|PSS|SHA384|MGF1_SHA384", (uint8_t *)"RSA2048", 62},        // 109
241     {(uint8_t *)"RSA2048|PSS|SHA384|MGF1_SHA512", (uint8_t *)"RSA2048", 62},        // 110
242     /*RSA2048 PSS SHA512 */
243     {(uint8_t *)"RSA2048|PSS|SHA512|MGF1_MD5", (uint8_t *)"RSA2048", 62},           // 111
244     {(uint8_t *)"RSA2048|PSS|SHA512|MGF1_SHA1", (uint8_t *)"RSA2048", 62},          // 112
245     {(uint8_t *)"RSA2048|PSS|SHA512|MGF1_SHA224", (uint8_t *)"RSA2048", 62},        // 113
246     {(uint8_t *)"RSA2048|PSS|SHA512|MGF1_SHA256", (uint8_t *)"RSA2048", 62},        // 114
247     {(uint8_t *)"RSA2048|PSS|SHA512|MGF1_SHA384", (uint8_t *)"RSA2048", 62},        // 115
248     {(uint8_t *)"RSA2048|PSS|SHA512|MGF1_SHA512", (uint8_t *)"RSA2048", 62},        // 116
249     /*RSA3072 PSS MD5 */
250     {(uint8_t *)"RSA3072|PSS|MD5|MGF1_MD5", (uint8_t *)"RSA3072", 62},           // 117
251     {(uint8_t *)"RSA3072|PSS|MD5|MGF1_SHA1", (uint8_t *)"RSA3072", 62},          // 118
252     {(uint8_t *)"RSA3072|PSS|MD5|MGF1_SHA224", (uint8_t *)"RSA3072", 62},        // 119
253     {(uint8_t *)"RSA3072|PSS|MD5|MGF1_SHA256", (uint8_t *)"RSA3072", 62},        // 120
254     {(uint8_t *)"RSA3072|PSS|MD5|MGF1_SHA384", (uint8_t *)"RSA3072", 62},        // 121
255     {(uint8_t *)"RSA3072|PSS|MD5|MGF1_SHA512", (uint8_t *)"RSA3072", 62},        // 122
256     /*RSA3072 PSS SHA1 */
257     {(uint8_t *)"RSA3072|PSS|SHA1|MGF1_MD5", (uint8_t *)"RSA3072", 62},           // 123
258     {(uint8_t *)"RSA3072|PSS|SHA1|MGF1_SHA1", (uint8_t *)"RSA3072", 62},          // 124
259     {(uint8_t *)"RSA3072|PSS|SHA1|MGF1_SHA224", (uint8_t *)"RSA3072", 62},        // 125
260     {(uint8_t *)"RSA3072|PSS|SHA1|MGF1_SHA256", (uint8_t *)"RSA3072", 62},        // 126
261     {(uint8_t *)"RSA3072|PSS|SHA1|MGF1_SHA384", (uint8_t *)"RSA3072", 62},        // 127
262     {(uint8_t *)"RSA3072|PSS|SHA1|MGF1_SHA512", (uint8_t *)"RSA3072", 62},        // 128
263     /*RSA3072 PSS SHA224 */
264     {(uint8_t *)"RSA3072|PSS|SHA224|MGF1_MD5", (uint8_t *)"RSA3072", 62},           // 129
265     {(uint8_t *)"RSA3072|PSS|SHA224|MGF1_SHA1", (uint8_t *)"RSA3072", 62},          // 130
266     {(uint8_t *)"RSA3072|PSS|SHA224|MGF1_SHA224", (uint8_t *)"RSA3072", 62},        // 131
267     {(uint8_t *)"RSA3072|PSS|SHA224|MGF1_SHA256", (uint8_t *)"RSA3072", 62},        // 132
268     {(uint8_t *)"RSA3072|PSS|SHA224|MGF1_SHA384", (uint8_t *)"RSA3072", 62},        // 133
269     {(uint8_t *)"RSA3072|PSS|SHA224|MGF1_SHA512", (uint8_t *)"RSA3072", 62},        // 134
270     /*RSA3072 PSS SHA256 */
271     {(uint8_t *)"RSA3072|PSS|SHA256|MGF1_MD5", (uint8_t *)"RSA3072", 62},           // 135
272     {(uint8_t *)"RSA3072|PSS|SHA256|MGF1_SHA1", (uint8_t *)"RSA3072", 62},          // 136
273     {(uint8_t *)"RSA3072|PSS|SHA256|MGF1_SHA224", (uint8_t *)"RSA3072", 62},        // 137
274     {(uint8_t *)"RSA3072|PSS|SHA256|MGF1_SHA256", (uint8_t *)"RSA3072", 62},        // 138
275     {(uint8_t *)"RSA3072|PSS|SHA256|MGF1_SHA384", (uint8_t *)"RSA3072", 62},        // 139
276     {(uint8_t *)"RSA3072|PSS|SHA256|MGF1_SHA512", (uint8_t *)"RSA3072", 62},        // 140
277     /*RSA3072 PSS SHA384 */
278     {(uint8_t *)"RSA3072|PSS|SHA384|MGF1_MD5", (uint8_t *)"RSA3072", 62},           // 141
279     {(uint8_t *)"RSA3072|PSS|SHA384|MGF1_SHA1", (uint8_t *)"RSA3072", 62},          // 142
280     {(uint8_t *)"RSA3072|PSS|SHA384|MGF1_SHA224", (uint8_t *)"RSA3072", 62},        // 143
281     {(uint8_t *)"RSA3072|PSS|SHA384|MGF1_SHA256", (uint8_t *)"RSA3072", 62},        // 144
282     {(uint8_t *)"RSA3072|PSS|SHA384|MGF1_SHA384", (uint8_t *)"RSA3072", 62},        // 145
283     {(uint8_t *)"RSA3072|PSS|SHA384|MGF1_SHA512", (uint8_t *)"RSA3072", 62},        // 146
284     /*RSA3072 PSS SHA512 */
285     {(uint8_t *)"RSA3072|PSS|SHA512|MGF1_MD5", (uint8_t *)"RSA3072", 62},           // 147
286     {(uint8_t *)"RSA3072|PSS|SHA512|MGF1_SHA1", (uint8_t *)"RSA3072", 62},          // 148
287     {(uint8_t *)"RSA3072|PSS|SHA512|MGF1_SHA224", (uint8_t *)"RSA3072", 62},        // 149
288     {(uint8_t *)"RSA3072|PSS|SHA512|MGF1_SHA256", (uint8_t *)"RSA3072", 62},        // 150
289     {(uint8_t *)"RSA3072|PSS|SHA512|MGF1_SHA384", (uint8_t *)"RSA3072", 62},        // 151
290     {(uint8_t *)"RSA3072|PSS|SHA512|MGF1_SHA512", (uint8_t *)"RSA3072", 62},        // 152
291     /*RSA4096 PSS MD5 */
292     {(uint8_t *)"RSA4096|PSS|MD5|MGF1_MD5", (uint8_t *)"RSA4096", 62},           // 153
293     {(uint8_t *)"RSA4096|PSS|MD5|MGF1_SHA1", (uint8_t *)"RSA4096", 62},          // 154
294     {(uint8_t *)"RSA4096|PSS|MD5|MGF1_SHA224", (uint8_t *)"RSA4096", 62},        // 156
295     {(uint8_t *)"RSA4096|PSS|MD5|MGF1_SHA256", (uint8_t *)"RSA4096", 62},        // 157
296     {(uint8_t *)"RSA4096|PSS|MD5|MGF1_SHA384", (uint8_t *)"RSA4096", 62},        // 158
297     {(uint8_t *)"RSA4096|PSS|MD5|MGF1_SHA512", (uint8_t *)"RSA4096", 62},        // 159
298     /*RSA4096 PSS SHA1 */
299     {(uint8_t *)"RSA4096|PSS|SHA1|MGF1_MD5", (uint8_t *)"RSA4096", 62},           // 160
300     {(uint8_t *)"RSA4096|PSS|SHA1|MGF1_SHA1", (uint8_t *)"RSA4096", 62},          // 161
301     {(uint8_t *)"RSA4096|PSS|SHA1|MGF1_SHA224", (uint8_t *)"RSA4096", 62},        // 162
302     {(uint8_t *)"RSA4096|PSS|SHA1|MGF1_SHA256", (uint8_t *)"RSA4096", 62},        // 163
303     {(uint8_t *)"RSA4096|PSS|SHA1|MGF1_SHA384", (uint8_t *)"RSA4096", 62},        // 164
304     {(uint8_t *)"RSA4096|PSS|SHA1|MGF1_SHA512", (uint8_t *)"RSA4096", 62},        // 165
305     /*RSA4096 PSS SHA224 */
306     {(uint8_t *)"RSA4096|PSS|SHA224|MGF1_MD5", (uint8_t *)"RSA4096", 62},           // 167
307     {(uint8_t *)"RSA4096|PSS|SHA224|MGF1_SHA1", (uint8_t *)"RSA4096", 62},          // 168
308     {(uint8_t *)"RSA4096|PSS|SHA224|MGF1_SHA224", (uint8_t *)"RSA4096", 62},        // 169
309     {(uint8_t *)"RSA4096|PSS|SHA224|MGF1_SHA256", (uint8_t *)"RSA4096", 62},        // 170
310     {(uint8_t *)"RSA4096|PSS|SHA224|MGF1_SHA384", (uint8_t *)"RSA4096", 62},        // 171
311     {(uint8_t *)"RSA4096|PSS|SHA224|MGF1_SHA512", (uint8_t *)"RSA4096", 62},        // 172
312     /*RSA4096 PSS SHA256 */
313     {(uint8_t *)"RSA4096|PSS|SHA256|MGF1_MD5", (uint8_t *)"RSA4096", 62},           // 173
314     {(uint8_t *)"RSA4096|PSS|SHA256|MGF1_SHA1", (uint8_t *)"RSA4096", 62},          // 174
315     {(uint8_t *)"RSA4096|PSS|SHA256|MGF1_SHA224", (uint8_t *)"RSA4096", 62},        // 175
316     {(uint8_t *)"RSA4096|PSS|SHA256|MGF1_SHA256", (uint8_t *)"RSA4096", 62},        // 176
317     {(uint8_t *)"RSA4096|PSS|SHA256|MGF1_SHA384", (uint8_t *)"RSA4096", 62},        // 177
318     {(uint8_t *)"RSA4096|PSS|SHA256|MGF1_SHA512", (uint8_t *)"RSA4096", 62},        // 178
319     /*RSA4096 PSS SHA384 */
320     {(uint8_t *)"RSA4096|PSS|SHA384|MGF1_MD5", (uint8_t *)"RSA4096", 62},           // 179
321     {(uint8_t *)"RSA4096|PSS|SHA384|MGF1_SHA1", (uint8_t *)"RSA4096", 62},          // 180
322     {(uint8_t *)"RSA4096|PSS|SHA384|MGF1_SHA224", (uint8_t *)"RSA4096", 62},        // 181
323     {(uint8_t *)"RSA4096|PSS|SHA384|MGF1_SHA256", (uint8_t *)"RSA4096", 62},        // 182
324     {(uint8_t *)"RSA4096|PSS|SHA384|MGF1_SHA384", (uint8_t *)"RSA4096", 62},        // 183
325     {(uint8_t *)"RSA4096|PSS|SHA384|MGF1_SHA512", (uint8_t *)"RSA4096", 62},        // 184
326     /*RSA4096 PSS SHA512 */
327     {(uint8_t *)"RSA4096|PSS|SHA512|MGF1_MD5", (uint8_t *)"RSA4096", 62},           // 185
328     {(uint8_t *)"RSA4096|PSS|SHA512|MGF1_SHA1", (uint8_t *)"RSA4096", 62},          // 186
329     {(uint8_t *)"RSA4096|PSS|SHA512|MGF1_SHA224", (uint8_t *)"RSA4096", 62},        // 187
330     {(uint8_t *)"RSA4096|PSS|SHA512|MGF1_SHA256", (uint8_t *)"RSA4096", 62},        // 188
331     {(uint8_t *)"RSA4096|PSS|SHA512|MGF1_SHA384", (uint8_t *)"RSA4096", 62},        // 189
332     {(uint8_t *)"RSA4096|PSS|SHA512|MGF1_SHA512", (uint8_t *)"RSA4096", 62},        // 190
333     /*RSA8192 PSS MD5 */
334     {(uint8_t *)"RSA8192|PSS|MD5|MGF1_MD5", (uint8_t *)"RSA8192", 62},           // 191
335     {(uint8_t *)"RSA8192|PSS|MD5|MGF1_SHA1", (uint8_t *)"RSA8192", 62},          // 192
336     {(uint8_t *)"RSA8192|PSS|MD5|MGF1_SHA224", (uint8_t *)"RSA8192", 62},        // 193
337     {(uint8_t *)"RSA8192|PSS|MD5|MGF1_SHA256", (uint8_t *)"RSA8192", 62},        // 194
338     {(uint8_t *)"RSA8192|PSS|MD5|MGF1_SHA384", (uint8_t *)"RSA8192", 62},        // 195
339     {(uint8_t *)"RSA8192|PSS|MD5|MGF1_SHA512", (uint8_t *)"RSA8192", 62},        // 196
340     /*RSA8192 PSS SHA1 */
341     {(uint8_t *)"RSA8192|PSS|SHA1|MGF1_MD5", (uint8_t *)"RSA8192", 62},           // 197
342     {(uint8_t *)"RSA8192|PSS|SHA1|MGF1_SHA1", (uint8_t *)"RSA8192", 62},          // 198
343     {(uint8_t *)"RSA8192|PSS|SHA1|MGF1_SHA224", (uint8_t *)"RSA8192", 62},        // 199
344     {(uint8_t *)"RSA8192|PSS|SHA1|MGF1_SHA256", (uint8_t *)"RSA8192", 62},        // 200
345     {(uint8_t *)"RSA8192|PSS|SHA1|MGF1_SHA384", (uint8_t *)"RSA8192", 62},        // 201
346     {(uint8_t *)"RSA8192|PSS|SHA1|MGF1_SHA512", (uint8_t *)"RSA8192", 62},        // 202
347     /*RSA8192 PSS SHA224 */
348     {(uint8_t *)"RSA8192|PSS|SHA224|MGF1_MD5", (uint8_t *)"RSA8192", 62},           // 203
349     {(uint8_t *)"RSA8192|PSS|SHA224|MGF1_SHA1", (uint8_t *)"RSA8192", 62},          // 204
350     {(uint8_t *)"RSA8192|PSS|SHA224|MGF1_SHA224", (uint8_t *)"RSA8192", 62},        // 205
351     {(uint8_t *)"RSA8192|PSS|SHA224|MGF1_SHA256", (uint8_t *)"RSA8192", 62},        // 206
352     {(uint8_t *)"RSA8192|PSS|SHA224|MGF1_SHA384", (uint8_t *)"RSA8192", 62},        // 207
353     {(uint8_t *)"RSA8192|PSS|SHA224|MGF1_SHA512", (uint8_t *)"RSA8192", 62},        // 208
354     /*RSA8192 PSS SHA256 */
355     {(uint8_t *)"RSA8192|PSS|SHA256|MGF1_MD5", (uint8_t *)"RSA8192", 62},           // 209
356     {(uint8_t *)"RSA8192|PSS|SHA256|MGF1_SHA1", (uint8_t *)"RSA8192", 62},          // 210
357     {(uint8_t *)"RSA8192|PSS|SHA256|MGF1_SHA224", (uint8_t *)"RSA8192", 62},        // 211
358     {(uint8_t *)"RSA8192|PSS|SHA256|MGF1_SHA256", (uint8_t *)"RSA8192", 62},        // 212
359     {(uint8_t *)"RSA8192|PSS|SHA256|MGF1_SHA384", (uint8_t *)"RSA8192", 62},        // 213
360     {(uint8_t *)"RSA8192|PSS|SHA256|MGF1_SHA512", (uint8_t *)"RSA8192", 62},        // 214
361     /*RSA8192 PSS SHA384 */
362     {(uint8_t *)"RSA8192|PSS|SHA384|MGF1_MD5", (uint8_t *)"RSA8192", 62},           // 215
363     {(uint8_t *)"RSA8192|PSS|SHA384|MGF1_SHA1", (uint8_t *)"RSA8192", 62},          // 216
364     {(uint8_t *)"RSA8192|PSS|SHA384|MGF1_SHA224", (uint8_t *)"RSA8192", 62},        // 217
365     {(uint8_t *)"RSA8192|PSS|SHA384|MGF1_SHA256", (uint8_t *)"RSA8192", 62},        // 218
366     {(uint8_t *)"RSA8192|PSS|SHA384|MGF1_SHA384", (uint8_t *)"RSA8192", 62},        // 219
367     {(uint8_t *)"RSA8192|PSS|SHA384|MGF1_SHA512", (uint8_t *)"RSA8192", 62},        // 220
368     /*RSA8192 PSS SHA512 */
369     {(uint8_t *)"RSA8192|PSS|SHA512|MGF1_MD5", (uint8_t *)"RSA8192", 62},           // 221
370     {(uint8_t *)"RSA8192|PSS|SHA512|MGF1_SHA1", (uint8_t *)"RSA8192", 62},          // 222
371     {(uint8_t *)"RSA8192|PSS|SHA512|MGF1_SHA224", (uint8_t *)"RSA8192", 62},        // 223
372     {(uint8_t *)"RSA8192|PSS|SHA512|MGF1_SHA256", (uint8_t *)"RSA8192", 62},        // 224
373     {(uint8_t *)"RSA8192|PSS|SHA512|MGF1_SHA384", (uint8_t *)"RSA8192", 62},        // 225
374     {(uint8_t *)"RSA8192|PSS|SHA512|MGF1_SHA512", (uint8_t *)"RSA8192", 62},        // 226
375 };
376 
377 OnlySignSpec g_onlySignData[] = {
378     /* RSA512 PKCS1 */
379     {(uint8_t *)"RSA512|PKCS1|MD5|OnlySign", (uint8_t *)"RSA512|PKCS1|MD5|Recover", (uint8_t *)"RSA512", (uint8_t *)"MD5", 16},           // 0
380     {(uint8_t *)"RSA512|PKCS1|SHA1|OnlySign", (uint8_t *)"RSA512|PKCS1|SHA1|Recover", (uint8_t *)"RSA512", (uint8_t *)"SHA1", 20},        // 1
381     {(uint8_t *)"RSA512|PKCS1|SHA224|OnlySign", (uint8_t *)"RSA512|PKCS1|SHA224|Recover", (uint8_t *)"RSA512", (uint8_t *)"SHA224", 28},  // 2
382     {(uint8_t *)"RSA512|PKCS1|SHA256|OnlySign", (uint8_t *)"RSA512|PKCS1|SHA256|Recover", (uint8_t *)"RSA512", (uint8_t *)"SHA256", 32},  // 3
383     /* RSA768 PKCS1 */
384     {(uint8_t *)"RSA768|PKCS1|MD5|OnlySign", (uint8_t *)"RSA768|PKCS1|MD5|Recover", (uint8_t *)"RSA768", (uint8_t *)"MD5", 16},           // 4
385     {(uint8_t *)"RSA768|PKCS1|SHA1|OnlySign", (uint8_t *)"RSA768|PKCS1|SHA1|Recover", (uint8_t *)"RSA768", (uint8_t *)"SHA1", 20},        // 5
386     {(uint8_t *)"RSA768|PKCS1|SHA224|OnlySign", (uint8_t *)"RSA768|PKCS1|SHA224|Recover", (uint8_t *)"RSA768", (uint8_t *)"SHA224", 28},  // 6
387     {(uint8_t *)"RSA768|PKCS1|SHA256|OnlySign", (uint8_t *)"RSA768|PKCS1|SHA256|Recover", (uint8_t *)"RSA768", (uint8_t *)"SHA256", 32},  // 7
388     {(uint8_t *)"RSA768|PKCS1|SHA384|OnlySign", (uint8_t *)"RSA768|PKCS1|SHA384|Recover", (uint8_t *)"RSA768", (uint8_t *)"SHA384", 48},  // 8
389     {(uint8_t *)"RSA768|PKCS1|SHA512|OnlySign", (uint8_t *)"RSA768|PKCS1|SHA512|Recover", (uint8_t *)"RSA768", (uint8_t *)"SHA512", 64},  // 9
390     /* RSA1024 PKCS1 */
391     {(uint8_t *)"RSA1024|PKCS1|MD5|OnlySign", (uint8_t *)"RSA1024|PKCS1|MD5|Recover", (uint8_t *)"RSA1024", (uint8_t *)"MD5", 16},           // 10
392     {(uint8_t *)"RSA1024|PKCS1|SHA1|OnlySign", (uint8_t *)"RSA1024|PKCS1|SHA1|Recover", (uint8_t *)"RSA1024", (uint8_t *)"SHA1", 20},        // 11
393     {(uint8_t *)"RSA1024|PKCS1|SHA224|OnlySign", (uint8_t *)"RSA1024|PKCS1|SHA224|Recover", (uint8_t *)"RSA1024", (uint8_t *)"SHA224", 28},  // 12
394     {(uint8_t *)"RSA1024|PKCS1|SHA256|OnlySign", (uint8_t *)"RSA1024|PKCS1|SHA256|Recover", (uint8_t *)"RSA1024", (uint8_t *)"SHA256", 32},  // 13
395     {(uint8_t *)"RSA1024|PKCS1|SHA384|OnlySign", (uint8_t *)"RSA1024|PKCS1|SHA384|Recover", (uint8_t *)"RSA1024", (uint8_t *)"SHA384", 48},  // 14
396     {(uint8_t *)"RSA1024|PKCS1|SHA512|OnlySign", (uint8_t *)"RSA1024|PKCS1|SHA512|Recover", (uint8_t *)"RSA1024", (uint8_t *)"SHA512", 64},  // 15
397     /* RSA2048 PKCS1 */
398     {(uint8_t *)"RSA2048|PKCS1|MD5|OnlySign", (uint8_t *)"RSA2048|PKCS1|MD5|Recover", (uint8_t *)"RSA2048", (uint8_t *)"MD5", 16},           // 16
399     {(uint8_t *)"RSA2048|PKCS1|SHA1|OnlySign", (uint8_t *)"RSA2048|PKCS1|SHA1|Recover", (uint8_t *)"RSA2048", (uint8_t *)"SHA1", 20},        // 17
400     {(uint8_t *)"RSA2048|PKCS1|SHA224|OnlySign", (uint8_t *)"RSA2048|PKCS1|SHA224|Recover", (uint8_t *)"RSA2048", (uint8_t *)"SHA224", 28},  // 18
401     {(uint8_t *)"RSA2048|PKCS1|SHA256|OnlySign", (uint8_t *)"RSA2048|PKCS1|SHA256|Recover", (uint8_t *)"RSA2048", (uint8_t *)"SHA256", 32},  // 19
402     {(uint8_t *)"RSA2048|PKCS1|SHA384|OnlySign", (uint8_t *)"RSA2048|PKCS1|SHA384|Recover", (uint8_t *)"RSA2048", (uint8_t *)"SHA384", 48},  // 20
403     {(uint8_t *)"RSA2048|PKCS1|SHA512|OnlySign", (uint8_t *)"RSA2048|PKCS1|SHA512|Recover", (uint8_t *)"RSA2048", (uint8_t *)"SHA512", 64},  // 21
404     /* RSA3072 PKCS1 */
405     {(uint8_t *)"RSA3072|PKCS1|MD5|OnlySign", (uint8_t *)"RSA3072|PKCS1|MD5|Recover", (uint8_t *)"RSA3072", (uint8_t *)"MD5", 16},           // 22
406     {(uint8_t *)"RSA3072|PKCS1|SHA1|OnlySign", (uint8_t *)"RSA3072|PKCS1|SHA1|Recover", (uint8_t *)"RSA3072", (uint8_t *)"SHA1", 20},        // 23
407     {(uint8_t *)"RSA3072|PKCS1|SHA224|OnlySign", (uint8_t *)"RSA3072|PKCS1|SHA224|Recover", (uint8_t *)"RSA3072", (uint8_t *)"SHA224", 28},  // 24
408     {(uint8_t *)"RSA3072|PKCS1|SHA256|OnlySign", (uint8_t *)"RSA3072|PKCS1|SHA256|Recover", (uint8_t *)"RSA3072", (uint8_t *)"SHA256", 32},  // 25
409     {(uint8_t *)"RSA3072|PKCS1|SHA384|OnlySign", (uint8_t *)"RSA3072|PKCS1|SHA384|Recover", (uint8_t *)"RSA3072", (uint8_t *)"SHA384", 48},  // 26
410     {(uint8_t *)"RSA3072|PKCS1|SHA512|OnlySign", (uint8_t *)"RSA3072|PKCS1|SHA512|Recover", (uint8_t *)"RSA3072", (uint8_t *)"SHA512", 64},  // 27
411     /* RSA4096 PKCS1 */
412     {(uint8_t *)"RSA4096|PKCS1|MD5|OnlySign", (uint8_t *)"RSA4096|PKCS1|MD5|Recover", (uint8_t *)"RSA4096", (uint8_t *)"MD5", 16},           // 28
413     {(uint8_t *)"RSA4096|PKCS1|SHA1|OnlySign", (uint8_t *)"RSA4096|PKCS1|SHA1|Recover", (uint8_t *)"RSA4096", (uint8_t *)"SHA1", 20},        // 29
414     {(uint8_t *)"RSA4096|PKCS1|SHA224|OnlySign", (uint8_t *)"RSA4096|PKCS1|SHA224|Recover", (uint8_t *)"RSA4096", (uint8_t *)"SHA224", 28},  // 30
415     {(uint8_t *)"RSA4096|PKCS1|SHA256|OnlySign", (uint8_t *)"RSA4096|PKCS1|SHA256|Recover", (uint8_t *)"RSA4096", (uint8_t *)"SHA256", 32},  // 31
416     {(uint8_t *)"RSA4096|PKCS1|SHA384|OnlySign", (uint8_t *)"RSA4096|PKCS1|SHA384|Recover", (uint8_t *)"RSA4096", (uint8_t *)"SHA384", 48},  // 32
417     {(uint8_t *)"RSA4096|PKCS1|SHA512|OnlySign", (uint8_t *)"RSA4096|PKCS1|SHA512|Recover", (uint8_t *)"RSA4096", (uint8_t *)"SHA512", 64},  // 33
418     /* RSA8192 PKCS1 */
419     {(uint8_t *)"RSA8192|PKCS1|MD5|OnlySign", (uint8_t *)"RSA8192|PKCS1|MD5|Recover", (uint8_t *)"RSA8192", (uint8_t *)"MD5", 16},           // 34
420     {(uint8_t *)"RSA8192|PKCS1|SHA1|OnlySign", (uint8_t *)"RSA8192|PKCS1|SHA1|Recover", (uint8_t *)"RSA8192", (uint8_t *)"SHA1", 20},        // 35
421     {(uint8_t *)"RSA8192|PKCS1|SHA224|OnlySign", (uint8_t *)"RSA8192|PKCS1|SHA224|Recover", (uint8_t *)"RSA8192", (uint8_t *)"SHA224", 28},  // 36
422     {(uint8_t *)"RSA8192|PKCS1|SHA256|OnlySign", (uint8_t *)"RSA8192|PKCS1|SHA256|Recover", (uint8_t *)"RSA8192", (uint8_t *)"SHA256", 32},  // 37
423     {(uint8_t *)"RSA8192|PKCS1|SHA384|OnlySign", (uint8_t *)"RSA8192|PKCS1|SHA384|Recover", (uint8_t *)"RSA8192", (uint8_t *)"SHA384", 48},  // 38
424     {(uint8_t *)"RSA8192|PKCS1|SHA512|OnlySign", (uint8_t *)"RSA8192|PKCS1|SHA512|Recover", (uint8_t *)"RSA8192", (uint8_t *)"SHA512", 64},  // 39
425     /* RSA8192 PKCS1 NoHash */
426     {(uint8_t *)"RSA512|PKCS1|NoHash|OnlySign", (uint8_t *)"RSA512|PKCS1|NoHash|Recover", (uint8_t *)"RSA512", (uint8_t *)"NoHash", 64 - 11},     // 40
427     {(uint8_t *)"RSA768|PKCS1|NoHash|OnlySign", (uint8_t *)"RSA768|PKCS1|NoHash|Recover", (uint8_t *)"RSA768", (uint8_t *)"NoHash", 96 - 11},     // 41
428     {(uint8_t *)"RSA1024|PKCS1|NoHash|OnlySign", (uint8_t *)"RSA1024|PKCS1|NoHash|Recover", (uint8_t *)"RSA1024", (uint8_t *)"NoHash", 128 - 11}, // 42
429     {(uint8_t *)"RSA2048|PKCS1|NoHash|OnlySign", (uint8_t *)"RSA2048|PKCS1|NoHash|Recover", (uint8_t *)"RSA2048", (uint8_t *)"NoHash", 256 - 11}, // 43
430     {(uint8_t *)"RSA3072|PKCS1|NoHash|OnlySign", (uint8_t *)"RSA3072|PKCS1|NoHash|Recover", (uint8_t *)"RSA3072", (uint8_t *)"NoHash", 384 - 11}, // 44
431     {(uint8_t *)"RSA4096|PKCS1|NoHash|OnlySign", (uint8_t *)"RSA4096|PKCS1|NoHash|Recover", (uint8_t *)"RSA4096", (uint8_t *)"NoHash", 512 -11},  // 45
432     {(uint8_t *)"RSA8192|PKCS1|NoHash|OnlySign", (uint8_t *)"RSA8192|PKCS1|NoHash|Recover", (uint8_t *)"RSA8192", (uint8_t *)"NoHash", 1024 -11}, // 46
433     /* RSA8192 NoPadding NoHash */
434     {(uint8_t *)"RSA512|NoPadding|NoHash|OnlySign", (uint8_t *)"RSA512|NoPadding|NoHash|Recover", (uint8_t *)"RSA512", (uint8_t *)"NoHash", 64},      // 47
435     {(uint8_t *)"RSA768|NoPadding|NoHash|OnlySign", (uint8_t *)"RSA768|NoPadding|NoHash|Recover", (uint8_t *)"RSA768", (uint8_t *)"NoHash", 96},      // 48
436     {(uint8_t *)"RSA1024|NoPadding|NoHash|OnlySign", (uint8_t *)"RSA1024|NoPadding|NoHash|Recover", (uint8_t *)"RSA1024", (uint8_t *)"NoHash", 128},  // 49
437     {(uint8_t *)"RSA2048|NoPadding|NoHash|OnlySign", (uint8_t *)"RSA2048|NoPadding|NoHash|Recover", (uint8_t *)"RSA2048", (uint8_t *)"NoHash", 256},  // 50
438     {(uint8_t *)"RSA3072|NoPadding|NoHash|OnlySign", (uint8_t *)"RSA3072|NoPadding|NoHash|Recover", (uint8_t *)"RSA3072", (uint8_t *)"NoHash", 384},  // 51
439     {(uint8_t *)"RSA4096|NoPadding|NoHash|OnlySign", (uint8_t *)"RSA4096|NoPadding|NoHash|Recover", (uint8_t *)"RSA4096", (uint8_t *)"NoHash", 512},  // 52
440     {(uint8_t *)"RSA8192|NoPadding|NoHash|OnlySign", (uint8_t *)"RSA8192|NoPadding|NoHash|Recover", (uint8_t *)"RSA8192", (uint8_t *)"NoHash", 1024}, // 53
441     /* RSA */
442     {(uint8_t *)"RSA|PKCS1|MD5|OnlySign", (uint8_t *)"RSA|PKCS1|MD5|Recover", (uint8_t *)"RSA512", (uint8_t *)"MD5", 16},                        // 54
443     {(uint8_t *)"RSA|NoPadding|NoHash|OnlySign", (uint8_t *)"RSA|NoPadding|NoHash|Recover", (uint8_t *)"RSA512", (uint8_t *)"NoHash", 64},       // 55
444 };
445 
446 AsymSignSpec g_dsaData[] = {
447     /* DSA1024 */
448     {(uint8_t *)"DSA1024|SHA1", (uint8_t *)"DSA1024", (uint8_t *)"SHA1", 62},      // 0
449     {(uint8_t *)"DSA1024|SHA224", (uint8_t *)"DSA1024", (uint8_t *)"SHA224", 62},  // 1
450     {(uint8_t *)"DSA1024|SHA256", (uint8_t *)"DSA1024", (uint8_t *)"SHA256", 62},  // 2
451     {(uint8_t *)"DSA1024|SHA384", (uint8_t *)"DSA1024", (uint8_t *)"SHA384", 62},  // 3
452     {(uint8_t *)"DSA1024|SHA512", (uint8_t *)"DSA1024", (uint8_t *)"SHA512", 62},  // 4
453     /* DSA2048 */
454     {(uint8_t *)"DSA2048|SHA1", (uint8_t *)"DSA2048", (uint8_t *)"SHA1", 62},      // 5
455     {(uint8_t *)"DSA2048|SHA224", (uint8_t *)"DSA2048", (uint8_t *)"SHA224", 62},  // 6
456     {(uint8_t *)"DSA2048|SHA256", (uint8_t *)"DSA2048", (uint8_t *)"SHA256", 62},  // 7
457     {(uint8_t *)"DSA2048|SHA384", (uint8_t *)"DSA2048", (uint8_t *)"SHA384", 62},  // 8
458     {(uint8_t *)"DSA2048|SHA512", (uint8_t *)"DSA2048", (uint8_t *)"SHA512", 62},  // 9
459     /* DSA3072 */
460     {(uint8_t *)"DSA3072|SHA1", (uint8_t *)"DSA3072", (uint8_t *)"SHA1", 62},      // 10
461     {(uint8_t *)"DSA3072|SHA224", (uint8_t *)"DSA3072", (uint8_t *)"SHA224", 62},  // 11
462     {(uint8_t *)"DSA3072|SHA256", (uint8_t *)"DSA3072", (uint8_t *)"SHA256", 62},  // 12
463     {(uint8_t *)"DSA3072|SHA384", (uint8_t *)"DSA3072", (uint8_t *)"SHA384", 62},  // 13
464     {(uint8_t *)"DSA3072|SHA512", (uint8_t *)"DSA3072", (uint8_t *)"SHA512", 62},  // 14
465     /* DSA */
466     {(uint8_t *)"DSA|SHA256", (uint8_t *)"DSA1024", (uint8_t *)"SHA256", 62},      // 15
467     /* DSA NoHash */
468     {(uint8_t *)"DSA1024|NoHash", (uint8_t *)"DSA1024", (uint8_t *)"NoHash", 62},  // 16
469     {(uint8_t *)"DSA2048|NoHash", (uint8_t *)"DSA2048", (uint8_t *)"NoHash", 62},  // 17
470     {(uint8_t *)"DSA3072|NoHash", (uint8_t *)"DSA3072", (uint8_t *)"NoHash", 62},  // 18
471     {(uint8_t *)"DSA|NoHash", (uint8_t *)"DSA1024", (uint8_t *)"NoHash", 62},      // 19
472 };
473 
474 AsymSignSpec g_ecdsaData[] = {
475     /* ECC224 */
476     {(uint8_t *)"ECC224|SHA1", (uint8_t *)"ECC224", (uint8_t *)"SHA1", 62},      // 0
477     {(uint8_t *)"ECC224|SHA224", (uint8_t *)"ECC224", (uint8_t *)"SHA224", 62},  // 1
478     {(uint8_t *)"ECC224|SHA256", (uint8_t *)"ECC224", (uint8_t *)"SHA256", 62},  // 2
479     {(uint8_t *)"ECC224|SHA384", (uint8_t *)"ECC224", (uint8_t *)"SHA384", 62},  // 3
480     {(uint8_t *)"ECC224|SHA512", (uint8_t *)"ECC224", (uint8_t *)"SHA512", 62},  // 4
481     /* ECC256 */
482     {(uint8_t *)"ECC256|SHA1", (uint8_t *)"ECC256", (uint8_t *)"SHA1", 62},      // 5
483     {(uint8_t *)"ECC256|SHA224", (uint8_t *)"ECC256", (uint8_t *)"SHA224", 62},  // 6
484     {(uint8_t *)"ECC256|SHA256", (uint8_t *)"ECC256", (uint8_t *)"SHA256", 62},  // 7
485     {(uint8_t *)"ECC256|SHA384", (uint8_t *)"ECC256", (uint8_t *)"SHA384", 62},  // 8
486     {(uint8_t *)"ECC256|SHA512", (uint8_t *)"ECC256", (uint8_t *)"SHA512", 62},  // 9
487     /* ECC384 */
488     {(uint8_t *)"ECC384|SHA1", (uint8_t *)"ECC384", (uint8_t *)"SHA1", 62},      // 10
489     {(uint8_t *)"ECC384|SHA224", (uint8_t *)"ECC384", (uint8_t *)"SHA224", 62},  // 11
490     {(uint8_t *)"ECC384|SHA256", (uint8_t *)"ECC384", (uint8_t *)"SHA256", 62},  // 12
491     {(uint8_t *)"ECC384|SHA384", (uint8_t *)"ECC384", (uint8_t *)"SHA384", 62},  // 13
492     {(uint8_t *)"ECC384|SHA512", (uint8_t *)"ECC384", (uint8_t *)"SHA512", 62},  // 14
493     /* ECC521 */
494     {(uint8_t *)"ECC521|SHA1", (uint8_t *)"ECC521", (uint8_t *)"SHA1", 62},      // 15
495     {(uint8_t *)"ECC521|SHA224", (uint8_t *)"ECC521", (uint8_t *)"SHA224", 62},  // 16
496     {(uint8_t *)"ECC521|SHA256", (uint8_t *)"ECC521", (uint8_t *)"SHA256", 62},  // 17
497     {(uint8_t *)"ECC521|SHA384", (uint8_t *)"ECC521", (uint8_t *)"SHA384", 62},  // 18
498     {(uint8_t *)"ECC521|SHA512", (uint8_t *)"ECC521", (uint8_t *)"SHA512", 62},  // 19
499     /* ECC_BrainPoolP160r1 */
500     {(uint8_t *)"ECC_BrainPoolP160r1|SHA1", (uint8_t *)"ECC_BrainPoolP160r1", (uint8_t *)"SHA1", 62},      // 20
501     {(uint8_t *)"ECC_BrainPoolP160r1|SHA224", (uint8_t *)"ECC_BrainPoolP160r1", (uint8_t *)"SHA224", 62},  // 21
502     {(uint8_t *)"ECC_BrainPoolP160r1|SHA256", (uint8_t *)"ECC_BrainPoolP160r1", (uint8_t *)"SHA256", 62},  // 22
503     {(uint8_t *)"ECC_BrainPoolP160r1|SHA384", (uint8_t *)"ECC_BrainPoolP160r1", (uint8_t *)"SHA384", 62},  // 23
504     {(uint8_t *)"ECC_BrainPoolP160r1|SHA512", (uint8_t *)"ECC_BrainPoolP160r1", (uint8_t *)"SHA512", 62},  // 24
505     /* ECC_BrainPoolP160t1 */
506     {(uint8_t *)"ECC_BrainPoolP160t1|SHA1", (uint8_t *)"ECC_BrainPoolP160t1", (uint8_t *)"SHA1", 62},      // 25
507     {(uint8_t *)"ECC_BrainPoolP160t1|SHA224", (uint8_t *)"ECC_BrainPoolP160t1", (uint8_t *)"SHA224", 62},  // 26
508     {(uint8_t *)"ECC_BrainPoolP160t1|SHA256", (uint8_t *)"ECC_BrainPoolP160t1", (uint8_t *)"SHA256", 62},  // 27
509     {(uint8_t *)"ECC_BrainPoolP160t1|SHA384", (uint8_t *)"ECC_BrainPoolP160t1", (uint8_t *)"SHA384", 62},  // 28
510     {(uint8_t *)"ECC_BrainPoolP160t1|SHA512", (uint8_t *)"ECC_BrainPoolP160t1", (uint8_t *)"SHA512", 62},  // 29
511     /* ECC_BrainPoolP192r1 */
512     {(uint8_t *)"ECC_BrainPoolP192r1|SHA1", (uint8_t *)"ECC_BrainPoolP192r1", (uint8_t *)"SHA1", 62},      // 30
513     {(uint8_t *)"ECC_BrainPoolP192r1|SHA224", (uint8_t *)"ECC_BrainPoolP192r1", (uint8_t *)"SHA224", 62},  // 31
514     {(uint8_t *)"ECC_BrainPoolP192r1|SHA256", (uint8_t *)"ECC_BrainPoolP192r1", (uint8_t *)"SHA256", 62},  // 32
515     {(uint8_t *)"ECC_BrainPoolP192r1|SHA384", (uint8_t *)"ECC_BrainPoolP192r1", (uint8_t *)"SHA384", 62},  // 33
516     {(uint8_t *)"ECC_BrainPoolP192r1|SHA512", (uint8_t *)"ECC_BrainPoolP192r1", (uint8_t *)"SHA512", 62},  // 34
517     /* ECC_BrainPoolP192t1 */
518     {(uint8_t *)"ECC_BrainPoolP192t1|SHA1", (uint8_t *)"ECC_BrainPoolP192t1", (uint8_t *)"SHA1", 62},      // 35
519     {(uint8_t *)"ECC_BrainPoolP192t1|SHA224", (uint8_t *)"ECC_BrainPoolP192t1", (uint8_t *)"SHA224", 62},  // 36
520     {(uint8_t *)"ECC_BrainPoolP192t1|SHA256", (uint8_t *)"ECC_BrainPoolP192t1", (uint8_t *)"SHA256", 62},  // 37
521     {(uint8_t *)"ECC_BrainPoolP192t1|SHA384", (uint8_t *)"ECC_BrainPoolP192t1", (uint8_t *)"SHA384", 62},  // 38
522     {(uint8_t *)"ECC_BrainPoolP192t1|SHA512", (uint8_t *)"ECC_BrainPoolP192t1", (uint8_t *)"SHA512", 62},  // 39
523     /* ECC_BrainPoolP224r1 */
524     {(uint8_t *)"ECC_BrainPoolP224r1|SHA1", (uint8_t *)"ECC_BrainPoolP224r1", (uint8_t *)"SHA1", 62},      // 40
525     {(uint8_t *)"ECC_BrainPoolP224r1|SHA224", (uint8_t *)"ECC_BrainPoolP224r1", (uint8_t *)"SHA224", 62},  // 41
526     {(uint8_t *)"ECC_BrainPoolP224r1|SHA256", (uint8_t *)"ECC_BrainPoolP224r1", (uint8_t *)"SHA256", 62},  // 42
527     {(uint8_t *)"ECC_BrainPoolP224r1|SHA384", (uint8_t *)"ECC_BrainPoolP224r1", (uint8_t *)"SHA384", 62},  // 43
528     {(uint8_t *)"ECC_BrainPoolP224r1|SHA512", (uint8_t *)"ECC_BrainPoolP224r1", (uint8_t *)"SHA512", 62},  // 44
529     /* ECC_BrainPoolP224t1 */
530     {(uint8_t *)"ECC_BrainPoolP224t1|SHA1", (uint8_t *)"ECC_BrainPoolP224t1", (uint8_t *)"SHA1", 62},      // 45
531     {(uint8_t *)"ECC_BrainPoolP224t1|SHA224", (uint8_t *)"ECC_BrainPoolP224t1", (uint8_t *)"SHA224", 62},  // 46
532     {(uint8_t *)"ECC_BrainPoolP224t1|SHA256", (uint8_t *)"ECC_BrainPoolP224t1", (uint8_t *)"SHA256", 62},  // 47
533     {(uint8_t *)"ECC_BrainPoolP224t1|SHA384", (uint8_t *)"ECC_BrainPoolP224t1", (uint8_t *)"SHA384", 62},  // 48
534     {(uint8_t *)"ECC_BrainPoolP224t1|SHA512", (uint8_t *)"ECC_BrainPoolP224t1", (uint8_t *)"SHA512", 62},  // 49
535     /* ECC_BrainPoolP256r1 */
536     {(uint8_t *)"ECC_BrainPoolP256r1|SHA1", (uint8_t *)"ECC_BrainPoolP256r1", (uint8_t *)"SHA1", 62},      // 50
537     {(uint8_t *)"ECC_BrainPoolP256r1|SHA224", (uint8_t *)"ECC_BrainPoolP256r1", (uint8_t *)"SHA224", 62},  // 51
538     {(uint8_t *)"ECC_BrainPoolP256r1|SHA256", (uint8_t *)"ECC_BrainPoolP256r1", (uint8_t *)"SHA256", 62},  // 52
539     {(uint8_t *)"ECC_BrainPoolP256r1|SHA384", (uint8_t *)"ECC_BrainPoolP256r1", (uint8_t *)"SHA384", 62},  // 53
540     {(uint8_t *)"ECC_BrainPoolP256r1|SHA512", (uint8_t *)"ECC_BrainPoolP256r1", (uint8_t *)"SHA512", 62},  // 54
541     /* ECC_BrainPoolP256t1 */
542     {(uint8_t *)"ECC_BrainPoolP256t1|SHA1", (uint8_t *)"ECC_BrainPoolP256t1", (uint8_t *)"SHA1", 62},      // 55
543     {(uint8_t *)"ECC_BrainPoolP256t1|SHA224", (uint8_t *)"ECC_BrainPoolP256t1", (uint8_t *)"SHA224", 62},  // 56
544     {(uint8_t *)"ECC_BrainPoolP256t1|SHA256", (uint8_t *)"ECC_BrainPoolP256t1", (uint8_t *)"SHA256", 62},  // 57
545     {(uint8_t *)"ECC_BrainPoolP256t1|SHA384", (uint8_t *)"ECC_BrainPoolP256t1", (uint8_t *)"SHA384", 62},  // 58
546     {(uint8_t *)"ECC_BrainPoolP256t1|SHA512", (uint8_t *)"ECC_BrainPoolP256t1", (uint8_t *)"SHA512", 62},  // 59
547     /* ECC_BrainPoolP320r1 */
548     {(uint8_t *)"ECC_BrainPoolP320r1|SHA1", (uint8_t *)"ECC_BrainPoolP320r1", (uint8_t *)"SHA1", 62},      // 60
549     {(uint8_t *)"ECC_BrainPoolP320r1|SHA224", (uint8_t *)"ECC_BrainPoolP320r1", (uint8_t *)"SHA224", 62},  // 61
550     {(uint8_t *)"ECC_BrainPoolP320r1|SHA256", (uint8_t *)"ECC_BrainPoolP320r1", (uint8_t *)"SHA256", 62},  // 62
551     {(uint8_t *)"ECC_BrainPoolP320r1|SHA384", (uint8_t *)"ECC_BrainPoolP320r1", (uint8_t *)"SHA384", 62},  // 63
552     {(uint8_t *)"ECC_BrainPoolP320r1|SHA512", (uint8_t *)"ECC_BrainPoolP320r1", (uint8_t *)"SHA512", 62},  // 64
553     /* ECC_BrainPoolP320t1 */
554     {(uint8_t *)"ECC_BrainPoolP320t1|SHA1", (uint8_t *)"ECC_BrainPoolP320t1", (uint8_t *)"SHA1", 62},      // 65
555     {(uint8_t *)"ECC_BrainPoolP320t1|SHA224", (uint8_t *)"ECC_BrainPoolP320t1", (uint8_t *)"SHA224", 62},  // 66
556     {(uint8_t *)"ECC_BrainPoolP320t1|SHA256", (uint8_t *)"ECC_BrainPoolP320t1", (uint8_t *)"SHA256", 62},  // 67
557     {(uint8_t *)"ECC_BrainPoolP320t1|SHA384", (uint8_t *)"ECC_BrainPoolP320t1", (uint8_t *)"SHA384", 62},  // 68
558     {(uint8_t *)"ECC_BrainPoolP320t1|SHA512", (uint8_t *)"ECC_BrainPoolP320t1", (uint8_t *)"SHA512", 62},  // 69
559     /* ECC_BrainPoolP384r1 */
560     {(uint8_t *)"ECC_BrainPoolP384r1|SHA1", (uint8_t *)"ECC_BrainPoolP384r1", (uint8_t *)"SHA1", 62},      // 70
561     {(uint8_t *)"ECC_BrainPoolP384r1|SHA224", (uint8_t *)"ECC_BrainPoolP384r1", (uint8_t *)"SHA224", 62},  // 71
562     {(uint8_t *)"ECC_BrainPoolP384r1|SHA256", (uint8_t *)"ECC_BrainPoolP384r1", (uint8_t *)"SHA256", 62},  // 72
563     {(uint8_t *)"ECC_BrainPoolP384r1|SHA384", (uint8_t *)"ECC_BrainPoolP384r1", (uint8_t *)"SHA384", 62},  // 73
564     {(uint8_t *)"ECC_BrainPoolP384r1|SHA512", (uint8_t *)"ECC_BrainPoolP384r1", (uint8_t *)"SHA512", 62},  // 74
565     /* ECC_BrainPoolP384t1 */
566     {(uint8_t *)"ECC_BrainPoolP384t1|SHA1", (uint8_t *)"ECC_BrainPoolP384t1", (uint8_t *)"SHA1", 62},      // 75
567     {(uint8_t *)"ECC_BrainPoolP384t1|SHA224", (uint8_t *)"ECC_BrainPoolP384t1", (uint8_t *)"SHA224", 62},  // 76
568     {(uint8_t *)"ECC_BrainPoolP384t1|SHA256", (uint8_t *)"ECC_BrainPoolP384t1", (uint8_t *)"SHA256", 62},  // 77
569     {(uint8_t *)"ECC_BrainPoolP384t1|SHA384", (uint8_t *)"ECC_BrainPoolP384t1", (uint8_t *)"SHA384", 62},  // 78
570     {(uint8_t *)"ECC_BrainPoolP384t1|SHA512", (uint8_t *)"ECC_BrainPoolP384t1", (uint8_t *)"SHA512", 62},  // 79
571     /* ECC_BrainPoolP512r1 */
572     {(uint8_t *)"ECC_BrainPoolP512r1|SHA1", (uint8_t *)"ECC_BrainPoolP512r1", (uint8_t *)"SHA1", 62},      // 80
573     {(uint8_t *)"ECC_BrainPoolP512r1|SHA224", (uint8_t *)"ECC_BrainPoolP512r1", (uint8_t *)"SHA224", 62},  // 81
574     {(uint8_t *)"ECC_BrainPoolP512r1|SHA256", (uint8_t *)"ECC_BrainPoolP512r1", (uint8_t *)"SHA256", 62},  // 82
575     {(uint8_t *)"ECC_BrainPoolP512r1|SHA384", (uint8_t *)"ECC_BrainPoolP512r1", (uint8_t *)"SHA384", 62},  // 83
576     {(uint8_t *)"ECC_BrainPoolP512r1|SHA512", (uint8_t *)"ECC_BrainPoolP512r1", (uint8_t *)"SHA512", 62},  // 84
577     /* ECC_BrainPoolP512t1 */
578     {(uint8_t *)"ECC_BrainPoolP512t1|SHA1", (uint8_t *)"ECC_BrainPoolP512t1", (uint8_t *)"SHA1", 62},      // 85
579     {(uint8_t *)"ECC_BrainPoolP512t1|SHA224", (uint8_t *)"ECC_BrainPoolP512t1", (uint8_t *)"SHA224", 62},  // 86
580     {(uint8_t *)"ECC_BrainPoolP512t1|SHA256", (uint8_t *)"ECC_BrainPoolP512t1", (uint8_t *)"SHA256", 62},  // 87
581     {(uint8_t *)"ECC_BrainPoolP512t1|SHA384", (uint8_t *)"ECC_BrainPoolP512t1", (uint8_t *)"SHA384", 62},  // 88
582     {(uint8_t *)"ECC_BrainPoolP512t1|SHA512", (uint8_t *)"ECC_BrainPoolP512t1", (uint8_t *)"SHA512", 62},  // 89
583     /* ECC_Secp256k1 */
584     {(uint8_t *)"ECC_Secp256k1|SHA1", (uint8_t *)"ECC_Secp256k1", (uint8_t *)"SHA1", 62},      // 90
585     {(uint8_t *)"ECC_Secp256k1|SHA224", (uint8_t *)"ECC_Secp256k1", (uint8_t *)"SHA224", 62},  // 91
586     {(uint8_t *)"ECC_Secp256k1|SHA256", (uint8_t *)"ECC_Secp256k1", (uint8_t *)"SHA256", 62},  // 92
587     {(uint8_t *)"ECC_Secp256k1|SHA384", (uint8_t *)"ECC_Secp256k1", (uint8_t *)"SHA384", 62},  // 93
588     {(uint8_t *)"ECC_Secp256k1|SHA512", (uint8_t *)"ECC_Secp256k1", (uint8_t *)"SHA512", 62},  // 94
589     /* ECC */
590     {(uint8_t *)"ECC|SHA1", (uint8_t *)"ECC521", (uint8_t *)"SHA1", 62},      // 95
591 };
592 
593 AsymSignSpec g_signOtherData[] = {
594     /* SM2 */
595     {(uint8_t *)"SM2_256|SM3", (uint8_t *)"SM2_256", (uint8_t *)"SM3", 62},      // 0
596     {(uint8_t *)"SM2|SM3", (uint8_t *)"SM2_256", (uint8_t *)"SM3", 62},          // 1
597     /* Ed25519 */
598     {(uint8_t *)"Ed25519", (uint8_t *)"Ed25519", nullptr, 62},                   // 2
599 };
600 
601 class SIGNATURE_RSA_PKCS1_TEST : public testing::TestWithParam<SignSpec> {
602     public:
SetUpTestCase()603         static void SetUpTestCase() {}
TearDownTestCase()604         static void TearDownTestCase() {}
605 };
606 
607 class SIGNATURE_RSA_PSS_TEST : public testing::TestWithParam<SignSpec> {
608     public:
SetUpTestCase()609         static void SetUpTestCase() {}
TearDownTestCase()610         static void TearDownTestCase() {}
611 };
612 
613 class SIGNATURE_RSA_ONLYSIGN_TEST : public testing::TestWithParam<OnlySignSpec> {
614     public:
SetUpTestCase()615         static void SetUpTestCase() {}
TearDownTestCase()616         static void TearDownTestCase() {}
617 };
618 
619 class SIGNATURE_DSA_TEST : public testing::TestWithParam<AsymSignSpec> {
620     public:
SetUpTestCase()621         static void SetUpTestCase() {}
TearDownTestCase()622         static void TearDownTestCase() {}
623 };
624 
625 class SIGNATURE_ECDSA_TEST : public testing::TestWithParam<AsymSignSpec> {
626     public:
SetUpTestCase()627         static void SetUpTestCase() {}
TearDownTestCase()628         static void TearDownTestCase() {}
629 };
630 
631 class SIGNATURE_SM2_ED25519_TEST : public testing::TestWithParam<AsymSignSpec> {
632     public:
SetUpTestCase()633         static void SetUpTestCase() {}
TearDownTestCase()634         static void TearDownTestCase() {}
635 };
636 
637 INSTANTIATE_TEST_CASE_P(OHCryptoFrameworkSignatureNapiTest, SIGNATURE_RSA_PKCS1_TEST, ::testing::ValuesIn(g_signPkcs1Data));
638 
OHTEST_DoNoSegmentSign(const char * algoName,OH_CryptoPrivKey * privKey,Crypto_DataBlob * msgBlob,Crypto_DataBlob * signData)639 static OH_Crypto_ErrCode OHTEST_DoNoSegmentSign(const char *algoName, OH_CryptoPrivKey *privKey, Crypto_DataBlob *msgBlob, Crypto_DataBlob *signData)
640 {
641     OH_CryptoSign *sign = nullptr;
642     OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
643 
644     ret = OH_CryptoSign_Create(algoName, &sign);
645     if (ret != CRYPTO_SUCCESS) {
646         goto EXIT;
647     }
648     ret = OH_CryptoSign_Init(sign, privKey);
649     if (ret != CRYPTO_SUCCESS) {
650         goto EXIT;
651     }
652     ret = OH_CryptoSign_Final(sign, msgBlob, signData);
653     if (ret != CRYPTO_SUCCESS) {
654         goto EXIT;
655     } else {
656         const char *signName = OH_CryptoSign_GetAlgoName(sign);
657         EXPECT_TRUE(signName != nullptr);
658     }
659 
660 EXIT:
661     OH_CryptoSign_Destroy(sign);
662     return ret;
663 }
664 
OHTEST_DoSegmentSign(const char * algoName,OH_CryptoPrivKey * privKey,Crypto_DataBlob * msgBlob,Crypto_DataBlob * signData,int blockSize)665 static OH_Crypto_ErrCode OHTEST_DoSegmentSign(const char *algoName, OH_CryptoPrivKey *privKey, Crypto_DataBlob *msgBlob, Crypto_DataBlob *signData, int blockSize)
666 {
667     OH_CryptoSign *sign = nullptr;
668     OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
669     int quotient = msgBlob->len / blockSize;
670     int remainder = msgBlob->len % blockSize;
671     uint8_t *data = msgBlob->data;
672     size_t len = msgBlob->len;
673     Crypto_DataBlob *dataBlob = msgBlob;
674 
675     ret = OH_CryptoSign_Create(algoName, &sign);
676     if (ret != CRYPTO_SUCCESS) {
677         goto EXIT;
678     }
679     ret = OH_CryptoSign_Init(sign, privKey);
680     if (ret != CRYPTO_SUCCESS) {
681         goto EXIT;
682     }
683     for (int i = 0; i < quotient; i++) {
684         dataBlob->len = blockSize;
685         ret = OH_CryptoSign_Update(sign, dataBlob);
686         if (ret != CRYPTO_SUCCESS) {
687             goto EXIT;
688         }
689         dataBlob->data += blockSize;
690     }
691     dataBlob->len = remainder;
692     ret = OH_CryptoSign_Final(sign, dataBlob, signData);
693     if (ret != CRYPTO_SUCCESS) {
694         goto EXIT;
695     }
696 
697 EXIT:
698     dataBlob->data = data;
699     dataBlob->len = len;
700     OH_CryptoSign_Destroy(sign);
701     return ret;
702 }
703 
OHTEST_DoVerify(const char * algoName,OH_CryptoPubKey * pubKey,Crypto_DataBlob * msgBlob,Crypto_DataBlob * signData)704 static bool OHTEST_DoVerify(const char *algoName, OH_CryptoPubKey *pubKey, Crypto_DataBlob *msgBlob, Crypto_DataBlob *signData)
705 {
706     OH_CryptoVerify *verify = nullptr;
707     OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
708     bool res = false;
709 
710     ret = OH_CryptoVerify_Create(algoName, &verify);
711     if (ret != CRYPTO_SUCCESS) {
712         goto EXIT;
713     }
714     ret = OH_CryptoVerify_Init(verify, pubKey);
715     if (ret != CRYPTO_SUCCESS) {
716         goto EXIT;
717     }
718     res = OH_CryptoVerify_Final(verify, msgBlob, signData);
719 
720 EXIT:
721     OH_CryptoVerify_Destroy(verify);
722     return res;
723 }
724 
OHTEST_DoRecover(const char * algoName,OH_CryptoPubKey * pubKey,Crypto_DataBlob * signData,Crypto_DataBlob * rawBlob)725 static OH_Crypto_ErrCode OHTEST_DoRecover(const char *algoName, OH_CryptoPubKey *pubKey, Crypto_DataBlob *signData, Crypto_DataBlob *rawBlob)
726 {
727     OH_CryptoVerify *recover = nullptr;
728     OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
729 
730     ret = OH_CryptoVerify_Create(algoName, &recover);
731     if (ret != CRYPTO_SUCCESS) {
732         goto EXIT;
733     }
734     ret = OH_CryptoVerify_Init(recover, pubKey);
735     if (ret != CRYPTO_SUCCESS) {
736         goto EXIT;
737     }
738     ret = OH_CryptoVerify_Recover(recover, signData, rawBlob);
739 
740 EXIT:
741     OH_CryptoVerify_Destroy(recover);
742     return ret;
743 }
744 
OHTEST_DoSegmentVerify(const char * algoName,OH_CryptoPubKey * pubKey,Crypto_DataBlob * msgBlob,Crypto_DataBlob * signData,int blockSize)745 static bool OHTEST_DoSegmentVerify(const char *algoName, OH_CryptoPubKey *pubKey, Crypto_DataBlob *msgBlob, Crypto_DataBlob *signData, int blockSize)
746 {
747     OH_CryptoVerify *verify = nullptr;
748     OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
749     bool res = false;
750     int quotient = msgBlob->len / blockSize;
751     int remainder = msgBlob->len % blockSize;
752     Crypto_DataBlob *dataBlob = msgBlob;
753     uint8_t *data = msgBlob->data;
754     size_t len = msgBlob->len;
755 
756     ret = OH_CryptoVerify_Create(algoName, &verify);
757     if (ret != CRYPTO_SUCCESS) {
758         goto EXIT;
759     }
760     ret = OH_CryptoVerify_Init(verify, pubKey);
761     if (ret != CRYPTO_SUCCESS) {
762         goto EXIT;
763     }
764     for (int i = 0; i < quotient; i++) {
765         dataBlob->len = blockSize;
766         ret = OH_CryptoVerify_Update(verify, dataBlob);
767         if (ret != CRYPTO_SUCCESS) {
768             goto EXIT;
769         }
770         dataBlob->data += blockSize;
771     }
772     dataBlob->len = remainder;
773     res = OH_CryptoVerify_Final(verify, dataBlob, signData);
774 
775 EXIT:
776     dataBlob->data = data;
777     dataBlob->len = len;
778     OH_CryptoVerify_Destroy(verify);
779     return res;
780 }
781 
OHTEST_GenAsymKey(const char * algoName)782 static OH_CryptoKeyPair *OHTEST_GenAsymKey(const char *algoName)
783 {
784     OH_CryptoKeyPair *keyPair = nullptr;
785     OH_CryptoAsymKeyGenerator *ctx = nullptr;
786 
787     EXPECT_EQ(OH_CryptoAsymKeyGenerator_Create(algoName, &ctx), CRYPTO_SUCCESS);
788     if (strcmp(algoName, "RSA8192") == 0) {
789         Crypto_DataBlob pubKeyBlob = { .data = g_rsa8192pubKey, .len = sizeof(g_rsa8192pubKey) };
790         Crypto_DataBlob priKeyBlob = { .data = g_rsa8192priKey, .len = sizeof(g_rsa8192priKey) };
791         EXPECT_EQ(OH_CryptoAsymKeyGenerator_Convert(ctx, CRYPTO_DER, &pubKeyBlob, &priKeyBlob, &keyPair), CRYPTO_SUCCESS);
792     } else if (strcmp(algoName, "RSA4096") == 0) {
793         Crypto_DataBlob pubKeyBlob = { .data = g_rsa4096pubKey, .len = sizeof(g_rsa4096pubKey) };
794         Crypto_DataBlob priKeyBlob = { .data = g_rsa4096priKey, .len = sizeof(g_rsa4096priKey) };
795         EXPECT_EQ(OH_CryptoAsymKeyGenerator_Convert(ctx, CRYPTO_DER, &pubKeyBlob, &priKeyBlob, &keyPair), CRYPTO_SUCCESS);
796     } else if (strcmp(algoName, "RSA3072") == 0) {
797         Crypto_DataBlob pubKeyBlob = { .data = g_rsa3072pubKey, .len = sizeof(g_rsa3072pubKey) };
798         Crypto_DataBlob priKeyBlob = { .data = g_rsa3072priKey, .len = sizeof(g_rsa3072priKey) };
799         EXPECT_EQ(OH_CryptoAsymKeyGenerator_Convert(ctx, CRYPTO_DER, &pubKeyBlob, &priKeyBlob, &keyPair), CRYPTO_SUCCESS);
800     } else {
801         EXPECT_EQ(OH_CryptoAsymKeyGenerator_Generate(ctx, &keyPair), CRYPTO_SUCCESS);
802     }
803 
804     OH_CryptoAsymKeyGenerator_Destroy(ctx);
805     return keyPair;
806 }
807 
808 /**
809 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_0100
810 * @tc.name OHCryptoFrameworkSignatureNapiTest/SIGNATURE_RSA_PKCS1_TEST.SUB_Security_CryptoFramework_NAPI_Signature_Test_0100/x
811 * @tc.desc Signature function test
812 * @tc.size Medium
813 * @tc.type Func
814 * @tc.level Level0
815 */
816 HWTEST_P(SIGNATURE_RSA_PKCS1_TEST, SUB_Security_CryptoFramework_NAPI_Signature_Test_0100, TestSize.Level0)
817 {
818     SignSpec specInfo = GetParam();
819     OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
820     OH_CryptoKeyPair *keyPair = nullptr;
821     OH_CryptoPrivKey *privKey = nullptr;
822     OH_CryptoPubKey *pubKey = nullptr;
823     const char *algoName = (const char *)specInfo.algoName;
824     const char *asymAlgoName= (const char *)specInfo.asymAlgoName;
825     int32_t msgLen = specInfo.msgLen;
826     HcfRand *randomObj = nullptr;
827     HcfBlob msgBlob = {.data = nullptr, .len = 0};
828     Crypto_DataBlob signData = {.data = nullptr, .len = 0};
829 
830     HcfRandCreate(&randomObj);
831     EXPECT_TRUE(randomObj != nullptr);
832     EXPECT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
833     msgBlob.data[0] = 0;
834     keyPair = OHTEST_GenAsymKey(asymAlgoName);
835     EXPECT_TRUE(keyPair != nullptr);
836     privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
837     pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
838     EXPECT_TRUE(privKey != nullptr);
839     EXPECT_TRUE(pubKey != nullptr);
840     ret = OHTEST_DoNoSegmentSign(algoName, privKey, (Crypto_DataBlob *)&msgBlob, &signData);
841     EXPECT_EQ(ret, CRYPTO_SUCCESS);
842     EXPECT_TRUE(OHTEST_DoVerify(algoName, pubKey, (Crypto_DataBlob *)&msgBlob, &signData));
843 
844     HcfObjDestroy(randomObj);
845     OH_CryptoKeyPair_Destroy(keyPair);
846     OH_Crypto_FreeDataBlob(&signData);
847     OH_Crypto_FreeDataBlob((Crypto_DataBlob *)&msgBlob);
848 }
849 
850 /**
851 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_0200
852 * @tc.name OHCryptoFrameworkSignatureNapiTest/SIGNATURE_RSA_PKCS1_TEST.SUB_Security_CryptoFramework_NAPI_Signature_Test_0200/x
853 * @tc.desc Signature function test
854 * @tc.size Medium
855 * @tc.type Func
856 * @tc.level Level0
857 */
858 HWTEST_P(SIGNATURE_RSA_PKCS1_TEST, SUB_Security_CryptoFramework_NAPI_Signature_Test_0200, TestSize.Level0)
859 {
860     SignSpec specInfo = GetParam();
861     OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
862     OH_CryptoKeyPair *keyPair = nullptr;
863     OH_CryptoPrivKey *privKey = nullptr;
864     OH_CryptoPubKey *pubKey = nullptr;
865     const char *algoName = (const char *)specInfo.algoName;
866     const char *asymAlgoName= (const char *)specInfo.asymAlgoName;
867     int32_t msgLen = specInfo.msgLen;
868     HcfRand *randomObj = nullptr;
869     HcfBlob msgBlob = {.data = nullptr, .len = 0};
870     Crypto_DataBlob signData1 = {.data = nullptr, .len = 0};
871     Crypto_DataBlob signData2 = {.data = nullptr, .len = 0};
872     int blockSize = 20;
873 
874     HcfRandCreate(&randomObj);
875     EXPECT_TRUE(randomObj != nullptr);
876     EXPECT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
877     msgBlob.data[0] = 0;
878     keyPair = OHTEST_GenAsymKey(asymAlgoName);
879     EXPECT_TRUE(keyPair != nullptr);
880     privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
881     pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
882     EXPECT_TRUE(privKey != nullptr);
883     EXPECT_TRUE(pubKey != nullptr);
884     ret = OHTEST_DoSegmentSign(algoName, privKey, (Crypto_DataBlob *)&msgBlob, &signData2, blockSize);
885     EXPECT_EQ(ret, CRYPTO_SUCCESS);
886     ret = OHTEST_DoNoSegmentSign(algoName, privKey, (Crypto_DataBlob *)&msgBlob, &signData1);
887     EXPECT_EQ(ret, CRYPTO_SUCCESS);
888     EXPECT_TRUE(memcmp(signData1.data, signData2.data, signData1.len) == 0);
889     EXPECT_TRUE(signData1.len == signData2.len);
890     EXPECT_TRUE(OHTEST_DoSegmentVerify(algoName, pubKey, (Crypto_DataBlob *)&msgBlob, &signData1, blockSize));
891 
892     HcfObjDestroy(randomObj);
893     OH_CryptoKeyPair_Destroy(keyPair);
894     OH_Crypto_FreeDataBlob(&signData1);
895     OH_Crypto_FreeDataBlob(&signData2);
896     OH_Crypto_FreeDataBlob((Crypto_DataBlob *)&msgBlob);
897 }
898 
899 INSTANTIATE_TEST_CASE_P(OHCryptoFrameworkSignatureNapiTest, SIGNATURE_RSA_PSS_TEST, ::testing::ValuesIn(g_signPssData));
900 
901 /**
902 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_0300
903 * @tc.name OHCryptoFrameworkSignatureNapiTest/SIGNATURE_RSA_PSS_TEST.SUB_Security_CryptoFramework_NAPI_Signature_Test_0300/x
904 * @tc.desc Signature function test
905 * @tc.size Medium
906 * @tc.type Func
907 * @tc.level Level0
908 */
909 HWTEST_P(SIGNATURE_RSA_PSS_TEST, SUB_Security_CryptoFramework_NAPI_Signature_Test_0300, TestSize.Level0)
910 {
911     SignSpec specInfo = GetParam();
912     OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
913     OH_CryptoKeyPair *keyPair = nullptr;
914     OH_CryptoPrivKey *privKey = nullptr;
915     OH_CryptoPubKey *pubKey = nullptr;
916     const char *algoName = (const char *)specInfo.algoName;
917     const char *asymAlgoName= (const char *)specInfo.asymAlgoName;
918     int32_t msgLen = specInfo.msgLen;
919     HcfRand *randomObj = nullptr;
920     HcfBlob msgBlob = {.data = nullptr, .len = 0};
921     Crypto_DataBlob signData = {.data = nullptr, .len = 0};
922 
923     HcfRandCreate(&randomObj);
924     EXPECT_TRUE(randomObj != nullptr);
925     EXPECT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
926     msgBlob.data[0] = 0;
927     keyPair = OHTEST_GenAsymKey(asymAlgoName);
928     EXPECT_TRUE(keyPair != nullptr);
929     privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
930     pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
931     EXPECT_TRUE(privKey != nullptr);
932     EXPECT_TRUE(pubKey != nullptr);
933     ret = OHTEST_DoNoSegmentSign(algoName, privKey, (Crypto_DataBlob *)&msgBlob, &signData);
934     EXPECT_EQ(ret, CRYPTO_SUCCESS);
935     EXPECT_TRUE(OHTEST_DoVerify(algoName, pubKey, (Crypto_DataBlob *)&msgBlob, &signData));
936 
937     HcfObjDestroy(randomObj);
938     OH_CryptoKeyPair_Destroy(keyPair);
939     OH_Crypto_FreeDataBlob(&signData);
940     OH_Crypto_FreeDataBlob((Crypto_DataBlob *)&msgBlob);
941 }
942 
943 /**
944 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_0400
945 * @tc.name OHCryptoFrameworkSignatureNapiTest/SIGNATURE_RSA_PSS_TEST.SUB_Security_CryptoFramework_NAPI_Signature_Test_0400/x
946 * @tc.desc Signature function test
947 * @tc.size Medium
948 * @tc.type Func
949 * @tc.level Level0
950 */
951 HWTEST_P(SIGNATURE_RSA_PSS_TEST, SUB_Security_CryptoFramework_NAPI_Signature_Test_0400, TestSize.Level0)
952 {
953     SignSpec specInfo = GetParam();
954     OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
955     OH_CryptoKeyPair *keyPair = nullptr;
956     OH_CryptoPrivKey *privKey = nullptr;
957     OH_CryptoPubKey *pubKey = nullptr;
958     const char *algoName = (const char *)specInfo.algoName;
959     const char *asymAlgoName= (const char *)specInfo.asymAlgoName;
960     int32_t msgLen = specInfo.msgLen;
961     HcfRand *randomObj = nullptr;
962     HcfBlob msgBlob = {.data = nullptr, .len = 0};
963     Crypto_DataBlob signData1 = {.data = nullptr, .len = 0};
964     Crypto_DataBlob signData2 = {.data = nullptr, .len = 0};
965     int blockSize = 20;
966 
967     HcfRandCreate(&randomObj);
968     EXPECT_TRUE(randomObj != nullptr);
969     EXPECT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
970     msgBlob.data[0] = 0;
971     keyPair = OHTEST_GenAsymKey(asymAlgoName);
972     EXPECT_TRUE(keyPair != nullptr);
973     privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
974     pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
975     EXPECT_TRUE(privKey != nullptr);
976     EXPECT_TRUE(pubKey != nullptr);
977     ret = OHTEST_DoSegmentSign(algoName, privKey, (Crypto_DataBlob *)&msgBlob, &signData2, blockSize);
978     EXPECT_EQ(ret, CRYPTO_SUCCESS);
979     ret = OHTEST_DoNoSegmentSign(algoName, privKey, (Crypto_DataBlob *)&msgBlob, &signData1);
980     EXPECT_EQ(ret, CRYPTO_SUCCESS);
981     EXPECT_TRUE(signData1.len == signData2.len);
982     EXPECT_TRUE(OHTEST_DoSegmentVerify(algoName, pubKey, (Crypto_DataBlob *)&msgBlob, &signData1, blockSize));
983     EXPECT_TRUE(OHTEST_DoVerify(algoName, pubKey, (Crypto_DataBlob *)&msgBlob, &signData2));
984 
985     HcfObjDestroy(randomObj);
986     OH_CryptoKeyPair_Destroy(keyPair);
987     OH_Crypto_FreeDataBlob(&signData1);
988     OH_Crypto_FreeDataBlob(&signData2);
989     OH_Crypto_FreeDataBlob((Crypto_DataBlob *)&msgBlob);
990 }
991 
992 INSTANTIATE_TEST_CASE_P(OHCryptoFrameworkSignatureNapiTest, SIGNATURE_RSA_ONLYSIGN_TEST, ::testing::ValuesIn(g_onlySignData));
993 
994 /**
995 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_0500
996 * @tc.name OHCryptoFrameworkSignatureNapiTest/SIGNATURE_RSA_ONLYSIGN_TEST.SUB_Security_CryptoFramework_NAPI_Signature_Test_0500/x
997 * @tc.desc Signature function test
998 * @tc.size Medium
999 * @tc.type Func
1000 * @tc.level Level0
1001 */
1002 HWTEST_P(SIGNATURE_RSA_ONLYSIGN_TEST, SUB_Security_CryptoFramework_NAPI_Signature_Test_0500, TestSize.Level0)
1003 {
1004     OnlySignSpec specInfo = GetParam();
1005     OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
1006     OH_CryptoKeyPair *keyPair = nullptr;
1007     OH_CryptoPrivKey *privKey = nullptr;
1008     OH_CryptoPubKey *pubKey = nullptr;
1009     const char *signAlgoName = (const char *)specInfo.signAlgoName;
1010     const char *verifyAlgoName = (const char *)specInfo.verifyAlgoName;
1011     const char *asymAlgoName= (const char *)specInfo.asymAlgoName;
1012     int32_t msgLen = specInfo.msgLen;
1013     HcfRand *randomObj = nullptr;
1014     HcfBlob msgBlob = {.data = nullptr, .len = 0};
1015     Crypto_DataBlob signData = {.data = nullptr, .len = 0};
1016     Crypto_DataBlob rawData = {.data = nullptr, .len = 0};
1017 
1018     HcfRandCreate(&randomObj);
1019     EXPECT_TRUE(randomObj != nullptr);
1020     EXPECT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1021     msgBlob.data[0] = 0;
1022     keyPair = OHTEST_GenAsymKey(asymAlgoName);
1023     EXPECT_TRUE(keyPair != nullptr);
1024     privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1025     pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1026     EXPECT_TRUE(privKey != nullptr);
1027     EXPECT_TRUE(pubKey != nullptr);
1028     ret = OHTEST_DoNoSegmentSign(signAlgoName, privKey, (Crypto_DataBlob *)&msgBlob, &signData);
1029     EXPECT_EQ(ret, CRYPTO_SUCCESS);
1030     EXPECT_EQ(OHTEST_DoRecover(verifyAlgoName, pubKey, &signData, &rawData), CRYPTO_SUCCESS);
1031     EXPECT_TRUE(memcmp(rawData.data, msgBlob.data, msgBlob.len) == 0);
1032     EXPECT_EQ(msgBlob.len, rawData.len);
1033 
1034     HcfObjDestroy(randomObj);
1035     OH_CryptoKeyPair_Destroy(keyPair);
1036     OH_Crypto_FreeDataBlob(&signData);
1037     OH_Crypto_FreeDataBlob(&rawData);
1038     OH_Crypto_FreeDataBlob((Crypto_DataBlob *)&msgBlob);
1039 }
1040 
1041 INSTANTIATE_TEST_CASE_P(OHCryptoFrameworkSignatureNapiTest, SIGNATURE_DSA_TEST, ::testing::ValuesIn(g_dsaData));
1042 
1043 /**
1044 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_0600
1045 * @tc.name OHCryptoFrameworkSignatureNapiTest/SIGNATURE_DSA_TEST.SUB_Security_CryptoFramework_NAPI_Signature_Test_0600/x
1046 * @tc.desc Signature function test
1047 * @tc.size Medium
1048 * @tc.type Func
1049 * @tc.level Level0
1050 */
1051 HWTEST_P(SIGNATURE_DSA_TEST, SUB_Security_CryptoFramework_NAPI_Signature_Test_0600, TestSize.Level0)
1052 {
1053     AsymSignSpec specInfo = GetParam();
1054     OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
1055     OH_CryptoKeyPair *keyPair = nullptr;
1056     OH_CryptoPrivKey *privKey = nullptr;
1057     OH_CryptoPubKey *pubKey = nullptr;
1058     const char *algoName = (const char *)specInfo.algoName;
1059     const char *asymAlgoName= (const char *)specInfo.asymAlgoName;
1060     int32_t msgLen = specInfo.msgLen;
1061     HcfRand *randomObj = nullptr;
1062     HcfBlob msgBlob = {.data = nullptr, .len = 0};
1063     Crypto_DataBlob signData = {.data = nullptr, .len = 0};
1064 
1065     HcfRandCreate(&randomObj);
1066     EXPECT_TRUE(randomObj != nullptr);
1067     EXPECT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1068     msgBlob.data[0] = 0;
1069     keyPair = OHTEST_GenAsymKey(asymAlgoName);
1070     EXPECT_TRUE(keyPair != nullptr);
1071     privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1072     pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1073     EXPECT_TRUE(privKey != nullptr);
1074     EXPECT_TRUE(pubKey != nullptr);
1075     ret = OHTEST_DoNoSegmentSign(algoName, privKey, (Crypto_DataBlob *)&msgBlob, &signData);
1076     EXPECT_EQ(ret, CRYPTO_SUCCESS);
1077     EXPECT_TRUE(OHTEST_DoVerify(algoName, pubKey, (Crypto_DataBlob *)&msgBlob, &signData));
1078 
1079     HcfObjDestroy(randomObj);
1080     OH_CryptoKeyPair_Destroy(keyPair);
1081     OH_Crypto_FreeDataBlob(&signData);
1082     OH_Crypto_FreeDataBlob((Crypto_DataBlob *)&msgBlob);
1083 }
1084 
1085 /**
1086 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_0700
1087 * @tc.name OHCryptoFrameworkSignatureNapiTest/SIGNATURE_DSA_TEST.SUB_Security_CryptoFramework_NAPI_Signature_Test_0700/x
1088 * @tc.desc Signature function test
1089 * @tc.size Medium
1090 * @tc.type Func
1091 * @tc.level Level0
1092 */
1093 HWTEST_P(SIGNATURE_DSA_TEST, SUB_Security_CryptoFramework_NAPI_Signature_Test_0700, TestSize.Level0)
1094 {
1095     AsymSignSpec specInfo = GetParam();
1096     OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
1097     OH_CryptoKeyPair *keyPair = nullptr;
1098     OH_CryptoPrivKey *privKey = nullptr;
1099     OH_CryptoPubKey *pubKey = nullptr;
1100     const char *algoName = (const char *)specInfo.algoName;
1101     const char *asymAlgoName= (const char *)specInfo.asymAlgoName;
1102     const char *digestAlgoName= (const char *)specInfo.digestAlgoName;
1103     int32_t msgLen = specInfo.msgLen;
1104     HcfRand *randomObj = nullptr;
1105     HcfBlob msgBlob = {.data = nullptr, .len = 0};
1106     Crypto_DataBlob signData = {.data = nullptr, .len = 0};
1107     int blockSize = 20;
1108     /* NoHash Not Support Update*/
1109     SKIP_NOHASH_TEST(digestAlgoName);
1110 
1111     HcfRandCreate(&randomObj);
1112     EXPECT_TRUE(randomObj != nullptr);
1113     EXPECT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1114     msgBlob.data[0] = 0;
1115     keyPair = OHTEST_GenAsymKey(asymAlgoName);
1116     EXPECT_TRUE(keyPair != nullptr);
1117     privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1118     pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1119     EXPECT_TRUE(privKey != nullptr);
1120     EXPECT_TRUE(pubKey != nullptr);
1121     ret = OHTEST_DoSegmentSign(algoName, privKey, (Crypto_DataBlob *)&msgBlob, &signData, blockSize);
1122     EXPECT_EQ(ret, CRYPTO_SUCCESS);
1123     EXPECT_TRUE(OHTEST_DoVerify(algoName, pubKey, (Crypto_DataBlob *)&msgBlob, &signData));
1124 
1125     HcfObjDestroy(randomObj);
1126     OH_CryptoKeyPair_Destroy(keyPair);
1127     OH_Crypto_FreeDataBlob(&signData);
1128     OH_Crypto_FreeDataBlob((Crypto_DataBlob *)&msgBlob);
1129 }
1130 
1131 INSTANTIATE_TEST_CASE_P(OHCryptoFrameworkSignatureNapiTest, SIGNATURE_ECDSA_TEST, ::testing::ValuesIn(g_ecdsaData));
1132 
1133 /**
1134 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_0800
1135 * @tc.name OHCryptoFrameworkSignatureNapiTest/SIGNATURE_ECDSA_TEST.SUB_Security_CryptoFramework_NAPI_Signature_Test_0800/x
1136 * @tc.desc Signature function test
1137 * @tc.size Medium
1138 * @tc.type Func
1139 * @tc.level Level0
1140 */
1141 HWTEST_P(SIGNATURE_ECDSA_TEST, SUB_Security_CryptoFramework_NAPI_Signature_Test_0800, TestSize.Level0)
1142 {
1143     AsymSignSpec specInfo = GetParam();
1144     OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
1145     OH_CryptoKeyPair *keyPair = nullptr;
1146     OH_CryptoPrivKey *privKey = nullptr;
1147     OH_CryptoPubKey *pubKey = nullptr;
1148     const char *algoName = (const char *)specInfo.algoName;
1149     const char *asymAlgoName= (const char *)specInfo.asymAlgoName;
1150     int32_t msgLen = specInfo.msgLen;
1151     HcfRand *randomObj = nullptr;
1152     HcfBlob msgBlob = {.data = nullptr, .len = 0};
1153     Crypto_DataBlob signData = {.data = nullptr, .len = 0};
1154 
1155     HcfRandCreate(&randomObj);
1156     EXPECT_TRUE(randomObj != nullptr);
1157     EXPECT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1158     msgBlob.data[0] = 0;
1159     keyPair = OHTEST_GenAsymKey(asymAlgoName);
1160     EXPECT_TRUE(keyPair != nullptr);
1161     privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1162     pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1163     EXPECT_TRUE(privKey != nullptr);
1164     EXPECT_TRUE(pubKey != nullptr);
1165     ret = OHTEST_DoNoSegmentSign(algoName, privKey, (Crypto_DataBlob *)&msgBlob, &signData);
1166     EXPECT_EQ(ret, CRYPTO_SUCCESS);
1167     EXPECT_TRUE(OHTEST_DoVerify(algoName, pubKey, (Crypto_DataBlob *)&msgBlob, &signData));
1168 
1169     HcfObjDestroy(randomObj);
1170     OH_CryptoKeyPair_Destroy(keyPair);
1171     OH_Crypto_FreeDataBlob(&signData);
1172     OH_Crypto_FreeDataBlob((Crypto_DataBlob *)&msgBlob);
1173 }
1174 
1175 /**
1176 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_0900
1177 * @tc.name OHCryptoFrameworkSignatureNapiTest/SIGNATURE_ECDSA_TEST.SUB_Security_CryptoFramework_NAPI_Signature_Test_0900/x
1178 * @tc.desc Signature function test
1179 * @tc.size Medium
1180 * @tc.type Func
1181 * @tc.level Level0
1182 */
1183 HWTEST_P(SIGNATURE_ECDSA_TEST, SUB_Security_CryptoFramework_NAPI_Signature_Test_0900, TestSize.Level0)
1184 {
1185     AsymSignSpec specInfo = GetParam();
1186     OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
1187     OH_CryptoKeyPair *keyPair = nullptr;
1188     OH_CryptoPrivKey *privKey = nullptr;
1189     OH_CryptoPubKey *pubKey = nullptr;
1190     const char *algoName = (const char *)specInfo.algoName;
1191     const char *asymAlgoName= (const char *)specInfo.asymAlgoName;
1192     int32_t msgLen = specInfo.msgLen;
1193     HcfRand *randomObj = nullptr;
1194     HcfBlob msgBlob = {.data = nullptr, .len = 0};
1195     Crypto_DataBlob signData = {.data = nullptr, .len = 0};
1196     int blockSize = 20;
1197 
1198     HcfRandCreate(&randomObj);
1199     EXPECT_TRUE(randomObj != nullptr);
1200     EXPECT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1201     msgBlob.data[0] = 0;
1202     keyPair = OHTEST_GenAsymKey(asymAlgoName);
1203     EXPECT_TRUE(keyPair != nullptr);
1204     privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1205     pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1206     EXPECT_TRUE(privKey != nullptr);
1207     EXPECT_TRUE(pubKey != nullptr);
1208     ret = OHTEST_DoSegmentSign(algoName, privKey, (Crypto_DataBlob *)&msgBlob, &signData, blockSize);
1209     EXPECT_EQ(ret, CRYPTO_SUCCESS);
1210     EXPECT_TRUE(OHTEST_DoVerify(algoName, pubKey, (Crypto_DataBlob *)&msgBlob, &signData));
1211 
1212     HcfObjDestroy(randomObj);
1213     OH_CryptoKeyPair_Destroy(keyPair);
1214     OH_Crypto_FreeDataBlob(&signData);
1215     OH_Crypto_FreeDataBlob((Crypto_DataBlob *)&msgBlob);
1216 }
1217 
1218 INSTANTIATE_TEST_CASE_P(OHCryptoFrameworkSignatureNapiTest, SIGNATURE_SM2_ED25519_TEST, ::testing::ValuesIn(g_signOtherData));
1219 
1220 /**
1221 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_1000
1222 * @tc.name OHCryptoFrameworkSignatureNapiTest/SIGNATURE_SM2_ED25519_TEST.SUB_Security_CryptoFramework_NAPI_Signature_Test_1000/x
1223 * @tc.desc Signature function test
1224 * @tc.size Medium
1225 * @tc.type Func
1226 * @tc.level Level0
1227 */
1228 HWTEST_P(SIGNATURE_SM2_ED25519_TEST, SUB_Security_CryptoFramework_NAPI_Signature_Test_1000, TestSize.Level0)
1229 {
1230     AsymSignSpec specInfo = GetParam();
1231     OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
1232     OH_CryptoKeyPair *keyPair = nullptr;
1233     OH_CryptoPrivKey *privKey = nullptr;
1234     OH_CryptoPubKey *pubKey = nullptr;
1235     const char *algoName = (const char *)specInfo.algoName;
1236     const char *asymAlgoName= (const char *)specInfo.asymAlgoName;
1237     int32_t msgLen = specInfo.msgLen;
1238     HcfRand *randomObj = nullptr;
1239     HcfBlob msgBlob = {.data = nullptr, .len = 0};
1240     Crypto_DataBlob signData = {.data = nullptr, .len = 0};
1241 
1242     HcfRandCreate(&randomObj);
1243     EXPECT_TRUE(randomObj != nullptr);
1244     EXPECT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1245     msgBlob.data[0] = 0;
1246     keyPair = OHTEST_GenAsymKey(asymAlgoName);
1247     EXPECT_TRUE(keyPair != nullptr);
1248     privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1249     pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1250     EXPECT_TRUE(privKey != nullptr);
1251     EXPECT_TRUE(pubKey != nullptr);
1252     ret = OHTEST_DoNoSegmentSign(algoName, privKey, (Crypto_DataBlob *)&msgBlob, &signData);
1253     EXPECT_EQ(ret, CRYPTO_SUCCESS);
1254     EXPECT_TRUE(OHTEST_DoVerify(algoName, pubKey, (Crypto_DataBlob *)&msgBlob, &signData));
1255 
1256     HcfObjDestroy(randomObj);
1257     OH_CryptoKeyPair_Destroy(keyPair);
1258     OH_Crypto_FreeDataBlob(&signData);
1259     OH_Crypto_FreeDataBlob((Crypto_DataBlob *)&msgBlob);
1260 }
1261 
1262 /**
1263 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_1100
1264 * @tc.name OHCryptoFrameworkSignatureNapiTest/SIGNATURE_SM2_ED25519_TEST.SUB_Security_CryptoFramework_NAPI_Signature_Test_1100/x
1265 * @tc.desc Signature function test
1266 * @tc.size Medium
1267 * @tc.type Func
1268 * @tc.level Level0
1269 */
1270 HWTEST_P(SIGNATURE_SM2_ED25519_TEST, SUB_Security_CryptoFramework_NAPI_Signature_Test_1100, TestSize.Level0)
1271 {
1272     AsymSignSpec specInfo = GetParam();
1273     OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
1274     OH_CryptoKeyPair *keyPair = nullptr;
1275     OH_CryptoPrivKey *privKey = nullptr;
1276     OH_CryptoPubKey *pubKey = nullptr;
1277     const char *algoName = (const char *)specInfo.algoName;
1278     const char *asymAlgoName= (const char *)specInfo.asymAlgoName;
1279     int32_t msgLen = specInfo.msgLen;
1280     HcfRand *randomObj = nullptr;
1281     HcfBlob msgBlob = {.data = nullptr, .len = 0};
1282     Crypto_DataBlob signData = {.data = nullptr, .len = 0};
1283     int blockSize = 20;
1284 
1285     SKIP_ED25519_TEST(asymAlgoName);
1286 
1287     HcfRandCreate(&randomObj);
1288     EXPECT_TRUE(randomObj != nullptr);
1289     EXPECT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1290     msgBlob.data[0] = 0;
1291     keyPair = OHTEST_GenAsymKey(asymAlgoName);
1292     EXPECT_TRUE(keyPair != nullptr);
1293     privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1294     pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1295     EXPECT_TRUE(privKey != nullptr);
1296     EXPECT_TRUE(pubKey != nullptr);
1297     ret = OHTEST_DoSegmentSign(algoName, privKey, (Crypto_DataBlob *)&msgBlob, &signData, blockSize);
1298     EXPECT_EQ(ret, CRYPTO_SUCCESS);
1299     EXPECT_TRUE(OHTEST_DoVerify(algoName, pubKey, (Crypto_DataBlob *)&msgBlob, &signData));
1300 
1301     HcfObjDestroy(randomObj);
1302     OH_CryptoKeyPair_Destroy(keyPair);
1303     OH_Crypto_FreeDataBlob(&signData);
1304     OH_Crypto_FreeDataBlob((Crypto_DataBlob *)&msgBlob);
1305 }
1306 
1307 /**
1308 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_1200
1309 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_1200
1310 * @tc.desc Signature function test
1311 * @tc.size Medium
1312 * @tc.type Func
1313 * @tc.level Level0
1314 */
1315 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_1200, TestSize.Level0)
1316 {
1317     OH_CryptoKeyPair *keyPair = nullptr;
1318     OH_CryptoPrivKey *privKey = nullptr;
1319     OH_CryptoSign *sign = nullptr;
1320     const char *algoName = (const char *)"RSA512|PSS|SHA256|MGF1_SHA256";
1321     const char *asymAlgoName= (const char *)"RSA512";
1322     int32_t msgLen = 16;
1323     HcfRand *randomObj = nullptr;
1324     HcfBlob msgBlob = {.data = nullptr, .len = 0};
1325     Crypto_DataBlob signData = {.data = nullptr, .len = 0};
1326     Crypto_DataBlob MdData = {.data = nullptr, .len = 0};
1327     Crypto_DataBlob MgfData = {.data = nullptr, .len = 0};
1328     Crypto_DataBlob Mgf1Data = {.data = nullptr, .len = 0};
1329     Crypto_DataBlob SaltLenData = {.data = nullptr, .len = 0};
1330     Crypto_DataBlob TarilerData = {.data = nullptr, .len = 0};
1331     Crypto_DataBlob Sm2UserIdData = {.data = nullptr, .len = 0};
1332     uint8_t mdText[] = "MD5";
1333     Crypto_DataBlob mdBlob = {
1334         .data = reinterpret_cast<uint8_t *>(mdText),
1335         .len = sizeof(mdText)
1336     };
1337     uint8_t MFGText[] = "MGF1";
1338     Crypto_DataBlob mfgBlob = {
1339         .data = reinterpret_cast<uint8_t *>(MFGText),
1340         .len = sizeof(MFGText)
1341     };
1342     uint8_t MFG1MdText[] = "SHA1";
1343     Crypto_DataBlob mgf1MdBlob = {
1344         .data = reinterpret_cast<uint8_t *>(MFG1MdText),
1345         .len = sizeof(MFG1MdText)
1346     };
1347     int32_t saltText1 = 30;
1348     Crypto_DataBlob saltBlob1 = {
1349         .data = (uint8_t *)&saltText1,
1350         .len = sizeof(int32_t)
1351     };
1352     int32_t TarilerText = -1;
1353     Crypto_DataBlob tarilerBlob = {
1354         .data = (uint8_t *)&TarilerText,
1355         .len = sizeof(int32_t)
1356     };
1357 
1358     HcfRandCreate(&randomObj);
1359     EXPECT_TRUE(randomObj != nullptr);
1360     EXPECT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1361     msgBlob.data[0] = 0;
1362     keyPair = OHTEST_GenAsymKey(asymAlgoName);
1363     EXPECT_TRUE(keyPair != nullptr);
1364     privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1365     EXPECT_TRUE(privKey != nullptr);
1366     EXPECT_EQ(OH_CryptoSign_Create(algoName, &sign), CRYPTO_SUCCESS);
1367     EXPECT_EQ(OH_CryptoSign_SetParam(sign, CRYPTO_PSS_MD_NAME_STR, &mdBlob), CRYPTO_NOT_SUPPORTED);
1368     EXPECT_EQ(OH_CryptoSign_SetParam(sign, CRYPTO_PSS_MGF_NAME_STR, &mfgBlob), CRYPTO_NOT_SUPPORTED);
1369     EXPECT_EQ(OH_CryptoSign_SetParam(sign, CRYPTO_PSS_MGF1_NAME_STR, &mgf1MdBlob), CRYPTO_NOT_SUPPORTED);
1370     EXPECT_EQ(OH_CryptoSign_SetParam(sign, CRYPTO_PSS_TRAILER_FIELD_INT, &tarilerBlob), CRYPTO_PARAMETER_CHECK_FAILED);
1371     EXPECT_EQ(OH_CryptoSign_Init(sign, privKey), CRYPTO_SUCCESS);
1372     EXPECT_EQ(OH_CryptoSign_GetParam(sign, CRYPTO_PSS_SALT_LEN_INT, &SaltLenData), CRYPTO_OPERTION_ERROR);
1373     EXPECT_EQ(OH_CryptoSign_SetParam(sign, CRYPTO_PSS_SALT_LEN_INT, &saltBlob1), CRYPTO_SUCCESS);
1374     EXPECT_EQ(OH_CryptoSign_Final(sign, (Crypto_DataBlob *)&msgBlob, &signData), CRYPTO_SUCCESS);
1375     EXPECT_EQ(OH_CryptoSign_GetParam(sign, CRYPTO_PSS_MD_NAME_STR, &MdData), CRYPTO_SUCCESS);
1376     EXPECT_EQ(OH_CryptoSign_GetParam(sign, CRYPTO_PSS_MGF_NAME_STR, &MgfData), CRYPTO_SUCCESS);
1377     EXPECT_EQ(OH_CryptoSign_GetParam(sign, CRYPTO_PSS_MGF1_NAME_STR, &Mgf1Data), CRYPTO_SUCCESS);
1378     EXPECT_EQ(OH_CryptoSign_GetParam(sign, CRYPTO_PSS_SALT_LEN_INT, &SaltLenData), CRYPTO_SUCCESS);
1379     EXPECT_EQ(OH_CryptoSign_GetParam(sign, CRYPTO_PSS_TRAILER_FIELD_INT, &TarilerData), CRYPTO_SUCCESS);
1380     EXPECT_EQ(OH_CryptoSign_GetParam(sign, CRYPTO_SM2_USER_ID_DATABLOB, &Sm2UserIdData), CRYPTO_PARAMETER_CHECK_FAILED);
1381 
1382     OH_CryptoSign_Destroy(sign);
1383     HcfObjDestroy(randomObj);
1384     OH_CryptoKeyPair_Destroy(keyPair);
1385     OH_Crypto_FreeDataBlob(&signData);
1386     OH_Crypto_FreeDataBlob(&MdData);
1387     OH_Crypto_FreeDataBlob(&MgfData);
1388     OH_Crypto_FreeDataBlob(&Mgf1Data);
1389     OH_Crypto_FreeDataBlob(&SaltLenData);
1390     OH_Crypto_FreeDataBlob(&TarilerData);
1391     OH_Crypto_FreeDataBlob(&Sm2UserIdData);
1392     OH_Crypto_FreeDataBlob((Crypto_DataBlob *)&msgBlob);
1393 }
1394 
1395 /**
1396 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_1300
1397 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_1300
1398 * @tc.desc Signature function test
1399 * @tc.size Medium
1400 * @tc.type Func
1401 * @tc.level Level0
1402 */
1403 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_1300, TestSize.Level0)
1404 {
1405     OH_CryptoKeyPair *keyPair = nullptr;
1406     OH_CryptoPrivKey *privKey = nullptr;
1407     OH_CryptoPubKey *pubKey = nullptr;
1408     OH_CryptoSign *sign = nullptr;
1409     const char *algoName = (const char *)"RSA768|PSS|SHA256|MGF1_SHA256";
1410     const char *asymAlgoName= (const char *)"RSA512";
1411     int32_t msgLen = 16;
1412     HcfRand *randomObj = nullptr;
1413     HcfBlob msgBlob = {.data = nullptr, .len = 0};
1414     Crypto_DataBlob signData = {.data = nullptr, .len = 0};
1415     uint8_t mdText[] = "SHA224";
1416     Crypto_DataBlob mdBlob = {
1417         .data = reinterpret_cast<uint8_t *>(mdText),
1418         .len = sizeof(mdText)
1419     };
1420     uint8_t MFG1MdText[] = "SHA384";
1421     Crypto_DataBlob mgf1MdBlob = {
1422         .data = reinterpret_cast<uint8_t *>(MFG1MdText),
1423         .len = sizeof(MFG1MdText)
1424     };
1425 
1426     HcfRandCreate(&randomObj);
1427     EXPECT_TRUE(randomObj != nullptr);
1428     EXPECT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1429     msgBlob.data[0] = 0;
1430     keyPair = OHTEST_GenAsymKey(asymAlgoName);
1431     EXPECT_TRUE(keyPair != nullptr);
1432     privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1433     EXPECT_TRUE(privKey != nullptr);
1434     pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1435     EXPECT_TRUE(pubKey != nullptr);
1436     EXPECT_EQ(OH_CryptoSign_Create(algoName, &sign), CRYPTO_SUCCESS);
1437     EXPECT_EQ(OH_CryptoSign_SetParam(sign, CRYPTO_PSS_MD_NAME_STR, &mdBlob), CRYPTO_NOT_SUPPORTED);
1438     EXPECT_EQ(OH_CryptoSign_SetParam(sign, CRYPTO_PSS_MGF1_NAME_STR, &mgf1MdBlob), CRYPTO_NOT_SUPPORTED);
1439     EXPECT_EQ(OH_CryptoSign_Init(sign, privKey), CRYPTO_SUCCESS);
1440     EXPECT_EQ(OH_CryptoSign_Final(sign, (Crypto_DataBlob *)&msgBlob, &signData), CRYPTO_SUCCESS);
1441     EXPECT_TRUE(OHTEST_DoVerify(algoName, pubKey, (Crypto_DataBlob *)&msgBlob, &signData));
1442 
1443     OH_CryptoSign_Destroy(sign);
1444     HcfObjDestroy(randomObj);
1445     OH_CryptoKeyPair_Destroy(keyPair);
1446     OH_Crypto_FreeDataBlob(&signData);
1447     OH_Crypto_FreeDataBlob((Crypto_DataBlob *)&msgBlob);
1448 }
1449 
1450 /**
1451 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_1400
1452 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_1400
1453 * @tc.desc Signature function test
1454 * @tc.size Medium
1455 * @tc.type Func
1456 * @tc.level Level0
1457 */
1458 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_1400, TestSize.Level0)
1459 {
1460     OH_CryptoSign *sign = nullptr;
1461     OH_CryptoKeyPair *keyPair = nullptr;
1462     OH_CryptoPrivKey *privKey = nullptr;
1463     const char *algoName = (const char *)"RSA768|NoPadding|SHA256|OnlySign";
1464     const char *asymAlgoName= (const char *)"RSA768";
1465 
1466     keyPair = OHTEST_GenAsymKey(asymAlgoName);
1467     EXPECT_TRUE(keyPair != nullptr);
1468     privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1469     EXPECT_TRUE(privKey != nullptr);
1470     EXPECT_EQ(OH_CryptoSign_Create(algoName, &sign), CRYPTO_SUCCESS);
1471     EXPECT_EQ(OH_CryptoSign_Init(sign, privKey), CRYPTO_OPERTION_ERROR);
1472 
1473     OH_CryptoSign_Destroy(sign);
1474     OH_CryptoKeyPair_Destroy(keyPair);
1475 }
1476 
1477 /**
1478 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_1500
1479 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_1500
1480 * @tc.desc Signature function test
1481 * @tc.size Medium
1482 * @tc.type Func
1483 * @tc.level Level0
1484 */
1485 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_1500, TestSize.Level0)
1486 {
1487     OH_CryptoSign *sign = nullptr;
1488     OH_CryptoKeyPair *keyPair = nullptr;
1489     OH_CryptoPrivKey *privKey = nullptr;
1490     OH_CryptoPubKey *pubKey = nullptr;
1491     const char *algoName = (const char *)"RSA768|PKCS1|SHA256";
1492     const char *asymAlgoName= (const char *)"RSA1024";
1493     HcfRand *randomObj = nullptr;
1494     HcfBlob msgBlob = {.data = nullptr, .len = 0};
1495     Crypto_DataBlob signData = {.data = nullptr, .len = 0};
1496     int32_t msgLen = 16;
1497 
1498     HcfRandCreate(&randomObj);
1499     EXPECT_TRUE(randomObj != nullptr);
1500     EXPECT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1501     keyPair = OHTEST_GenAsymKey(asymAlgoName);
1502     EXPECT_TRUE(keyPair != nullptr);
1503     privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1504     EXPECT_TRUE(privKey != nullptr);
1505     pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1506     EXPECT_TRUE(pubKey != nullptr);
1507     EXPECT_EQ(OH_CryptoSign_Create(algoName, &sign), CRYPTO_SUCCESS);
1508     EXPECT_EQ(OH_CryptoSign_Init(sign, privKey), CRYPTO_SUCCESS);
1509     EXPECT_EQ(OH_CryptoSign_Final(sign, (Crypto_DataBlob *)&msgBlob, &signData), CRYPTO_SUCCESS);
1510     EXPECT_TRUE(OHTEST_DoVerify(algoName, pubKey, (Crypto_DataBlob *)&msgBlob, &signData));
1511 
1512     OH_CryptoSign_Destroy(sign);
1513     HcfObjDestroy(randomObj);
1514     OH_CryptoKeyPair_Destroy(keyPair);
1515     OH_Crypto_FreeDataBlob(&signData);
1516     OH_Crypto_FreeDataBlob((Crypto_DataBlob *)&msgBlob);
1517 }
1518 
1519 /**
1520 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_1600
1521 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_1600
1522 * @tc.desc Signature function test
1523 * @tc.size Medium
1524 * @tc.type Func
1525 * @tc.level Level0
1526 */
1527 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_1600, TestSize.Level0)
1528 {
1529     OH_CryptoSign *sign = nullptr;
1530     const char *algoName = (const char *)"RSA768|PKCS1|SHA256";
1531     HcfRand *randomObj = nullptr;
1532     HcfBlob msgBlob = {.data = nullptr, .len = 0};
1533     Crypto_DataBlob signData = {.data = nullptr, .len = 0};
1534     int32_t msgLen = 16;
1535 
1536     HcfRandCreate(&randomObj);
1537     EXPECT_TRUE(randomObj != nullptr);
1538     EXPECT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1539     EXPECT_EQ(OH_CryptoSign_Create(algoName, &sign), CRYPTO_SUCCESS);
1540     EXPECT_EQ(OH_CryptoSign_Update(sign, (Crypto_DataBlob *)&msgBlob), CRYPTO_PARAMETER_CHECK_FAILED);
1541     EXPECT_EQ(OH_CryptoSign_Final(sign, (Crypto_DataBlob *)&msgBlob, &signData), CRYPTO_PARAMETER_CHECK_FAILED);
1542 
1543     OH_CryptoSign_Destroy(sign);
1544     HcfObjDestroy(randomObj);
1545     OH_Crypto_FreeDataBlob(&signData);
1546     OH_Crypto_FreeDataBlob((Crypto_DataBlob *)&msgBlob);
1547 }
1548 
1549 /**
1550 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_1700
1551 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_1700
1552 * @tc.desc Signature function test
1553 * @tc.size Medium
1554 * @tc.type Func
1555 * @tc.level Level0
1556 */
1557 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_1700, TestSize.Level0)
1558 {
1559     OH_CryptoSign *sign = nullptr;
1560     OH_CryptoKeyPair *keyPair = nullptr;
1561     OH_CryptoPrivKey *privKey = nullptr;
1562     const char *algoName = (const char *)"RSA768|PKCS1|SHA256|OnlySign";
1563     const char *asymAlgoName= (const char *)"RSA768";
1564     HcfRand *randomObj = nullptr;
1565     HcfBlob msgBlob = {.data = nullptr, .len = 0};
1566     int32_t msgLen = 16;
1567 
1568     HcfRandCreate(&randomObj);
1569     EXPECT_TRUE(randomObj != nullptr);
1570     EXPECT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1571     keyPair = OHTEST_GenAsymKey(asymAlgoName);
1572     EXPECT_TRUE(keyPair != nullptr);
1573     privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1574     EXPECT_TRUE(privKey != nullptr);
1575     EXPECT_EQ(OH_CryptoSign_Create(algoName, &sign), CRYPTO_SUCCESS);
1576     EXPECT_EQ(OH_CryptoSign_Init(sign, privKey), CRYPTO_SUCCESS);
1577     EXPECT_EQ(OH_CryptoSign_Update(sign, (Crypto_DataBlob *)&msgBlob), CRYPTO_OPERTION_ERROR);
1578 
1579     OH_CryptoSign_Destroy(sign);
1580     HcfObjDestroy(randomObj);
1581     OH_CryptoKeyPair_Destroy(keyPair);
1582     OH_Crypto_FreeDataBlob((Crypto_DataBlob *)&msgBlob);
1583 }
1584 
1585 /**
1586 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_1800
1587 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_1800
1588 * @tc.desc Signature function test
1589 * @tc.size Medium
1590 * @tc.type Func
1591 * @tc.level Level0
1592 */
1593 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_1800, TestSize.Level0)
1594 {
1595     OH_CryptoSign *sign = nullptr;
1596     OH_CryptoKeyPair *keyPair = nullptr;
1597     OH_CryptoPrivKey *privKey = nullptr;
1598     const char *algoName = (const char *)"Ed25519";
1599     HcfRand *randomObj = nullptr;
1600     HcfBlob msgBlob = {.data = nullptr, .len = 0};
1601     int32_t msgLen = 16;
1602 
1603     HcfRandCreate(&randomObj);
1604     EXPECT_TRUE(randomObj != nullptr);
1605     EXPECT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1606     keyPair = OHTEST_GenAsymKey(algoName);
1607     EXPECT_TRUE(keyPair != nullptr);
1608     privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1609     EXPECT_TRUE(privKey != nullptr);
1610     EXPECT_EQ(OH_CryptoSign_Create(algoName, &sign), CRYPTO_SUCCESS);
1611     EXPECT_EQ(OH_CryptoSign_Init(sign, privKey), CRYPTO_SUCCESS);
1612     EXPECT_EQ(OH_CryptoSign_Update(sign, (Crypto_DataBlob *)&msgBlob), CRYPTO_PARAMETER_CHECK_FAILED);
1613 
1614     OH_CryptoSign_Destroy(sign);
1615     HcfObjDestroy(randomObj);
1616     OH_CryptoKeyPair_Destroy(keyPair);
1617     OH_Crypto_FreeDataBlob((Crypto_DataBlob *)&msgBlob);
1618 }
1619 
1620 /**
1621 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_1900
1622 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_1900
1623 * @tc.desc Signature function test
1624 * @tc.size Medium
1625 * @tc.type Func
1626 * @tc.level Level0
1627 */
1628 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_1900, TestSize.Level0)
1629 {
1630     OH_CryptoKeyPair *keyPair = nullptr;
1631     OH_CryptoPrivKey *privKey = nullptr;
1632     const char *algoName = (const char *)"RSA512|NoPadding|NoHash|OnlySign";
1633     const char *asymAlgoName= (const char *)"RSA512";
1634     HcfRand *randomObj = nullptr;
1635     HcfBlob msgBlob = {.data = nullptr, .len = 0};
1636     Crypto_DataBlob signData = {.data = nullptr, .len = 0};
1637     int32_t msgLen = 65;
1638     OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
1639 
1640     HcfRandCreate(&randomObj);
1641     EXPECT_TRUE(randomObj != nullptr);
1642     EXPECT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1643     keyPair = OHTEST_GenAsymKey(asymAlgoName);
1644     EXPECT_TRUE(keyPair != nullptr);
1645     privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1646     EXPECT_TRUE(privKey != nullptr);
1647     ret = OHTEST_DoNoSegmentSign(algoName, privKey, (Crypto_DataBlob *)&msgBlob, &signData);
1648     EXPECT_EQ(ret, CRYPTO_OPERTION_ERROR);
1649 
1650     HcfObjDestroy(randomObj);
1651     OH_CryptoKeyPair_Destroy(keyPair);
1652     OH_Crypto_FreeDataBlob((Crypto_DataBlob *)&msgBlob);
1653     OH_Crypto_FreeDataBlob(&signData);
1654 }
1655 
1656 /**
1657 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_2000
1658 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_2000
1659 * @tc.desc Signature function test
1660 * @tc.size Medium
1661 * @tc.type Func
1662 * @tc.level Level0
1663 */
1664 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_2000, TestSize.Level0)
1665 {
1666     OH_CryptoKeyPair *keyPair = nullptr;
1667     OH_CryptoPrivKey *privKey = nullptr;
1668     const char *algoName = (const char *)"RSA512|PKCS1|NoHash|OnlySign";
1669     const char *asymAlgoName= (const char *)"RSA512";
1670     HcfRand *randomObj = nullptr;
1671     HcfBlob msgBlob = {.data = nullptr, .len = 0};
1672     Crypto_DataBlob signData = {.data = nullptr, .len = 0};
1673     int32_t msgLen = 64 - 11 + 1;
1674     OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
1675 
1676     HcfRandCreate(&randomObj);
1677     EXPECT_TRUE(randomObj != nullptr);
1678     EXPECT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1679     keyPair = OHTEST_GenAsymKey(asymAlgoName);
1680     EXPECT_TRUE(keyPair != nullptr);
1681     privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1682     EXPECT_TRUE(privKey != nullptr);
1683     ret = OHTEST_DoNoSegmentSign(algoName, privKey, (Crypto_DataBlob *)&msgBlob, &signData);
1684     EXPECT_EQ(ret, CRYPTO_OPERTION_ERROR);
1685 
1686     HcfObjDestroy(randomObj);
1687     OH_CryptoKeyPair_Destroy(keyPair);
1688     OH_Crypto_FreeDataBlob((Crypto_DataBlob *)&msgBlob);
1689     OH_Crypto_FreeDataBlob(&signData);
1690 }
1691 
1692 /**
1693 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_2100
1694 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_2100
1695 * @tc.desc Signature function test
1696 * @tc.size Medium
1697 * @tc.type Func
1698 * @tc.level Level0
1699 */
1700 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_2100, TestSize.Level0)
1701 {
1702     OH_CryptoKeyPair *keyPair = nullptr;
1703     OH_CryptoPrivKey *privKey = nullptr;
1704     const char *algoName = (const char *)"RSA512|PKCS1|SHA256|OnlySign";
1705     const char *asymAlgoName= (const char *)"RSA512";
1706     HcfRand *randomObj = nullptr;
1707     HcfBlob msgBlob = {.data = nullptr, .len = 0};
1708     Crypto_DataBlob signData = {.data = nullptr, .len = 0};
1709     int32_t msgLen = 32 + 1;
1710     OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
1711 
1712     HcfRandCreate(&randomObj);
1713     EXPECT_TRUE(randomObj != nullptr);
1714     EXPECT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1715     keyPair = OHTEST_GenAsymKey(asymAlgoName);
1716     EXPECT_TRUE(keyPair != nullptr);
1717     privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1718     EXPECT_TRUE(privKey != nullptr);
1719     ret = OHTEST_DoNoSegmentSign(algoName, privKey, (Crypto_DataBlob *)&msgBlob, &signData);
1720     EXPECT_EQ(ret, CRYPTO_OPERTION_ERROR);
1721 
1722     HcfObjDestroy(randomObj);
1723     OH_CryptoKeyPair_Destroy(keyPair);
1724     OH_Crypto_FreeDataBlob((Crypto_DataBlob *)&msgBlob);
1725     OH_Crypto_FreeDataBlob(&signData);
1726 }
1727 
1728 /**
1729 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_2200
1730 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_2200
1731 * @tc.desc Signature function test
1732 * @tc.size Medium
1733 * @tc.type Func
1734 * @tc.level Level0
1735 */
1736 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_2200, TestSize.Level0)
1737 {
1738     OH_CryptoSign *sign = nullptr;
1739     const char *algoName = (const char *)"SM9";
1740 
1741     EXPECT_EQ(OH_CryptoSign_Create(algoName, &sign), CRYPTO_PARAMETER_CHECK_FAILED);
1742 
1743     OH_CryptoSign_Destroy(sign);
1744 }
1745 
1746 /**
1747 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_2300
1748 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_2300
1749 * @tc.desc Signature function test
1750 * @tc.size Medium
1751 * @tc.type Func
1752 * @tc.level Level0
1753 */
1754 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_2300, TestSize.Level0)
1755 {
1756     OH_CryptoSign *sign = nullptr;
1757     OH_CryptoKeyPair *keyPair = nullptr;
1758     OH_CryptoPrivKey *privKey = nullptr;
1759     const char *algoName = (const char *)"RSA512|PSS|SHA256|MGF1_SHA256";
1760     const char *asymAlgoName= (const char *)"RSA512";
1761     HcfRand *randomObj = nullptr;
1762     HcfBlob msgBlob = {.data = nullptr, .len = 0};
1763     Crypto_DataBlob signData = {.data = nullptr, .len = 0};
1764     int32_t msgLen = 16;
1765     int32_t saltText = 32;
1766     Crypto_DataBlob saltBlob = {
1767         .data = (uint8_t *)&saltText,
1768         .len = sizeof(int32_t)
1769     };
1770     int32_t trailerText = 1;
1771     Crypto_DataBlob trailerBlob = {
1772         .data = (uint8_t *)&trailerText,
1773         .len = sizeof(int32_t)
1774     };
1775 
1776     HcfRandCreate(&randomObj);
1777     EXPECT_TRUE(randomObj != nullptr);
1778     EXPECT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1779     keyPair = OHTEST_GenAsymKey(asymAlgoName);
1780     EXPECT_TRUE(keyPair != nullptr);
1781     privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1782     EXPECT_TRUE(privKey != nullptr);
1783     EXPECT_EQ(OH_CryptoSign_Create(algoName, &sign), CRYPTO_SUCCESS);
1784     EXPECT_EQ(OH_CryptoSign_SetParam(sign, CRYPTO_PSS_SALT_LEN_INT, &saltBlob), CRYPTO_SUCCESS);
1785     EXPECT_EQ(OH_CryptoSign_SetParam(sign, CRYPTO_PSS_TRAILER_FIELD_INT, &trailerBlob), CRYPTO_PARAMETER_CHECK_FAILED);
1786     EXPECT_EQ(OH_CryptoSign_Init(sign, privKey), CRYPTO_SUCCESS);
1787     EXPECT_EQ(OH_CryptoSign_Final(sign, (Crypto_DataBlob *)&msgBlob, &signData), CRYPTO_OPERTION_ERROR);
1788 
1789     OH_CryptoSign_Destroy(sign);
1790     HcfObjDestroy(randomObj);
1791     OH_CryptoKeyPair_Destroy(keyPair);
1792     OH_Crypto_FreeDataBlob((Crypto_DataBlob *)&msgBlob);
1793     OH_Crypto_FreeDataBlob(&signData);
1794 }
1795 
1796 /**
1797 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_2400
1798 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_2400
1799 * @tc.desc Signature function test
1800 * @tc.size Medium
1801 * @tc.type Func
1802 * @tc.level Level0
1803 */
1804 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_2400, TestSize.Level0)
1805 {
1806     OH_CryptoSign *sign = nullptr;
1807     OH_CryptoKeyPair *keyPair = nullptr;
1808     OH_CryptoPrivKey *privKey = nullptr;
1809     HcfRand *randomObj = nullptr;
1810     const char *algoName = (const char *)"RSA512|PKCS1|SHA512";
1811     const char *asymAlgoName= (const char *)"RSA512";
1812     int32_t msgLen = 16;
1813     HcfBlob msgBlob = {.data = nullptr, .len = 0};
1814     Crypto_DataBlob signData = {.data = nullptr, .len = 0};
1815 
1816     HcfRandCreate(&randomObj);
1817     EXPECT_TRUE(randomObj != nullptr);
1818     EXPECT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1819     keyPair = OHTEST_GenAsymKey(asymAlgoName);
1820     EXPECT_TRUE(keyPair != nullptr);
1821     privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1822     EXPECT_TRUE(privKey != nullptr);
1823     EXPECT_EQ(OH_CryptoSign_Create(algoName, &sign), CRYPTO_SUCCESS);
1824     EXPECT_EQ(OH_CryptoSign_Init(sign, privKey), CRYPTO_SUCCESS);
1825     EXPECT_EQ(OH_CryptoSign_Final(sign, (Crypto_DataBlob *)&msgBlob, &signData), CRYPTO_OPERTION_ERROR);
1826 
1827     OH_CryptoSign_Destroy(sign);
1828     HcfObjDestroy(randomObj);
1829     OH_CryptoKeyPair_Destroy(keyPair);
1830     OH_Crypto_FreeDataBlob((Crypto_DataBlob *)&msgBlob);
1831     OH_Crypto_FreeDataBlob(&signData);
1832 }
1833 
1834 /**
1835 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_2500
1836 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_2500
1837 * @tc.desc Signature function test
1838 * @tc.size Medium
1839 * @tc.type Func
1840 * @tc.level Level0
1841 */
1842 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_2500, TestSize.Level0)
1843 {
1844     OH_CryptoKeyPair *keyPair = nullptr;
1845     OH_CryptoPrivKey *privKey = nullptr;
1846     OH_CryptoSign *sign = nullptr;
1847     const char *algoName = (const char *)"RSA512|PKCS1|SHA256";
1848     const char *asymAlgoName= (const char *)"RSA512";
1849     int32_t msgLen = 16;
1850     HcfRand *randomObj = nullptr;
1851     HcfBlob msgBlob = {.data = nullptr, .len = 0};
1852     Crypto_DataBlob signData = {.data = nullptr, .len = 0};
1853     Crypto_DataBlob MdData = {.data = nullptr, .len = 0};
1854     Crypto_DataBlob MgfData = {.data = nullptr, .len = 0};
1855     Crypto_DataBlob Mgf1Data = {.data = nullptr, .len = 0};
1856     Crypto_DataBlob SaltLenData = {.data = nullptr, .len = 0};
1857     Crypto_DataBlob TarilerData = {.data = nullptr, .len = 0};
1858     Crypto_DataBlob Sm2UserIdData = {.data = nullptr, .len = 0};
1859     uint8_t mdText[] = "MD5";
1860     Crypto_DataBlob mdBlob = {
1861         .data = reinterpret_cast<uint8_t *>(mdText),
1862         .len = sizeof(mdText)
1863     };
1864     uint8_t MFGText[] = "MGF1";
1865     Crypto_DataBlob mfgBlob = {
1866         .data = reinterpret_cast<uint8_t *>(MFGText),
1867         .len = sizeof(MFGText)
1868     };
1869     uint8_t MFG1MdText[] = "SHA1";
1870     Crypto_DataBlob mgf1MdBlob = {
1871         .data = reinterpret_cast<uint8_t *>(MFG1MdText),
1872         .len = sizeof(MFG1MdText)
1873     };
1874     int32_t saltText1 = 32;
1875     Crypto_DataBlob saltBlob1 = {
1876         .data = (uint8_t *)&saltText1,
1877         .len = sizeof(int32_t)
1878     };
1879     int32_t TarilerText = -1;
1880     Crypto_DataBlob tarilerBlob = {
1881         .data = (uint8_t *)&TarilerText,
1882         .len = sizeof(int32_t)
1883     };
1884 
1885     HcfRandCreate(&randomObj);
1886     EXPECT_TRUE(randomObj != nullptr);
1887     EXPECT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1888     msgBlob.data[0] = 0;
1889     keyPair = OHTEST_GenAsymKey(asymAlgoName);
1890     EXPECT_TRUE(keyPair != nullptr);
1891     privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
1892     EXPECT_TRUE(privKey != nullptr);
1893     EXPECT_EQ(OH_CryptoSign_Create(algoName, &sign), CRYPTO_SUCCESS);
1894     EXPECT_EQ(OH_CryptoSign_SetParam(sign, CRYPTO_PSS_MD_NAME_STR, &mdBlob), CRYPTO_NOT_SUPPORTED);
1895     EXPECT_EQ(OH_CryptoSign_SetParam(sign, CRYPTO_PSS_MGF_NAME_STR, &mfgBlob), CRYPTO_NOT_SUPPORTED);
1896     EXPECT_EQ(OH_CryptoSign_SetParam(sign, CRYPTO_PSS_MGF1_NAME_STR, &mgf1MdBlob), CRYPTO_NOT_SUPPORTED);
1897     EXPECT_EQ(OH_CryptoSign_SetParam(sign, CRYPTO_PSS_TRAILER_FIELD_INT, &tarilerBlob), CRYPTO_PARAMETER_CHECK_FAILED);
1898     EXPECT_EQ(OH_CryptoSign_Init(sign, privKey), CRYPTO_SUCCESS);
1899     EXPECT_EQ(OH_CryptoSign_GetParam(sign, CRYPTO_PSS_SALT_LEN_INT, &SaltLenData), CRYPTO_PARAMETER_CHECK_FAILED);
1900     EXPECT_EQ(OH_CryptoSign_SetParam(sign, CRYPTO_PSS_SALT_LEN_INT, &saltBlob1), CRYPTO_PARAMETER_CHECK_FAILED);
1901     EXPECT_EQ(OH_CryptoSign_Final(sign, (Crypto_DataBlob *)&msgBlob, &signData), CRYPTO_SUCCESS);
1902     EXPECT_EQ(OH_CryptoSign_GetParam(sign, CRYPTO_PSS_MD_NAME_STR, &MdData), CRYPTO_PARAMETER_CHECK_FAILED);
1903     EXPECT_EQ(OH_CryptoSign_GetParam(sign, CRYPTO_PSS_MGF_NAME_STR, &MgfData), CRYPTO_PARAMETER_CHECK_FAILED);
1904     EXPECT_EQ(OH_CryptoSign_GetParam(sign, CRYPTO_PSS_MGF1_NAME_STR, &Mgf1Data), CRYPTO_PARAMETER_CHECK_FAILED);
1905     EXPECT_EQ(OH_CryptoSign_GetParam(sign, CRYPTO_PSS_SALT_LEN_INT, &SaltLenData), CRYPTO_PARAMETER_CHECK_FAILED);
1906     EXPECT_EQ(OH_CryptoSign_GetParam(sign, CRYPTO_PSS_TRAILER_FIELD_INT, &TarilerData), CRYPTO_PARAMETER_CHECK_FAILED);
1907     EXPECT_EQ(OH_CryptoSign_GetParam(sign, CRYPTO_SM2_USER_ID_DATABLOB, &Sm2UserIdData), CRYPTO_PARAMETER_CHECK_FAILED);
1908 
1909     OH_CryptoSign_Destroy(sign);
1910     HcfObjDestroy(randomObj);
1911     OH_CryptoKeyPair_Destroy(keyPair);
1912     OH_Crypto_FreeDataBlob(&signData);
1913     OH_Crypto_FreeDataBlob(&MdData);
1914     OH_Crypto_FreeDataBlob(&MgfData);
1915     OH_Crypto_FreeDataBlob(&Mgf1Data);
1916     OH_Crypto_FreeDataBlob(&SaltLenData);
1917     OH_Crypto_FreeDataBlob(&TarilerData);
1918     OH_Crypto_FreeDataBlob(&Sm2UserIdData);
1919     OH_Crypto_FreeDataBlob((Crypto_DataBlob *)&msgBlob);
1920 }
1921 
OHTEST_Sm2SignatureAsn1ToRS(uint8_t * sm2_asn1,size_t len)1922 static bool OHTEST_Sm2SignatureAsn1ToRS(uint8_t *sm2_asn1, size_t len)
1923 {
1924     bool res = false;
1925     OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
1926     OH_CryptoEccSignatureSpec *spec = nullptr;
1927     Crypto_DataBlob r = {.data = nullptr, .len = 0};
1928     Crypto_DataBlob s = {.data = nullptr, .len = 0};
1929     Crypto_DataBlob out = {.data = nullptr, .len = 0};
1930     Crypto_DataBlob sm2Signature = {
1931         .data = sm2_asn1,
1932         .len = len
1933     };
1934 
1935     ret = OH_CryptoEccSignatureSpec_Create(&sm2Signature, &spec);
1936     if (ret != CRYPTO_SUCCESS) {
1937         goto EXIT;
1938     }
1939     ret = OH_CryptoEccSignatureSpec_GetRAndS(spec, &r, &s);
1940     if (ret != CRYPTO_SUCCESS) {
1941         goto EXIT;
1942     }
1943     OH_CryptoEccSignatureSpec_Destroy(spec);
1944     spec = nullptr;
1945     ret = OH_CryptoEccSignatureSpec_Create(nullptr, &spec);
1946     if (ret != CRYPTO_SUCCESS) {
1947         goto EXIT;
1948     }
1949     ret = OH_CryptoEccSignatureSpec_SetRAndS(spec, &r, &s);
1950     if (ret != CRYPTO_SUCCESS) {
1951         goto EXIT;
1952     }
1953     ret = OH_CryptoEccSignatureSpec_Encode(spec, &out);
1954     if (ret != CRYPTO_SUCCESS) {
1955         goto EXIT;
1956     }
1957     res = memcmp(sm2_asn1, out.data, len) == 0 ? (len != out.len ? false : true) : false;
1958 
1959 EXIT:
1960     OH_CryptoEccSignatureSpec_Destroy(spec);
1961     OH_Crypto_FreeDataBlob(&out);
1962     OH_Crypto_FreeDataBlob(&r);
1963     OH_Crypto_FreeDataBlob(&s);
1964     return res;
1965 }
1966 
1967 /**
1968 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_2600
1969 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_2600
1970 * @tc.desc Signature sm2 asn1 to r\s, len = 0x43 test
1971 * @tc.size Medium
1972 * @tc.type Func
1973 * @tc.level Level0
1974 */
1975 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_2600, TestSize.Level0)
1976 {
1977     uint8_t sm2_asn1[] = {
1978         0x30, 0x43, 0x02, 0x20, 0x00, 0xDE, 0x4F, 0x43, 0xEF, 0x29, 0xFA, 0xBA, 0x54, 0xE2, 0x27, 0x6C,
1979         0xD2, 0xFB, 0x25, 0x0B, 0x9C, 0xFE, 0x38, 0x19, 0x12, 0xE4, 0xCB, 0x7B, 0x4D, 0x98, 0xCA, 0x52,
1980         0x7F, 0xA5, 0x44, 0xFE, 0x02, 0x1F, 0x35, 0x07, 0xF6, 0x7F, 0x76, 0xDE, 0x94, 0x22, 0x34, 0x9F,
1981         0x57, 0xFE, 0x36, 0x03, 0xC6, 0xC2, 0x54, 0xCC, 0xEF, 0x76, 0x26, 0x74, 0x38, 0xD7, 0x30, 0xBC,
1982         0xB4, 0xB1, 0xF1, 0x59, 0xE8
1983     };
1984     size_t len = sizeof(sm2_asn1);
1985 
1986     bool ret = OHTEST_Sm2SignatureAsn1ToRS(sm2_asn1, len);
1987     EXPECT_TRUE(ret);
1988 }
1989 
1990 /**
1991 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_2700
1992 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_2700
1993 * @tc.desc Signature sm2 asn1 to r\s, len = 0x45 test
1994 * @tc.size Medium
1995 * @tc.type Func
1996 * @tc.level Level0
1997 */
1998 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_2700, TestSize.Level0)
1999 {
2000     uint8_t sm2_asn1[] = {
2001         0x30, 0x45, 0x02, 0x20, 0x71, 0xA0, 0xF5, 0x4F, 0x43, 0xEF, 0x29, 0xFA, 0xBA, 0x54, 0xE2, 0x27,
2002         0x6C, 0xD2, 0xFB, 0x25, 0x0B, 0x9C, 0xFE, 0x38, 0x19, 0x12, 0xE4, 0xCB, 0x7B, 0x4D, 0x98, 0xCA,
2003         0x52, 0x7F, 0xA5, 0x44, 0x02, 0x21, 0x00, 0xDF, 0x35, 0x07, 0xF6, 0x7F, 0x76, 0xDE, 0x94, 0x22,
2004         0x34, 0x9F, 0x57, 0xFE, 0x36, 0x03, 0xC6, 0xC2, 0x54, 0xCC, 0xEF, 0x76, 0x26, 0x74, 0x38, 0xD7,
2005         0x30, 0xBC, 0xB4, 0xB1, 0xF1, 0x59, 0x99
2006     };
2007     size_t len = sizeof(sm2_asn1);
2008 
2009     bool ret = OHTEST_Sm2SignatureAsn1ToRS(sm2_asn1, len);
2010     EXPECT_TRUE(ret);
2011 }
2012 
2013 /**
2014 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_2800
2015 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_2800
2016 * @tc.desc Signature sm2 asn1 to r\s, len = 0x46 test
2017 * @tc.size Medium
2018 * @tc.type Func
2019 * @tc.level Level0
2020 */
2021 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_2800, TestSize.Level0)
2022 {
2023     uint8_t sm2_asn1[] = {
2024         0x30, 0x46, 0x02, 0x21, 0x00, 0xE8, 0xF5, 0x4F, 0x43, 0xEF, 0x29, 0xFA, 0xBA, 0x54, 0xE2, 0x27,
2025         0x6C, 0xD2, 0xFB, 0x25, 0x0B, 0x9C, 0xFE, 0x38, 0x19, 0x12, 0xE4, 0xCB, 0x7B, 0x4D, 0x98, 0xCA,
2026         0x52, 0x7F, 0xA5, 0x44, 0xFE, 0x02, 0x21, 0x00, 0xDF, 0x35, 0x07, 0xF6, 0x7F, 0x76, 0xDE, 0x94,
2027         0x22, 0x34, 0x9F, 0x57, 0xFE, 0x36, 0x03, 0xC6, 0xC2, 0x54, 0xCC, 0xEF, 0x76, 0x26, 0x74, 0x38,
2028         0xD7, 0x30, 0xBC, 0xB4, 0xB1, 0xF1, 0x59, 0xE8
2029     };
2030     size_t len = sizeof(sm2_asn1);
2031 
2032     bool ret = OHTEST_Sm2SignatureAsn1ToRS(sm2_asn1, len);
2033     EXPECT_TRUE(ret);
2034 }
2035 
2036 /**
2037 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_2900
2038 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_2900
2039 * @tc.desc Signature sm2 asn1 to r\s, len = 0x44 test
2040 * @tc.size Medium
2041 * @tc.type Func
2042 * @tc.level Level0
2043 */
2044 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_2900, TestSize.Level0)
2045 {
2046     uint8_t sm2_asn1[] = {
2047         0x30, 0x44, 0x02, 0x21, 0x00, 0xEA, 0xDE, 0x4F, 0x43, 0xEF, 0x29, 0xFA, 0xBA, 0x54, 0xE2, 0x27,
2048         0x6C, 0xD2, 0xFB, 0x25, 0x0B, 0x9C, 0xFE, 0x38, 0x19, 0x12, 0xE4, 0xCB, 0x7B, 0x4D, 0x98, 0xCA,
2049         0x52, 0x7F, 0xA5, 0x44, 0xFE, 0x02, 0x1F, 0x35, 0x07, 0xF6, 0x7F, 0x76, 0xDE, 0x94, 0x22, 0x34,
2050         0x9F, 0x57, 0xFE, 0x36, 0x03, 0xC6, 0xC2, 0x54, 0xCC, 0xEF, 0x76, 0x26, 0x74, 0x38, 0xD7, 0x30,
2051         0xBC, 0xB4, 0xB1, 0xF1, 0x59, 0xE8
2052     };
2053     size_t len = sizeof(sm2_asn1);
2054 
2055     bool ret = OHTEST_Sm2SignatureAsn1ToRS(sm2_asn1, len);
2056     EXPECT_TRUE(ret);
2057 }
2058 
2059 /**
2060 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_3000
2061 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_3000
2062 * @tc.desc Signature ecc224|sha1 to r\s, len = 0x3c test
2063 * @tc.size Medium
2064 * @tc.type Func
2065 * @tc.level Level0
2066 */
2067 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_3000, TestSize.Level0)
2068 {
2069     uint8_t ecc_asn1[] = {
2070         0x30, 0x3c, 0x02, 0x1c, 0x53, 0x99, 0xa4, 0xd7, 0xf5, 0x0f, 0x25, 0xe2, 0xe1, 0x88, 0xcb, 0xe2,
2071         0x81, 0xfe, 0x1e, 0xc5, 0x1a, 0xc2, 0xac, 0xee, 0xc6, 0xf6, 0x80, 0xbd, 0xf3, 0xb8, 0x20, 0xcf,
2072         0x02, 0x1c, 0x39, 0xf1, 0xe0, 0x93, 0xe1, 0xef, 0x10, 0x39, 0x07, 0xd0, 0xa8, 0x88, 0x7d, 0x36,
2073         0xa6, 0x29, 0x6b, 0x45, 0x19, 0xd4, 0x7b, 0x42, 0xa3, 0xf4, 0xa0, 0x39, 0xee, 0xa4
2074     };
2075     size_t len = sizeof(ecc_asn1);
2076 
2077     bool ret = OHTEST_Sm2SignatureAsn1ToRS(ecc_asn1, len);
2078     EXPECT_TRUE(ret);
2079 }
2080 
2081 /**
2082 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_3100
2083 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_3100
2084 * @tc.desc Signature invalid asn1 function test
2085 * @tc.size Medium
2086 * @tc.type Func
2087 * @tc.level Level0
2088 */
2089 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_3100, TestSize.Level0)
2090 {
2091     uint8_t sm2_asn1[] = {
2092         0x30, 0xff, 0x23, 0x1c, 0x53, 0x99, 0xa4, 0xd7, 0xf5, 0x0f, 0x25, 0xe2, 0xe1, 0x88, 0xcb, 0xe2,
2093         0x81, 0xfe, 0x1e, 0xc5, 0x1a, 0xc2, 0xac, 0xee, 0xc6, 0xf6, 0x80, 0xbd, 0xf3, 0xb8, 0x20, 0xcf,
2094         0x12, 0x1c, 0x39, 0xf1, 0xe0, 0x93, 0xe1, 0xef, 0x10, 0x39, 0x07, 0xd0, 0xa8, 0x88, 0x7d, 0x36,
2095         0xa6, 0x29, 0x6b, 0x45, 0x19, 0xd4, 0x7b, 0x42, 0xa3, 0xf4, 0xa0, 0x39, 0xee, 0xa4
2096     };
2097     size_t len = sizeof(sm2_asn1);
2098     OH_CryptoEccSignatureSpec *spec = nullptr;
2099     Crypto_DataBlob sm2Signature = {
2100         .data = sm2_asn1,
2101         .len = len
2102     };
2103 
2104     EXPECT_EQ(OH_CryptoEccSignatureSpec_Create(&sm2Signature, &spec), CRYPTO_OPERTION_ERROR);
2105 
2106     OH_CryptoEccSignatureSpec_Destroy(spec);
2107 }
2108 
2109 /**
2110 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_3200
2111 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_3200
2112 * @tc.desc Signature invalid asn1 function test
2113 * @tc.size Medium
2114 * @tc.type Func
2115 * @tc.level Level0
2116 */
2117 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_3200, TestSize.Level0)
2118 {
2119     uint8_t sm2_asn1[] = {
2120         0x30, 0x44, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2121         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2122         0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2123         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2124         0x00, 0x00, 0x00, 0x00, 0x00, 0x00
2125     };
2126     uint8_t sm2_asn1_f[] = {
2127         0x30, 0x44, 0x02, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
2128         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
2129         0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
2130         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
2131         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
2132     };
2133     size_t len = sizeof(sm2_asn1);
2134     OH_CryptoEccSignatureSpec *spec = nullptr;
2135     Crypto_DataBlob sm2Signature1 = {
2136         .data = sm2_asn1,
2137         .len = len
2138     };
2139     Crypto_DataBlob sm2Signature2 = {
2140         .data = sm2_asn1_f,
2141         .len = len
2142     };
2143 
2144     EXPECT_EQ(OH_CryptoEccSignatureSpec_Create(&sm2Signature1, &spec), CRYPTO_OPERTION_ERROR);
2145     EXPECT_EQ(OH_CryptoEccSignatureSpec_Create(&sm2Signature2, &spec), CRYPTO_OPERTION_ERROR);
2146 
2147     OH_CryptoEccSignatureSpec_Destroy(spec);
2148 }
2149 
2150 /**
2151 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_3300
2152 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_3300
2153 * @tc.desc Signature invalid asn1 function test
2154 * @tc.size Medium
2155 * @tc.type Func
2156 * @tc.level Level0
2157 */
2158 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_3300, TestSize.Level0)
2159 {
2160     uint8_t sm2_asn1[] = {
2161         0x31, 0x44, 0x02, 0x21, 0x00, 0xEA, 0xDE, 0x4F, 0x43, 0xEF, 0x29, 0xFA, 0xBA, 0x54, 0xE2, 0x27,
2162         0x6C, 0xD2, 0xFB, 0x25, 0x0B, 0x9C, 0xFE, 0x38, 0x19, 0x12, 0xE4, 0xCB, 0x7B, 0x4D, 0x98, 0xCA,
2163         0x52, 0x7F, 0xA5, 0x44, 0xFE, 0x02, 0x1F, 0x35, 0x07, 0xF6, 0x7F, 0x76, 0xDE, 0x94, 0x22, 0x34,
2164         0x9F, 0x57, 0xFE, 0x36, 0x03, 0xC6, 0xC2, 0x54, 0xCC, 0xEF, 0x76, 0x26, 0x74, 0x38, 0xD7, 0x30,
2165         0xBC, 0xB4, 0xB1, 0xF1, 0x59, 0xE8
2166     };
2167     size_t len = sizeof(sm2_asn1);
2168     OH_CryptoEccSignatureSpec *spec = nullptr;
2169     Crypto_DataBlob sm2Signature = {
2170         .data = sm2_asn1,
2171         .len = len
2172     };
2173 
2174     EXPECT_EQ(OH_CryptoEccSignatureSpec_Create(&sm2Signature, &spec), CRYPTO_OPERTION_ERROR);
2175 
2176     OH_CryptoEccSignatureSpec_Destroy(spec);
2177 }
2178 
2179 /**
2180 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_3400
2181 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_3400
2182 * @tc.desc Signature invalid asn1 function test
2183 * @tc.size Medium
2184 * @tc.type Func
2185 * @tc.level Level0
2186 */
2187 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_3400, TestSize.Level0)
2188 {
2189     uint8_t sm2_asn1[] = {
2190         0x30, 0x45, 0x02, 0x21, 0x00, 0xEA, 0xDE, 0x4F, 0x43, 0xEF, 0x29, 0xFA, 0xBA, 0x54, 0xE2, 0x27,
2191         0x6C, 0xD2, 0xFB, 0x25, 0x0B, 0x9C, 0xFE, 0x38, 0x19, 0x12, 0xE4, 0xCB, 0x7B, 0x4D, 0x98, 0xCA,
2192         0x52, 0x7F, 0xA5, 0x44, 0xFE, 0x02, 0x1F, 0x35, 0x07, 0xF6, 0x7F, 0x76, 0xDE, 0x94, 0x22, 0x34,
2193         0x9F, 0x57, 0xFE, 0x36, 0x03, 0xC6, 0xC2, 0x54, 0xCC, 0xEF, 0x76, 0x26, 0x74, 0x38, 0xD7, 0x30,
2194         0xBC, 0xB4, 0xB1, 0xF1, 0x59, 0xE8
2195     };
2196     size_t len = sizeof(sm2_asn1);
2197     OH_CryptoEccSignatureSpec *spec = nullptr;
2198     Crypto_DataBlob sm2Signature = {
2199         .data = sm2_asn1,
2200         .len = len
2201     };
2202 
2203     EXPECT_EQ(OH_CryptoEccSignatureSpec_Create(&sm2Signature, &spec), CRYPTO_OPERTION_ERROR);
2204 
2205     OH_CryptoEccSignatureSpec_Destroy(spec);
2206 }
2207 
2208 /**
2209 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_3500
2210 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_3500
2211 * @tc.desc Signature invalid asn1 function test
2212 * @tc.size Medium
2213 * @tc.type Func
2214 * @tc.level Level0
2215 */
2216 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_3500, TestSize.Level0)
2217 {
2218     uint8_t sm2_asn1[] = {
2219         0x30, 0x44, 0x12, 0x21, 0x00, 0xEA, 0xDE, 0x4F, 0x43, 0xEF, 0x29, 0xFA, 0xBA, 0x54, 0xE2, 0x27,
2220         0x6C, 0xD2, 0xFB, 0x25, 0x0B, 0x9C, 0xFE, 0x38, 0x19, 0x12, 0xE4, 0xCB, 0x7B, 0x4D, 0x98, 0xCA,
2221         0x52, 0x7F, 0xA5, 0x44, 0xFE, 0x02, 0x1F, 0x35, 0x07, 0xF6, 0x7F, 0x76, 0xDE, 0x94, 0x22, 0x34,
2222         0x9F, 0x57, 0xFE, 0x36, 0x03, 0xC6, 0xC2, 0x54, 0xCC, 0xEF, 0x76, 0x26, 0x74, 0x38, 0xD7, 0x30,
2223         0xBC, 0xB4, 0xB1, 0xF1, 0x59, 0xE8
2224     };
2225     size_t len = sizeof(sm2_asn1);
2226     OH_CryptoEccSignatureSpec *spec = nullptr;
2227     Crypto_DataBlob sm2Signature = {
2228         .data = sm2_asn1,
2229         .len = len
2230     };
2231 
2232     EXPECT_EQ(OH_CryptoEccSignatureSpec_Create(&sm2Signature, &spec), CRYPTO_OPERTION_ERROR);
2233 
2234     OH_CryptoEccSignatureSpec_Destroy(spec);
2235 }
2236 
2237 /**
2238 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_3600
2239 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_3600
2240 * @tc.desc Signature invalid asn1 function test
2241 * @tc.size Medium
2242 * @tc.type Func
2243 * @tc.level Level0
2244 */
2245 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_3600, TestSize.Level0)
2246 {
2247     uint8_t sm2_asn1[] = {
2248         0x30, 0x43, 0x02, 0x20, 0xEA, 0xDE, 0x4F, 0x43, 0xEF, 0x29, 0xFA, 0xBA, 0x54, 0xE2, 0x27,
2249         0x6C, 0xD2, 0xFB, 0x25, 0x0B, 0x9C, 0xFE, 0x38, 0x19, 0x12, 0xE4, 0xCB, 0x7B, 0x4D, 0x98, 0xCA,
2250         0x52, 0x7F, 0xA5, 0x44, 0xFE, 0x02, 0x1F, 0x35, 0x07, 0xF6, 0x7F, 0x76, 0xDE, 0x94, 0x22, 0x34,
2251         0x9F, 0x57, 0xFE, 0x36, 0x03, 0xC6, 0xC2, 0x54, 0xCC, 0xEF, 0x76, 0x26, 0x74, 0x38, 0xD7, 0x30,
2252         0xBC, 0xB4, 0xB1, 0xF1, 0x59, 0xE8
2253     };
2254     size_t len = sizeof(sm2_asn1);
2255     OH_CryptoEccSignatureSpec *spec = nullptr;
2256     Crypto_DataBlob sm2Signature = {
2257         .data = sm2_asn1,
2258         .len = len
2259     };
2260 
2261     EXPECT_EQ(OH_CryptoEccSignatureSpec_Create(&sm2Signature, &spec), CRYPTO_OPERTION_ERROR);
2262 
2263     OH_CryptoEccSignatureSpec_Destroy(spec);
2264 }
2265 
2266 /**
2267 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_3700
2268 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_3700
2269 * @tc.desc Signature invalid asn1 function test
2270 * @tc.size Medium
2271 * @tc.type Func
2272 * @tc.level Level0
2273 */
2274 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_3700, TestSize.Level0)
2275 {
2276     uint8_t sm2_asn1[] = {
2277         0x30, 0x44, 0x02, 0x21, 0x00, 0xEA, 0xDE, 0x4F, 0x43, 0xEF, 0x29, 0xFA, 0xBA, 0x54, 0xE2, 0x27,
2278         0x6C, 0xD2, 0xFB, 0x25, 0x0B, 0x9C, 0xFE, 0x38, 0x19, 0x12, 0xE4, 0xCB, 0x7B, 0x4D, 0x98, 0xCA,
2279         0x52, 0x7F, 0xA5, 0x44, 0xFE, 0x02, 0x20, 0x00, 0x35, 0x07, 0xF6, 0x7F, 0x76, 0xDE, 0x94, 0x22, 0x34,
2280         0x9F, 0x57, 0xFE, 0x36, 0x03, 0xC6, 0xC2, 0x54, 0xCC, 0xEF, 0x76, 0x26, 0x74, 0x38, 0xD7, 0x30,
2281         0xBC, 0xB4, 0xB1, 0xF1, 0x59, 0xE8
2282     };
2283     size_t len = sizeof(sm2_asn1);
2284     OH_CryptoEccSignatureSpec *spec = nullptr;
2285     Crypto_DataBlob sm2Signature = {
2286         .data = sm2_asn1,
2287         .len = len
2288     };
2289 
2290     EXPECT_EQ(OH_CryptoEccSignatureSpec_Create(&sm2Signature, &spec), CRYPTO_OPERTION_ERROR);
2291 
2292     OH_CryptoEccSignatureSpec_Destroy(spec);
2293 }
2294 
2295 /**
2296 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_3800
2297 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_3800
2298 * @tc.desc Signature invalid asn1 function test
2299 * @tc.size Medium
2300 * @tc.type Func
2301 * @tc.level Level0
2302 */
2303 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_3800, TestSize.Level0)
2304 {
2305     uint8_t sm2_asn1[] = {
2306         0x30, 0xFF, 0xFF, 0xFF, 0x02, 0x21, 0x00, 0xEA, 0xDE, 0x4F, 0x43, 0xEF, 0x29, 0xFA, 0xBA, 0x54, 0xE2, 0x27,
2307         0x6C, 0xD2, 0xFB, 0x25, 0x0B, 0x9C, 0xFE, 0x38, 0x19, 0x12, 0xE4, 0xCB, 0x7B, 0x4D, 0x98, 0xCA,
2308         0x52, 0x7F, 0xA5, 0x44, 0xFE, 0x02, 0x1F, 0x35, 0x07, 0xF6, 0x7F, 0x76, 0xDE, 0x94, 0x22, 0x34,
2309         0x9F, 0x57, 0xFE, 0x36, 0x03, 0xC6, 0xC2, 0x54, 0xCC, 0xEF, 0x76, 0x26, 0x74, 0x38, 0xD7, 0x30,
2310         0xBC, 0xB4, 0xB1, 0xF1, 0x59, 0xE8
2311     };
2312     size_t len = sizeof(sm2_asn1);
2313     OH_CryptoEccSignatureSpec *spec = nullptr;
2314     Crypto_DataBlob sm2Signature = {
2315         .data = sm2_asn1,
2316         .len = len
2317     };
2318 
2319     EXPECT_EQ(OH_CryptoEccSignatureSpec_Create(&sm2Signature, &spec), CRYPTO_OPERTION_ERROR);
2320 
2321     OH_CryptoEccSignatureSpec_Destroy(spec);
2322 }
2323 
2324 /**
2325 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_3900
2326 * @tc.name OHCryptoFrameworkSignatureNapiTest/SIGNATURE_ECDSA_TEST.SUB_Security_CryptoFramework_NAPI_Signature_Test_3900/x
2327 * @tc.desc Signature function test
2328 * @tc.size Medium
2329 * @tc.type Func
2330 * @tc.level Level0
2331 */
2332 HWTEST_P(SIGNATURE_ECDSA_TEST, SUB_Security_CryptoFramework_NAPI_Signature_Test_3900, TestSize.Level0)
2333 {
2334     AsymSignSpec specInfo = GetParam();
2335     OH_CryptoKeyPair *keyPair = nullptr;
2336     OH_CryptoPrivKey *privKey = nullptr;
2337     OH_CryptoPubKey *pubKey = nullptr;
2338     const char *algoName = (const char *)specInfo.algoName;
2339     const char *asymAlgoName= (const char *)specInfo.asymAlgoName;
2340     int32_t msgLen = specInfo.msgLen;
2341     HcfRand *randomObj = nullptr;
2342     HcfBlob msgBlob = {.data = nullptr, .len = 0};
2343     Crypto_DataBlob signData = {.data = nullptr, .len = 0};
2344 
2345     HcfRandCreate(&randomObj);
2346     EXPECT_TRUE(randomObj != nullptr);
2347     EXPECT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
2348     msgBlob.data[0] = 0;
2349     keyPair = OHTEST_GenAsymKey(asymAlgoName);
2350     EXPECT_TRUE(keyPair != nullptr);
2351     privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
2352     pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
2353     EXPECT_TRUE(privKey != nullptr);
2354     EXPECT_TRUE(pubKey != nullptr);
2355     EXPECT_EQ(OHTEST_DoNoSegmentSign(algoName, privKey, (Crypto_DataBlob *)&msgBlob, &signData), CRYPTO_SUCCESS);
2356     bool ret = OHTEST_Sm2SignatureAsn1ToRS(signData.data, signData.len);
2357     EXPECT_TRUE(ret);
2358 
2359     HcfObjDestroy(randomObj);
2360     OH_CryptoKeyPair_Destroy(keyPair);
2361     OH_Crypto_FreeDataBlob(&signData);
2362     OH_Crypto_FreeDataBlob((Crypto_DataBlob *)&msgBlob);
2363 }
2364 
2365 /**
2366 * @tc.number SUB_Security_CryptoFramework_NAPI_Signature_Test_4000
2367 * @tc.name OHCryptoFrameworkSignatureNapiTest.SUB_Security_CryptoFramework_NAPI_Signature_Test_4000
2368 * @tc.desc Signature msg ge n function test
2369 * @tc.size Medium
2370 * @tc.type Func
2371 * @tc.level Level0
2372 */
2373 HWTEST_F(OHCryptoFrameworkSignatureNapiTest, SUB_Security_CryptoFramework_NAPI_Signature_Test_4000, TestSize.Level0)
2374 {
2375     OH_Crypto_ErrCode ret = CRYPTO_SUCCESS;
2376     OH_CryptoKeyPair *keyPair = nullptr;
2377     OH_CryptoAsymKeyGenerator *ctx = nullptr;
2378     OH_CryptoPrivKey *privKey = nullptr;
2379     const char *algoName = (const char *)"RSA512|NoPadding|NoHash|OnlySign";
2380     const char *asymAlgoName= (const char *)"RSA512";
2381     Crypto_DataBlob signData = {.data = nullptr, .len = 0};
2382     // 待签名消息大于公钥n的值
2383     g_rsa_512_pubKey_n[0]++;
2384     Crypto_DataBlob msgBlob = {
2385         .data = g_rsa_512_pubKey_n,
2386         .len = sizeof(g_rsa_512_pubKey_n)
2387     };
2388     Crypto_DataBlob pubKeyBlob = { .data = g_rsa_512_pubKey, .len = sizeof(g_rsa_512_pubKey) };
2389     Crypto_DataBlob priKeyBlob = { .data = g_rsa_512_priKey, .len = sizeof(g_rsa_512_priKey) };
2390 
2391     EXPECT_EQ(OH_CryptoAsymKeyGenerator_Create(asymAlgoName, &ctx), CRYPTO_SUCCESS);
2392     EXPECT_EQ(OH_CryptoAsymKeyGenerator_Convert(ctx, CRYPTO_DER, &pubKeyBlob, &priKeyBlob, &keyPair), CRYPTO_SUCCESS);
2393     EXPECT_TRUE(keyPair != nullptr);
2394     privKey = OH_CryptoKeyPair_GetPrivKey(keyPair);
2395     EXPECT_TRUE(privKey != nullptr);
2396     ret = OHTEST_DoNoSegmentSign(algoName, privKey, &msgBlob, &signData);
2397     EXPECT_EQ(ret, CRYPTO_OPERTION_ERROR);
2398 
2399     OH_CryptoKeyPair_Destroy(keyPair);
2400     OH_Crypto_FreeDataBlob(&signData);
2401     OH_CryptoAsymKeyGenerator_Destroy(ctx);
2402 }
2403 
2404 } // namespace Unittest::CryptoFrameworkSignatureNapiTest
2405