• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 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 
20 #include "crypto_framework_verify_test.h"
21 #include "crypto_asym_key.h"
22 #include "crypto_framework_digest_test.h"
23 #include "blob.h"
24 #include "log.h"
25 #include "signature.h"
26 #include "rand.h"
27 
28 #include <gtest/gtest.h>
29 
30 using namespace testing::ext;
31 namespace Unittest::CryptoFrameworkVerifyNapiTest {
32 
33 class OHCryptoFrameworkVerifyNapiTest : public testing::Test {
34 public:
SetUpTestCase()35     static void SetUpTestCase() {};
36 
TearDownTestCase()37     static void TearDownTestCase() {};
38 };
39 
40 class VERIFY_PKCS1_TEST : public testing::TestWithParam<VerifySpec> {
41     public:
SetUpTestCase()42         static void SetUpTestCase() {}
TearDownTestCase()43         static void TearDownTestCase() {}
44 };
45 
46 class VERIFY_PSS_TEST : public testing::TestWithParam<VerifySpec> {
47     public:
SetUpTestCase()48         static void SetUpTestCase() {}
TearDownTestCase()49         static void TearDownTestCase() {}
50 };
51 
52 class VERIFY_ECC_TEST : public testing::TestWithParam<VerifySpec> {
53     public:
SetUpTestCase()54         static void SetUpTestCase() {}
TearDownTestCase()55         static void TearDownTestCase() {}
56 };
57 
58 class VERIFY_DSA_TEST : public testing::TestWithParam<VerifySpec> {
59     public:
SetUpTestCase()60         static void SetUpTestCase() {}
TearDownTestCase()61         static void TearDownTestCase() {}
62 };
63 
64 class VERIFY_RSA_ONLY_SIGN_TEST : public testing::TestWithParam<VerifySpec> {
65     public:
SetUpTestCase()66         static void SetUpTestCase() {}
TearDownTestCase()67         static void TearDownTestCase() {}
68 };
69 
70 VerifySpec g_verifyPkcs1Data[] = {
71     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|PKCS1|MD5", (uint8_t *)"RSA512|PKCS1|MD5", 32},          // 0
72     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|PKCS1|SHA1", (uint8_t *)"RSA512|PKCS1|SHA1", 32},        // 1
73     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|PKCS1|SHA224", (uint8_t *)"RSA512|PKCS1|SHA224", 32},    // 2
74     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|PKCS1|SHA256", (uint8_t *)"RSA512|PKCS1|SHA256", 32},    // 3
75 
76     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PKCS1|MD5", (uint8_t *)"RSA768|PKCS1|MD5", 32},          // 4
77     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PKCS1|SHA1", (uint8_t *)"RSA768|PKCS1|SHA1", 32},        // 5
78     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PKCS1|SHA224", (uint8_t *)"RSA768|PKCS1|SHA224", 32},    // 6
79     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PKCS1|SHA256", (uint8_t *)"RSA768|PKCS1|SHA256", 32},    // 7
80     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PKCS1|SHA384", (uint8_t *)"RSA768|PKCS1|SHA384", 32},    // 8
81     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PKCS1|SHA512", (uint8_t *)"RSA768|PKCS1|SHA512", 32},    // 9
82 
83     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PKCS1|MD5", (uint8_t *)"RSA1024|PKCS1|MD5", 32},       // 10
84     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PKCS1|SHA1", (uint8_t *)"RSA1024|PKCS1|SHA1", 32},     // 11
85     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PKCS1|SHA224", (uint8_t *)"RSA1024|PKCS1|SHA224", 32}, // 12
86     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PKCS1|SHA256", (uint8_t *)"RSA1024|PKCS1|SHA256", 32}, // 13
87     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PKCS1|SHA384", (uint8_t *)"RSA1024|PKCS1|SHA384", 32}, // 14
88     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PKCS1|SHA512", (uint8_t *)"RSA1024|PKCS1|SHA512", 32}, // 15
89 
90     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PKCS1|MD5", (uint8_t *)"RSA2048|PKCS1|MD5", 32},       // 16
91     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PKCS1|SHA1", (uint8_t *)"RSA2048|PKCS1|SHA1", 32},     // 17
92     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PKCS1|SHA224", (uint8_t *)"RSA2048|PKCS1|SHA224", 32}, // 18
93     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PKCS1|SHA256", (uint8_t *)"RSA2048|PKCS1|SHA256", 32}, // 19
94     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PKCS1|SHA384", (uint8_t *)"RSA2048|PKCS1|SHA384", 32}, // 20
95     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PKCS1|SHA512", (uint8_t *)"RSA2048|PKCS1|SHA512", 32}, // 21
96 
97     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PKCS1|MD5", (uint8_t *)"RSA3072|PKCS1|MD5", 32},       // 22
98     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PKCS1|SHA1", (uint8_t *)"RSA3072|PKCS1|SHA1", 32},     // 23
99     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PKCS1|SHA224", (uint8_t *)"RSA3072|PKCS1|SHA224", 32}, // 24
100     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PKCS1|SHA256", (uint8_t *)"RSA3072|PKCS1|SHA256", 32}, // 25
101     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PKCS1|SHA384", (uint8_t *)"RSA3072|PKCS1|SHA384", 32}, // 26
102     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PKCS1|SHA512", (uint8_t *)"RSA3072|PKCS1|SHA512", 32}, // 27
103 
104     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PKCS1|MD5", (uint8_t *)"RSA4096|PKCS1|MD5", 32},       // 28
105     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PKCS1|SHA1", (uint8_t *)"RSA4096|PKCS1|SHA1", 32},     // 29
106     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PKCS1|SHA224", (uint8_t *)"RSA4096|PKCS1|SHA224", 32}, // 30
107     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PKCS1|SHA256", (uint8_t *)"RSA4096|PKCS1|SHA256", 32}, // 31
108     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PKCS1|SHA384", (uint8_t *)"RSA4096|PKCS1|SHA384", 32}, // 32
109     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PKCS1|SHA512", (uint8_t *)"RSA4096|PKCS1|SHA512", 32}, // 33
110 
111     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PKCS1|MD5", (uint8_t *)"RSA8192|PKCS1|MD5", 32},       // 34
112     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PKCS1|SHA1", (uint8_t *)"RSA8192|PKCS1|SHA1", 32},     // 35
113     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PKCS1|SHA224", (uint8_t *)"RSA8192|PKCS1|SHA224", 32}, // 36
114     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PKCS1|SHA256", (uint8_t *)"RSA8192|PKCS1|SHA256", 32}, // 37
115     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PKCS1|SHA384", (uint8_t *)"RSA8192|PKCS1|SHA384", 32}, // 38
116     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PKCS1|SHA512", (uint8_t *)"RSA8192|PKCS1|SHA512", 32}, // 39
117 
118     {(uint8_t *)"RSA768", (uint8_t *)"RSA|PKCS1|SHA512", (uint8_t *)"RSA|PKCS1|SHA512", 32},          // 40
119 };
120 
121 VerifySpec g_verifyPssData[] = {
122     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|PSS|MD5|MGF1_MD5", (uint8_t *)"RSA512|PSS|MD5|MGF1_MD5", 32},                 // 0
123     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|PSS|MD5|MGF1_SHA1", (uint8_t *)"RSA512|PSS|MD5|MGF1_SHA1", 32},               // 1
124     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|PSS|MD5|MGF1_SHA224", (uint8_t *)"RSA512|PSS|MD5|MGF1_SHA224", 32},           // 2
125     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|PSS|MD5|MGF1_SHA256", (uint8_t *)"RSA512|PSS|MD5|MGF1_SHA256", 32},           // 3
126     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|PSS|SHA1|MGF1_MD5", (uint8_t *)"RSA512|PSS|SHA1|MGF1_MD5", 32},               // 4
127     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|PSS|SHA1|MGF1_SHA1", (uint8_t *)"RSA512|PSS|SHA1|MGF1_SHA1", 32},             // 5
128     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|PSS|SHA1|MGF1_SHA224", (uint8_t *)"RSA512|PSS|SHA1|MGF1_SHA224", 32},         // 6
129     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|PSS|SHA1|MGF1_SHA256", (uint8_t *)"RSA512|PSS|SHA1|MGF1_SHA256", 32},         // 7
130     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|PSS|SHA224|MGF1_MD5", (uint8_t *)"RSA512|PSS|SHA224|MGF1_MD5", 32},           // 8
131     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|PSS|SHA224|MGF1_SHA1", (uint8_t *)"RSA512|PSS|SHA224|MGF1_SHA1", 32},         // 9
132     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|PSS|SHA224|MGF1_SHA224", (uint8_t *)"RSA512|PSS|SHA224|MGF1_SHA224", 32},     // 10
133     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|PSS|SHA224|MGF1_SHA256", (uint8_t *)"RSA512|PSS|SHA224|MGF1_SHA256", 32},     // 11
134     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|PSS|SHA256|MGF1_MD5", (uint8_t *)"RSA512|PSS|SHA256|MGF1_MD5", 32},           // 12
135     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|PSS|SHA256|MGF1_SHA1", (uint8_t *)"RSA512|PSS|SHA256|MGF1_SHA1", 32},         // 13
136     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|PSS|SHA256|MGF1_SHA224", (uint8_t *)"RSA512|PSS|SHA256|MGF1_SHA224", 32},     // 14
137     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|PSS|SHA256|MGF1_SHA256", (uint8_t *)"RSA512|PSS|SHA256|MGF1_SHA256", 32},     // 15
138 
139     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|MD5|MGF1_MD5", (uint8_t *)"RSA768|PSS|MD5|MGF1_MD5", 32},                 // 16
140     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|MD5|MGF1_SHA1", (uint8_t *)"RSA768|PSS|MD5|MGF1_SHA1", 32},               // 17
141     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|MD5|MGF1_SHA224", (uint8_t *)"RSA768|PSS|MD5|MGF1_SHA224", 32},           // 18
142     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|MD5|MGF1_SHA256", (uint8_t *)"RSA768|PSS|MD5|MGF1_SHA256", 32},           // 19
143     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|MD5|MGF1_SHA384", (uint8_t *)"RSA768|PSS|MD5|MGF1_SHA384", 32},           // 20
144     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|MD5|MGF1_SHA512", (uint8_t *)"RSA768|PSS|MD5|MGF1_SHA512", 32},           // 21
145     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|SHA1|MGF1_MD5", (uint8_t *)"RSA768|PSS|SHA1|MGF1_MD5", 32},               // 22
146     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|SHA1|MGF1_SHA1", (uint8_t *)"RSA768|PSS|SHA1|MGF1_SHA1", 32},             // 23
147     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|SHA1|MGF1_SHA224", (uint8_t *)"RSA768|PSS|SHA1|MGF1_SHA224", 32},         // 24
148     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|SHA1|MGF1_SHA256", (uint8_t *)"RSA768|PSS|SHA1|MGF1_SHA256", 32},         // 25
149     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|SHA1|MGF1_SHA384", (uint8_t *)"RSA768|PSS|SHA1|MGF1_SHA384", 32},         // 26
150     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|SHA1|MGF1_SHA512", (uint8_t *)"RSA768|PSS|SHA1|MGF1_SHA512", 32},         // 27
151     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|SHA224|MGF1_MD5", (uint8_t *)"RSA768|PSS|SHA224|MGF1_MD5", 32},           // 28
152     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|SHA224|MGF1_SHA1", (uint8_t *)"RSA768|PSS|SHA224|MGF1_SHA1", 32},         // 29
153     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|SHA224|MGF1_SHA224", (uint8_t *)"RSA768|PSS|SHA224|MGF1_SHA224", 32},     // 30
154     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|SHA224|MGF1_SHA256", (uint8_t *)"RSA768|PSS|SHA224|MGF1_SHA256", 32},     // 31
155     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|SHA224|MGF1_SHA384", (uint8_t *)"RSA768|PSS|SHA224|MGF1_SHA384", 32},     // 32
156     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|SHA224|MGF1_SHA512", (uint8_t *)"RSA768|PSS|SHA224|MGF1_SHA512", 32},     // 33
157     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|SHA256|MGF1_MD5", (uint8_t *)"RSA768|PSS|SHA256|MGF1_MD5", 32},           // 34
158     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|SHA256|MGF1_SHA1", (uint8_t *)"RSA768|PSS|SHA256|MGF1_SHA1", 32},         // 35
159     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|SHA256|MGF1_SHA224", (uint8_t *)"RSA768|PSS|SHA256|MGF1_SHA224", 32},     // 36
160     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|SHA256|MGF1_SHA256", (uint8_t *)"RSA768|PSS|SHA256|MGF1_SHA256", 32},     // 37
161     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|SHA256|MGF1_SHA384", (uint8_t *)"RSA768|PSS|SHA256|MGF1_SHA384", 32},     // 38
162     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|SHA384|MGF1_MD5", (uint8_t *)"RSA768|PSS|SHA384|MGF1_MD5", 32},           // 39
163     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|SHA384|MGF1_SHA1", (uint8_t *)"RSA768|PSS|SHA384|MGF1_SHA1", 32},         // 40
164     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|SHA384|MGF1_SHA224", (uint8_t *)"RSA768|PSS|SHA384|MGF1_SHA224", 32},     // 41
165     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|SHA384|MGF1_SHA256", (uint8_t *)"RSA768|PSS|SHA384|MGF1_SHA256", 32},     // 42
166     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|SHA512|MGF1_MD5", (uint8_t *)"RSA768|PSS|SHA512|MGF1_MD5", 32},           // 43
167     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|SHA512|MGF1_SHA1", (uint8_t *)"RSA768|PSS|SHA512|MGF1_SHA1", 32},         // 44
168     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PSS|SHA512|MGF1_SHA224", (uint8_t *)"RSA768|PSS|SHA512|MGF1_SHA224", 32},     // 45
169 
170     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|MD5|MGF1_MD5", (uint8_t *)"RSA1024|PSS|MD5|MGF1_MD5", 32},              // 46
171     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|MD5|MGF1_SHA1", (uint8_t *)"RSA1024|PSS|MD5|MGF1_SHA1", 32},            // 47
172     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|MD5|MGF1_SHA224", (uint8_t *)"RSA1024|PSS|MD5|MGF1_SHA224", 32},        // 48
173     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|MD5|MGF1_SHA256", (uint8_t *)"RSA1024|PSS|MD5|MGF1_SHA256", 32},        // 49
174     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|MD5|MGF1_SHA384", (uint8_t *)"RSA1024|PSS|MD5|MGF1_SHA384", 32},        // 50
175     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|MD5|MGF1_SHA512", (uint8_t *)"RSA1024|PSS|MD5|MGF1_SHA512", 32},        // 51
176     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA1|MGF1_MD5", (uint8_t *)"RSA1024|PSS|SHA1|MGF1_MD5", 32},            // 52
177     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA1|MGF1_SHA1", (uint8_t *)"RSA1024|PSS|SHA1|MGF1_SHA1", 32},          // 53
178     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA1|MGF1_SHA224", (uint8_t *)"RSA1024|PSS|SHA1|MGF1_SHA224", 32},      // 54
179     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA1|MGF1_SHA256", (uint8_t *)"RSA1024|PSS|SHA1|MGF1_SHA256", 32},      // 55
180     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA1|MGF1_SHA384", (uint8_t *)"RSA1024|PSS|SHA1|MGF1_SHA384", 32},      // 56
181     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA1|MGF1_SHA512", (uint8_t *)"RSA1024|PSS|SHA1|MGF1_SHA512", 32},      // 57
182     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA224|MGF1_MD5", (uint8_t *)"RSA1024|PSS|SHA224|MGF1_MD5", 32},        // 58
183     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA224|MGF1_SHA1", (uint8_t *)"RSA1024|PSS|SHA224|MGF1_SHA1", 32},      // 59
184     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA224|MGF1_SHA224", (uint8_t *)"RSA1024|PSS|SHA224|MGF1_SHA224", 32},  // 60
185     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA224|MGF1_SHA256", (uint8_t *)"RSA1024|PSS|SHA224|MGF1_SHA256", 32},  // 61
186     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA224|MGF1_SHA384", (uint8_t *)"RSA1024|PSS|SHA224|MGF1_SHA384", 32},  // 62
187     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA224|MGF1_SHA512", (uint8_t *)"RSA1024|PSS|SHA224|MGF1_SHA512", 32},  // 63
188     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA256|MGF1_MD5", (uint8_t *)"RSA1024|PSS|SHA256|MGF1_MD5", 32},        // 64
189     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA256|MGF1_SHA1", (uint8_t *)"RSA1024|PSS|SHA256|MGF1_SHA1", 32},      // 65
190     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA256|MGF1_SHA224", (uint8_t *)"RSA1024|PSS|SHA256|MGF1_SHA224", 32},  // 66
191     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA256|MGF1_SHA256", (uint8_t *)"RSA1024|PSS|SHA256|MGF1_SHA256", 32},  // 67
192     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA256|MGF1_SHA384", (uint8_t *)"RSA1024|PSS|SHA256|MGF1_SHA384", 32},  // 68
193     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA256|MGF1_SHA512", (uint8_t *)"RSA1024|PSS|SHA256|MGF1_SHA512", 32},  // 69
194     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA384|MGF1_MD5", (uint8_t *)"RSA1024|PSS|SHA384|MGF1_MD5", 32},        // 70
195     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA384|MGF1_SHA1", (uint8_t *)"RSA1024|PSS|SHA384|MGF1_SHA1", 32},      // 71
196     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA384|MGF1_SHA224", (uint8_t *)"RSA1024|PSS|SHA384|MGF1_SHA224", 32},  // 72
197     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA384|MGF1_SHA256", (uint8_t *)"RSA1024|PSS|SHA384|MGF1_SHA256", 32},  // 73
198     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA384|MGF1_SHA384", (uint8_t *)"RSA1024|PSS|SHA384|MGF1_SHA384", 32},  // 74
199     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA384|MGF1_SHA512", (uint8_t *)"RSA1024|PSS|SHA384|MGF1_SHA512", 32},  // 75
200     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA512|MGF1_MD5", (uint8_t *)"RSA1024|PSS|SHA512|MGF1_MD5", 32},        // 76
201     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA512|MGF1_SHA1", (uint8_t *)"RSA1024|PSS|SHA512|MGF1_SHA1", 32},      // 77
202     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA512|MGF1_SHA224", (uint8_t *)"RSA1024|PSS|SHA512|MGF1_SHA224", 32},  // 78
203     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA512|MGF1_SHA256", (uint8_t *)"RSA1024|PSS|SHA512|MGF1_SHA256", 32},  // 79
204     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PSS|SHA512|MGF1_SHA384", (uint8_t *)"RSA1024|PSS|SHA512|MGF1_SHA384", 32},  // 80
205 
206     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|MD5|MGF1_MD5", (uint8_t *)"RSA2048|PSS|MD5|MGF1_MD5", 32},              // 81
207     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|MD5|MGF1_SHA1", (uint8_t *)"RSA2048|PSS|MD5|MGF1_SHA1", 32},            // 82
208     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|MD5|MGF1_SHA224", (uint8_t *)"RSA2048|PSS|MD5|MGF1_SHA224", 32},        // 83
209     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|MD5|MGF1_SHA256", (uint8_t *)"RSA2048|PSS|MD5|MGF1_SHA256", 32},        // 84
210     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|MD5|MGF1_SHA384", (uint8_t *)"RSA2048|PSS|MD5|MGF1_SHA384", 32},        // 85
211     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|MD5|MGF1_SHA512", (uint8_t *)"RSA2048|PSS|MD5|MGF1_SHA512", 32},        // 86
212     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA1|MGF1_MD5", (uint8_t *)"RSA2048|PSS|SHA1|MGF1_MD5", 32},            // 87
213     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA1|MGF1_SHA1", (uint8_t *)"RSA2048|PSS|SHA1|MGF1_SHA1", 32},          // 88
214     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA1|MGF1_SHA224", (uint8_t *)"RSA2048|PSS|SHA1|MGF1_SHA224", 32},      // 89
215     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA1|MGF1_SHA256", (uint8_t *)"RSA2048|PSS|SHA1|MGF1_SHA256", 32},      // 90
216     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA1|MGF1_SHA384", (uint8_t *)"RSA2048|PSS|SHA1|MGF1_SHA384", 32},      // 91
217     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA1|MGF1_SHA512", (uint8_t *)"RSA2048|PSS|SHA1|MGF1_SHA512", 32},      // 92
218     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA224|MGF1_MD5", (uint8_t *)"RSA2048|PSS|SHA224|MGF1_MD5", 32},        // 93
219     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA224|MGF1_SHA1", (uint8_t *)"RSA2048|PSS|SHA224|MGF1_SHA1", 32},      // 94
220     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA224|MGF1_SHA224", (uint8_t *)"RSA2048|PSS|SHA224|MGF1_SHA224", 32},  // 95
221     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA224|MGF1_SHA256", (uint8_t *)"RSA2048|PSS|SHA224|MGF1_SHA256", 32},  // 96
222     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA224|MGF1_SHA384", (uint8_t *)"RSA2048|PSS|SHA224|MGF1_SHA384", 32},  // 97
223     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA224|MGF1_SHA512", (uint8_t *)"RSA2048|PSS|SHA224|MGF1_SHA512", 32},  // 98
224     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA256|MGF1_MD5", (uint8_t *)"RSA2048|PSS|SHA256|MGF1_MD5", 32},        // 99
225     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA256|MGF1_SHA1", (uint8_t *)"RSA2048|PSS|SHA256|MGF1_SHA1", 32},      // 100
226     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA256|MGF1_SHA224", (uint8_t *)"RSA2048|PSS|SHA256|MGF1_SHA224", 32},  // 101
227     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA256|MGF1_SHA256", (uint8_t *)"RSA2048|PSS|SHA256|MGF1_SHA256", 32},  // 102
228     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA256|MGF1_SHA384", (uint8_t *)"RSA2048|PSS|SHA256|MGF1_SHA384", 32},  // 103
229     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA256|MGF1_SHA512", (uint8_t *)"RSA2048|PSS|SHA256|MGF1_SHA512", 32},  // 104
230     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA384|MGF1_MD5", (uint8_t *)"RSA2048|PSS|SHA384|MGF1_MD5", 32},        // 105
231     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA384|MGF1_SHA1", (uint8_t *)"RSA2048|PSS|SHA384|MGF1_SHA1", 32},      // 106
232     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA384|MGF1_SHA224", (uint8_t *)"RSA2048|PSS|SHA384|MGF1_SHA224", 32},  // 107
233     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA384|MGF1_SHA256", (uint8_t *)"RSA2048|PSS|SHA384|MGF1_SHA256", 32},  // 108
234     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA384|MGF1_SHA384", (uint8_t *)"RSA2048|PSS|SHA384|MGF1_SHA384", 32},  // 109
235     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA384|MGF1_SHA512", (uint8_t *)"RSA2048|PSS|SHA384|MGF1_SHA512", 32},  // 110
236     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA512|MGF1_MD5", (uint8_t *)"RSA2048|PSS|SHA512|MGF1_MD5", 32},        // 111
237     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA512|MGF1_SHA1", (uint8_t *)"RSA2048|PSS|SHA512|MGF1_SHA1", 32},      // 112
238     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA512|MGF1_SHA224", (uint8_t *)"RSA2048|PSS|SHA512|MGF1_SHA224", 32},  // 113
239     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA512|MGF1_SHA256", (uint8_t *)"RSA2048|PSS|SHA512|MGF1_SHA256", 32},  // 114
240     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA512|MGF1_SHA384", (uint8_t *)"RSA2048|PSS|SHA512|MGF1_SHA384", 32},  // 115
241     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PSS|SHA512|MGF1_SHA512", (uint8_t *)"RSA2048|PSS|SHA512|MGF1_SHA512", 32},  // 116
242 
243     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|MD5|MGF1_MD5", (uint8_t *)"RSA3072|PSS|MD5|MGF1_MD5", 32},              // 117
244     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|MD5|MGF1_SHA1", (uint8_t *)"RSA3072|PSS|MD5|MGF1_SHA1", 32},            // 118
245     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|MD5|MGF1_SHA224", (uint8_t *)"RSA3072|PSS|MD5|MGF1_SHA224", 32},        // 119
246     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|MD5|MGF1_SHA256", (uint8_t *)"RSA3072|PSS|MD5|MGF1_SHA256", 32},        // 120
247     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|MD5|MGF1_SHA384", (uint8_t *)"RSA3072|PSS|MD5|MGF1_SHA384", 32},        // 121
248     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|MD5|MGF1_SHA512", (uint8_t *)"RSA3072|PSS|MD5|MGF1_SHA512", 32},        // 122
249     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA1|MGF1_MD5", (uint8_t *)"RSA3072|PSS|SHA1|MGF1_MD5", 32},            // 123
250     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA1|MGF1_SHA1", (uint8_t *)"RSA3072|PSS|SHA1|MGF1_SHA1", 32},          // 124
251     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA1|MGF1_SHA224", (uint8_t *)"RSA3072|PSS|SHA1|MGF1_SHA224", 32},      // 125
252     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA1|MGF1_SHA256", (uint8_t *)"RSA3072|PSS|SHA1|MGF1_SHA256", 32},      // 126
253     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA1|MGF1_SHA384", (uint8_t *)"RSA3072|PSS|SHA1|MGF1_SHA384", 32},      // 127
254     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA1|MGF1_SHA512", (uint8_t *)"RSA3072|PSS|SHA1|MGF1_SHA512", 32},      // 128
255     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA224|MGF1_MD5", (uint8_t *)"RSA3072|PSS|SHA224|MGF1_MD5", 32},        // 129
256     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA224|MGF1_SHA1", (uint8_t *)"RSA3072|PSS|SHA224|MGF1_SHA1", 32},      // 130
257     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA224|MGF1_SHA224", (uint8_t *)"RSA3072|PSS|SHA224|MGF1_SHA224", 32},  // 131
258     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA224|MGF1_SHA256", (uint8_t *)"RSA3072|PSS|SHA224|MGF1_SHA256", 32},  // 132
259     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA224|MGF1_SHA384", (uint8_t *)"RSA3072|PSS|SHA224|MGF1_SHA384", 32},  // 133
260     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA224|MGF1_SHA512", (uint8_t *)"RSA3072|PSS|SHA224|MGF1_SHA512", 32},  // 134
261     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA256|MGF1_MD5", (uint8_t *)"RSA3072|PSS|SHA256|MGF1_MD5", 32},        // 135
262     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA256|MGF1_SHA1", (uint8_t *)"RSA3072|PSS|SHA256|MGF1_SHA1", 32},      // 136
263     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA256|MGF1_SHA224", (uint8_t *)"RSA3072|PSS|SHA256|MGF1_SHA224", 32},  // 137
264     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA256|MGF1_SHA256", (uint8_t *)"RSA3072|PSS|SHA256|MGF1_SHA256", 32},  // 138
265     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA256|MGF1_SHA384", (uint8_t *)"RSA3072|PSS|SHA256|MGF1_SHA384", 32},  // 139
266     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA256|MGF1_SHA512", (uint8_t *)"RSA3072|PSS|SHA256|MGF1_SHA512", 32},  // 140
267     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA384|MGF1_MD5", (uint8_t *)"RSA3072|PSS|SHA384|MGF1_MD5", 32},        // 141
268     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA384|MGF1_SHA1", (uint8_t *)"RSA3072|PSS|SHA384|MGF1_SHA1", 32},      // 142
269     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA384|MGF1_SHA224", (uint8_t *)"RSA3072|PSS|SHA384|MGF1_SHA224", 32},  // 143
270     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA384|MGF1_SHA256", (uint8_t *)"RSA3072|PSS|SHA384|MGF1_SHA256", 32},  // 144
271     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA384|MGF1_SHA384", (uint8_t *)"RSA3072|PSS|SHA384|MGF1_SHA384", 32},  // 145
272     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA384|MGF1_SHA512", (uint8_t *)"RSA3072|PSS|SHA384|MGF1_SHA512", 32},  // 146
273     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA512|MGF1_MD5", (uint8_t *)"RSA3072|PSS|SHA512|MGF1_MD5", 32},        // 147
274     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA512|MGF1_SHA1", (uint8_t *)"RSA3072|PSS|SHA512|MGF1_SHA1", 32},      // 148
275     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA512|MGF1_SHA224", (uint8_t *)"RSA3072|PSS|SHA512|MGF1_SHA224", 32},  // 149
276     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA512|MGF1_SHA256", (uint8_t *)"RSA3072|PSS|SHA512|MGF1_SHA256", 32},  // 150
277     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA512|MGF1_SHA384", (uint8_t *)"RSA3072|PSS|SHA512|MGF1_SHA384", 32},  // 151
278     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PSS|SHA512|MGF1_SHA512", (uint8_t *)"RSA3072|PSS|SHA512|MGF1_SHA512", 32},  // 152
279 
280     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|MD5|MGF1_MD5", (uint8_t *)"RSA4096|PSS|MD5|MGF1_MD5", 32},              // 153
281     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|MD5|MGF1_SHA1", (uint8_t *)"RSA4096|PSS|MD5|MGF1_SHA1", 32},            // 154
282     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|MD5|MGF1_SHA224", (uint8_t *)"RSA4096|PSS|MD5|MGF1_SHA224", 32},        // 155
283     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|MD5|MGF1_SHA256", (uint8_t *)"RSA4096|PSS|MD5|MGF1_SHA256", 32},        // 156
284     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|MD5|MGF1_SHA384", (uint8_t *)"RSA4096|PSS|MD5|MGF1_SHA384", 32},        // 157
285     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|MD5|MGF1_SHA512", (uint8_t *)"RSA4096|PSS|MD5|MGF1_SHA512", 32},        // 158
286     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA1|MGF1_MD5", (uint8_t *)"RSA4096|PSS|SHA1|MGF1_MD5", 32},            // 159
287     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA1|MGF1_SHA1", (uint8_t *)"RSA4096|PSS|SHA1|MGF1_SHA1", 32},          // 160
288     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA1|MGF1_SHA224", (uint8_t *)"RSA4096|PSS|SHA1|MGF1_SHA224", 32},      // 161
289     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA1|MGF1_SHA256", (uint8_t *)"RSA4096|PSS|SHA1|MGF1_SHA256", 32},      // 162
290     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA1|MGF1_SHA384", (uint8_t *)"RSA4096|PSS|SHA1|MGF1_SHA384", 32},      // 163
291     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA1|MGF1_SHA512", (uint8_t *)"RSA4096|PSS|SHA1|MGF1_SHA512", 32},      // 164
292     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA224|MGF1_MD5", (uint8_t *)"RSA4096|PSS|SHA224|MGF1_MD5", 32},        // 165
293     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA224|MGF1_SHA1", (uint8_t *)"RSA4096|PSS|SHA224|MGF1_SHA1", 32},      // 166
294     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA224|MGF1_SHA224", (uint8_t *)"RSA4096|PSS|SHA224|MGF1_SHA224", 32},  // 167
295     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA224|MGF1_SHA256", (uint8_t *)"RSA4096|PSS|SHA224|MGF1_SHA256", 32},  // 168
296     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA224|MGF1_SHA384", (uint8_t *)"RSA4096|PSS|SHA224|MGF1_SHA384", 32},  // 169
297     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA224|MGF1_SHA512", (uint8_t *)"RSA4096|PSS|SHA224|MGF1_SHA512", 32},  // 170
298     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA256|MGF1_MD5", (uint8_t *)"RSA4096|PSS|SHA256|MGF1_MD5", 32},        // 171
299     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA256|MGF1_SHA1", (uint8_t *)"RSA4096|PSS|SHA256|MGF1_SHA1", 32},      // 172
300     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA256|MGF1_SHA224", (uint8_t *)"RSA4096|PSS|SHA256|MGF1_SHA224", 32},  // 173
301     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA256|MGF1_SHA256", (uint8_t *)"RSA4096|PSS|SHA256|MGF1_SHA256", 32},  // 174
302     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA256|MGF1_SHA384", (uint8_t *)"RSA4096|PSS|SHA256|MGF1_SHA384", 32},  // 175
303     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA256|MGF1_SHA512", (uint8_t *)"RSA4096|PSS|SHA256|MGF1_SHA512", 32},  // 176
304     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA384|MGF1_MD5", (uint8_t *)"RSA4096|PSS|SHA384|MGF1_MD5", 32},        // 177
305     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA384|MGF1_SHA1", (uint8_t *)"RSA4096|PSS|SHA384|MGF1_SHA1", 32},      // 178
306     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA384|MGF1_SHA224", (uint8_t *)"RSA4096|PSS|SHA384|MGF1_SHA224", 32},  // 179
307     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA384|MGF1_SHA256", (uint8_t *)"RSA4096|PSS|SHA384|MGF1_SHA256", 32},  // 180
308     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA384|MGF1_SHA384", (uint8_t *)"RSA4096|PSS|SHA384|MGF1_SHA384", 32},  // 181
309     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA384|MGF1_SHA512", (uint8_t *)"RSA4096|PSS|SHA384|MGF1_SHA512", 32},  // 182
310     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA512|MGF1_MD5", (uint8_t *)"RSA4096|PSS|SHA512|MGF1_MD5", 32},        // 183
311     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA512|MGF1_SHA1", (uint8_t *)"RSA4096|PSS|SHA512|MGF1_SHA1", 32},      // 184
312     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA512|MGF1_SHA224", (uint8_t *)"RSA4096|PSS|SHA512|MGF1_SHA224", 32},  // 185
313     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA512|MGF1_SHA256", (uint8_t *)"RSA4096|PSS|SHA512|MGF1_SHA256", 32},  // 186
314     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA512|MGF1_SHA384", (uint8_t *)"RSA4096|PSS|SHA512|MGF1_SHA384", 32},  // 187
315     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PSS|SHA512|MGF1_SHA512", (uint8_t *)"RSA4096|PSS|SHA512|MGF1_SHA512", 32},  // 188
316 
317     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|MD5|MGF1_MD5", (uint8_t *)"RSA8192|PSS|MD5|MGF1_MD5", 32},              // 189
318     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|MD5|MGF1_SHA1", (uint8_t *)"RSA8192|PSS|MD5|MGF1_SHA1", 32},            // 190
319     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|MD5|MGF1_SHA224", (uint8_t *)"RSA8192|PSS|MD5|MGF1_SHA224", 32},        // 191
320     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|MD5|MGF1_SHA256", (uint8_t *)"RSA8192|PSS|MD5|MGF1_SHA256", 32},        // 192
321     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|MD5|MGF1_SHA384", (uint8_t *)"RSA8192|PSS|MD5|MGF1_SHA384", 32},        // 193
322     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|MD5|MGF1_SHA512", (uint8_t *)"RSA8192|PSS|MD5|MGF1_SHA512", 32},        // 194
323     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA1|MGF1_MD5", (uint8_t *)"RSA8192|PSS|SHA1|MGF1_MD5", 32},            // 195
324     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA1|MGF1_SHA1", (uint8_t *)"RSA8192|PSS|SHA1|MGF1_SHA1", 32},          // 196
325     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA1|MGF1_SHA224", (uint8_t *)"RSA8192|PSS|SHA1|MGF1_SHA224", 32},      // 197
326     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA1|MGF1_SHA256", (uint8_t *)"RSA8192|PSS|SHA1|MGF1_SHA256", 32},      // 198
327     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA1|MGF1_SHA384", (uint8_t *)"RSA8192|PSS|SHA1|MGF1_SHA384", 32},      // 199
328     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA1|MGF1_SHA512", (uint8_t *)"RSA8192|PSS|SHA1|MGF1_SHA512", 32},      // 200
329     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA224|MGF1_MD5", (uint8_t *)"RSA8192|PSS|SHA224|MGF1_MD5", 32},        // 201
330     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA224|MGF1_SHA1", (uint8_t *)"RSA8192|PSS|SHA224|MGF1_SHA1", 32},      // 202
331     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA224|MGF1_SHA224", (uint8_t *)"RSA8192|PSS|SHA224|MGF1_SHA224", 32},  // 203
332     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA224|MGF1_SHA256", (uint8_t *)"RSA8192|PSS|SHA224|MGF1_SHA256", 32},  // 204
333     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA224|MGF1_SHA384", (uint8_t *)"RSA8192|PSS|SHA224|MGF1_SHA384", 32},  // 205
334     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA224|MGF1_SHA512", (uint8_t *)"RSA8192|PSS|SHA224|MGF1_SHA512", 32},  // 206
335     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA256|MGF1_MD5", (uint8_t *)"RSA8192|PSS|SHA256|MGF1_MD5", 32},        // 207
336     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA256|MGF1_SHA1", (uint8_t *)"RSA8192|PSS|SHA256|MGF1_SHA1", 32},      // 208
337     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA256|MGF1_SHA224", (uint8_t *)"RSA8192|PSS|SHA256|MGF1_SHA224", 32},  // 209
338     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA256|MGF1_SHA256", (uint8_t *)"RSA8192|PSS|SHA256|MGF1_SHA256", 32},  // 210
339     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA256|MGF1_SHA384", (uint8_t *)"RSA8192|PSS|SHA256|MGF1_SHA384", 32},  // 211
340     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA256|MGF1_SHA512", (uint8_t *)"RSA8192|PSS|SHA256|MGF1_SHA512", 32},  // 212
341     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA384|MGF1_MD5", (uint8_t *)"RSA8192|PSS|SHA384|MGF1_MD5", 32},        // 213
342     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA384|MGF1_SHA1", (uint8_t *)"RSA8192|PSS|SHA384|MGF1_SHA1", 32},      // 214
343     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA384|MGF1_SHA224", (uint8_t *)"RSA8192|PSS|SHA384|MGF1_SHA224", 32},  // 215
344     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA384|MGF1_SHA256", (uint8_t *)"RSA8192|PSS|SHA384|MGF1_SHA256", 32},  // 216
345     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA384|MGF1_SHA384", (uint8_t *)"RSA8192|PSS|SHA384|MGF1_SHA384", 32},  // 217
346     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA384|MGF1_SHA512", (uint8_t *)"RSA8192|PSS|SHA384|MGF1_SHA512", 32},  // 218
347     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA512|MGF1_MD5", (uint8_t *)"RSA8192|PSS|SHA512|MGF1_MD5", 32},        // 219
348     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA512|MGF1_SHA1", (uint8_t *)"RSA8192|PSS|SHA512|MGF1_SHA1", 32},      // 220
349     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA512|MGF1_SHA224", (uint8_t *)"RSA8192|PSS|SHA512|MGF1_SHA224", 32},  // 221
350     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA512|MGF1_SHA256", (uint8_t *)"RSA8192|PSS|SHA512|MGF1_SHA256", 32},  // 222
351     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA512|MGF1_SHA384", (uint8_t *)"RSA8192|PSS|SHA512|MGF1_SHA384", 32},  // 223
352     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PSS|SHA512|MGF1_SHA512", (uint8_t *)"RSA8192|PSS|SHA512|MGF1_SHA512", 32},  // 224
353 
354     {(uint8_t *)"RSA1024", (uint8_t *)"RSA|PSS|MD5|MGF1_MD5", (uint8_t *)"RSA|PSS|MD5|MGF1_MD5", 32},                      // 225
355 };
356 
357 VerifySpec g_verifyEccData[] = {
358     {(uint8_t *)"ECC224", (uint8_t *)"ECC224|SHA1", (uint8_t *)"ECC224|SHA1", 32},      // 0
359     {(uint8_t *)"ECC224", (uint8_t *)"ECC224|SHA224", (uint8_t *)"ECC224|SHA224", 32},  // 1
360     {(uint8_t *)"ECC224", (uint8_t *)"ECC224|SHA256", (uint8_t *)"ECC224|SHA256", 32},  // 2
361     {(uint8_t *)"ECC224", (uint8_t *)"ECC224|SHA384", (uint8_t *)"ECC224|SHA384", 32},  // 3
362     {(uint8_t *)"ECC224", (uint8_t *)"ECC224|SHA512", (uint8_t *)"ECC224|SHA512", 32},  // 4
363 
364     {(uint8_t *)"ECC256", (uint8_t *)"ECC256|SHA1", (uint8_t *)"ECC256|SHA1", 32},      // 5
365     {(uint8_t *)"ECC256", (uint8_t *)"ECC256|SHA224", (uint8_t *)"ECC256|SHA224", 32},  // 6
366     {(uint8_t *)"ECC256", (uint8_t *)"ECC256|SHA256", (uint8_t *)"ECC256|SHA256", 32},  // 7
367     {(uint8_t *)"ECC256", (uint8_t *)"ECC256|SHA384", (uint8_t *)"ECC256|SHA384", 32},  // 8
368     {(uint8_t *)"ECC256", (uint8_t *)"ECC256|SHA512", (uint8_t *)"ECC256|SHA512", 32},  // 9
369 
370     {(uint8_t *)"ECC384", (uint8_t *)"ECC384|SHA1", (uint8_t *)"ECC384|SHA1", 32},      // 10
371     {(uint8_t *)"ECC384", (uint8_t *)"ECC384|SHA224", (uint8_t *)"ECC384|SHA224", 32},  // 11
372     {(uint8_t *)"ECC384", (uint8_t *)"ECC384|SHA256", (uint8_t *)"ECC384|SHA256", 32},  // 12
373     {(uint8_t *)"ECC384", (uint8_t *)"ECC384|SHA384", (uint8_t *)"ECC384|SHA384", 32},  // 13
374     {(uint8_t *)"ECC384", (uint8_t *)"ECC384|SHA512", (uint8_t *)"ECC384|SHA512", 32},  // 14
375 
376     {(uint8_t *)"ECC521", (uint8_t *)"ECC521|SHA1", (uint8_t *)"ECC521|SHA1", 32},      // 15
377     {(uint8_t *)"ECC521", (uint8_t *)"ECC521|SHA224", (uint8_t *)"ECC521|SHA224", 32},  // 16
378     {(uint8_t *)"ECC521", (uint8_t *)"ECC521|SHA256", (uint8_t *)"ECC521|SHA256", 32},  // 17
379     {(uint8_t *)"ECC521", (uint8_t *)"ECC521|SHA384", (uint8_t *)"ECC521|SHA384", 32},  // 18
380     {(uint8_t *)"ECC521", (uint8_t *)"ECC521|SHA512", (uint8_t *)"ECC521|SHA512", 32},  // 19
381 
382     {(uint8_t *)"ECC_BrainPoolP160r1", (uint8_t *)"ECC_BrainPoolP160r1|SHA1", (uint8_t *)"ECC_BrainPoolP160r1|SHA1", 32},      // 20
383     {(uint8_t *)"ECC_BrainPoolP160r1", (uint8_t *)"ECC_BrainPoolP160r1|SHA224", (uint8_t *)"ECC_BrainPoolP160r1|SHA224", 32},  // 21
384     {(uint8_t *)"ECC_BrainPoolP160r1", (uint8_t *)"ECC_BrainPoolP160r1|SHA256", (uint8_t *)"ECC_BrainPoolP160r1|SHA256", 32},  // 22
385     {(uint8_t *)"ECC_BrainPoolP160r1", (uint8_t *)"ECC_BrainPoolP160r1|SHA384", (uint8_t *)"ECC_BrainPoolP160r1|SHA384", 32},  // 23
386     {(uint8_t *)"ECC_BrainPoolP160r1", (uint8_t *)"ECC_BrainPoolP160r1|SHA512", (uint8_t *)"ECC_BrainPoolP160r1|SHA512", 32},  // 24
387 
388     {(uint8_t *)"ECC_BrainPoolP160t1", (uint8_t *)"ECC_BrainPoolP160t1|SHA1", (uint8_t *)"ECC_BrainPoolP160t1|SHA1", 32},      // 25
389     {(uint8_t *)"ECC_BrainPoolP160t1", (uint8_t *)"ECC_BrainPoolP160t1|SHA224", (uint8_t *)"ECC_BrainPoolP160t1|SHA224", 32},  // 26
390     {(uint8_t *)"ECC_BrainPoolP160t1", (uint8_t *)"ECC_BrainPoolP160t1|SHA256", (uint8_t *)"ECC_BrainPoolP160t1|SHA256", 32},  // 27
391     {(uint8_t *)"ECC_BrainPoolP160t1", (uint8_t *)"ECC_BrainPoolP160t1|SHA384", (uint8_t *)"ECC_BrainPoolP160t1|SHA384", 32},  // 28
392     {(uint8_t *)"ECC_BrainPoolP160t1", (uint8_t *)"ECC_BrainPoolP160t1|SHA512", (uint8_t *)"ECC_BrainPoolP160t1|SHA512", 32},  // 29
393 
394     {(uint8_t *)"ECC_BrainPoolP192r1", (uint8_t *)"ECC_BrainPoolP192r1|SHA1", (uint8_t *)"ECC_BrainPoolP192r1|SHA1", 32},      // 30
395     {(uint8_t *)"ECC_BrainPoolP192r1", (uint8_t *)"ECC_BrainPoolP192r1|SHA224", (uint8_t *)"ECC_BrainPoolP192r1|SHA224", 32},  // 31
396     {(uint8_t *)"ECC_BrainPoolP192r1", (uint8_t *)"ECC_BrainPoolP192r1|SHA256", (uint8_t *)"ECC_BrainPoolP192r1|SHA256", 32},  // 32
397     {(uint8_t *)"ECC_BrainPoolP192r1", (uint8_t *)"ECC_BrainPoolP192r1|SHA384", (uint8_t *)"ECC_BrainPoolP192r1|SHA384", 32},  // 33
398     {(uint8_t *)"ECC_BrainPoolP192r1", (uint8_t *)"ECC_BrainPoolP192r1|SHA512", (uint8_t *)"ECC_BrainPoolP192r1|SHA512", 32},  // 34
399 
400     {(uint8_t *)"ECC_BrainPoolP192t1", (uint8_t *)"ECC_BrainPoolP192t1|SHA1", (uint8_t *)"ECC_BrainPoolP192t1|SHA1", 32},      // 35
401     {(uint8_t *)"ECC_BrainPoolP192t1", (uint8_t *)"ECC_BrainPoolP192t1|SHA224", (uint8_t *)"ECC_BrainPoolP192t1|SHA224", 32},  // 36
402     {(uint8_t *)"ECC_BrainPoolP192t1", (uint8_t *)"ECC_BrainPoolP192t1|SHA256", (uint8_t *)"ECC_BrainPoolP192t1|SHA256", 32},  // 37
403     {(uint8_t *)"ECC_BrainPoolP192t1", (uint8_t *)"ECC_BrainPoolP192t1|SHA384", (uint8_t *)"ECC_BrainPoolP192t1|SHA384", 32},  // 38
404     {(uint8_t *)"ECC_BrainPoolP192t1", (uint8_t *)"ECC_BrainPoolP192t1|SHA512", (uint8_t *)"ECC_BrainPoolP192t1|SHA512", 32},  // 39
405 
406     {(uint8_t *)"ECC_BrainPoolP224r1", (uint8_t *)"ECC_BrainPoolP224r1|SHA1", (uint8_t *)"ECC_BrainPoolP224r1|SHA1", 32},      // 40
407     {(uint8_t *)"ECC_BrainPoolP224r1", (uint8_t *)"ECC_BrainPoolP224r1|SHA224", (uint8_t *)"ECC_BrainPoolP224r1|SHA224", 32},  // 41
408     {(uint8_t *)"ECC_BrainPoolP224r1", (uint8_t *)"ECC_BrainPoolP224r1|SHA256", (uint8_t *)"ECC_BrainPoolP224r1|SHA256", 32},  // 42
409     {(uint8_t *)"ECC_BrainPoolP224r1", (uint8_t *)"ECC_BrainPoolP224r1|SHA384", (uint8_t *)"ECC_BrainPoolP224r1|SHA384", 32},  // 43
410     {(uint8_t *)"ECC_BrainPoolP224r1", (uint8_t *)"ECC_BrainPoolP224r1|SHA512", (uint8_t *)"ECC_BrainPoolP224r1|SHA512", 32},  // 44
411 
412     {(uint8_t *)"ECC_BrainPoolP224t1", (uint8_t *)"ECC_BrainPoolP224t1|SHA1", (uint8_t *)"ECC_BrainPoolP224t1|SHA1", 32},      // 45
413     {(uint8_t *)"ECC_BrainPoolP224t1", (uint8_t *)"ECC_BrainPoolP224t1|SHA224", (uint8_t *)"ECC_BrainPoolP224t1|SHA224", 32},  // 46
414     {(uint8_t *)"ECC_BrainPoolP224t1", (uint8_t *)"ECC_BrainPoolP224t1|SHA256", (uint8_t *)"ECC_BrainPoolP224t1|SHA256", 32},  // 47
415     {(uint8_t *)"ECC_BrainPoolP224t1", (uint8_t *)"ECC_BrainPoolP224t1|SHA384", (uint8_t *)"ECC_BrainPoolP224t1|SHA384", 32},  // 48
416     {(uint8_t *)"ECC_BrainPoolP224t1", (uint8_t *)"ECC_BrainPoolP224t1|SHA512", (uint8_t *)"ECC_BrainPoolP224t1|SHA512", 32},  // 49
417 
418 
419     {(uint8_t *)"ECC_BrainPoolP256r1", (uint8_t *)"ECC_BrainPoolP256r1|SHA1", (uint8_t *)"ECC_BrainPoolP256r1|SHA1", 32},      // 50
420     {(uint8_t *)"ECC_BrainPoolP256r1", (uint8_t *)"ECC_BrainPoolP256r1|SHA224", (uint8_t *)"ECC_BrainPoolP256r1|SHA224", 32},  // 51
421     {(uint8_t *)"ECC_BrainPoolP256r1", (uint8_t *)"ECC_BrainPoolP256r1|SHA256", (uint8_t *)"ECC_BrainPoolP256r1|SHA256", 32},  // 52
422     {(uint8_t *)"ECC_BrainPoolP256r1", (uint8_t *)"ECC_BrainPoolP256r1|SHA384", (uint8_t *)"ECC_BrainPoolP256r1|SHA384", 32},  // 53
423     {(uint8_t *)"ECC_BrainPoolP256r1", (uint8_t *)"ECC_BrainPoolP256r1|SHA512", (uint8_t *)"ECC_BrainPoolP256r1|SHA512", 32},  // 54
424 
425     {(uint8_t *)"ECC_BrainPoolP256t1", (uint8_t *)"ECC_BrainPoolP256t1|SHA1", (uint8_t *)"ECC_BrainPoolP256t1|SHA1", 32},      // 55
426     {(uint8_t *)"ECC_BrainPoolP256t1", (uint8_t *)"ECC_BrainPoolP256t1|SHA224", (uint8_t *)"ECC_BrainPoolP256t1|SHA224", 32},  // 56
427     {(uint8_t *)"ECC_BrainPoolP256t1", (uint8_t *)"ECC_BrainPoolP256t1|SHA256", (uint8_t *)"ECC_BrainPoolP256t1|SHA256", 32},  // 57
428     {(uint8_t *)"ECC_BrainPoolP256t1", (uint8_t *)"ECC_BrainPoolP256t1|SHA384", (uint8_t *)"ECC_BrainPoolP256t1|SHA384", 32},  // 58
429     {(uint8_t *)"ECC_BrainPoolP256t1", (uint8_t *)"ECC_BrainPoolP256t1|SHA512", (uint8_t *)"ECC_BrainPoolP256t1|SHA512", 32},  // 59
430 
431 
432     {(uint8_t *)"ECC_BrainPoolP320r1", (uint8_t *)"ECC_BrainPoolP320r1|SHA1", (uint8_t *)"ECC_BrainPoolP320r1|SHA1", 32},      // 60
433     {(uint8_t *)"ECC_BrainPoolP320r1", (uint8_t *)"ECC_BrainPoolP320r1|SHA224", (uint8_t *)"ECC_BrainPoolP320r1|SHA224", 32},  // 61
434     {(uint8_t *)"ECC_BrainPoolP320r1", (uint8_t *)"ECC_BrainPoolP320r1|SHA256", (uint8_t *)"ECC_BrainPoolP320r1|SHA256", 32},  // 62
435     {(uint8_t *)"ECC_BrainPoolP320r1", (uint8_t *)"ECC_BrainPoolP320r1|SHA384", (uint8_t *)"ECC_BrainPoolP320r1|SHA384", 32},  // 63
436     {(uint8_t *)"ECC_BrainPoolP320r1", (uint8_t *)"ECC_BrainPoolP320r1|SHA512", (uint8_t *)"ECC_BrainPoolP320r1|SHA512", 32},  // 64
437 
438     {(uint8_t *)"ECC_BrainPoolP320t1", (uint8_t *)"ECC_BrainPoolP320t1|SHA1", (uint8_t *)"ECC_BrainPoolP320t1|SHA1", 32},      // 65
439     {(uint8_t *)"ECC_BrainPoolP320t1", (uint8_t *)"ECC_BrainPoolP320t1|SHA224", (uint8_t *)"ECC_BrainPoolP320t1|SHA224", 32},  // 66
440     {(uint8_t *)"ECC_BrainPoolP320t1", (uint8_t *)"ECC_BrainPoolP320t1|SHA256", (uint8_t *)"ECC_BrainPoolP320t1|SHA256", 32},  // 67
441     {(uint8_t *)"ECC_BrainPoolP320t1", (uint8_t *)"ECC_BrainPoolP320t1|SHA384", (uint8_t *)"ECC_BrainPoolP320t1|SHA384", 32},  // 68
442     {(uint8_t *)"ECC_BrainPoolP320t1", (uint8_t *)"ECC_BrainPoolP320t1|SHA512", (uint8_t *)"ECC_BrainPoolP320t1|SHA512", 32},  // 69
443 
444     {(uint8_t *)"ECC_BrainPoolP384r1", (uint8_t *)"ECC_BrainPoolP384r1|SHA1", (uint8_t *)"ECC_BrainPoolP384r1|SHA1", 32},      // 70
445     {(uint8_t *)"ECC_BrainPoolP384r1", (uint8_t *)"ECC_BrainPoolP384r1|SHA224", (uint8_t *)"ECC_BrainPoolP384r1|SHA224", 32},  // 71
446     {(uint8_t *)"ECC_BrainPoolP384r1", (uint8_t *)"ECC_BrainPoolP384r1|SHA256", (uint8_t *)"ECC_BrainPoolP384r1|SHA256", 32},  // 72
447     {(uint8_t *)"ECC_BrainPoolP384r1", (uint8_t *)"ECC_BrainPoolP384r1|SHA384", (uint8_t *)"ECC_BrainPoolP384r1|SHA384", 32},  // 73
448     {(uint8_t *)"ECC_BrainPoolP384r1", (uint8_t *)"ECC_BrainPoolP384r1|SHA512", (uint8_t *)"ECC_BrainPoolP384r1|SHA512", 32},  // 74
449 
450     {(uint8_t *)"ECC_BrainPoolP384t1", (uint8_t *)"ECC_BrainPoolP384t1|SHA1", (uint8_t *)"ECC_BrainPoolP384t1|SHA1", 32},      // 75
451     {(uint8_t *)"ECC_BrainPoolP384t1", (uint8_t *)"ECC_BrainPoolP384t1|SHA224", (uint8_t *)"ECC_BrainPoolP384t1|SHA224", 32},  // 76
452     {(uint8_t *)"ECC_BrainPoolP384t1", (uint8_t *)"ECC_BrainPoolP384t1|SHA256", (uint8_t *)"ECC_BrainPoolP384t1|SHA256", 32},  // 77
453     {(uint8_t *)"ECC_BrainPoolP384t1", (uint8_t *)"ECC_BrainPoolP384t1|SHA384", (uint8_t *)"ECC_BrainPoolP384t1|SHA384", 32},  // 78
454     {(uint8_t *)"ECC_BrainPoolP384t1", (uint8_t *)"ECC_BrainPoolP384t1|SHA512", (uint8_t *)"ECC_BrainPoolP384t1|SHA512", 32},  // 79
455 
456     {(uint8_t *)"ECC_BrainPoolP512r1", (uint8_t *)"ECC_BrainPoolP512r1|SHA1", (uint8_t *)"ECC_BrainPoolP512r1|SHA1", 32},      // 80
457     {(uint8_t *)"ECC_BrainPoolP512r1", (uint8_t *)"ECC_BrainPoolP512r1|SHA224", (uint8_t *)"ECC_BrainPoolP512r1|SHA224", 32},  // 81
458     {(uint8_t *)"ECC_BrainPoolP512r1", (uint8_t *)"ECC_BrainPoolP512r1|SHA256", (uint8_t *)"ECC_BrainPoolP512r1|SHA256", 32},  // 82
459     {(uint8_t *)"ECC_BrainPoolP512r1", (uint8_t *)"ECC_BrainPoolP512r1|SHA384", (uint8_t *)"ECC_BrainPoolP512r1|SHA384", 32},  // 83
460     {(uint8_t *)"ECC_BrainPoolP512r1", (uint8_t *)"ECC_BrainPoolP512r1|SHA512", (uint8_t *)"ECC_BrainPoolP512r1|SHA512", 32},  // 84
461 
462     {(uint8_t *)"ECC_BrainPoolP512t1", (uint8_t *)"ECC_BrainPoolP512t1|SHA1", (uint8_t *)"ECC_BrainPoolP512t1|SHA1", 32},      // 85
463     {(uint8_t *)"ECC_BrainPoolP512t1", (uint8_t *)"ECC_BrainPoolP512t1|SHA224", (uint8_t *)"ECC_BrainPoolP512t1|SHA224", 32},  // 86
464     {(uint8_t *)"ECC_BrainPoolP512t1", (uint8_t *)"ECC_BrainPoolP512t1|SHA256", (uint8_t *)"ECC_BrainPoolP512t1|SHA256", 32},  // 87
465     {(uint8_t *)"ECC_BrainPoolP512t1", (uint8_t *)"ECC_BrainPoolP512t1|SHA384", (uint8_t *)"ECC_BrainPoolP512t1|SHA384", 32},  // 88
466     {(uint8_t *)"ECC_BrainPoolP512t1", (uint8_t *)"ECC_BrainPoolP512t1|SHA512", (uint8_t *)"ECC_BrainPoolP512t1|SHA512", 32},  // 89
467 
468     {(uint8_t *)"SM2_256", (uint8_t *)"SM2_256|SM3", (uint8_t *)"SM2_256|SM3", 32},                                            // 90
469     {(uint8_t *)"SM2_256", (uint8_t *)"SM2|SM3", (uint8_t *)"SM2|SM3", 32},                                                    // 91
470 
471     {(uint8_t *)"Ed25519", (uint8_t *)"Ed25519", (uint8_t *)"Ed25519", 32},                                                    // 92
472 
473     {(uint8_t *)"ECC224", (uint8_t *)"ECC|SHA1", (uint8_t *)"ECC|SHA1", 32},                                                   // 93
474 };
475 
476 VerifySpec g_verifyDsaData[] = {
477     {(uint8_t *)"DSA1024", (uint8_t *)"DSA1024|NoHash", (uint8_t *)"DSA1024|NoHash", 32},  // 0
478     {(uint8_t *)"DSA1024", (uint8_t *)"DSA1024|SHA1", (uint8_t *)"DSA1024|SHA1", 32},      // 1
479     {(uint8_t *)"DSA1024", (uint8_t *)"DSA1024|SHA224", (uint8_t *)"DSA1024|SHA224", 32},  // 2
480     {(uint8_t *)"DSA1024", (uint8_t *)"DSA1024|SHA256", (uint8_t *)"DSA1024|SHA256", 32},  // 3
481     {(uint8_t *)"DSA1024", (uint8_t *)"DSA1024|SHA384", (uint8_t *)"DSA1024|SHA384", 32},  // 4
482     {(uint8_t *)"DSA1024", (uint8_t *)"DSA1024|SHA512", (uint8_t *)"DSA1024|SHA512", 32},  // 5
483 
484     {(uint8_t *)"DSA2048", (uint8_t *)"DSA2048|NoHash", (uint8_t *)"DSA2048|NoHash", 32},  // 6
485     {(uint8_t *)"DSA2048", (uint8_t *)"DSA2048|SHA1", (uint8_t *)"DSA2048|SHA1", 32},      // 7
486     {(uint8_t *)"DSA2048", (uint8_t *)"DSA2048|SHA224", (uint8_t *)"DSA2048|SHA224", 32},  // 8
487     {(uint8_t *)"DSA2048", (uint8_t *)"DSA2048|SHA256", (uint8_t *)"DSA2048|SHA256", 32},  // 9
488     {(uint8_t *)"DSA2048", (uint8_t *)"DSA2048|SHA384", (uint8_t *)"DSA2048|SHA384", 32},  // 10
489     {(uint8_t *)"DSA2048", (uint8_t *)"DSA2048|SHA512", (uint8_t *)"DSA2048|SHA512", 32},  // 11
490 
491     {(uint8_t *)"DSA3072", (uint8_t *)"DSA3072|NoHash", (uint8_t *)"DSA3072|NoHash", 32},  // 12
492     {(uint8_t *)"DSA3072", (uint8_t *)"DSA3072|SHA1", (uint8_t *)"DSA3072|SHA1", 32},      // 13
493     {(uint8_t *)"DSA3072", (uint8_t *)"DSA3072|SHA224", (uint8_t *)"DSA3072|SHA224", 32},  // 14
494     {(uint8_t *)"DSA3072", (uint8_t *)"DSA3072|SHA256", (uint8_t *)"DSA3072|SHA256", 32},  // 15
495     {(uint8_t *)"DSA3072", (uint8_t *)"DSA3072|SHA384", (uint8_t *)"DSA3072|SHA384", 32},  // 16
496     {(uint8_t *)"DSA3072", (uint8_t *)"DSA3072|SHA512", (uint8_t *)"DSA3072|SHA512", 32},  // 17
497 
498     {(uint8_t *)"DSA1024", (uint8_t *)"DSA|NoHash", (uint8_t *)"DSA|NoHash", 32},          // 18
499     {(uint8_t *)"DSA1024", (uint8_t *)"DSA|SHA1", (uint8_t *)"DSA|SHA1", 32},              // 19
500     {(uint8_t *)"DSA1024", (uint8_t *)"DSA|SHA224", (uint8_t *)"DSA|SHA224", 32},          // 20
501     {(uint8_t *)"DSA1024", (uint8_t *)"DSA|SHA256", (uint8_t *)"DSA|SHA256", 32},          // 21
502     {(uint8_t *)"DSA1024", (uint8_t *)"DSA|SHA384", (uint8_t *)"DSA|SHA384", 32},          // 22
503     {(uint8_t *)"DSA1024", (uint8_t *)"DSA|SHA512", (uint8_t *)"DSA|SHA512", 32},          // 23
504 };
505 
506 VerifySpec g_verifyRsaOnlySignData[] = {
507     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|PKCS1|NoHash|OnlySign", (uint8_t *)"RSA512|PKCS1|NoHash|Recover", 32},          // 0
508     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|NoPadding|NoHash|OnlySign", (uint8_t *)"RSA512|NoPadding|NoHash|Recover", 64},  // 1
509     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|PKCS1|MD5|OnlySign", (uint8_t *)"RSA512|PKCS1|MD5|Recover", 16},                // 2
510     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|PKCS1|SHA1|OnlySign", (uint8_t *)"RSA512|PKCS1|SHA1|Recover", 20},              // 3
511     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|PKCS1|SHA224|OnlySign", (uint8_t *)"RSA512|PKCS1|SHA224|Recover", 28},          // 4
512     {(uint8_t *)"RSA512", (uint8_t *)"RSA512|PKCS1|SHA256|OnlySign", (uint8_t *)"RSA512|PKCS1|SHA256|Recover", 32},          // 5
513 
514     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PKCS1|NoHash|OnlySign", (uint8_t *)"RSA768|PKCS1|NoHash|Recover", 32},          // 6
515     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|NoPadding|NoHash|OnlySign", (uint8_t *)"RSA768|NoPadding|NoHash|Recover", 96},  // 7
516     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PKCS1|MD5|OnlySign", (uint8_t *)"RSA768|PKCS1|MD5|Recover", 16},                // 8
517     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PKCS1|SHA1|OnlySign", (uint8_t *)"RSA768|PKCS1|SHA1|Recover", 20},              // 9
518     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PKCS1|SHA224|OnlySign", (uint8_t *)"RSA768|PKCS1|SHA224|Recover", 28},          // 10
519     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PKCS1|SHA256|OnlySign", (uint8_t *)"RSA768|PKCS1|SHA256|Recover", 32},          // 11
520     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PKCS1|SHA384|OnlySign", (uint8_t *)"RSA768|PKCS1|SHA384|Recover", 48},          // 12
521     {(uint8_t *)"RSA768", (uint8_t *)"RSA768|PKCS1|SHA512|OnlySign", (uint8_t *)"RSA768|PKCS1|SHA512|Recover", 64},          // 13
522 
523     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PKCS1|NoHash|OnlySign", (uint8_t *)"RSA1024|PKCS1|NoHash|Recover", 32},          // 14
524     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|NoPadding|NoHash|OnlySign", (uint8_t *)"RSA1024|NoPadding|NoHash|Recover", 128}, // 15
525     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PKCS1|MD5|OnlySign", (uint8_t *)"RSA1024|PKCS1|MD5|Recover", 16},                // 16
526     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PKCS1|SHA1|OnlySign", (uint8_t *)"RSA1024|PKCS1|SHA1|Recover", 20},              // 17
527     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PKCS1|SHA224|OnlySign", (uint8_t *)"RSA1024|PKCS1|SHA224|Recover", 28},          // 18
528     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PKCS1|SHA256|OnlySign", (uint8_t *)"RSA1024|PKCS1|SHA256|Recover", 32},          // 19
529     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PKCS1|SHA384|OnlySign", (uint8_t *)"RSA1024|PKCS1|SHA384|Recover", 48},          // 20
530     {(uint8_t *)"RSA1024", (uint8_t *)"RSA1024|PKCS1|SHA512|OnlySign", (uint8_t *)"RSA1024|PKCS1|SHA512|Recover", 64},          // 21
531 
532     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PKCS1|NoHash|OnlySign", (uint8_t *)"RSA2048|PKCS1|NoHash|Recover", 32},          // 22
533     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|NoPadding|NoHash|OnlySign", (uint8_t *)"RSA2048|NoPadding|NoHash|Recover", 256}, // 23
534     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PKCS1|MD5|OnlySign", (uint8_t *)"RSA2048|PKCS1|MD5|Recover", 16},                // 24
535     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PKCS1|SHA1|OnlySign", (uint8_t *)"RSA2048|PKCS1|SHA1|Recover", 20},              // 25
536     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PKCS1|SHA224|OnlySign", (uint8_t *)"RSA2048|PKCS1|SHA224|Recover", 28},          // 26
537     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PKCS1|SHA256|OnlySign", (uint8_t *)"RSA2048|PKCS1|SHA256|Recover", 32},          // 27
538     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PKCS1|SHA384|OnlySign", (uint8_t *)"RSA2048|PKCS1|SHA384|Recover", 48},          // 28
539     {(uint8_t *)"RSA2048", (uint8_t *)"RSA2048|PKCS1|SHA512|OnlySign", (uint8_t *)"RSA2048|PKCS1|SHA512|Recover", 64},          // 29
540 
541     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PKCS1|NoHash|OnlySign", (uint8_t *)"RSA3072|PKCS1|NoHash|Recover", 32},          // 30
542     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|NoPadding|NoHash|OnlySign", (uint8_t *)"RSA3072|NoPadding|NoHash|Recover", 384}, // 31
543     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PKCS1|MD5|OnlySign", (uint8_t *)"RSA3072|PKCS1|MD5|Recover", 16},                // 32
544     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PKCS1|SHA1|OnlySign", (uint8_t *)"RSA3072|PKCS1|SHA1|Recover", 20},              // 33
545     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PKCS1|SHA224|OnlySign", (uint8_t *)"RSA3072|PKCS1|SHA224|Recover", 28},          // 34
546     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PKCS1|SHA256|OnlySign", (uint8_t *)"RSA3072|PKCS1|SHA256|Recover", 32},          // 35
547     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PKCS1|SHA384|OnlySign", (uint8_t *)"RSA3072|PKCS1|SHA384|Recover", 48},          // 36
548     {(uint8_t *)"RSA3072", (uint8_t *)"RSA3072|PKCS1|SHA512|OnlySign", (uint8_t *)"RSA3072|PKCS1|SHA512|Recover", 64},          // 37
549 
550     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PKCS1|NoHash|OnlySign", (uint8_t *)"RSA4096|PKCS1|NoHash|Recover", 32},          // 38
551     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|NoPadding|NoHash|OnlySign", (uint8_t *)"RSA4096|NoPadding|NoHash|Recover", 512}, // 39
552     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PKCS1|MD5|OnlySign", (uint8_t *)"RSA4096|PKCS1|MD5|Recover", 16},                // 40
553     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PKCS1|SHA1|OnlySign", (uint8_t *)"RSA4096|PKCS1|SHA1|Recover", 20},              // 41
554     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PKCS1|SHA224|OnlySign", (uint8_t *)"RSA4096|PKCS1|SHA224|Recover", 28},          // 42
555     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PKCS1|SHA256|OnlySign", (uint8_t *)"RSA4096|PKCS1|SHA256|Recover", 32},          // 43
556     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PKCS1|SHA384|OnlySign", (uint8_t *)"RSA4096|PKCS1|SHA384|Recover", 48},          // 44
557     {(uint8_t *)"RSA4096", (uint8_t *)"RSA4096|PKCS1|SHA512|OnlySign", (uint8_t *)"RSA4096|PKCS1|SHA512|Recover", 64},          // 45
558 
559     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PKCS1|NoHash|OnlySign", (uint8_t *)"RSA8192|PKCS1|NoHash|Recover", 32},           // 46
560     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|NoPadding|NoHash|OnlySign", (uint8_t *)"RSA8192|NoPadding|NoHash|Recover", 1024}, // 47
561     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PKCS1|MD5|OnlySign", (uint8_t *)"RSA8192|PKCS1|MD5|Recover", 16},                 // 48
562     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PKCS1|SHA1|OnlySign", (uint8_t *)"RSA8192|PKCS1|SHA1|Recover", 20},               // 49
563     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PKCS1|SHA224|OnlySign", (uint8_t *)"RSA8192|PKCS1|SHA224|Recover", 28},           // 50
564     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PKCS1|SHA256|OnlySign", (uint8_t *)"RSA8192|PKCS1|SHA256|Recover", 32},           // 51
565     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PKCS1|SHA384|OnlySign", (uint8_t *)"RSA8192|PKCS1|SHA384|Recover", 48},           // 52
566     {(uint8_t *)"RSA8192", (uint8_t *)"RSA8192|PKCS1|SHA512|OnlySign", (uint8_t *)"RSA8192|PKCS1|SHA512|Recover", 64},           // 53
567 
568     {(uint8_t *)"RSA1024", (uint8_t *)"RSA|PKCS1|SHA1|OnlySign", (uint8_t *)"RSA|PKCS1|SHA1|Recover", 20},                       // 54
569 };
570 
571 INSTANTIATE_TEST_CASE_P(OHCryptoFrameworkVerifyNapiTest, VERIFY_PKCS1_TEST, ::testing::ValuesIn(g_verifyPkcs1Data));
572 INSTANTIATE_TEST_CASE_P(OHCryptoFrameworkVerifyNapiTest, VERIFY_PSS_TEST, ::testing::ValuesIn(g_verifyPssData));
573 INSTANTIATE_TEST_CASE_P(OHCryptoFrameworkVerifyNapiTest, VERIFY_ECC_TEST, ::testing::ValuesIn(g_verifyEccData));
574 INSTANTIATE_TEST_CASE_P(OHCryptoFrameworkVerifyNapiTest, VERIFY_DSA_TEST, ::testing::ValuesIn(g_verifyDsaData));
575 INSTANTIATE_TEST_CASE_P(OHCryptoFrameworkVerifyNapiTest, VERIFY_RSA_ONLY_SIGN_TEST, ::testing::ValuesIn(g_verifyRsaOnlySignData));
576 
577 /**
578 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_0100
579 * @tc.name OHCryptoFrameworkVerifyNapiTest/VERIFY_PKCS1_TEST.SUB_Security_CryptoFramework_NAPI_Verify_Test_0100/x
580 * @tc.desc algorithm is Verify
581 * @tc.size Medium
582 * @tc.type Func
583 * @tc.level Level0
584 */
585 HWTEST_P(VERIFY_PKCS1_TEST, SUB_Security_CryptoFramework_NAPI_Verify_Test_0100, TestSize.Level0)
586 {
587     VerifySpec verifyData = GetParam();
588     HcfSign *signObj = nullptr;
589     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
590     OH_CryptoKeyPair *keyPair = nullptr;
591     int32_t msgLen = verifyData.msgLen;
592     HcfRand *randomObj = nullptr;
593     HcfBlob msgBlob = {0};
594     HcfBlob signData = {.data = nullptr, .len = 0};
595     OH_CryptoVerify *verify = nullptr;
596     Crypto_DataBlob n = {.data = nullptr, .len = 0};
597 
598     HcfRandCreate(&randomObj);
599     ASSERT_TRUE(randomObj != nullptr);
600     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
601     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)verifyData.keyAlgName, &keyCtx), CRYPTO_SUCCESS);
602     // keypair
603     if (strcmp((const char *)verifyData.keyAlgName, "RSA8192") == 0) {
604         Crypto_DataBlob pubKeyBlob = { .data = g_rsa8192pubKey, .len = sizeof(g_rsa8192pubKey) };
605         Crypto_DataBlob priKeyBlob = { .data = g_rsa8192priKey, .len = sizeof(g_rsa8192priKey) };
606         ASSERT_EQ(OH_CryptoAsymKeyGenerator_Convert(keyCtx, CRYPTO_DER, &pubKeyBlob, &priKeyBlob, &keyPair), CRYPTO_SUCCESS);
607     } else if (strcmp((const char *)verifyData.keyAlgName, "RSA4096") == 0) {
608         Crypto_DataBlob pubKeyBlob = { .data = g_rsa4096pubKey, .len = sizeof(g_rsa4096pubKey) };
609         Crypto_DataBlob priKeyBlob = { .data = g_rsa4096priKey, .len = sizeof(g_rsa4096priKey) };
610         ASSERT_EQ(OH_CryptoAsymKeyGenerator_Convert(keyCtx, CRYPTO_DER, &pubKeyBlob, &priKeyBlob, &keyPair), CRYPTO_SUCCESS);
611     } else if (strcmp((const char *)verifyData.keyAlgName, "RSA3072") == 0) {
612         Crypto_DataBlob pubKeyBlob = { .data = g_rsa3072pubKey, .len = sizeof(g_rsa3072pubKey) };
613         Crypto_DataBlob priKeyBlob = { .data = g_rsa3072priKey, .len = sizeof(g_rsa3072priKey) };
614         ASSERT_EQ(OH_CryptoAsymKeyGenerator_Convert(keyCtx, CRYPTO_DER, &pubKeyBlob, &priKeyBlob, &keyPair), CRYPTO_SUCCESS);
615     } else {
616         ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
617     }
618     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
619     ASSERT_EQ(OH_CryptoPubKey_GetParam(pubKey, CRYPTO_RSA_N_DATABLOB, &n), CRYPTO_SUCCESS);
620     // sign
621     ASSERT_EQ(HcfSignCreate((const char *)verifyData.signAlgName, &signObj), HCF_SUCCESS);
622     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
623     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
624     // verify
625     ASSERT_EQ(OH_CryptoVerify_Create((const char *)verifyData.verifyAlgName, &verify), CRYPTO_SUCCESS);
626     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
627     ASSERT_TRUE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
628     const char * getVerifyAlgName = OH_CryptoVerify_GetAlgoName(verify);
629     ASSERT_TRUE(memcmp(getVerifyAlgName, (const char *)verifyData.verifyAlgName, strlen((const char *)verifyData.verifyAlgName)) == 0);
630 
631     HcfObjDestroy(signObj);
632     OH_CryptoVerify_Destroy(verify);
633     HcfObjDestroy(randomObj);
634     OH_Crypto_FreeDataBlob(&n);
635     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
636     OH_CryptoKeyPair_Destroy(keyPair);
637     HcfBlobDataClearAndFree(&msgBlob);
638     HcfBlobDataClearAndFree(&signData);
639 }
640 
641 /**
642 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_0200
643 * @tc.name OHCryptoFrameworkVerifyNapiTest/VERIFY_PSS_TEST.SUB_Security_CryptoFramework_NAPI_Verify_Test_0200/x
644 * @tc.desc algorithm is Verify
645 * @tc.size Medium
646 * @tc.type Func
647 * @tc.level Level0
648 */
649 HWTEST_P(VERIFY_PSS_TEST, SUB_Security_CryptoFramework_NAPI_Verify_Test_0200, TestSize.Level0)
650 {
651     VerifySpec verifyData = GetParam();
652     HcfSign *signObj = nullptr;
653     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
654     OH_CryptoKeyPair *keyPair = nullptr;
655     int32_t msgLen = verifyData.msgLen;
656     HcfRand *randomObj = nullptr;
657     HcfBlob msgBlob = {0};
658     HcfBlob signData = {.data = nullptr, .len = 0};
659     OH_CryptoVerify *verify = nullptr;
660 
661     HcfRandCreate(&randomObj);
662     ASSERT_TRUE(randomObj != nullptr);
663     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
664     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)verifyData.keyAlgName, &keyCtx), CRYPTO_SUCCESS);
665     if (strcmp((const char *)verifyData.keyAlgName, "RSA8192") == 0) {
666         Crypto_DataBlob pubKeyBlob = { .data = g_rsa8192pubKey, .len = sizeof(g_rsa8192pubKey) };
667         Crypto_DataBlob priKeyBlob = { .data = g_rsa8192priKey, .len = sizeof(g_rsa8192priKey) };
668         ASSERT_EQ(OH_CryptoAsymKeyGenerator_Convert(keyCtx, CRYPTO_DER, &pubKeyBlob, &priKeyBlob, &keyPair), CRYPTO_SUCCESS);
669     } else if (strcmp((const char *)verifyData.keyAlgName, "RSA4096") == 0) {
670         Crypto_DataBlob pubKeyBlob = { .data = g_rsa4096pubKey, .len = sizeof(g_rsa4096pubKey) };
671         Crypto_DataBlob priKeyBlob = { .data = g_rsa4096priKey, .len = sizeof(g_rsa4096priKey) };
672         ASSERT_EQ(OH_CryptoAsymKeyGenerator_Convert(keyCtx, CRYPTO_DER, &pubKeyBlob, &priKeyBlob, &keyPair), CRYPTO_SUCCESS);
673     } else if (strcmp((const char *)verifyData.keyAlgName, "RSA3072") == 0) {
674         Crypto_DataBlob pubKeyBlob = { .data = g_rsa3072pubKey, .len = sizeof(g_rsa3072pubKey) };
675         Crypto_DataBlob priKeyBlob = { .data = g_rsa3072priKey, .len = sizeof(g_rsa3072priKey) };
676         ASSERT_EQ(OH_CryptoAsymKeyGenerator_Convert(keyCtx, CRYPTO_DER, &pubKeyBlob, &priKeyBlob, &keyPair), CRYPTO_SUCCESS);
677     } else {
678         ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
679     }
680     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
681     ASSERT_EQ(HcfSignCreate((const char *)verifyData.signAlgName, &signObj), HCF_SUCCESS);
682     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
683     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
684     ASSERT_EQ(OH_CryptoVerify_Create((const char *)verifyData.verifyAlgName, &verify), CRYPTO_SUCCESS);
685     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
686     ASSERT_TRUE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
687     const char * getVerifyAlgName = OH_CryptoVerify_GetAlgoName(verify);
688     ASSERT_TRUE(memcmp(getVerifyAlgName, (const char *)verifyData.verifyAlgName, strlen((const char *)verifyData.verifyAlgName)) == 0);
689 
690     HcfObjDestroy(signObj);
691     OH_CryptoVerify_Destroy(verify);
692     HcfObjDestroy(randomObj);
693     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
694     OH_CryptoKeyPair_Destroy(keyPair);
695     HcfBlobDataClearAndFree(&msgBlob);
696     HcfBlobDataClearAndFree(&signData);
697 }
698 
699 /**
700 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_0301
701 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_0301
702 * @tc.desc algorithm is Verify
703 * @tc.size Medium
704 * @tc.type Func
705 * @tc.level Level0
706 */
707 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_0301, TestSize.Level0)
708 {
709     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
710     OH_CryptoKeyPair *keyPair = nullptr;
711     Crypto_DataBlob pubKeyBlob = { .data = g_rsa8192pubKey, .len = sizeof(g_rsa8192pubKey) };
712     Crypto_DataBlob priKeyBlob = { .data = g_rsa8192priKey, .len = sizeof(g_rsa8192priKey) };
713 
714     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA8192", &keyCtx), CRYPTO_SUCCESS);
715     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Convert(keyCtx, CRYPTO_DER, &pubKeyBlob, &priKeyBlob, &keyPair), CRYPTO_SUCCESS);
716 
717     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
718     OH_CryptoKeyPair_Destroy(keyPair);
719 }
720 
721 /**
722 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_0300
723 * @tc.name OHCryptoFrameworkVerifyNapiTest/VERIFY_ECC_TEST.SUB_Security_CryptoFramework_NAPI_Verify_Test_0300/x
724 * @tc.desc algorithm is Verify
725 * @tc.size Medium
726 * @tc.type Func
727 * @tc.level Level0
728 */
729 HWTEST_P(VERIFY_ECC_TEST, SUB_Security_CryptoFramework_NAPI_Verify_Test_0300, TestSize.Level0)
730 {
731     VerifySpec verifyData = GetParam();
732     HcfSign *signObj = nullptr;
733     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
734     OH_CryptoKeyPair *keyPair = nullptr;
735     int32_t msgLen = verifyData.msgLen;
736     HcfRand *randomObj = nullptr;
737     HcfBlob msgBlob = {0};
738     HcfBlob signData = {.data = nullptr, .len = 0};
739     OH_CryptoVerify *verify = nullptr;
740 
741     HcfRandCreate(&randomObj);
742     ASSERT_TRUE(randomObj != nullptr);
743     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
744     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)verifyData.keyAlgName, &keyCtx), CRYPTO_SUCCESS);
745     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
746     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
747     ASSERT_EQ(HcfSignCreate((const char *)verifyData.signAlgName, &signObj), HCF_SUCCESS);
748     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
749     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
750     ASSERT_EQ(OH_CryptoVerify_Create((const char *)verifyData.verifyAlgName, &verify), CRYPTO_SUCCESS);
751     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
752     ASSERT_TRUE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
753     const char * getVerifyAlgName = OH_CryptoVerify_GetAlgoName(verify);
754     ASSERT_TRUE(memcmp(getVerifyAlgName, (const char *)verifyData.verifyAlgName, strlen((const char *)verifyData.verifyAlgName)) == 0);
755 
756     HcfObjDestroy(signObj);
757     OH_CryptoVerify_Destroy(verify);
758     HcfObjDestroy(randomObj);
759     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
760     OH_CryptoKeyPair_Destroy(keyPair);
761     HcfBlobDataClearAndFree(&msgBlob);
762     HcfBlobDataClearAndFree(&signData);
763 }
764 
765 /**
766 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_0400
767 * @tc.name OHCryptoFrameworkVerifyNapiTest/VERIFY_DSA_TEST.SUB_Security_CryptoFramework_NAPI_Verify_Test_0400/x
768 * @tc.desc algorithm is Verify
769 * @tc.size Medium
770 * @tc.type Func
771 * @tc.level Level0
772 */
773 HWTEST_P(VERIFY_DSA_TEST, SUB_Security_CryptoFramework_NAPI_Verify_Test_0400, TestSize.Level0)
774 {
775     VerifySpec verifyData = GetParam();
776     HcfSign *signObj = nullptr;
777     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
778     OH_CryptoKeyPair *keyPair = nullptr;
779     int32_t msgLen = verifyData.msgLen;
780     HcfRand *randomObj = nullptr;
781     HcfBlob msgBlob = {0};
782     HcfBlob signData = {.data = nullptr, .len = 0};
783     OH_CryptoVerify *verify = nullptr;
784 
785     HcfRandCreate(&randomObj);
786     ASSERT_TRUE(randomObj != nullptr);
787     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
788     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)verifyData.keyAlgName, &keyCtx), CRYPTO_SUCCESS);
789     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
790     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
791     ASSERT_EQ(HcfSignCreate((const char *)verifyData.signAlgName, &signObj), HCF_SUCCESS);
792     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
793     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
794     ASSERT_EQ(OH_CryptoVerify_Create((const char *)verifyData.verifyAlgName, &verify), CRYPTO_SUCCESS);
795     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
796     ASSERT_TRUE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
797     const char * getVerifyAlgName = OH_CryptoVerify_GetAlgoName(verify);
798     ASSERT_TRUE(memcmp(getVerifyAlgName, (const char *)verifyData.verifyAlgName, strlen((const char *)verifyData.verifyAlgName)) == 0);
799 
800     HcfObjDestroy(signObj);
801     OH_CryptoVerify_Destroy(verify);
802     HcfObjDestroy(randomObj);
803     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
804     OH_CryptoKeyPair_Destroy(keyPair);
805     HcfBlobDataClearAndFree(&msgBlob);
806     HcfBlobDataClearAndFree(&signData);
807 }
808 
809 /**
810 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_0500
811 * @tc.name OHCryptoFrameworkVerifyNapiTest/VERIFY_RSA_ONLY_SIGN_TEST.SUB_Security_CryptoFramework_NAPI_Verify_Test_0500/x
812 * @tc.desc algorithm is Verify
813 * @tc.size Medium
814 * @tc.type Func
815 * @tc.level Level0
816 */
817 HWTEST_P(VERIFY_RSA_ONLY_SIGN_TEST, SUB_Security_CryptoFramework_NAPI_Verify_Test_0500, TestSize.Level0)
818 {
819     VerifySpec verifyData = GetParam();
820     HcfSign *signObj = nullptr;
821     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
822     OH_CryptoKeyPair *keyPair = nullptr;
823     int32_t msgLen = verifyData.msgLen;
824     HcfRand *randomObj = nullptr;
825     HcfBlob msgBlob = {0};
826     HcfBlob signData = {.data = nullptr, .len = 0};
827     OH_CryptoVerify *verify = nullptr;
828     Crypto_DataBlob rawSignData = {.data = nullptr, .len = 0};
829 
830     HcfRandCreate(&randomObj);
831     ASSERT_TRUE(randomObj != nullptr);
832     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
833     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)verifyData.keyAlgName, &keyCtx), CRYPTO_SUCCESS);
834     msgBlob.data[0] = 0;
835     if (strcmp((const char *)verifyData.keyAlgName, "RSA8192") == 0) {
836         Crypto_DataBlob pubKeyBlob = { .data = g_rsa8192pubKey, .len = sizeof(g_rsa8192pubKey) };
837         Crypto_DataBlob priKeyBlob = { .data = g_rsa8192priKey, .len = sizeof(g_rsa8192priKey) };
838         ASSERT_EQ(OH_CryptoAsymKeyGenerator_Convert(keyCtx, CRYPTO_DER, &pubKeyBlob, &priKeyBlob, &keyPair), CRYPTO_SUCCESS);
839     } else if (strcmp((const char *)verifyData.keyAlgName, "RSA4096") == 0) {
840         Crypto_DataBlob pubKeyBlob = { .data = g_rsa4096pubKey, .len = sizeof(g_rsa4096pubKey) };
841         Crypto_DataBlob priKeyBlob = { .data = g_rsa4096priKey, .len = sizeof(g_rsa4096priKey) };
842         ASSERT_EQ(OH_CryptoAsymKeyGenerator_Convert(keyCtx, CRYPTO_DER, &pubKeyBlob, &priKeyBlob, &keyPair), CRYPTO_SUCCESS);
843     } else if (strcmp((const char *)verifyData.keyAlgName, "RSA3072") == 0) {
844         Crypto_DataBlob pubKeyBlob = { .data = g_rsa3072pubKey, .len = sizeof(g_rsa3072pubKey) };
845         Crypto_DataBlob priKeyBlob = { .data = g_rsa3072priKey, .len = sizeof(g_rsa3072priKey) };
846         ASSERT_EQ(OH_CryptoAsymKeyGenerator_Convert(keyCtx, CRYPTO_DER, &pubKeyBlob, &priKeyBlob, &keyPair), CRYPTO_SUCCESS);
847     } else {
848         ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
849     }
850     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
851     ASSERT_EQ(HcfSignCreate((const char *)verifyData.signAlgName, &signObj), HCF_SUCCESS);
852     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
853     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
854     ASSERT_EQ(OH_CryptoVerify_Create((const char *)verifyData.verifyAlgName, &verify), CRYPTO_SUCCESS);
855     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
856     ASSERT_EQ(OH_CryptoVerify_Recover(verify, (Crypto_DataBlob *)&signData, &rawSignData), CRYPTO_SUCCESS);
857     const char * getVerifyAlgName = OH_CryptoVerify_GetAlgoName(verify);
858     ASSERT_TRUE(memcmp(getVerifyAlgName, (const char *)verifyData.verifyAlgName, strlen((const char *)verifyData.verifyAlgName)) == 0);
859     ASSERT_TRUE(memcmp(msgBlob.data, rawSignData.data, msgBlob.len) == 0);
860     ASSERT_EQ(msgBlob.len, rawSignData.len);
861 
862 
863     HcfObjDestroy(signObj);
864     HcfObjDestroy(verify);
865     HcfObjDestroy(randomObj);
866     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
867     OH_CryptoKeyPair_Destroy(keyPair);
868     HcfBlobDataClearAndFree(&msgBlob);
869     HcfBlobDataClearAndFree(&signData);
870     OH_Crypto_FreeDataBlob(&rawSignData);
871 }
872 
873 /**
874 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_0600
875 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_0600
876 * @tc.desc algorithm is Verify
877 * @tc.size Medium
878 * @tc.type Func
879 * @tc.level Level0
880 */
881 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_0600, TestSize.Level0)
882 {
883     OH_CryptoVerify *verify = nullptr;
884 
885     ASSERT_EQ(OH_CryptoVerify_Create(nullptr, &verify), CRYPTO_INVALID_PARAMS);
886     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA512|PKCS1|MD10", &verify), CRYPTO_INVALID_PARAMS);
887     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA512|PKCS1|MD5", nullptr), CRYPTO_INVALID_PARAMS);
888     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"SM9|SM3", &verify), CRYPTO_INVALID_PARAMS);
889     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA512|PKCS6|MD5", &verify), CRYPTO_INVALID_PARAMS);
890 }
891 
892 /**
893 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_0700
894 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_0700
895 * @tc.desc algorithm is Verify
896 * @tc.size Medium
897 * @tc.type Func
898 * @tc.level Level0
899 */
900 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_0700, TestSize.Level0)
901 {
902     OH_CryptoVerify *verify = nullptr;
903     OH_CryptoKeyPair *keyPair = nullptr;
904     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
905 
906     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA1024", &keyCtx), CRYPTO_SUCCESS);
907     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
908     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
909     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA1024|PKCS1|SHA1", &verify), CRYPTO_SUCCESS);
910     ASSERT_EQ(OH_CryptoVerify_Init(nullptr, pubKey), CRYPTO_INVALID_PARAMS);
911     ASSERT_EQ(OH_CryptoVerify_Init(verify, nullptr), CRYPTO_INVALID_PARAMS);
912 
913     OH_CryptoVerify_Destroy(verify);
914     OH_CryptoKeyPair_Destroy(keyPair);
915     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
916 }
917 
918 /**
919 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_0800
920 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_0800
921 * @tc.desc algorithm is Verify
922 * @tc.size Medium
923 * @tc.type Func
924 * @tc.level Level0
925 */
926 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_0800, TestSize.Level0)
927 {
928     OH_CryptoVerify *verify = nullptr;
929     OH_CryptoKeyPair *keyPair = nullptr;
930     uint8_t testData[] = "0123456789";
931     Crypto_DataBlob msgBlob = {
932         .data = reinterpret_cast<uint8_t *>(testData),
933         .len = sizeof(testData)
934     };
935     Crypto_DataBlob rawBlob = {
936         .data = reinterpret_cast<uint8_t *>(testData),
937         .len = sizeof(testData)
938     };
939     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
940 
941     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA768", &keyCtx), CRYPTO_SUCCESS);
942     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
943     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
944     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA768|PKCS1|SHA224", &verify), CRYPTO_SUCCESS);
945     ASSERT_EQ(OH_CryptoVerify_Update(verify, &msgBlob), CRYPTO_INVALID_PARAMS);
946     ASSERT_FALSE(OH_CryptoVerify_Final(verify, &msgBlob, &rawBlob));
947     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
948     ASSERT_EQ(OH_CryptoVerify_Update(nullptr, &msgBlob), CRYPTO_INVALID_PARAMS);
949     ASSERT_EQ(OH_CryptoVerify_Update(verify, nullptr), CRYPTO_INVALID_PARAMS);
950     ASSERT_FALSE(OH_CryptoVerify_Final(nullptr, &msgBlob, &rawBlob));
951     ASSERT_FALSE(OH_CryptoVerify_Final(verify, nullptr, &rawBlob));
952     ASSERT_FALSE(OH_CryptoVerify_Final(verify, &msgBlob, nullptr));
953     ASSERT_FALSE(OH_CryptoVerify_GetAlgoName(nullptr));
954 
955     OH_CryptoVerify_Destroy(verify);
956     OH_CryptoKeyPair_Destroy(keyPair);
957     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
958 }
959 
960 /**
961 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_0900
962 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_0900
963 * @tc.desc algorithm is Verify
964 * @tc.size Medium
965 * @tc.type Func
966 * @tc.level Level0
967 */
968 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_0900, TestSize.Level0)
969 {
970     HcfSign *signObj = nullptr;
971     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
972     OH_CryptoKeyPair *keyPair = nullptr;
973     int32_t msgLen = OH_CRYPTO_SHA1_DIGESTSIZE;
974     HcfRand *randomObj = nullptr;
975     HcfBlob msgBlob = {0};
976     HcfBlob signData = {.data = nullptr, .len = 0};
977     OH_CryptoVerify *verify = nullptr;
978     Crypto_DataBlob rawSignData = {.data = nullptr, .len = 0};
979 
980     HcfRandCreate(&randomObj);
981     ASSERT_TRUE(randomObj != nullptr);
982     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
983     msgBlob.data[0] = 0;
984     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA1024", &keyCtx), CRYPTO_SUCCESS);
985     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
986     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
987     ASSERT_EQ(HcfSignCreate((const char *)"RSA1024|PKCS1|SHA1|OnlySign", &signObj), HCF_SUCCESS);
988     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
989     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
990     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA1024|PKCS1|SHA1|Recover", &verify), CRYPTO_SUCCESS);
991     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
992     ASSERT_EQ(OH_CryptoVerify_Recover(nullptr, (Crypto_DataBlob *)&signData, &rawSignData), CRYPTO_INVALID_PARAMS);
993     ASSERT_EQ(OH_CryptoVerify_Recover(verify, nullptr, &rawSignData), CRYPTO_INVALID_PARAMS);
994     ASSERT_EQ(OH_CryptoVerify_Recover(verify, (Crypto_DataBlob *)&signData, nullptr), CRYPTO_INVALID_PARAMS);
995 
996     HcfObjDestroy(signObj);
997     OH_CryptoVerify_Destroy(verify);
998     HcfObjDestroy(randomObj);
999     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1000     OH_CryptoKeyPair_Destroy(keyPair);
1001     HcfBlobDataClearAndFree(&msgBlob);
1002     HcfBlobDataClearAndFree(&signData);
1003     OH_Crypto_FreeDataBlob(&rawSignData);
1004 }
1005 
1006 /**
1007 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_1000
1008 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_1000
1009 * @tc.desc algorithm is Verify
1010 * @tc.size Medium
1011 * @tc.type Func
1012 * @tc.level Level0
1013 */
1014 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_1000, TestSize.Level0)
1015 {
1016     OH_CryptoVerify *verify1 = nullptr;
1017     OH_CryptoVerify *verify2 = nullptr;
1018     uint8_t MdName[] = "MD5";
1019     Crypto_DataBlob inBlob = {
1020         .data = reinterpret_cast<uint8_t *>(MdName),
1021         .len = sizeof(MdName)
1022     };
1023     OH_CryptoKeyPair *keyPair = nullptr;
1024     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1025 
1026     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA768", &keyCtx), CRYPTO_SUCCESS);
1027     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1028     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1029     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA768|PSS|MD5|MGF1_SHA384", &verify1), CRYPTO_SUCCESS);
1030     ASSERT_EQ(OH_CryptoVerify_SetParam(nullptr, CRYPTO_PSS_MGF_NAME_STR, &inBlob), CRYPTO_INVALID_PARAMS);
1031     ASSERT_EQ(OH_CryptoVerify_SetParam(verify1, CRYPTO_PSS_MGF_NAME_STR, nullptr), CRYPTO_INVALID_PARAMS);
1032     ASSERT_EQ(OH_CryptoVerify_Init(verify1, pubKey), CRYPTO_SUCCESS);
1033     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA1024|PKCS1|SHA256", &verify2), CRYPTO_SUCCESS);
1034     ASSERT_EQ(OH_CryptoVerify_SetParam(verify2, CRYPTO_PSS_MD_NAME_STR, &inBlob), CRYPTO_NOT_SUPPORTED);
1035     ASSERT_EQ(OH_CryptoVerify_SetParam(verify2, CRYPTO_SM2_USER_ID_DATABLOB, &inBlob), CRYPTO_NOT_SUPPORTED);
1036     ASSERT_EQ(OH_CryptoVerify_SetParam(verify1, CRYPTO_PSS_MD_NAME_STR, &inBlob), CRYPTO_NOT_SUPPORTED);
1037     ASSERT_EQ(OH_CryptoVerify_GetParam(nullptr, CRYPTO_PSS_MGF_NAME_STR, &inBlob), CRYPTO_INVALID_PARAMS);
1038     ASSERT_EQ(OH_CryptoVerify_GetParam(verify1, CRYPTO_PSS_MGF_NAME_STR, nullptr), CRYPTO_INVALID_PARAMS);
1039 
1040     OH_CryptoVerify_Destroy(verify1);
1041     OH_CryptoVerify_Destroy(verify2);
1042     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1043     OH_CryptoKeyPair_Destroy(keyPair);
1044 }
1045 
1046 /**
1047 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_1100
1048 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_1100
1049 * @tc.desc algorithm is Verify
1050 * @tc.size Medium
1051 * @tc.type Func
1052 * @tc.level Level0
1053 */
1054 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_1100, TestSize.Level0)
1055 {
1056     HcfSign *signObj = nullptr;
1057     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1058     OH_CryptoKeyPair *keyPair = nullptr;
1059     HcfBlob signData = {.data = nullptr, .len = 0};
1060     OH_CryptoVerify *verify = nullptr;
1061     uint8_t testData[] = "0123456789";
1062     Crypto_DataBlob msgBlob = {
1063         .data = reinterpret_cast<uint8_t *>(testData),
1064         .len = sizeof(testData)
1065     };
1066 
1067     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA512", &keyCtx), CRYPTO_SUCCESS);
1068     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1069     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1070     ASSERT_EQ(HcfSignCreate((const char *)"RSA512|PKCS1|MD5", &signObj), HCF_SUCCESS);
1071     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1072     ASSERT_EQ(signObj->sign(signObj, (HcfBlob *)&msgBlob, &signData), HCF_SUCCESS);
1073     signData.data[signData.len-1]--;
1074     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA512|PKCS1|MD5", &verify), CRYPTO_SUCCESS);
1075     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1076     ASSERT_FALSE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
1077     signData.data[signData.len-1]++;
1078     msgBlob.data[msgBlob.len-1]--;
1079     ASSERT_FALSE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
1080 
1081     HcfObjDestroy(signObj);
1082     OH_CryptoVerify_Destroy(verify);
1083     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1084     OH_CryptoKeyPair_Destroy(keyPair);
1085     HcfBlobDataClearAndFree(&signData);
1086 }
1087 
1088 /**
1089 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_1200
1090 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_1200
1091 * @tc.desc algorithm is Verify
1092 * @tc.size Medium
1093 * @tc.type Func
1094 * @tc.level Level0
1095 */
1096 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_1200, TestSize.Level0)
1097 {
1098     HcfSign *signObj = nullptr;
1099     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1100     OH_CryptoKeyPair *keyPair = nullptr;
1101     HcfBlob signData = {.data = nullptr, .len = 0};
1102     OH_CryptoVerify *verify = nullptr;
1103     uint8_t testData[] = "0123456789";
1104     Crypto_DataBlob msgBlob = {
1105         .data = reinterpret_cast<uint8_t *>(testData),
1106         .len = sizeof(testData)
1107     };
1108 
1109     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA768", &keyCtx), CRYPTO_SUCCESS);
1110     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1111     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1112     ASSERT_EQ(HcfSignCreate((const char *)"RSA768|PKCS1|SHA1", &signObj), HCF_SUCCESS);
1113     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1114     ASSERT_EQ(signObj->sign(signObj, (HcfBlob *)&msgBlob, &signData), HCF_SUCCESS);
1115     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA1024|PKCS1|SHA1", &verify), CRYPTO_SUCCESS);
1116     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1117     ASSERT_TRUE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
1118 
1119     HcfObjDestroy(signObj);
1120     OH_CryptoVerify_Destroy(verify);
1121     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1122     OH_CryptoKeyPair_Destroy(keyPair);
1123     HcfBlobDataClearAndFree(&signData);
1124 }
1125 
1126 /**
1127 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_1300
1128 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_1300
1129 * @tc.desc algorithm is Verify
1130 * @tc.size Medium
1131 * @tc.type Func
1132 * @tc.level Level0
1133 */
1134 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_1300, TestSize.Level0)
1135 {
1136     HcfSign *signObj = nullptr;
1137     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1138     OH_CryptoKeyPair *keyPair = nullptr;
1139     HcfBlob signData = {.data = nullptr, .len = 0};
1140     OH_CryptoVerify *verify = nullptr;
1141     uint8_t testData[] = "0123456789";
1142     Crypto_DataBlob msgBlob = {
1143         .data = reinterpret_cast<uint8_t *>(testData),
1144         .len = sizeof(testData)
1145     };
1146 
1147     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA1024", &keyCtx), CRYPTO_SUCCESS);
1148     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1149     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1150     ASSERT_EQ(HcfSignCreate((const char *)"RSA1024|PKCS1|SHA224", &signObj), HCF_SUCCESS);
1151     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1152     ASSERT_EQ(signObj->sign(signObj, (HcfBlob *)&msgBlob, &signData), HCF_SUCCESS);
1153     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA1024|PKCS1|SHA256", &verify), CRYPTO_SUCCESS);
1154     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1155     ASSERT_FALSE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
1156 
1157     HcfObjDestroy(signObj);
1158     OH_CryptoVerify_Destroy(verify);
1159     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1160     OH_CryptoKeyPair_Destroy(keyPair);
1161     HcfBlobDataClearAndFree(&signData);
1162 }
1163 
1164 /**
1165 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_1400
1166 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_1400
1167 * @tc.desc algorithm is Verify
1168 * @tc.size Medium
1169 * @tc.type Func
1170 * @tc.level Level0
1171 */
1172 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_1400, TestSize.Level0)
1173 {
1174     HcfSign *signObj = nullptr;
1175     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1176     OH_CryptoKeyPair *keyPair = nullptr;
1177     HcfBlob signData = {.data = nullptr, .len = 0};
1178     OH_CryptoVerify *verify = nullptr;
1179     int32_t msgLen = OH_CRYPTO_MD5_DIGESTSIZE;
1180     HcfRand *randomObj = nullptr;
1181     HcfBlob msgBlob = {0};
1182 
1183     HcfRandCreate(&randomObj);
1184     ASSERT_TRUE(randomObj != nullptr);
1185     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1186     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA512", &keyCtx), CRYPTO_SUCCESS);
1187     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1188     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1189     ASSERT_EQ(HcfSignCreate((const char *)"RSA512|PKCS1|MD5|OnlySign", &signObj), HCF_SUCCESS);
1190     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1191     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
1192     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA512|PKCS1|MD5", &verify), CRYPTO_SUCCESS);
1193     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1194     ASSERT_FALSE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
1195 
1196     HcfObjDestroy(signObj);
1197     HcfObjDestroy(randomObj);
1198     OH_CryptoVerify_Destroy(verify);
1199     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1200     OH_CryptoKeyPair_Destroy(keyPair);
1201     HcfBlobDataClearAndFree(&signData);
1202     HcfBlobDataClearAndFree(&msgBlob);
1203 }
1204 
1205 /**
1206 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_1500
1207 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_1500
1208 * @tc.desc algorithm is Verify
1209 * @tc.size Medium
1210 * @tc.type Func
1211 * @tc.level Level0
1212 */
1213 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_1500, TestSize.Level0)
1214 {
1215     HcfSign *signObj = nullptr;
1216     OH_CryptoAsymKeyGenerator *keyCtx_A = nullptr;
1217     OH_CryptoKeyPair *keyPair_A = nullptr;
1218     OH_CryptoAsymKeyGenerator *keyCtx_B = nullptr;
1219     OH_CryptoKeyPair *keyPair_B = nullptr;
1220     HcfBlob signData = {.data = nullptr, .len = 0};
1221     OH_CryptoVerify *verify = nullptr;
1222     int32_t msgLen = 16;
1223     HcfRand *randomObj = nullptr;
1224     HcfBlob msgBlob = {0};
1225 
1226     HcfRandCreate(&randomObj);
1227     ASSERT_TRUE(randomObj != nullptr);
1228     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1229     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA768", &keyCtx_A), CRYPTO_SUCCESS);
1230     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx_A, &keyPair_A), CRYPTO_SUCCESS);
1231     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA768", &keyCtx_B), CRYPTO_SUCCESS);
1232     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx_B, &keyPair_B), CRYPTO_SUCCESS);
1233     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair_B);
1234     ASSERT_EQ(HcfSignCreate((const char *)"RSA768|PKCS1|SHA256", &signObj), HCF_SUCCESS);
1235     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair_A)->priKey), HCF_SUCCESS);
1236     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
1237     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA768|PKCS1|SHA256", &verify), CRYPTO_SUCCESS);
1238     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1239     ASSERT_FALSE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
1240 
1241     HcfObjDestroy(signObj);
1242     HcfObjDestroy(randomObj);
1243     OH_CryptoVerify_Destroy(verify);
1244     OH_CryptoAsymKeyGenerator_Destroy(keyCtx_A);
1245     OH_CryptoKeyPair_Destroy(keyPair_A);
1246     OH_CryptoAsymKeyGenerator_Destroy(keyCtx_B);
1247     OH_CryptoKeyPair_Destroy(keyPair_B);
1248     HcfBlobDataClearAndFree(&signData);
1249     HcfBlobDataClearAndFree(&msgBlob);
1250 }
1251 
1252 /**
1253 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_1600
1254 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_1600
1255 * @tc.desc algorithm is Verify
1256 * @tc.size Medium
1257 * @tc.type Func
1258 * @tc.level Level0
1259 */
1260 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_1600, TestSize.Level0)
1261 {
1262     HcfSign *signObj = nullptr;
1263     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1264     OH_CryptoKeyPair *keyPair = nullptr;
1265     HcfBlob signData = {.data = nullptr, .len = 0};
1266     OH_CryptoVerify *verify = nullptr;
1267     int32_t msgLen = OH_CRYPTO_MD5_DIGESTSIZE;
1268     HcfRand *randomObj = nullptr;
1269     HcfBlob msgBlob = {0};
1270     Crypto_DataBlob rawSignData = {.data = nullptr, .len = 0};
1271 
1272     HcfRandCreate(&randomObj);
1273     ASSERT_TRUE(randomObj != nullptr);
1274     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1275     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA512", &keyCtx), CRYPTO_SUCCESS);
1276     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1277     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1278     ASSERT_EQ(HcfSignCreate((const char *)"RSA512|PKCS1|MD5|OnlySign", &signObj), HCF_SUCCESS);
1279     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1280     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
1281     signData.data[signData.len-1]--;
1282     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA512|PKCS1|MD5|Recover", &verify), CRYPTO_SUCCESS);
1283     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1284     ASSERT_EQ(OH_CryptoVerify_Recover(verify, (Crypto_DataBlob *)&signData, &rawSignData), CRYPTO_OPERTION_ERROR);
1285 
1286     HcfObjDestroy(signObj);
1287     HcfObjDestroy(randomObj);
1288     OH_CryptoVerify_Destroy(verify);
1289     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1290     OH_CryptoKeyPair_Destroy(keyPair);
1291     HcfBlobDataClearAndFree(&signData);
1292     OH_Crypto_FreeDataBlob(&rawSignData);
1293     HcfBlobDataClearAndFree(&msgBlob);
1294 }
1295 
1296 /**
1297 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_1700
1298 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_1700
1299 * @tc.desc algorithm is Verify
1300 * @tc.size Medium
1301 * @tc.type Func
1302 * @tc.level Level0
1303 */
1304 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_1700, TestSize.Level0)
1305 {
1306     HcfSign *signObj = nullptr;
1307     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1308     OH_CryptoKeyPair *keyPair = nullptr;
1309     HcfBlob signData = {.data = nullptr, .len = 0};
1310     OH_CryptoVerify *verify = nullptr;
1311     int32_t msgLen = OH_CRYPTO_SHA1_DIGESTSIZE;
1312     HcfRand *randomObj = nullptr;
1313     HcfBlob msgBlob = {0};
1314     Crypto_DataBlob rawSignData = {.data = nullptr, .len = 0};
1315 
1316     HcfRandCreate(&randomObj);
1317     ASSERT_TRUE(randomObj != nullptr);
1318     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1319     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA768", &keyCtx), CRYPTO_SUCCESS);
1320     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1321     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1322     ASSERT_EQ(HcfSignCreate((const char *)"RSA768|PKCS1|SHA1|OnlySign", &signObj), HCF_SUCCESS);
1323     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1324     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
1325     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA1024|PKCS1|SHA1|Recover", &verify), CRYPTO_SUCCESS);
1326     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1327     ASSERT_EQ(OH_CryptoVerify_Recover(verify, (Crypto_DataBlob *)&signData, &rawSignData), CRYPTO_SUCCESS);
1328 
1329     HcfObjDestroy(signObj);
1330     HcfObjDestroy(randomObj);
1331     OH_CryptoVerify_Destroy(verify);
1332     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1333     OH_CryptoKeyPair_Destroy(keyPair);
1334     HcfBlobDataClearAndFree(&signData);
1335     OH_Crypto_FreeDataBlob(&rawSignData);
1336     HcfBlobDataClearAndFree(&msgBlob);
1337 }
1338 
1339 /**
1340 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_1800
1341 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_1800
1342 * @tc.desc algorithm is Verify
1343 * @tc.size Medium
1344 * @tc.type Func
1345 * @tc.level Level0
1346 */
1347 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_1800, TestSize.Level0)
1348 {
1349     HcfSign *signObj = nullptr;
1350     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1351     OH_CryptoKeyPair *keyPair = nullptr;
1352     HcfBlob signData = {.data = nullptr, .len = 0};
1353     OH_CryptoVerify *verify = nullptr;
1354     int32_t msgLen = OH_CRYPTO_SHA224_DIGESTSIZE;
1355     HcfRand *randomObj = nullptr;
1356     HcfBlob msgBlob = {0};
1357     Crypto_DataBlob rawSignData = {.data = nullptr, .len = 0};
1358 
1359     HcfRandCreate(&randomObj);
1360     ASSERT_TRUE(randomObj != nullptr);
1361     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1362     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA1024", &keyCtx), CRYPTO_SUCCESS);
1363     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1364     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1365     ASSERT_EQ(HcfSignCreate((const char *)"RSA1024|PKCS1|SHA224|OnlySign", &signObj), HCF_SUCCESS);
1366     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1367     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
1368     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA1024|PKCS1|SHA256|Recover", &verify), CRYPTO_SUCCESS);
1369     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1370     ASSERT_EQ(OH_CryptoVerify_Recover(verify, (Crypto_DataBlob *)&signData, &rawSignData), CRYPTO_OPERTION_ERROR);
1371 
1372     HcfObjDestroy(signObj);
1373     HcfObjDestroy(randomObj);
1374     OH_CryptoVerify_Destroy(verify);
1375     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1376     OH_CryptoKeyPair_Destroy(keyPair);
1377     HcfBlobDataClearAndFree(&signData);
1378     OH_Crypto_FreeDataBlob(&rawSignData);
1379     HcfBlobDataClearAndFree(&msgBlob);
1380 }
1381 
1382 /**
1383 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_1900
1384 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_1900
1385 * @tc.desc algorithm is Verify
1386 * @tc.size Medium
1387 * @tc.type Func
1388 * @tc.level Level0
1389 */
1390 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_1900, TestSize.Level0)
1391 {
1392     HcfSign *signObj = nullptr;
1393     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1394     OH_CryptoKeyPair *keyPair = nullptr;
1395     HcfBlob signData = {.data = nullptr, .len = 0};
1396     OH_CryptoVerify *verify = nullptr;
1397     int32_t msgLen = 64;
1398     HcfRand *randomObj = nullptr;
1399     HcfBlob msgBlob = {0};
1400     Crypto_DataBlob rawSignData = {.data = nullptr, .len = 0};
1401     OH_CryptoDigest *ctx = nullptr;
1402     Crypto_DataBlob out = {.data = nullptr, .len = 0};
1403 
1404     HcfRandCreate(&randomObj);
1405     ASSERT_TRUE(randomObj != nullptr);
1406     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1407     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA512", &keyCtx), CRYPTO_SUCCESS);
1408     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1409     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1410     ASSERT_EQ(HcfSignCreate((const char *)"RSA512|PKCS1|MD5", &signObj), HCF_SUCCESS);
1411     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1412     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
1413     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA512|PKCS1|MD5|Recover", &verify), CRYPTO_SUCCESS);
1414     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1415     ASSERT_EQ(OH_CryptoVerify_Recover(verify, (Crypto_DataBlob *)&signData, &rawSignData), CRYPTO_SUCCESS);
1416     ASSERT_EQ(rawSignData.len, OH_CRYPTO_MD5_DIGESTSIZE);
1417     ASSERT_EQ(OH_CryptoDigest_Create((const char *)"MD5", &ctx), CRYPTO_SUCCESS);
1418     ASSERT_EQ(OH_CryptoDigest_Update(ctx, (Crypto_DataBlob *)&msgBlob), CRYPTO_SUCCESS);
1419     ASSERT_EQ(OH_CryptoDigest_Final(ctx, &out), CRYPTO_SUCCESS);
1420     ASSERT_TRUE(memcmp(out.data, rawSignData.data, out.len) == 0);
1421 
1422     OH_DigestCrypto_Destroy(ctx);
1423     HcfObjDestroy(signObj);
1424     HcfObjDestroy(randomObj);
1425     OH_CryptoVerify_Destroy(verify);
1426     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1427     OH_CryptoKeyPair_Destroy(keyPair);
1428     HcfBlobDataClearAndFree(&signData);
1429     OH_Crypto_FreeDataBlob(&rawSignData);
1430     OH_Crypto_FreeDataBlob(&out);
1431     HcfBlobDataClearAndFree(&msgBlob);
1432 }
1433 
1434 /**
1435 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_2000
1436 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_2000
1437 * @tc.desc algorithm is Verify
1438 * @tc.size Medium
1439 * @tc.type Func
1440 * @tc.level Level0
1441 */
1442 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_2000, TestSize.Level0)
1443 {
1444     HcfSign *signObj = nullptr;
1445     OH_CryptoAsymKeyGenerator *keyCtx_A = nullptr;
1446     OH_CryptoKeyPair *keyPair_A = nullptr;
1447     OH_CryptoAsymKeyGenerator *keyCtx_B = nullptr;
1448     OH_CryptoKeyPair *keyPair_B = nullptr;
1449     HcfBlob signData = {.data = nullptr, .len = 0};
1450     OH_CryptoVerify *verify = nullptr;
1451     int32_t msgLen = 20;
1452     HcfRand *randomObj = nullptr;
1453     HcfBlob msgBlob = {0};
1454     Crypto_DataBlob rawSignData = {.data = nullptr, .len = 0};
1455 
1456     HcfRandCreate(&randomObj);
1457     ASSERT_TRUE(randomObj != nullptr);
1458     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1459     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA1024", &keyCtx_A), CRYPTO_SUCCESS);
1460     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx_A, &keyPair_A), CRYPTO_SUCCESS);
1461     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA1024", &keyCtx_B), CRYPTO_SUCCESS);
1462     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx_B, &keyPair_B), CRYPTO_SUCCESS);
1463     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair_B);
1464     ASSERT_EQ(HcfSignCreate((const char *)"RSA1024|PKCS1|SHA1|OnlySign", &signObj), HCF_SUCCESS);
1465     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair_A)->priKey), HCF_SUCCESS);
1466     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
1467     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA1024|PKCS1|SHA1|Recover", &verify), CRYPTO_SUCCESS);
1468     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1469     ASSERT_EQ(OH_CryptoVerify_Recover(verify, (Crypto_DataBlob *)&signData, &rawSignData), CRYPTO_OPERTION_ERROR);
1470 
1471     HcfObjDestroy(signObj);
1472     HcfObjDestroy(randomObj);
1473     OH_CryptoVerify_Destroy(verify);
1474     OH_CryptoAsymKeyGenerator_Destroy(keyCtx_A);
1475     OH_CryptoKeyPair_Destroy(keyPair_A);
1476     OH_CryptoAsymKeyGenerator_Destroy(keyCtx_B);
1477     OH_CryptoKeyPair_Destroy(keyPair_B);
1478     HcfBlobDataClearAndFree(&signData);
1479     OH_Crypto_FreeDataBlob(&rawSignData);
1480     HcfBlobDataClearAndFree(&msgBlob);
1481 }
1482 
1483 /**
1484 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_2100
1485 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_2100
1486 * @tc.desc algorithm is Verify
1487 * @tc.size Medium
1488 * @tc.type Func
1489 * @tc.level Level0
1490 */
1491 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_2100, TestSize.Level0)
1492 {
1493     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1494     OH_CryptoKeyPair *keyPair = nullptr;
1495     OH_CryptoVerify *verify = nullptr;
1496 
1497     uint8_t plainText[] = {
1498         0xe4, 0x2b, 0xcc, 0x08, 0x11, 0x79, 0x16, 0x1b, 0x35, 0x7f, 0xb3, 0xaf, 0x40, 0x3b, 0x3f, 0x7c
1499     };
1500     Crypto_DataBlob msgBlob = {
1501         .data = reinterpret_cast<uint8_t *>(plainText),
1502         .len = sizeof(plainText)
1503     };
1504     uint8_t pubKeyText[] = {
1505         0x30, 0x39, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a,
1506         0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, 0x22, 0x00, 0x03, 0x4d, 0xe4, 0xbb, 0x11, 0x10,
1507         0x1a, 0xd2, 0x05, 0x74, 0xf1, 0x0b, 0xb4, 0x75, 0x57, 0xf4, 0x3e, 0x55, 0x14, 0x17, 0x05, 0x4a,
1508         0xb2, 0xfb, 0x8c, 0x84, 0x64, 0x38, 0x02, 0xa0, 0x2a, 0xa6, 0xf0
1509     };
1510     Crypto_DataBlob keyBlob = {
1511         .data = reinterpret_cast<uint8_t *>(pubKeyText),
1512         .len = sizeof(pubKeyText)
1513     };
1514     uint8_t signText[] = {
1515         0x30, 0x44, 0x02, 0x20, 0x21, 0x89, 0x99, 0xb1, 0x56, 0x4e, 0x3a, 0x2c, 0x16, 0x08, 0xb5, 0x8a,
1516         0x06, 0x6f, 0x67, 0x47, 0x1b, 0x04, 0x18, 0x7d, 0x53, 0x2d, 0xba, 0x00, 0x38, 0xd9, 0xe3, 0xe7,
1517         0x8c, 0xcf, 0x76, 0x83, 0x02, 0x20, 0x13, 0x54, 0x84, 0x9d, 0x73, 0x40, 0xc3, 0x92, 0x66, 0xdc,
1518         0x3e, 0xc9, 0xf1, 0x4c, 0x33, 0x84, 0x2a, 0x76, 0xaf, 0xc6, 0x61, 0x84, 0x5c, 0xae, 0x4b, 0x0d,
1519         0x3c, 0xb0, 0xc8, 0x04, 0x89, 0x71
1520     };
1521     Crypto_DataBlob signBlob = {
1522         .data = reinterpret_cast<uint8_t *>(signText),
1523         .len = sizeof(signText)
1524     };
1525 
1526     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"ECC256", &keyCtx), CRYPTO_SUCCESS);
1527     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Convert(keyCtx, CRYPTO_DER, &keyBlob, nullptr, &keyPair), CRYPTO_SUCCESS);
1528     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1529     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"ECC|SHA256", &verify), CRYPTO_SUCCESS);
1530     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1531     ASSERT_TRUE(OH_CryptoVerify_Final(verify, &msgBlob, &signBlob));
1532 
1533     OH_CryptoVerify_Destroy(verify);
1534     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1535     OH_CryptoKeyPair_Destroy(keyPair);
1536 }
1537 
1538 /**
1539 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_2200
1540 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_2200
1541 * @tc.desc algorithm is Verify
1542 * @tc.size Medium
1543 * @tc.type Func
1544 * @tc.level Level0
1545 */
1546 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_2200, TestSize.Level0)
1547 {
1548     HcfSign *signObj = nullptr;
1549     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1550     OH_CryptoKeyPair *keyPair = nullptr;
1551     int32_t msgLen = 16;
1552     HcfRand *randomObj = nullptr;
1553     HcfBlob msgBlob = {0};
1554     HcfBlob signData = {.data = nullptr, .len = 0};
1555     OH_CryptoVerify *verify = nullptr;
1556     uint8_t mdText[] = "MD5";
1557     Crypto_DataBlob mdBlob = {
1558         .data = reinterpret_cast<uint8_t *>(mdText),
1559         .len = sizeof(mdText)
1560     };
1561     uint8_t MFGText[] = "MGF1";
1562     Crypto_DataBlob mfgBlob = {
1563         .data = reinterpret_cast<uint8_t *>(MFGText),
1564         .len = sizeof(MFGText)
1565     };
1566     uint8_t MFG1MdText[] = "SHA1";
1567     Crypto_DataBlob mgf1MddBlob = {
1568         .data = reinterpret_cast<uint8_t *>(MFG1MdText),
1569         .len = sizeof(MFG1MdText)
1570     };
1571     int32_t saltText1 = 32;
1572     Crypto_DataBlob saltBlob1 = {
1573         .data = (uint8_t *)&saltText1,
1574         .len = sizeof(int32_t)
1575     };
1576     int32_t saltText2 = -1;
1577     Crypto_DataBlob saltBlob2 = {
1578         .data = (uint8_t *)&saltText2,
1579         .len = sizeof(int32_t)
1580     };
1581 
1582     Crypto_DataBlob outMdBlob = {.data = nullptr, .len = 0};
1583     Crypto_DataBlob outMfgBlob = {.data = nullptr, .len = 0};
1584     Crypto_DataBlob outMfg1MdBlob = {.data = nullptr, .len = 0};
1585     Crypto_DataBlob outSaltBlob = {.data = nullptr, .len = 0};
1586     Crypto_DataBlob outTrailerFieldBlob = {.data = nullptr, .len = 0};
1587 
1588     HcfRandCreate(&randomObj);
1589     ASSERT_TRUE(randomObj != nullptr);
1590     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1591     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA512", &keyCtx), CRYPTO_SUCCESS);
1592     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1593     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1594     ASSERT_EQ(HcfSignCreate((const char *)"RSA512|PSS|MD5|MGF1_SHA1", &signObj), HCF_SUCCESS);
1595     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1596     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
1597     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA512|PSS|SHA1|MGF1_MD5", &verify), CRYPTO_SUCCESS);
1598     ASSERT_EQ(OH_CryptoVerify_SetParam(verify, CRYPTO_PSS_MD_NAME_STR, &mdBlob), CRYPTO_NOT_SUPPORTED);
1599     ASSERT_EQ(OH_CryptoVerify_SetParam(verify, CRYPTO_PSS_MGF_NAME_STR, &mfgBlob), CRYPTO_NOT_SUPPORTED);
1600     ASSERT_EQ(OH_CryptoVerify_SetParam(verify, CRYPTO_PSS_MGF1_NAME_STR, &mgf1MddBlob), CRYPTO_NOT_SUPPORTED);
1601     ASSERT_EQ(OH_CryptoVerify_SetParam(verify, CRYPTO_PSS_SALT_LEN_INT, &saltBlob1), CRYPTO_SUCCESS);
1602     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1603     ASSERT_EQ(OH_CryptoVerify_SetParam(verify, CRYPTO_PSS_SALT_LEN_INT, &saltBlob2), CRYPTO_SUCCESS);
1604     EXPECT_EQ(OH_CryptoVerify_GetParam(verify, CRYPTO_PSS_MD_NAME_STR, &outMdBlob), CRYPTO_SUCCESS);
1605     EXPECT_EQ(OH_CryptoVerify_GetParam(verify, CRYPTO_PSS_MGF_NAME_STR, &outMfgBlob), CRYPTO_SUCCESS);
1606     EXPECT_EQ(OH_CryptoVerify_GetParam(verify, CRYPTO_PSS_MGF1_NAME_STR, &outMfg1MdBlob), CRYPTO_SUCCESS);
1607     EXPECT_EQ(OH_CryptoVerify_GetParam(verify, CRYPTO_PSS_TRAILER_FIELD_INT, &outTrailerFieldBlob), CRYPTO_SUCCESS);
1608     EXPECT_EQ(OH_CryptoVerify_GetParam(verify, CRYPTO_PSS_SALT_LEN_INT, &outSaltBlob), CRYPTO_SUCCESS);
1609     ASSERT_FALSE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
1610 
1611     HcfObjDestroy(signObj);
1612     OH_CryptoVerify_Destroy(verify);
1613     HcfObjDestroy(randomObj);
1614     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1615     OH_CryptoKeyPair_Destroy(keyPair);
1616     HcfBlobDataClearAndFree(&msgBlob);
1617     HcfBlobDataClearAndFree(&signData);
1618     OH_Crypto_FreeDataBlob(&outMdBlob);
1619     OH_Crypto_FreeDataBlob(&outMfgBlob);
1620     OH_Crypto_FreeDataBlob(&outMfg1MdBlob);
1621     OH_Crypto_FreeDataBlob(&outTrailerFieldBlob);
1622     OH_Crypto_FreeDataBlob(&outSaltBlob);
1623 }
1624 
1625 /**
1626 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_2300
1627 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_2300
1628 * @tc.desc algorithm is Verify
1629 * @tc.size Medium
1630 * @tc.type Func
1631 * @tc.level Level0
1632 */
1633 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_2300, TestSize.Level0)
1634 {
1635     HcfSign *signObj = nullptr;
1636     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1637     OH_CryptoKeyPair *keyPair = nullptr;
1638     int32_t msgLen = 16;
1639     HcfRand *randomObj = nullptr;
1640     HcfBlob msgBlob = {0};
1641     HcfBlob signData = {.data = nullptr, .len = 0};
1642     OH_CryptoVerify *verify = nullptr;
1643 
1644     HcfRandCreate(&randomObj);
1645     ASSERT_TRUE(randomObj != nullptr);
1646     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1647     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA2048", &keyCtx), CRYPTO_SUCCESS);
1648     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1649     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1650     Crypto_DataBlob retBlob = { .data = nullptr, .len = 0 };
1651     ASSERT_EQ(OH_CryptoPubKey_Encode(pubKey, CRYPTO_PEM, "PKCS1", &retBlob), CRYPTO_SUCCESS);
1652     ASSERT_EQ(HcfSignCreate((const char *)"RSA2048|PSS|SHA256|MGF1_SHA256", &signObj), HCF_SUCCESS);
1653     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1654     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
1655     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA2048|PSS|SHA256|MGF1_SHA256", &verify), CRYPTO_SUCCESS);
1656     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1657     ASSERT_TRUE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
1658 
1659     HcfObjDestroy(signObj);
1660     OH_CryptoVerify_Destroy(verify);
1661     HcfObjDestroy(randomObj);
1662     OH_Crypto_FreeDataBlob(&retBlob);
1663     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1664     OH_CryptoKeyPair_Destroy(keyPair);
1665     HcfBlobDataClearAndFree(&msgBlob);
1666     HcfBlobDataClearAndFree(&signData);
1667 }
1668 
1669 /**
1670 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_2400
1671 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_2400
1672 * @tc.desc algorithm is Verify
1673 * @tc.size Medium
1674 * @tc.type Func
1675 * @tc.level Level0
1676 */
1677 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_2400, TestSize.Level0)
1678 {
1679     HcfSign *signObj = nullptr;
1680     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1681     OH_CryptoKeyPair *keyPair = nullptr;
1682     HcfBlob signData = {.data = nullptr, .len = 0};
1683     OH_CryptoVerify *verify = nullptr;
1684     int32_t msgLen = 32;
1685     HcfRand *randomObj = nullptr;
1686     HcfBlob msgBlob = {0};
1687     Crypto_DataBlob rawSignData = {.data = nullptr, .len = 0};
1688 
1689     HcfRandCreate(&randomObj);
1690     ASSERT_TRUE(randomObj != nullptr);
1691     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1692     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA1024", &keyCtx), CRYPTO_SUCCESS);
1693     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1694     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1695     Crypto_DataBlob retBlob = { .data = nullptr, .len = 0 };
1696     ASSERT_EQ(OH_CryptoPubKey_Encode(pubKey, CRYPTO_PEM, "PKCS1", &retBlob), CRYPTO_SUCCESS);
1697     ASSERT_EQ(HcfSignCreate((const char *)"RSA1024|PKCS1|SHA256|OnlySign", &signObj), HCF_SUCCESS);
1698     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1699     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
1700     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA1024|PKCS1|SHA256|Recover", &verify), CRYPTO_SUCCESS);
1701     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1702     ASSERT_EQ(OH_CryptoVerify_Recover(verify, (Crypto_DataBlob *)&signData, &rawSignData), CRYPTO_SUCCESS);
1703 
1704     OH_CryptoVerify_Destroy(verify);
1705     OH_Crypto_FreeDataBlob(&rawSignData);
1706     HcfObjDestroy(signObj);
1707     OH_Crypto_FreeDataBlob(&retBlob);
1708     OH_Crypto_FreeDataBlob((Crypto_DataBlob *)&msgBlob);
1709     HcfObjDestroy(randomObj);
1710     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1711     OH_CryptoKeyPair_Destroy(keyPair);
1712     HcfBlobDataClearAndFree(&signData);
1713 }
1714 
1715 /**
1716 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_2500
1717 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_2500
1718 * @tc.desc algorithm is Verify
1719 * @tc.size Medium
1720 * @tc.type Func
1721 * @tc.level Level0
1722 */
1723 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_2500, TestSize.Level0)
1724 {
1725     HcfSign *signObj = nullptr;
1726     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1727     OH_CryptoKeyPair *keyPair = nullptr;
1728     int32_t msgLen = 32;
1729     HcfRand *randomObj = nullptr;
1730     HcfBlob msgBlob = {0};
1731     HcfBlob signData = {.data = nullptr, .len = 0};
1732     OH_CryptoVerify *verify = nullptr;
1733 
1734     HcfRandCreate(&randomObj);
1735     ASSERT_TRUE(randomObj != nullptr);
1736     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1737     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"SM2_256", &keyCtx), CRYPTO_SUCCESS);
1738     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1739     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1740     Crypto_DataBlob retBlob = { .data = nullptr, .len = 0 };
1741     ASSERT_EQ(OH_CryptoPubKey_Encode(pubKey, CRYPTO_DER, nullptr, &retBlob), CRYPTO_SUCCESS);
1742     ASSERT_EQ(HcfSignCreate((const char *)"SM2_256|SM3", &signObj), HCF_SUCCESS);
1743     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1744     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
1745     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"SM2_256|SM3", &verify), CRYPTO_SUCCESS);
1746     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1747     ASSERT_TRUE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
1748 
1749     HcfObjDestroy(signObj);
1750     OH_CryptoVerify_Destroy(verify);
1751     HcfObjDestroy(randomObj);
1752     OH_Crypto_FreeDataBlob(&retBlob);
1753     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1754     OH_CryptoKeyPair_Destroy(keyPair);
1755     HcfBlobDataClearAndFree(&msgBlob);
1756     HcfBlobDataClearAndFree(&signData);
1757 }
1758 
1759 /**
1760 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_2600
1761 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_2600
1762 * @tc.desc algorithm is Verify
1763 * @tc.size Medium
1764 * @tc.type Func
1765 * @tc.level Level0
1766 */
1767 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_2600, TestSize.Level0)
1768 {
1769     HcfSign *signObj = nullptr;
1770     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1771     OH_CryptoKeyPair *keyPair = nullptr;
1772     int32_t msgLen = 64;
1773     HcfRand *randomObj = nullptr;
1774     HcfBlob msgBlob = {0};
1775     HcfBlob signData = {.data = nullptr, .len = 0};
1776     OH_CryptoVerify *verify = nullptr;
1777     int blockSize = 20;
1778     int cnt_s = 64 / blockSize;
1779     int rem_s = 64 % blockSize;
1780 
1781     HcfRandCreate(&randomObj);
1782     ASSERT_TRUE(randomObj != nullptr);
1783     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1784     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA1024", &keyCtx), CRYPTO_SUCCESS);
1785     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1786     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1787     Crypto_DataBlob retBlob = { .data = nullptr, .len = 0 };
1788     ASSERT_EQ(OH_CryptoPubKey_Encode(pubKey, CRYPTO_PEM, "PKCS1", &retBlob), CRYPTO_SUCCESS);
1789     ASSERT_EQ(HcfSignCreate((const char *)"RSA1024|PKCS1|SHA256", &signObj), HCF_SUCCESS);
1790     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1791 
1792     for (int i = 0; i < cnt_s; i++) {
1793         msgBlob.len = blockSize;
1794         ASSERT_EQ(signObj->update(signObj, &msgBlob), HCF_SUCCESS);
1795         msgBlob.data += blockSize;
1796     }
1797     if (rem_s > 0) {
1798         msgBlob.len = rem_s;
1799         ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
1800     }
1801     msgBlob.data -=  64 - rem_s;
1802     msgBlob.len = 64;
1803     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA1024|PKCS1|SHA256", &verify), CRYPTO_SUCCESS);
1804     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1805     for (int i = 0; i < cnt_s; i++) {
1806         msgBlob.len = blockSize;
1807         ASSERT_EQ(OH_CryptoVerify_Update(verify, (Crypto_DataBlob *)&msgBlob), CRYPTO_SUCCESS);
1808         msgBlob.data += blockSize;
1809     }
1810     if (rem_s > 0) {
1811         msgBlob.len = rem_s;
1812        ASSERT_TRUE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
1813     }
1814 
1815     msgBlob.data -=  64 - rem_s;
1816     msgBlob.len = 64;
1817     HcfObjDestroy(signObj);
1818     OH_CryptoVerify_Destroy(verify);
1819     HcfObjDestroy(randomObj);
1820     OH_Crypto_FreeDataBlob(&retBlob);
1821     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1822     OH_CryptoKeyPair_Destroy(keyPair);
1823     HcfBlobDataClearAndFree(&msgBlob);
1824     HcfBlobDataClearAndFree(&signData);
1825 }
1826 
1827 } // namespace Unittest::CryptoFrameworkVerifyNapiTest