• 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_rsa8192_pubKey, .len = sizeof(g_rsa8192_pubKey) };
605         Crypto_DataBlob priKeyBlob = { .data = g_rsa8192_priKey, .len = sizeof(g_rsa8192_priKey) };
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_rsa4096_pubKey, .len = sizeof(g_rsa4096_pubKey) };
609         Crypto_DataBlob priKeyBlob = { .data = g_rsa4096_priKey, .len = sizeof(g_rsa4096_priKey) };
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_rsa3072_pubKey, .len = sizeof(g_rsa3072_pubKey) };
613         Crypto_DataBlob priKeyBlob = { .data = g_rsa3072_priKey, .len = sizeof(g_rsa3072_priKey) };
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_CryptoAsymKeyGenerator_Destroy(keyCtx);
635     OH_CryptoKeyPair_Destroy(keyPair);
636     HcfBlobDataClearAndFree(&msgBlob);
637     HcfBlobDataClearAndFree(&signData);
638 }
639 
640 /**
641 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_0200
642 * @tc.name OHCryptoFrameworkVerifyNapiTest/VERIFY_PSS_TEST.SUB_Security_CryptoFramework_NAPI_Verify_Test_0200/x
643 * @tc.desc algorithm is Verify
644 * @tc.size Medium
645 * @tc.type Func
646 * @tc.level Level0
647 */
648 HWTEST_P(VERIFY_PSS_TEST, SUB_Security_CryptoFramework_NAPI_Verify_Test_0200, TestSize.Level0)
649 {
650     VerifySpec verifyData = GetParam();
651     HcfSign *signObj = nullptr;
652     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
653     OH_CryptoKeyPair *keyPair = nullptr;
654     int32_t msgLen = verifyData.msgLen;
655     HcfRand *randomObj = nullptr;
656     HcfBlob msgBlob = {0};
657     HcfBlob signData = {.data = nullptr, .len = 0};
658     OH_CryptoVerify *verify = nullptr;
659 
660     HcfRandCreate(&randomObj);
661     ASSERT_TRUE(randomObj != nullptr);
662     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
663     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)verifyData.keyAlgName, &keyCtx), CRYPTO_SUCCESS);
664     if (strcmp((const char *)verifyData.keyAlgName, "RSA8192") == 0) {
665         Crypto_DataBlob pubKeyBlob = { .data = g_rsa8192_pubKey, .len = sizeof(g_rsa8192_pubKey) };
666         Crypto_DataBlob priKeyBlob = { .data = g_rsa8192_priKey, .len = sizeof(g_rsa8192_priKey) };
667         ASSERT_EQ(OH_CryptoAsymKeyGenerator_Convert(keyCtx, CRYPTO_DER, &pubKeyBlob, &priKeyBlob, &keyPair), CRYPTO_SUCCESS);
668     } else if (strcmp((const char *)verifyData.keyAlgName, "RSA4096") == 0) {
669         Crypto_DataBlob pubKeyBlob = { .data = g_rsa4096_pubKey, .len = sizeof(g_rsa4096_pubKey) };
670         Crypto_DataBlob priKeyBlob = { .data = g_rsa4096_priKey, .len = sizeof(g_rsa4096_priKey) };
671         ASSERT_EQ(OH_CryptoAsymKeyGenerator_Convert(keyCtx, CRYPTO_DER, &pubKeyBlob, &priKeyBlob, &keyPair), CRYPTO_SUCCESS);
672     } else if (strcmp((const char *)verifyData.keyAlgName, "RSA3072") == 0) {
673         Crypto_DataBlob pubKeyBlob = { .data = g_rsa3072_pubKey, .len = sizeof(g_rsa3072_pubKey) };
674         Crypto_DataBlob priKeyBlob = { .data = g_rsa3072_priKey, .len = sizeof(g_rsa3072_priKey) };
675         ASSERT_EQ(OH_CryptoAsymKeyGenerator_Convert(keyCtx, CRYPTO_DER, &pubKeyBlob, &priKeyBlob, &keyPair), CRYPTO_SUCCESS);
676     } else {
677         ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
678     }
679     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
680     ASSERT_EQ(HcfSignCreate((const char *)verifyData.signAlgName, &signObj), HCF_SUCCESS);
681     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
682     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
683     ASSERT_EQ(OH_CryptoVerify_Create((const char *)verifyData.verifyAlgName, &verify), CRYPTO_SUCCESS);
684     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
685     ASSERT_TRUE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
686     const char * getVerifyAlgName = OH_CryptoVerify_GetAlgoName(verify);
687     ASSERT_TRUE(memcmp(getVerifyAlgName, (const char *)verifyData.verifyAlgName, strlen((const char *)verifyData.verifyAlgName)) == 0);
688 
689     HcfObjDestroy(signObj);
690     OH_CryptoVerify_Destroy(verify);
691     HcfObjDestroy(randomObj);
692     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
693     OH_CryptoKeyPair_Destroy(keyPair);
694     HcfBlobDataClearAndFree(&msgBlob);
695     HcfBlobDataClearAndFree(&signData);
696 }
697 
698 /**
699 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_0301
700 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_0301
701 * @tc.desc algorithm is Verify
702 * @tc.size Medium
703 * @tc.type Func
704 * @tc.level Level0
705 */
706 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_0301, TestSize.Level0)
707 {
708     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
709     OH_CryptoKeyPair *keyPair = nullptr;
710     Crypto_DataBlob pubKeyBlob = { .data = g_rsa8192_pubKey, .len = sizeof(g_rsa8192_pubKey) };
711     Crypto_DataBlob priKeyBlob = { .data = g_rsa8192_priKey, .len = sizeof(g_rsa8192_priKey) };
712 
713     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA8192", &keyCtx), CRYPTO_SUCCESS);
714     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Convert(keyCtx, CRYPTO_DER, &pubKeyBlob, &priKeyBlob, &keyPair), CRYPTO_SUCCESS);
715 
716     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
717     OH_CryptoKeyPair_Destroy(keyPair);
718 }
719 
720 /**
721 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_0300
722 * @tc.name OHCryptoFrameworkVerifyNapiTest/VERIFY_ECC_TEST.SUB_Security_CryptoFramework_NAPI_Verify_Test_0300/x
723 * @tc.desc algorithm is Verify
724 * @tc.size Medium
725 * @tc.type Func
726 * @tc.level Level0
727 */
728 HWTEST_P(VERIFY_ECC_TEST, SUB_Security_CryptoFramework_NAPI_Verify_Test_0300, TestSize.Level0)
729 {
730     VerifySpec verifyData = GetParam();
731     HcfSign *signObj = nullptr;
732     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
733     OH_CryptoKeyPair *keyPair = nullptr;
734     int32_t msgLen = verifyData.msgLen;
735     HcfRand *randomObj = nullptr;
736     HcfBlob msgBlob = {0};
737     HcfBlob signData = {.data = nullptr, .len = 0};
738     OH_CryptoVerify *verify = nullptr;
739 
740     HcfRandCreate(&randomObj);
741     ASSERT_TRUE(randomObj != nullptr);
742     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
743     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)verifyData.keyAlgName, &keyCtx), CRYPTO_SUCCESS);
744     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
745     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
746     ASSERT_EQ(HcfSignCreate((const char *)verifyData.signAlgName, &signObj), HCF_SUCCESS);
747     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
748     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
749     ASSERT_EQ(OH_CryptoVerify_Create((const char *)verifyData.verifyAlgName, &verify), CRYPTO_SUCCESS);
750     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
751     ASSERT_TRUE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
752     const char * getVerifyAlgName = OH_CryptoVerify_GetAlgoName(verify);
753     ASSERT_TRUE(memcmp(getVerifyAlgName, (const char *)verifyData.verifyAlgName, strlen((const char *)verifyData.verifyAlgName)) == 0);
754 
755     HcfObjDestroy(signObj);
756     OH_CryptoVerify_Destroy(verify);
757     HcfObjDestroy(randomObj);
758     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
759     OH_CryptoKeyPair_Destroy(keyPair);
760     HcfBlobDataClearAndFree(&msgBlob);
761     HcfBlobDataClearAndFree(&signData);
762 }
763 
764 /**
765 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_0400
766 * @tc.name OHCryptoFrameworkVerifyNapiTest/VERIFY_DSA_TEST.SUB_Security_CryptoFramework_NAPI_Verify_Test_0400/x
767 * @tc.desc algorithm is Verify
768 * @tc.size Medium
769 * @tc.type Func
770 * @tc.level Level0
771 */
772 HWTEST_P(VERIFY_DSA_TEST, SUB_Security_CryptoFramework_NAPI_Verify_Test_0400, TestSize.Level0)
773 {
774     VerifySpec verifyData = GetParam();
775     HcfSign *signObj = nullptr;
776     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
777     OH_CryptoKeyPair *keyPair = nullptr;
778     int32_t msgLen = verifyData.msgLen;
779     HcfRand *randomObj = nullptr;
780     HcfBlob msgBlob = {0};
781     HcfBlob signData = {.data = nullptr, .len = 0};
782     OH_CryptoVerify *verify = nullptr;
783 
784     HcfRandCreate(&randomObj);
785     ASSERT_TRUE(randomObj != nullptr);
786     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
787     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)verifyData.keyAlgName, &keyCtx), CRYPTO_SUCCESS);
788     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
789     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
790     ASSERT_EQ(HcfSignCreate((const char *)verifyData.signAlgName, &signObj), HCF_SUCCESS);
791     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
792     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
793     ASSERT_EQ(OH_CryptoVerify_Create((const char *)verifyData.verifyAlgName, &verify), CRYPTO_SUCCESS);
794     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
795     ASSERT_TRUE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
796     const char * getVerifyAlgName = OH_CryptoVerify_GetAlgoName(verify);
797     ASSERT_TRUE(memcmp(getVerifyAlgName, (const char *)verifyData.verifyAlgName, strlen((const char *)verifyData.verifyAlgName)) == 0);
798 
799     HcfObjDestroy(signObj);
800     OH_CryptoVerify_Destroy(verify);
801     HcfObjDestroy(randomObj);
802     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
803     OH_CryptoKeyPair_Destroy(keyPair);
804     HcfBlobDataClearAndFree(&msgBlob);
805     HcfBlobDataClearAndFree(&signData);
806 }
807 
808 /**
809 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_0500
810 * @tc.name OHCryptoFrameworkVerifyNapiTest/VERIFY_RSA_ONLY_SIGN_TEST.SUB_Security_CryptoFramework_NAPI_Verify_Test_0500/x
811 * @tc.desc algorithm is Verify
812 * @tc.size Medium
813 * @tc.type Func
814 * @tc.level Level0
815 */
816 HWTEST_P(VERIFY_RSA_ONLY_SIGN_TEST, SUB_Security_CryptoFramework_NAPI_Verify_Test_0500, TestSize.Level0)
817 {
818     VerifySpec verifyData = GetParam();
819     HcfSign *signObj = nullptr;
820     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
821     OH_CryptoKeyPair *keyPair = nullptr;
822     int32_t msgLen = verifyData.msgLen;
823     HcfRand *randomObj = nullptr;
824     HcfBlob msgBlob = {0};
825     HcfBlob signData = {.data = nullptr, .len = 0};
826     OH_CryptoVerify *verify = nullptr;
827     Crypto_DataBlob rawSignData = {.data = nullptr, .len = 0};
828 
829     HcfRandCreate(&randomObj);
830     ASSERT_TRUE(randomObj != nullptr);
831     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
832     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)verifyData.keyAlgName, &keyCtx), CRYPTO_SUCCESS);
833     msgBlob.data[0] = 0;
834     if (strcmp((const char *)verifyData.keyAlgName, "RSA8192") == 0) {
835         Crypto_DataBlob pubKeyBlob = { .data = g_rsa8192_pubKey, .len = sizeof(g_rsa8192_pubKey) };
836         Crypto_DataBlob priKeyBlob = { .data = g_rsa8192_priKey, .len = sizeof(g_rsa8192_priKey) };
837         ASSERT_EQ(OH_CryptoAsymKeyGenerator_Convert(keyCtx, CRYPTO_DER, &pubKeyBlob, &priKeyBlob, &keyPair), CRYPTO_SUCCESS);
838     } else if (strcmp((const char *)verifyData.keyAlgName, "RSA4096") == 0) {
839         Crypto_DataBlob pubKeyBlob = { .data = g_rsa4096_pubKey, .len = sizeof(g_rsa4096_pubKey) };
840         Crypto_DataBlob priKeyBlob = { .data = g_rsa4096_priKey, .len = sizeof(g_rsa4096_priKey) };
841         ASSERT_EQ(OH_CryptoAsymKeyGenerator_Convert(keyCtx, CRYPTO_DER, &pubKeyBlob, &priKeyBlob, &keyPair), CRYPTO_SUCCESS);
842     } else if (strcmp((const char *)verifyData.keyAlgName, "RSA3072") == 0) {
843         Crypto_DataBlob pubKeyBlob = { .data = g_rsa3072_pubKey, .len = sizeof(g_rsa3072_pubKey) };
844         Crypto_DataBlob priKeyBlob = { .data = g_rsa3072_priKey, .len = sizeof(g_rsa3072_priKey) };
845         ASSERT_EQ(OH_CryptoAsymKeyGenerator_Convert(keyCtx, CRYPTO_DER, &pubKeyBlob, &priKeyBlob, &keyPair), CRYPTO_SUCCESS);
846     } else {
847         ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
848     }
849     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
850     ASSERT_EQ(HcfSignCreate((const char *)verifyData.signAlgName, &signObj), HCF_SUCCESS);
851     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
852     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
853     ASSERT_EQ(OH_CryptoVerify_Create((const char *)verifyData.verifyAlgName, &verify), CRYPTO_SUCCESS);
854     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
855     ASSERT_EQ(OH_CryptoVerify_Recover(verify, (Crypto_DataBlob *)&signData, &rawSignData), CRYPTO_SUCCESS);
856     const char * getVerifyAlgName = OH_CryptoVerify_GetAlgoName(verify);
857     ASSERT_TRUE(memcmp(getVerifyAlgName, (const char *)verifyData.verifyAlgName, strlen((const char *)verifyData.verifyAlgName)) == 0);
858     ASSERT_TRUE(memcmp(msgBlob.data, rawSignData.data, msgBlob.len) == 0);
859     ASSERT_EQ(msgBlob.len, rawSignData.len);
860 
861 
862     HcfObjDestroy(signObj);
863     HcfObjDestroy(verify);
864     HcfObjDestroy(randomObj);
865     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
866     OH_CryptoKeyPair_Destroy(keyPair);
867     HcfBlobDataClearAndFree(&msgBlob);
868     HcfBlobDataClearAndFree(&signData);
869     OH_Crypto_FreeDataBlob(&rawSignData);
870 }
871 
872 /**
873 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_0600
874 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_0600
875 * @tc.desc algorithm is Verify
876 * @tc.size Medium
877 * @tc.type Func
878 * @tc.level Level0
879 */
880 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_0600, TestSize.Level0)
881 {
882     OH_CryptoVerify *verify = nullptr;
883 
884     ASSERT_EQ(OH_CryptoVerify_Create(nullptr, &verify), CRYPTO_INVALID_PARAMS);
885     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA512|PKCS1|MD10", &verify), CRYPTO_INVALID_PARAMS);
886     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA512|PKCS1|MD5", nullptr), CRYPTO_INVALID_PARAMS);
887     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"SM9|SM3", &verify), CRYPTO_INVALID_PARAMS);
888     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA512|PKCS6|MD5", &verify), CRYPTO_INVALID_PARAMS);
889 }
890 
891 /**
892 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_0700
893 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_0700
894 * @tc.desc algorithm is Verify
895 * @tc.size Medium
896 * @tc.type Func
897 * @tc.level Level0
898 */
899 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_0700, TestSize.Level0)
900 {
901     OH_CryptoVerify *verify = nullptr;
902     OH_CryptoKeyPair *keyPair = nullptr;
903     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
904 
905     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA1024", &keyCtx), CRYPTO_SUCCESS);
906     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
907     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
908     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA1024|PKCS1|SHA1", &verify), CRYPTO_SUCCESS);
909     ASSERT_EQ(OH_CryptoVerify_Init(nullptr, pubKey), CRYPTO_INVALID_PARAMS);
910     ASSERT_EQ(OH_CryptoVerify_Init(verify, nullptr), CRYPTO_INVALID_PARAMS);
911 
912     OH_CryptoVerify_Destroy(verify);
913     OH_CryptoKeyPair_Destroy(keyPair);
914     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
915 }
916 
917 /**
918 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_0800
919 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_0800
920 * @tc.desc algorithm is Verify
921 * @tc.size Medium
922 * @tc.type Func
923 * @tc.level Level0
924 */
925 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_0800, TestSize.Level0)
926 {
927     OH_CryptoVerify *verify = nullptr;
928     OH_CryptoKeyPair *keyPair = nullptr;
929     uint8_t testData[] = "0123456789";
930     Crypto_DataBlob msgBlob = {
931         .data = reinterpret_cast<uint8_t *>(testData),
932         .len = sizeof(testData)
933     };
934     Crypto_DataBlob rawBlob = {
935         .data = reinterpret_cast<uint8_t *>(testData),
936         .len = sizeof(testData)
937     };
938     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
939 
940     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA768", &keyCtx), CRYPTO_SUCCESS);
941     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
942     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
943     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA768|PKCS1|SHA224", &verify), CRYPTO_SUCCESS);
944     ASSERT_EQ(OH_CryptoVerify_Update(verify, &msgBlob), CRYPTO_INVALID_PARAMS);
945     ASSERT_FALSE(OH_CryptoVerify_Final(verify, &msgBlob, &rawBlob));
946     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
947     ASSERT_EQ(OH_CryptoVerify_Update(nullptr, &msgBlob), CRYPTO_INVALID_PARAMS);
948     ASSERT_EQ(OH_CryptoVerify_Update(verify, nullptr), CRYPTO_INVALID_PARAMS);
949     ASSERT_FALSE(OH_CryptoVerify_Final(nullptr, &msgBlob, &rawBlob));
950     ASSERT_FALSE(OH_CryptoVerify_Final(verify, nullptr, &rawBlob));
951     ASSERT_FALSE(OH_CryptoVerify_Final(verify, &msgBlob, nullptr));
952     ASSERT_FALSE(OH_CryptoVerify_GetAlgoName(nullptr));
953 
954     OH_CryptoVerify_Destroy(verify);
955     OH_CryptoKeyPair_Destroy(keyPair);
956     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
957 }
958 
959 /**
960 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_0900
961 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_0900
962 * @tc.desc algorithm is Verify
963 * @tc.size Medium
964 * @tc.type Func
965 * @tc.level Level0
966 */
967 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_0900, TestSize.Level0)
968 {
969     HcfSign *signObj = nullptr;
970     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
971     OH_CryptoKeyPair *keyPair = nullptr;
972     int32_t msgLen = OH_CRYPTO_SHA1_DIGESTSIZE;
973     HcfRand *randomObj = nullptr;
974     HcfBlob msgBlob = {0};
975     HcfBlob signData = {.data = nullptr, .len = 0};
976     OH_CryptoVerify *verify = nullptr;
977     Crypto_DataBlob rawSignData = {.data = nullptr, .len = 0};
978 
979     HcfRandCreate(&randomObj);
980     ASSERT_TRUE(randomObj != nullptr);
981     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
982     msgBlob.data[0] = 0;
983     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA1024", &keyCtx), CRYPTO_SUCCESS);
984     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
985     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
986     ASSERT_EQ(HcfSignCreate((const char *)"RSA1024|PKCS1|SHA1|OnlySign", &signObj), HCF_SUCCESS);
987     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
988     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
989     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA1024|PKCS1|SHA1|Recover", &verify), CRYPTO_SUCCESS);
990     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
991     ASSERT_EQ(OH_CryptoVerify_Recover(nullptr, (Crypto_DataBlob *)&signData, &rawSignData), CRYPTO_INVALID_PARAMS);
992     ASSERT_EQ(OH_CryptoVerify_Recover(verify, nullptr, &rawSignData), CRYPTO_INVALID_PARAMS);
993     ASSERT_EQ(OH_CryptoVerify_Recover(verify, (Crypto_DataBlob *)&signData, nullptr), CRYPTO_INVALID_PARAMS);
994 
995     HcfObjDestroy(signObj);
996     OH_CryptoVerify_Destroy(verify);
997     HcfObjDestroy(randomObj);
998     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
999     OH_CryptoKeyPair_Destroy(keyPair);
1000     HcfBlobDataClearAndFree(&msgBlob);
1001     HcfBlobDataClearAndFree(&signData);
1002     OH_Crypto_FreeDataBlob(&rawSignData);
1003 }
1004 
1005 /**
1006 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_1000
1007 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_1000
1008 * @tc.desc algorithm is Verify
1009 * @tc.size Medium
1010 * @tc.type Func
1011 * @tc.level Level0
1012 */
1013 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_1000, TestSize.Level0)
1014 {
1015     OH_CryptoVerify *verify1 = nullptr;
1016     OH_CryptoVerify *verify2 = nullptr;
1017     uint8_t MdName[] = "MD5";
1018     Crypto_DataBlob inBlob = {
1019         .data = reinterpret_cast<uint8_t *>(MdName),
1020         .len = sizeof(MdName)
1021     };
1022     OH_CryptoKeyPair *keyPair = nullptr;
1023     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1024 
1025     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA768", &keyCtx), CRYPTO_SUCCESS);
1026     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1027     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1028     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA768|PSS|MD5|MGF1_SHA384", &verify1), CRYPTO_SUCCESS);
1029     ASSERT_EQ(OH_CryptoVerify_SetParam(nullptr, CRYPTO_PSS_MGF_NAME_STR, &inBlob), CRYPTO_INVALID_PARAMS);
1030     ASSERT_EQ(OH_CryptoVerify_SetParam(verify1, CRYPTO_PSS_MGF_NAME_STR, nullptr), CRYPTO_INVALID_PARAMS);
1031     ASSERT_EQ(OH_CryptoVerify_Init(verify1, pubKey), CRYPTO_SUCCESS);
1032     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA1024|PKCS1|SHA256", &verify2), CRYPTO_SUCCESS);
1033     ASSERT_EQ(OH_CryptoVerify_SetParam(verify2, CRYPTO_PSS_MD_NAME_STR, &inBlob), CRYPTO_NOT_SUPPORTED);
1034     ASSERT_EQ(OH_CryptoVerify_SetParam(verify2, CRYPTO_SM2_USER_ID_DATABLOB, &inBlob), CRYPTO_NOT_SUPPORTED);
1035     ASSERT_EQ(OH_CryptoVerify_SetParam(verify1, CRYPTO_PSS_MD_NAME_STR, &inBlob), CRYPTO_NOT_SUPPORTED);
1036     ASSERT_EQ(OH_CryptoVerify_GetParam(nullptr, CRYPTO_PSS_MGF_NAME_STR, &inBlob), CRYPTO_INVALID_PARAMS);
1037     ASSERT_EQ(OH_CryptoVerify_GetParam(verify1, CRYPTO_PSS_MGF_NAME_STR, nullptr), CRYPTO_INVALID_PARAMS);
1038 
1039     OH_CryptoVerify_Destroy(verify1);
1040     OH_CryptoVerify_Destroy(verify2);
1041     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1042     OH_CryptoKeyPair_Destroy(keyPair);
1043 }
1044 
1045 /**
1046 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_1100
1047 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_1100
1048 * @tc.desc algorithm is Verify
1049 * @tc.size Medium
1050 * @tc.type Func
1051 * @tc.level Level0
1052 */
1053 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_1100, TestSize.Level0)
1054 {
1055     HcfSign *signObj = nullptr;
1056     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1057     OH_CryptoKeyPair *keyPair = nullptr;
1058     HcfBlob signData = {.data = nullptr, .len = 0};
1059     OH_CryptoVerify *verify = nullptr;
1060     uint8_t testData[] = "0123456789";
1061     Crypto_DataBlob msgBlob = {
1062         .data = reinterpret_cast<uint8_t *>(testData),
1063         .len = sizeof(testData)
1064     };
1065 
1066     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA512", &keyCtx), CRYPTO_SUCCESS);
1067     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1068     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1069     ASSERT_EQ(HcfSignCreate((const char *)"RSA512|PKCS1|MD5", &signObj), HCF_SUCCESS);
1070     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1071     ASSERT_EQ(signObj->sign(signObj, (HcfBlob *)&msgBlob, &signData), HCF_SUCCESS);
1072     signData.data[signData.len-1]--;
1073     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA512|PKCS1|MD5", &verify), CRYPTO_SUCCESS);
1074     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1075     ASSERT_FALSE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
1076     signData.data[signData.len-1]++;
1077     msgBlob.data[msgBlob.len-1]--;
1078     ASSERT_FALSE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
1079 
1080     HcfObjDestroy(signObj);
1081     OH_CryptoVerify_Destroy(verify);
1082     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1083     OH_CryptoKeyPair_Destroy(keyPair);
1084     HcfBlobDataClearAndFree(&signData);
1085 }
1086 
1087 /**
1088 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_1200
1089 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_1200
1090 * @tc.desc algorithm is Verify
1091 * @tc.size Medium
1092 * @tc.type Func
1093 * @tc.level Level0
1094 */
1095 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_1200, TestSize.Level0)
1096 {
1097     HcfSign *signObj = nullptr;
1098     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1099     OH_CryptoKeyPair *keyPair = nullptr;
1100     HcfBlob signData = {.data = nullptr, .len = 0};
1101     OH_CryptoVerify *verify = nullptr;
1102     uint8_t testData[] = "0123456789";
1103     Crypto_DataBlob msgBlob = {
1104         .data = reinterpret_cast<uint8_t *>(testData),
1105         .len = sizeof(testData)
1106     };
1107 
1108     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA768", &keyCtx), CRYPTO_SUCCESS);
1109     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1110     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1111     ASSERT_EQ(HcfSignCreate((const char *)"RSA768|PKCS1|SHA1", &signObj), HCF_SUCCESS);
1112     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1113     ASSERT_EQ(signObj->sign(signObj, (HcfBlob *)&msgBlob, &signData), HCF_SUCCESS);
1114     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA1024|PKCS1|SHA1", &verify), CRYPTO_SUCCESS);
1115     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1116     ASSERT_TRUE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
1117 
1118     HcfObjDestroy(signObj);
1119     OH_CryptoVerify_Destroy(verify);
1120     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1121     OH_CryptoKeyPair_Destroy(keyPair);
1122     HcfBlobDataClearAndFree(&signData);
1123 }
1124 
1125 /**
1126 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_1300
1127 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_1300
1128 * @tc.desc algorithm is Verify
1129 * @tc.size Medium
1130 * @tc.type Func
1131 * @tc.level Level0
1132 */
1133 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_1300, TestSize.Level0)
1134 {
1135     HcfSign *signObj = nullptr;
1136     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1137     OH_CryptoKeyPair *keyPair = nullptr;
1138     HcfBlob signData = {.data = nullptr, .len = 0};
1139     OH_CryptoVerify *verify = nullptr;
1140     uint8_t testData[] = "0123456789";
1141     Crypto_DataBlob msgBlob = {
1142         .data = reinterpret_cast<uint8_t *>(testData),
1143         .len = sizeof(testData)
1144     };
1145 
1146     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA1024", &keyCtx), CRYPTO_SUCCESS);
1147     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1148     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1149     ASSERT_EQ(HcfSignCreate((const char *)"RSA1024|PKCS1|SHA224", &signObj), HCF_SUCCESS);
1150     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1151     ASSERT_EQ(signObj->sign(signObj, (HcfBlob *)&msgBlob, &signData), HCF_SUCCESS);
1152     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA1024|PKCS1|SHA256", &verify), CRYPTO_SUCCESS);
1153     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1154     ASSERT_FALSE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
1155 
1156     HcfObjDestroy(signObj);
1157     OH_CryptoVerify_Destroy(verify);
1158     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1159     OH_CryptoKeyPair_Destroy(keyPair);
1160     HcfBlobDataClearAndFree(&signData);
1161 }
1162 
1163 /**
1164 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_1400
1165 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_1400
1166 * @tc.desc algorithm is Verify
1167 * @tc.size Medium
1168 * @tc.type Func
1169 * @tc.level Level0
1170 */
1171 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_1400, TestSize.Level0)
1172 {
1173     HcfSign *signObj = nullptr;
1174     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1175     OH_CryptoKeyPair *keyPair = nullptr;
1176     HcfBlob signData = {.data = nullptr, .len = 0};
1177     OH_CryptoVerify *verify = nullptr;
1178     int32_t msgLen = OH_CRYPTO_MD5_DIGESTSIZE;
1179     HcfRand *randomObj = nullptr;
1180     HcfBlob msgBlob = {0};
1181 
1182     HcfRandCreate(&randomObj);
1183     ASSERT_TRUE(randomObj != nullptr);
1184     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1185     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA512", &keyCtx), CRYPTO_SUCCESS);
1186     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1187     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1188     ASSERT_EQ(HcfSignCreate((const char *)"RSA512|PKCS1|MD5|OnlySign", &signObj), HCF_SUCCESS);
1189     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1190     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
1191     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA512|PKCS1|MD5", &verify), CRYPTO_SUCCESS);
1192     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1193     ASSERT_FALSE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
1194 
1195     HcfObjDestroy(signObj);
1196     HcfObjDestroy(randomObj);
1197     OH_CryptoVerify_Destroy(verify);
1198     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1199     OH_CryptoKeyPair_Destroy(keyPair);
1200     HcfBlobDataClearAndFree(&signData);
1201 }
1202 
1203 /**
1204 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_1500
1205 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_1500
1206 * @tc.desc algorithm is Verify
1207 * @tc.size Medium
1208 * @tc.type Func
1209 * @tc.level Level0
1210 */
1211 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_1500, TestSize.Level0)
1212 {
1213     HcfSign *signObj = nullptr;
1214     OH_CryptoAsymKeyGenerator *keyCtx_A = nullptr;
1215     OH_CryptoKeyPair *keyPair_A = nullptr;
1216     OH_CryptoAsymKeyGenerator *keyCtx_B = nullptr;
1217     OH_CryptoKeyPair *keyPair_B = nullptr;
1218     HcfBlob signData = {.data = nullptr, .len = 0};
1219     OH_CryptoVerify *verify = nullptr;
1220     int32_t msgLen = 16;
1221     HcfRand *randomObj = nullptr;
1222     HcfBlob msgBlob = {0};
1223 
1224     HcfRandCreate(&randomObj);
1225     ASSERT_TRUE(randomObj != nullptr);
1226     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1227     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA768", &keyCtx_A), CRYPTO_SUCCESS);
1228     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx_A, &keyPair_A), CRYPTO_SUCCESS);
1229     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA768", &keyCtx_B), CRYPTO_SUCCESS);
1230     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx_B, &keyPair_B), CRYPTO_SUCCESS);
1231     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair_B);
1232     ASSERT_EQ(HcfSignCreate((const char *)"RSA768|PKCS1|SHA256", &signObj), HCF_SUCCESS);
1233     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair_A)->priKey), HCF_SUCCESS);
1234     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
1235     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA768|PKCS1|SHA256", &verify), CRYPTO_SUCCESS);
1236     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1237     ASSERT_FALSE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
1238 
1239     HcfObjDestroy(signObj);
1240     HcfObjDestroy(randomObj);
1241     OH_CryptoVerify_Destroy(verify);
1242     OH_CryptoAsymKeyGenerator_Destroy(keyCtx_A);
1243     OH_CryptoKeyPair_Destroy(keyPair_A);
1244     OH_CryptoAsymKeyGenerator_Destroy(keyCtx_B);
1245     OH_CryptoKeyPair_Destroy(keyPair_B);
1246     HcfBlobDataClearAndFree(&signData);
1247 }
1248 
1249 /**
1250 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_1600
1251 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_1600
1252 * @tc.desc algorithm is Verify
1253 * @tc.size Medium
1254 * @tc.type Func
1255 * @tc.level Level0
1256 */
1257 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_1600, TestSize.Level0)
1258 {
1259     HcfSign *signObj = nullptr;
1260     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1261     OH_CryptoKeyPair *keyPair = nullptr;
1262     HcfBlob signData = {.data = nullptr, .len = 0};
1263     OH_CryptoVerify *verify = nullptr;
1264     int32_t msgLen = OH_CRYPTO_MD5_DIGESTSIZE;
1265     HcfRand *randomObj = nullptr;
1266     HcfBlob msgBlob = {0};
1267     Crypto_DataBlob rawSignData = {.data = nullptr, .len = 0};
1268 
1269     HcfRandCreate(&randomObj);
1270     ASSERT_TRUE(randomObj != nullptr);
1271     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1272     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA512", &keyCtx), CRYPTO_SUCCESS);
1273     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1274     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1275     ASSERT_EQ(HcfSignCreate((const char *)"RSA512|PKCS1|MD5|OnlySign", &signObj), HCF_SUCCESS);
1276     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1277     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
1278     signData.data[signData.len-1]--;
1279     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA512|PKCS1|MD5|Recover", &verify), CRYPTO_SUCCESS);
1280     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1281     ASSERT_EQ(OH_CryptoVerify_Recover(verify, (Crypto_DataBlob *)&signData, &rawSignData), CRYPTO_OPERTION_ERROR);
1282 
1283     HcfObjDestroy(signObj);
1284     HcfObjDestroy(randomObj);
1285     OH_CryptoVerify_Destroy(verify);
1286     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1287     OH_CryptoKeyPair_Destroy(keyPair);
1288     HcfBlobDataClearAndFree(&signData);
1289     OH_Crypto_FreeDataBlob(&rawSignData);
1290 }
1291 
1292 /**
1293 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_1700
1294 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_1700
1295 * @tc.desc algorithm is Verify
1296 * @tc.size Medium
1297 * @tc.type Func
1298 * @tc.level Level0
1299 */
1300 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_1700, TestSize.Level0)
1301 {
1302     HcfSign *signObj = nullptr;
1303     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1304     OH_CryptoKeyPair *keyPair = nullptr;
1305     HcfBlob signData = {.data = nullptr, .len = 0};
1306     OH_CryptoVerify *verify = nullptr;
1307     int32_t msgLen = OH_CRYPTO_SHA1_DIGESTSIZE;
1308     HcfRand *randomObj = nullptr;
1309     HcfBlob msgBlob = {0};
1310     Crypto_DataBlob rawSignData = {.data = nullptr, .len = 0};
1311 
1312     HcfRandCreate(&randomObj);
1313     ASSERT_TRUE(randomObj != nullptr);
1314     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1315     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA768", &keyCtx), CRYPTO_SUCCESS);
1316     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1317     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1318     ASSERT_EQ(HcfSignCreate((const char *)"RSA768|PKCS1|SHA1|OnlySign", &signObj), HCF_SUCCESS);
1319     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1320     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
1321     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA1024|PKCS1|SHA1|Recover", &verify), CRYPTO_SUCCESS);
1322     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1323     ASSERT_EQ(OH_CryptoVerify_Recover(verify, (Crypto_DataBlob *)&signData, &rawSignData), CRYPTO_SUCCESS);
1324 
1325     HcfObjDestroy(signObj);
1326     HcfObjDestroy(randomObj);
1327     OH_CryptoVerify_Destroy(verify);
1328     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1329     OH_CryptoKeyPair_Destroy(keyPair);
1330     HcfBlobDataClearAndFree(&signData);
1331     OH_Crypto_FreeDataBlob(&rawSignData);
1332 }
1333 
1334 /**
1335 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_1800
1336 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_1800
1337 * @tc.desc algorithm is Verify
1338 * @tc.size Medium
1339 * @tc.type Func
1340 * @tc.level Level0
1341 */
1342 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_1800, TestSize.Level0)
1343 {
1344     HcfSign *signObj = nullptr;
1345     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1346     OH_CryptoKeyPair *keyPair = nullptr;
1347     HcfBlob signData = {.data = nullptr, .len = 0};
1348     OH_CryptoVerify *verify = nullptr;
1349     int32_t msgLen = OH_CRYPTO_SHA224_DIGESTSIZE;
1350     HcfRand *randomObj = nullptr;
1351     HcfBlob msgBlob = {0};
1352     Crypto_DataBlob rawSignData = {.data = nullptr, .len = 0};
1353 
1354     HcfRandCreate(&randomObj);
1355     ASSERT_TRUE(randomObj != nullptr);
1356     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1357     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA1024", &keyCtx), CRYPTO_SUCCESS);
1358     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1359     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1360     ASSERT_EQ(HcfSignCreate((const char *)"RSA1024|PKCS1|SHA224|OnlySign", &signObj), HCF_SUCCESS);
1361     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1362     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
1363     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA1024|PKCS1|SHA256|Recover", &verify), CRYPTO_SUCCESS);
1364     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1365     ASSERT_EQ(OH_CryptoVerify_Recover(verify, (Crypto_DataBlob *)&signData, &rawSignData), CRYPTO_OPERTION_ERROR);
1366 
1367     HcfObjDestroy(signObj);
1368     HcfObjDestroy(randomObj);
1369     OH_CryptoVerify_Destroy(verify);
1370     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1371     OH_CryptoKeyPair_Destroy(keyPair);
1372     HcfBlobDataClearAndFree(&signData);
1373     OH_Crypto_FreeDataBlob(&rawSignData);
1374 }
1375 
1376 /**
1377 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_1900
1378 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_1900
1379 * @tc.desc algorithm is Verify
1380 * @tc.size Medium
1381 * @tc.type Func
1382 * @tc.level Level0
1383 */
1384 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_1900, TestSize.Level0)
1385 {
1386     HcfSign *signObj = nullptr;
1387     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1388     OH_CryptoKeyPair *keyPair = nullptr;
1389     HcfBlob signData = {.data = nullptr, .len = 0};
1390     OH_CryptoVerify *verify = nullptr;
1391     int32_t msgLen = 64;
1392     HcfRand *randomObj = nullptr;
1393     HcfBlob msgBlob = {0};
1394     Crypto_DataBlob rawSignData = {.data = nullptr, .len = 0};
1395     OH_CryptoDigest *ctx = nullptr;
1396     Crypto_DataBlob out = {.data = nullptr, .len = 0};
1397 
1398     HcfRandCreate(&randomObj);
1399     ASSERT_TRUE(randomObj != nullptr);
1400     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1401     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA512", &keyCtx), CRYPTO_SUCCESS);
1402     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1403     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1404     ASSERT_EQ(HcfSignCreate((const char *)"RSA512|PKCS1|MD5", &signObj), HCF_SUCCESS);
1405     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1406     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
1407     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA512|PKCS1|MD5|Recover", &verify), CRYPTO_SUCCESS);
1408     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1409     ASSERT_EQ(OH_CryptoVerify_Recover(verify, (Crypto_DataBlob *)&signData, &rawSignData), CRYPTO_SUCCESS);
1410     ASSERT_EQ(rawSignData.len, OH_CRYPTO_MD5_DIGESTSIZE);
1411     ASSERT_EQ(OH_CryptoDigest_Create((const char *)"MD5", &ctx), CRYPTO_SUCCESS);
1412     ASSERT_EQ(OH_CryptoDigest_Update(ctx, (Crypto_DataBlob *)&msgBlob), CRYPTO_SUCCESS);
1413     ASSERT_EQ(OH_CryptoDigest_Final(ctx, &out), CRYPTO_SUCCESS);
1414     ASSERT_TRUE(memcmp(out.data, rawSignData.data, out.len) == 0);
1415 
1416     OH_DigestCrypto_Destroy(ctx);
1417     HcfObjDestroy(signObj);
1418     HcfObjDestroy(randomObj);
1419     OH_CryptoVerify_Destroy(verify);
1420     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1421     OH_CryptoKeyPair_Destroy(keyPair);
1422     HcfBlobDataClearAndFree(&signData);
1423     OH_Crypto_FreeDataBlob(&rawSignData);
1424     OH_Crypto_FreeDataBlob(&out);
1425 }
1426 
1427 /**
1428 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_2000
1429 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_2000
1430 * @tc.desc algorithm is Verify
1431 * @tc.size Medium
1432 * @tc.type Func
1433 * @tc.level Level0
1434 */
1435 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_2000, TestSize.Level0)
1436 {
1437     HcfSign *signObj = nullptr;
1438     OH_CryptoAsymKeyGenerator *keyCtx_A = nullptr;
1439     OH_CryptoKeyPair *keyPair_A = nullptr;
1440     OH_CryptoAsymKeyGenerator *keyCtx_B = nullptr;
1441     OH_CryptoKeyPair *keyPair_B = nullptr;
1442     HcfBlob signData = {.data = nullptr, .len = 0};
1443     OH_CryptoVerify *verify = nullptr;
1444     int32_t msgLen = 20;
1445     HcfRand *randomObj = nullptr;
1446     HcfBlob msgBlob = {0};
1447     Crypto_DataBlob rawSignData = {.data = nullptr, .len = 0};
1448 
1449     HcfRandCreate(&randomObj);
1450     ASSERT_TRUE(randomObj != nullptr);
1451     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1452     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA1024", &keyCtx_A), CRYPTO_SUCCESS);
1453     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx_A, &keyPair_A), CRYPTO_SUCCESS);
1454     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA1024", &keyCtx_B), CRYPTO_SUCCESS);
1455     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx_B, &keyPair_B), CRYPTO_SUCCESS);
1456     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair_B);
1457     ASSERT_EQ(HcfSignCreate((const char *)"RSA1024|PKCS1|SHA1|OnlySign", &signObj), HCF_SUCCESS);
1458     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair_A)->priKey), HCF_SUCCESS);
1459     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
1460     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA1024|PKCS1|SHA1|Recover", &verify), CRYPTO_SUCCESS);
1461     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1462     ASSERT_EQ(OH_CryptoVerify_Recover(verify, (Crypto_DataBlob *)&signData, &rawSignData), CRYPTO_OPERTION_ERROR);
1463 
1464     HcfObjDestroy(signObj);
1465     HcfObjDestroy(randomObj);
1466     OH_CryptoVerify_Destroy(verify);
1467     OH_CryptoAsymKeyGenerator_Destroy(keyCtx_A);
1468     OH_CryptoKeyPair_Destroy(keyPair_A);
1469     OH_CryptoAsymKeyGenerator_Destroy(keyCtx_B);
1470     OH_CryptoKeyPair_Destroy(keyPair_B);
1471     HcfBlobDataClearAndFree(&signData);
1472     OH_Crypto_FreeDataBlob(&rawSignData);
1473 }
1474 
1475 /**
1476 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_2100
1477 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_2100
1478 * @tc.desc algorithm is Verify
1479 * @tc.size Medium
1480 * @tc.type Func
1481 * @tc.level Level0
1482 */
1483 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_2100, TestSize.Level0)
1484 {
1485     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1486     OH_CryptoKeyPair *keyPair = nullptr;
1487     OH_CryptoVerify *verify = nullptr;
1488 
1489     uint8_t plainText[] = {
1490         0xe4, 0x2b, 0xcc, 0x08, 0x11, 0x79, 0x16, 0x1b, 0x35, 0x7f, 0xb3, 0xaf, 0x40, 0x3b, 0x3f, 0x7c
1491     };
1492     Crypto_DataBlob msgBlob = {
1493         .data = reinterpret_cast<uint8_t *>(plainText),
1494         .len = sizeof(plainText)
1495     };
1496     uint8_t pubKeyText[] = {
1497         0x30, 0x39, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a,
1498         0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, 0x22, 0x00, 0x03, 0x4d, 0xe4, 0xbb, 0x11, 0x10,
1499         0x1a, 0xd2, 0x05, 0x74, 0xf1, 0x0b, 0xb4, 0x75, 0x57, 0xf4, 0x3e, 0x55, 0x14, 0x17, 0x05, 0x4a,
1500         0xb2, 0xfb, 0x8c, 0x84, 0x64, 0x38, 0x02, 0xa0, 0x2a, 0xa6, 0xf0
1501     };
1502     Crypto_DataBlob keyBlob = {
1503         .data = reinterpret_cast<uint8_t *>(pubKeyText),
1504         .len = sizeof(pubKeyText)
1505     };
1506     uint8_t signText[] = {
1507         0x30, 0x44, 0x02, 0x20, 0x21, 0x89, 0x99, 0xb1, 0x56, 0x4e, 0x3a, 0x2c, 0x16, 0x08, 0xb5, 0x8a,
1508         0x06, 0x6f, 0x67, 0x47, 0x1b, 0x04, 0x18, 0x7d, 0x53, 0x2d, 0xba, 0x00, 0x38, 0xd9, 0xe3, 0xe7,
1509         0x8c, 0xcf, 0x76, 0x83, 0x02, 0x20, 0x13, 0x54, 0x84, 0x9d, 0x73, 0x40, 0xc3, 0x92, 0x66, 0xdc,
1510         0x3e, 0xc9, 0xf1, 0x4c, 0x33, 0x84, 0x2a, 0x76, 0xaf, 0xc6, 0x61, 0x84, 0x5c, 0xae, 0x4b, 0x0d,
1511         0x3c, 0xb0, 0xc8, 0x04, 0x89, 0x71
1512     };
1513     Crypto_DataBlob signBlob = {
1514         .data = reinterpret_cast<uint8_t *>(signText),
1515         .len = sizeof(signText)
1516     };
1517 
1518     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"ECC256", &keyCtx), CRYPTO_SUCCESS);
1519     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Convert(keyCtx, CRYPTO_DER, &keyBlob, nullptr, &keyPair), CRYPTO_SUCCESS);
1520     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1521     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"ECC|SHA256", &verify), CRYPTO_SUCCESS);
1522     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1523     ASSERT_TRUE(OH_CryptoVerify_Final(verify, &msgBlob, &signBlob));
1524 
1525     OH_CryptoVerify_Destroy(verify);
1526     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1527     OH_CryptoKeyPair_Destroy(keyPair);
1528 }
1529 
1530 /**
1531 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_2200
1532 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_2200
1533 * @tc.desc algorithm is Verify
1534 * @tc.size Medium
1535 * @tc.type Func
1536 * @tc.level Level0
1537 */
1538 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_2200, TestSize.Level0)
1539 {
1540     HcfSign *signObj = nullptr;
1541     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1542     OH_CryptoKeyPair *keyPair = nullptr;
1543     int32_t msgLen = 16;
1544     HcfRand *randomObj = nullptr;
1545     HcfBlob msgBlob = {0};
1546     HcfBlob signData = {.data = nullptr, .len = 0};
1547     OH_CryptoVerify *verify = nullptr;
1548     uint8_t mdText[] = "MD5";
1549     Crypto_DataBlob mdBlob = {
1550         .data = reinterpret_cast<uint8_t *>(mdText),
1551         .len = sizeof(mdText)
1552     };
1553     uint8_t MFGText[] = "MGF1";
1554     Crypto_DataBlob mfgBlob = {
1555         .data = reinterpret_cast<uint8_t *>(MFGText),
1556         .len = sizeof(MFGText)
1557     };
1558     uint8_t MFG1MdText[] = "SHA1";
1559     Crypto_DataBlob mgf1MddBlob = {
1560         .data = reinterpret_cast<uint8_t *>(MFG1MdText),
1561         .len = sizeof(MFG1MdText)
1562     };
1563     int32_t saltText1 = 32;
1564     Crypto_DataBlob saltBlob1 = {
1565         .data = (uint8_t *)&saltText1,
1566         .len = sizeof(int32_t)
1567     };
1568     int32_t saltText2 = -1;
1569     Crypto_DataBlob saltBlob2 = {
1570         .data = (uint8_t *)&saltText2,
1571         .len = sizeof(int32_t)
1572     };
1573 
1574     Crypto_DataBlob outMdBlob = {.data = nullptr, .len = 0};
1575     Crypto_DataBlob outMfgBlob = {.data = nullptr, .len = 0};
1576     Crypto_DataBlob outMfg1MdBlob = {.data = nullptr, .len = 0};
1577     Crypto_DataBlob outSaltBlob = {.data = nullptr, .len = 0};
1578     Crypto_DataBlob outTrailerFieldBlob = {.data = nullptr, .len = 0};
1579 
1580     HcfRandCreate(&randomObj);
1581     ASSERT_TRUE(randomObj != nullptr);
1582     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1583     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA512", &keyCtx), CRYPTO_SUCCESS);
1584     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1585     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1586     ASSERT_EQ(HcfSignCreate((const char *)"RSA512|PSS|MD5|MGF1_SHA1", &signObj), HCF_SUCCESS);
1587     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1588     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
1589     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA512|PSS|SHA1|MGF1_MD5", &verify), CRYPTO_SUCCESS);
1590     ASSERT_EQ(OH_CryptoVerify_SetParam(verify, CRYPTO_PSS_MD_NAME_STR, &mdBlob), CRYPTO_NOT_SUPPORTED);
1591     ASSERT_EQ(OH_CryptoVerify_SetParam(verify, CRYPTO_PSS_MGF_NAME_STR, &mfgBlob), CRYPTO_NOT_SUPPORTED);
1592     ASSERT_EQ(OH_CryptoVerify_SetParam(verify, CRYPTO_PSS_MGF1_NAME_STR, &mgf1MddBlob), CRYPTO_NOT_SUPPORTED);
1593     ASSERT_EQ(OH_CryptoVerify_SetParam(verify, CRYPTO_PSS_SALT_LEN_INT, &saltBlob1), CRYPTO_SUCCESS);
1594     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1595     ASSERT_EQ(OH_CryptoVerify_SetParam(verify, CRYPTO_PSS_SALT_LEN_INT, &saltBlob2), CRYPTO_SUCCESS);
1596     EXPECT_EQ(OH_CryptoVerify_GetParam(verify, CRYPTO_PSS_MD_NAME_STR, &outMdBlob), CRYPTO_SUCCESS);
1597     EXPECT_EQ(OH_CryptoVerify_GetParam(verify, CRYPTO_PSS_MGF_NAME_STR, &outMfgBlob), CRYPTO_SUCCESS);
1598     EXPECT_EQ(OH_CryptoVerify_GetParam(verify, CRYPTO_PSS_MGF1_NAME_STR, &outMfg1MdBlob), CRYPTO_SUCCESS);
1599     EXPECT_EQ(OH_CryptoVerify_GetParam(verify, CRYPTO_PSS_TRAILER_FIELD_INT, &outTrailerFieldBlob), CRYPTO_SUCCESS);
1600     EXPECT_EQ(OH_CryptoVerify_GetParam(verify, CRYPTO_PSS_SALT_LEN_INT, &outSaltBlob), CRYPTO_SUCCESS);
1601     ASSERT_FALSE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
1602 
1603     HcfObjDestroy(signObj);
1604     OH_CryptoVerify_Destroy(verify);
1605     HcfObjDestroy(randomObj);
1606     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1607     OH_CryptoKeyPair_Destroy(keyPair);
1608     HcfBlobDataClearAndFree(&msgBlob);
1609     HcfBlobDataClearAndFree(&signData);
1610     OH_Crypto_FreeDataBlob(&outMdBlob);
1611     OH_Crypto_FreeDataBlob(&outMfgBlob);
1612     OH_Crypto_FreeDataBlob(&outMfg1MdBlob);
1613     OH_Crypto_FreeDataBlob(&outTrailerFieldBlob);
1614     OH_Crypto_FreeDataBlob(&outSaltBlob);
1615 }
1616 
1617 /**
1618 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_2300
1619 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_2300
1620 * @tc.desc algorithm is Verify
1621 * @tc.size Medium
1622 * @tc.type Func
1623 * @tc.level Level0
1624 */
1625 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_2300, TestSize.Level0)
1626 {
1627     HcfSign *signObj = nullptr;
1628     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1629     OH_CryptoKeyPair *keyPair = nullptr;
1630     int32_t msgLen = 16;
1631     HcfRand *randomObj = nullptr;
1632     HcfBlob msgBlob = {0};
1633     HcfBlob signData = {.data = nullptr, .len = 0};
1634     OH_CryptoVerify *verify = nullptr;
1635 
1636     HcfRandCreate(&randomObj);
1637     ASSERT_TRUE(randomObj != nullptr);
1638     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1639     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA2048", &keyCtx), CRYPTO_SUCCESS);
1640     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1641     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1642     Crypto_DataBlob retBlob = { .data = nullptr, .len = 0 };
1643     ASSERT_EQ(OH_CryptoPubKey_Encode(pubKey, CRYPTO_PEM, "PKCS1", &retBlob), CRYPTO_SUCCESS);
1644     ASSERT_EQ(HcfSignCreate((const char *)"RSA2048|PSS|SHA256|MGF1_SHA256", &signObj), HCF_SUCCESS);
1645     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1646     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
1647     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA2048|PSS|SHA256|MGF1_SHA256", &verify), CRYPTO_SUCCESS);
1648     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1649     ASSERT_TRUE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
1650 
1651     HcfObjDestroy(signObj);
1652     OH_CryptoVerify_Destroy(verify);
1653     HcfObjDestroy(randomObj);
1654     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1655     OH_CryptoKeyPair_Destroy(keyPair);
1656     HcfBlobDataClearAndFree(&msgBlob);
1657     HcfBlobDataClearAndFree(&signData);
1658 }
1659 
1660 /**
1661 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_2400
1662 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_2400
1663 * @tc.desc algorithm is Verify
1664 * @tc.size Medium
1665 * @tc.type Func
1666 * @tc.level Level0
1667 */
1668 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_2400, TestSize.Level0)
1669 {
1670     HcfSign *signObj = nullptr;
1671     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1672     OH_CryptoKeyPair *keyPair = nullptr;
1673     HcfBlob signData = {.data = nullptr, .len = 0};
1674     OH_CryptoVerify *verify = nullptr;
1675     int32_t msgLen = 32;
1676     HcfRand *randomObj = nullptr;
1677     HcfBlob msgBlob = {0};
1678     Crypto_DataBlob rawSignData = {.data = nullptr, .len = 0};
1679 
1680     HcfRandCreate(&randomObj);
1681     ASSERT_TRUE(randomObj != nullptr);
1682     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1683     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA1024", &keyCtx), CRYPTO_SUCCESS);
1684     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1685     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1686     Crypto_DataBlob retBlob = { .data = nullptr, .len = 0 };
1687     ASSERT_EQ(OH_CryptoPubKey_Encode(pubKey, CRYPTO_PEM, "PKCS1", &retBlob), CRYPTO_SUCCESS);
1688     ASSERT_EQ(HcfSignCreate((const char *)"RSA1024|PKCS1|SHA256|OnlySign", &signObj), HCF_SUCCESS);
1689     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1690     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
1691     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA1024|PKCS1|SHA256|Recover", &verify), CRYPTO_SUCCESS);
1692     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1693     ASSERT_EQ(OH_CryptoVerify_Recover(verify, (Crypto_DataBlob *)&signData, &rawSignData), CRYPTO_SUCCESS);
1694 
1695     OH_CryptoVerify_Destroy(verify);
1696     OH_Crypto_FreeDataBlob(&rawSignData);
1697     HcfObjDestroy(signObj);
1698     HcfObjDestroy(randomObj);
1699     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1700     OH_CryptoKeyPair_Destroy(keyPair);
1701     HcfBlobDataClearAndFree(&signData);
1702 }
1703 
1704 /**
1705 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_2500
1706 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_2500
1707 * @tc.desc algorithm is Verify
1708 * @tc.size Medium
1709 * @tc.type Func
1710 * @tc.level Level0
1711 */
1712 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_2500, TestSize.Level0)
1713 {
1714     HcfSign *signObj = nullptr;
1715     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1716     OH_CryptoKeyPair *keyPair = nullptr;
1717     int32_t msgLen = 32;
1718     HcfRand *randomObj = nullptr;
1719     HcfBlob msgBlob = {0};
1720     HcfBlob signData = {.data = nullptr, .len = 0};
1721     OH_CryptoVerify *verify = nullptr;
1722 
1723     HcfRandCreate(&randomObj);
1724     ASSERT_TRUE(randomObj != nullptr);
1725     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1726     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"SM2_256", &keyCtx), CRYPTO_SUCCESS);
1727     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1728     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1729     Crypto_DataBlob retBlob = { .data = nullptr, .len = 0 };
1730     ASSERT_EQ(OH_CryptoPubKey_Encode(pubKey, CRYPTO_DER, nullptr, &retBlob), CRYPTO_SUCCESS);
1731     ASSERT_EQ(HcfSignCreate((const char *)"SM2_256|SM3", &signObj), HCF_SUCCESS);
1732     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1733     ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
1734     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"SM2_256|SM3", &verify), CRYPTO_SUCCESS);
1735     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1736     ASSERT_TRUE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
1737 
1738     HcfObjDestroy(signObj);
1739     OH_CryptoVerify_Destroy(verify);
1740     HcfObjDestroy(randomObj);
1741     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1742     OH_CryptoKeyPair_Destroy(keyPair);
1743     HcfBlobDataClearAndFree(&msgBlob);
1744     HcfBlobDataClearAndFree(&signData);
1745 }
1746 
1747 /**
1748 * @tc.number SUB_Security_CryptoFramework_NAPI_Verify_Test_2600
1749 * @tc.name OHCryptoFrameworkVerifyNapiTest.SUB_Security_CryptoFramework_NAPI_Verify_Test_2600
1750 * @tc.desc algorithm is Verify
1751 * @tc.size Medium
1752 * @tc.type Func
1753 * @tc.level Level0
1754 */
1755 HWTEST_F(OHCryptoFrameworkVerifyNapiTest, SUB_Security_CryptoFramework_NAPI_Verify_Test_2600, TestSize.Level0)
1756 {
1757     HcfSign *signObj = nullptr;
1758     OH_CryptoAsymKeyGenerator *keyCtx = nullptr;
1759     OH_CryptoKeyPair *keyPair = nullptr;
1760     int32_t msgLen = 64;
1761     HcfRand *randomObj = nullptr;
1762     HcfBlob msgBlob = {0};
1763     HcfBlob signData = {.data = nullptr, .len = 0};
1764     OH_CryptoVerify *verify = nullptr;
1765     int blockSize = 20;
1766     int cnt_s = 64 / blockSize;
1767     int rem_s = 64 % blockSize;
1768 
1769     HcfRandCreate(&randomObj);
1770     ASSERT_TRUE(randomObj != nullptr);
1771     ASSERT_EQ(randomObj->generateRandom(randomObj, msgLen, &msgBlob), HCF_SUCCESS);
1772     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Create((const char *)"RSA1024", &keyCtx), CRYPTO_SUCCESS);
1773     ASSERT_EQ(OH_CryptoAsymKeyGenerator_Generate(keyCtx, &keyPair), CRYPTO_SUCCESS);
1774     OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair);
1775     Crypto_DataBlob retBlob = { .data = nullptr, .len = 0 };
1776     ASSERT_EQ(OH_CryptoPubKey_Encode(pubKey, CRYPTO_PEM, "PKCS1", &retBlob), CRYPTO_SUCCESS);
1777     ASSERT_EQ(HcfSignCreate((const char *)"RSA1024|PKCS1|SHA256", &signObj), HCF_SUCCESS);
1778     ASSERT_EQ(signObj->init(signObj, nullptr, ((HcfKeyPair *)keyPair)->priKey), HCF_SUCCESS);
1779 
1780     for (int i = 0; i < cnt_s; i++) {
1781         msgBlob.len = blockSize;
1782         ASSERT_EQ(signObj->update(signObj, &msgBlob), HCF_SUCCESS);
1783         msgBlob.data += blockSize;
1784     }
1785     if (rem_s > 0) {
1786         msgBlob.len = rem_s;
1787         ASSERT_EQ(signObj->sign(signObj, &msgBlob, &signData), HCF_SUCCESS);
1788     }
1789     msgBlob.data -=  64 - rem_s;
1790     msgBlob.len = 64;
1791     ASSERT_EQ(OH_CryptoVerify_Create((const char *)"RSA1024|PKCS1|SHA256", &verify), CRYPTO_SUCCESS);
1792     ASSERT_EQ(OH_CryptoVerify_Init(verify, pubKey), CRYPTO_SUCCESS);
1793     for (int i = 0; i < cnt_s; i++) {
1794         msgBlob.len = blockSize;
1795         ASSERT_EQ(OH_CryptoVerify_Update(verify, (Crypto_DataBlob *)&msgBlob), CRYPTO_SUCCESS);
1796         msgBlob.data += blockSize;
1797     }
1798     if (rem_s > 0) {
1799         msgBlob.len = rem_s;
1800        ASSERT_TRUE(OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signData));
1801     }
1802 
1803     msgBlob.data -=  64 - rem_s;
1804     msgBlob.len = 64;
1805     HcfObjDestroy(signObj);
1806     OH_CryptoVerify_Destroy(verify);
1807     HcfObjDestroy(randomObj);
1808     OH_CryptoAsymKeyGenerator_Destroy(keyCtx);
1809     OH_CryptoKeyPair_Destroy(keyPair);
1810     HcfBlobDataClearAndFree(&msgBlob);
1811     HcfBlobDataClearAndFree(&signData);
1812 }
1813 
1814 } // namespace Unittest::CryptoFrameworkVerifyNapiTest