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