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 
16 #include <gtest/gtest.h>
17 #include "securec.h"
18 
19 #include "asy_key_generator.h"
20 #include "blob.h"
21 #include "detailed_ecc_key_params.h"
22 #include "ecc_key_util.h"
23 #include "ecc_common_param_spec_generator_openssl.h"
24 #include "key_agreement.h"
25 #include "memory.h"
26 #include "signature.h"
27 #include "openssl_class.h"
28 
29 
30 using namespace std;
31 using namespace testing::ext;
32 
33 namespace {
34 class CryptoEccEcdhPubTest : public testing::Test {
35 public:
36     static void SetUpTestCase();
37     static void TearDownTestCase();
38     void SetUp();
39     void TearDown();
40 };
41 
SetUpTestCase()42 void CryptoEccEcdhPubTest::SetUpTestCase() {}
43 
TearDownTestCase()44 void CryptoEccEcdhPubTest::TearDownTestCase() {}
45 
SetUp()46 void CryptoEccEcdhPubTest::SetUp() {}
47 
TearDown()48 void CryptoEccEcdhPubTest::TearDown() {}
49 
50 static const char *g_pubKeyCompressedFormat = "X509|COMPRESSED";
51 static const char *g_pubKeyUnCompressedFormat = "X509|UNCOMPRESSED";
52 static const char *g_pointCompressedFormat = "COMPRESSED";
53 static const char *g_pointUnCompressedFormat = "UNCOMPRESSED";
54 
55 // uncompressed point data size
56 constexpr size_t SECP224R1_POINT_UNCOMPRESSED_SIZE = 57;
57 constexpr size_t PRIME256V1_POINT_UNCOMPRESSED_SIZE = 65;
58 constexpr size_t SECP384R1_POINT_UNCOMPRESSED_SIZE = 97;
59 constexpr size_t SECP521R1_POINT_UNCOMPRESSED_SIZE = 133;
60 constexpr size_t P160R1_POINT_UNCOMPRESSED_SIZE = 41;
61 constexpr size_t P160T1_POINT_UNCOMPRESSED_SIZE = 41;
62 constexpr size_t P192R1_POINT_UNCOMPRESSED_SIZE = 49;
63 constexpr size_t P192T1_POINT_UNCOMPRESSED_SIZE = 49;
64 constexpr size_t P224R1_POINT_UNCOMPRESSED_SIZE = 57;
65 constexpr size_t P224T1_POINT_UNCOMPRESSED_SIZE = 57;
66 constexpr size_t P256R1_POINT_UNCOMPRESSED_SIZE = 65;
67 constexpr size_t P256T1_POINT_UNCOMPRESSED_SIZE = 65;
68 constexpr size_t P320R1_POINT_UNCOMPRESSED_SIZE = 81;
69 constexpr size_t P320T1_POINT_UNCOMPRESSED_SIZE = 81;
70 constexpr size_t P384R1_POINT_UNCOMPRESSED_SIZE = 97;
71 constexpr size_t P384T1_POINT_UNCOMPRESSED_SIZE = 97;
72 constexpr size_t P512R1_POINT_UNCOMPRESSED_SIZE = 129;
73 constexpr size_t P512T1_POINT_UNCOMPRESSED_SIZE = 129;
74 
75 // uncompressed point data
76 static uint8_t g_secp224r1PointUncompressedBlobData[] = { 4, 56, 90, 25, 144, 206, 229, 109, 59, 65, 62, 249, 113,
77     247, 239, 20, 63, 107, 72, 217, 43, 12, 124, 241, 209, 32, 66, 134, 239, 169, 154, 59, 182, 106, 163, 190,
78     214, 232, 213, 73, 97, 57, 163, 137, 66, 59, 238, 12, 142, 87, 37, 182, 22, 60, 106, 235, 237 };
79 
80 static uint8_t g_prime256v1PointUncompressedBlobData[] = { 4, 153, 228, 156, 119, 184, 185, 120, 237, 233, 181,
81     77, 70, 183, 30, 68, 2, 70, 37, 251, 5, 22, 199, 84, 87, 222, 65, 103, 8, 26, 255, 137, 206, 80, 159, 163,
82     46, 22, 104, 156, 169, 14, 149, 199, 35, 201, 3, 160, 81, 251, 235, 236, 75, 137, 196, 253, 200, 116, 167,
83     59, 153, 241, 99, 90, 90 };
84 
85 static uint8_t g_secp384r1PointUncompressedBlobData[] = { 4, 246, 157, 255, 226, 94, 109, 16, 243, 109, 34, 121,
86     62, 12, 160, 181, 60, 89, 27, 60, 236, 118, 93, 113, 123, 64, 220, 231, 248, 113, 220, 130, 75, 164, 174, 128,
87     84, 135, 212, 122, 99, 97, 167, 89, 56, 162, 60, 50, 185, 154, 231, 102, 187, 58, 105, 237, 215, 53, 88, 253,
88     33, 45, 36, 25, 176, 112, 110, 132, 39, 33, 56, 224, 21, 225, 8, 108, 81, 106, 157, 33, 210, 105, 138, 130, 163,
89     96, 112, 183, 179, 241, 25, 188, 121, 68, 180, 169, 149 };
90 
91 static uint8_t g_secp521r1PointUncompressedBlobData[] = { 4, 0, 234, 87, 65, 173, 170, 194, 156, 174, 174,
92     229, 236, 236, 195, 107, 24, 24, 169, 187, 160, 28, 11, 239, 70, 163, 131, 233, 157, 104, 41, 202, 208,
93     166, 209, 217, 39, 225, 163, 33, 17, 134, 48, 150, 111, 225, 193, 219, 232, 234, 117, 100, 27, 169, 172,
94     60, 186, 69, 246, 244, 218, 249, 188, 96, 49, 247, 125, 0, 70, 67, 187, 0, 72, 109, 99, 50, 173, 42, 250,
95     10, 89, 166, 85, 64, 28, 145, 30, 130, 174, 147, 22, 232, 37, 17, 158, 165, 178, 11, 34, 58, 98, 98, 43, 32,
96     146, 102, 178, 198, 176, 41, 150, 37, 43, 132, 232, 32, 98, 143, 125, 255, 173, 158, 227, 4, 238, 168, 113,
97     194, 162, 74, 234, 239, 102 };
98 
99 static uint8_t g_p160r1PointUncompressedBlobData[] = { 4, 162, 100, 90, 91, 16, 253, 183, 186, 164, 222, 247,
100     223, 75, 228, 92, 253, 253, 250, 38, 30, 125, 172, 62, 13, 109, 61, 63, 160, 20, 103, 94, 7, 68, 115, 202,
101     170, 157, 244, 174, 26 };
102 
103 static uint8_t g_p160t1PointUncompressedBlobData[] = { 4, 73, 116, 114, 251, 6, 125, 11, 84, 159, 140, 0, 164,
104     101, 40, 147, 227, 28, 143, 224, 160, 217, 185, 12, 197, 39, 34, 91, 119, 135, 123, 80, 45, 26, 156, 221,
105     2, 79, 242, 45, 24 };
106 
107 static uint8_t g_p192r1PointUncompressedBlobData[] = { 4, 72, 15, 250, 255, 107, 128, 70, 56, 144, 154, 23,
108     141, 54, 19, 255, 134, 235, 12, 187, 128, 121, 41, 255, 141, 69, 81, 100, 94, 238, 15, 166, 184, 1, 214,
109     220, 222, 12, 239, 145, 184, 143, 146, 165, 9, 107, 74, 199, 1 };
110 
111 static uint8_t g_p192t1PointUncompressedBlobData[] = { 4, 131, 174, 50, 196, 198, 2, 164, 255, 193, 233, 237, 217,
112     47, 191, 35, 6, 166, 69, 42, 38, 128, 134, 29, 97, 23, 242, 82, 96, 164, 135, 108, 120, 179, 105, 10, 32, 90,
113     152, 99, 10, 2, 220, 184, 207, 8, 65, 168, 95 };
114 
115 static uint8_t g_p224r1PointUncompressedBlobData[] = { 4, 179, 154, 82, 152, 164, 40, 37, 88, 133, 242, 75, 160,
116     244, 155, 186, 103, 163, 44, 100, 137, 114, 124, 28, 27, 187, 99, 235, 123, 46, 127, 137, 234, 188, 6, 91, 68,
117     250, 89, 231, 62, 179, 47, 119, 221, 5, 73, 128, 12, 241, 57, 101, 15, 9, 95, 11, 101 };
118 
119 static uint8_t g_p224t1PointUncompressedBlobData[] = { 4, 187, 42, 38, 78, 26, 235, 23, 233, 222, 133, 167, 236,
120     86, 95, 104, 44, 160, 133, 41, 92, 214, 174, 194, 43, 214, 123, 12, 188, 210, 117, 152, 50, 0, 136, 6, 92, 57,
121     236, 246, 150, 145, 249, 150, 185, 255, 116, 28, 111, 22, 173, 25, 205, 96, 251, 61, 238 };
122 
123 static uint8_t g_p256r1PointUncompressedBlobData[] = { 4, 0, 181, 254, 30, 31, 239, 138, 26, 134, 97, 46, 250, 9, 142,
124     148, 201, 217, 224, 223, 68, 54, 180, 157, 30, 98, 140, 81, 237, 29, 242, 108, 3, 100, 127, 165, 176, 53, 73, 197,
125     151, 79, 219, 204, 98, 116, 71, 97, 1, 127, 216, 38, 84, 18, 157, 250, 240, 109, 251, 105, 243, 73, 17, 153, 138 };
126 
127 static uint8_t g_p256t1PointUncompressedBlobData[] = { 4, 134, 165, 93, 7, 187, 30, 225, 62, 157, 177, 229, 63, 104,
128     217, 148, 68, 85, 152, 34, 185, 100, 81, 111, 233, 193, 108, 198, 74, 37, 188, 46, 19, 136, 157, 88, 166, 194,
129     167, 157, 163, 173, 69, 7, 153, 48, 246, 3, 54, 127, 113, 145, 17, 128, 250, 210, 218, 249, 150, 249, 243, 178,
130     136, 112, 192 };
131 
132 static uint8_t g_p320r1PointUncompressedBlobData[] = { 4, 117, 229, 73, 102, 77, 218, 200, 35, 245, 163, 23, 219,
133     50, 180, 7, 60, 219, 87, 135, 67, 214, 34, 71, 1, 75, 227, 143, 253, 203, 40, 246, 249, 210, 64, 255, 186, 202,
134     161, 214, 203, 91, 159, 114, 252, 134, 230, 86, 188, 103, 223, 217, 12, 238, 118, 6, 232, 161, 198, 195, 139, 62,
135     36, 98, 212, 129, 215, 178, 83, 137, 164, 95, 239, 238, 216, 222, 125, 246, 105, 66, 164 };
136 
137 static uint8_t g_p320t1PointUncompressedBlobData[] = { 4, 188, 215, 24, 76, 167, 218, 220, 193, 3, 105, 145, 175,
138     125, 17, 15, 227, 69, 120, 196, 97, 151, 3, 116, 23, 83, 71, 204, 133, 13, 225, 88, 31, 11, 168, 66, 57, 64, 233,
139     125, 156, 12, 28, 241, 242, 224, 110, 133, 157, 230, 106, 16, 126, 66, 37, 8, 235, 230, 90, 20, 253, 2, 223, 157,
140     135, 71, 161, 64, 111, 50, 212, 125, 187, 44, 181, 211, 76, 217, 53, 94, 162 };
141 
142 static uint8_t g_p384r1PointUncompressedBlobData[] = { 4, 24, 149, 106, 30, 33, 152, 247, 126, 23, 231, 139, 197,
143     240, 145, 3, 6, 38, 168, 157, 60, 153, 95, 41, 184, 110, 135, 222, 237, 86, 132, 255, 180, 245, 49, 41, 3, 223,
144     122, 210, 203, 213, 55, 108, 251, 65, 181, 168, 25, 69, 50, 124, 233, 124, 121, 89, 187, 238, 186, 163, 169, 88,
145     48, 7, 108, 206, 228, 141, 162, 127, 232, 67, 175, 95, 220, 178, 28, 152, 254, 148, 123, 46, 132, 222, 124, 11,
146     51, 152, 113, 44, 14, 222, 126, 142, 114, 10, 124 };
147 
148 static uint8_t g_p384t1PointUncompressedBlobData[] = { 4, 64, 192, 12, 47, 160, 35, 23, 244, 163, 108, 172, 235,
149     185, 100, 0, 180, 112, 85, 105, 29, 120, 105, 164, 148, 59, 168, 183, 168, 142, 141, 14, 121, 240, 132, 168, 4,
150     208, 142, 24, 226, 75, 169, 249, 46, 63, 61, 129, 154, 41, 6, 34, 81, 246, 230, 4, 227, 103, 106, 107, 216, 130,
151     58, 248, 156, 101, 96, 85, 109, 43, 233, 229, 96, 165, 188, 222, 226, 113, 17, 213, 194, 57, 142, 117, 129, 151,
152     187, 235, 43, 253, 132, 151, 96, 49, 85, 37, 101 };
153 
154 static uint8_t g_p512r1PointUncompressedBlobData[] = { 4, 18, 25, 192, 69, 115, 54, 110, 174, 51, 48, 253, 129, 31,
155     118, 237, 38, 1, 174, 8, 111, 74, 249, 149, 154, 119, 114, 59, 51, 160, 206, 70, 199, 202, 42, 98, 245, 170, 251,
156     154, 22, 243, 137, 182, 239, 219, 166, 28, 202, 183, 229, 2, 83, 16, 244, 211, 100, 30, 179, 251, 17, 52, 117, 55,
157     70, 114, 203, 60, 190, 163, 132, 156, 63, 246, 140, 173, 122, 80, 68, 155, 60, 74, 199, 248, 71, 134, 52, 228, 28,
158     122, 72, 100, 26, 36, 148, 20, 187, 59, 137, 98, 191, 165, 174, 43, 2, 68, 222, 184, 34, 108, 8, 155, 150, 12,
159     101, 120, 155, 164, 200, 52, 206, 240, 116, 158, 207, 180, 124, 210, 62 };
160 
161 static uint8_t g_p512t1PointUncompressedBlobData[] = { 4, 119, 56, 81, 46, 40, 173, 156, 49, 235, 26, 193, 122, 32,
162     201, 88, 18, 90, 55, 144, 84, 125, 90, 106, 169, 66, 124, 90, 44, 145, 100, 224, 192, 22, 241, 38, 185, 93, 163,
163     146, 221, 126, 222, 57, 95, 136, 139, 231, 85, 250, 133, 140, 81, 138, 66, 148, 253, 192, 217, 210, 33, 157, 60,
164     5, 113, 151, 65, 106, 113, 44, 250, 237, 139, 172, 190, 154, 142, 17, 77, 228, 232, 223, 31, 208, 83, 231, 120,
165     127, 36, 129, 82, 186, 219, 207, 87, 130, 231, 224, 111, 210, 88, 19, 147, 0, 37, 194, 9, 217, 191, 162, 77,
166     165, 32, 78, 141, 227, 44, 70, 156, 13, 250, 36, 93, 226, 178, 165, 61, 33, 63 };
167 
168 static HcfBlob g_secp224r1PointUncompressedBlob = {
169     .data = g_secp224r1PointUncompressedBlobData,
170     .len = SECP224R1_POINT_UNCOMPRESSED_SIZE
171 };
172 
173 static HcfBlob g_prime256v1PointUncompressedBlob = {
174     .data = g_prime256v1PointUncompressedBlobData,
175     .len = PRIME256V1_POINT_UNCOMPRESSED_SIZE
176 };
177 
178 static HcfBlob g_secp384r1PointUncompressedBlob = {
179     .data = g_secp384r1PointUncompressedBlobData,
180     .len = SECP384R1_POINT_UNCOMPRESSED_SIZE
181 };
182 
183 static HcfBlob g_secp521r1PointUncompressedBlob = {
184     .data = g_secp521r1PointUncompressedBlobData,
185     .len = SECP521R1_POINT_UNCOMPRESSED_SIZE
186 };
187 
188 static HcfBlob g_p160r1PointUncompressedBlob = {
189     .data = g_p160r1PointUncompressedBlobData,
190     .len = P160R1_POINT_UNCOMPRESSED_SIZE
191 };
192 
193 static HcfBlob g_p160t1PointUncompressedBlob = {
194     .data = g_p160t1PointUncompressedBlobData,
195     .len = P160T1_POINT_UNCOMPRESSED_SIZE
196 };
197 
198 static HcfBlob g_p192r1PointUncompressedBlob = {
199     .data = g_p192r1PointUncompressedBlobData,
200     .len = P192R1_POINT_UNCOMPRESSED_SIZE
201 };
202 
203 static HcfBlob g_p192t1PointUncompressedBlob = {
204     .data = g_p192t1PointUncompressedBlobData,
205     .len = P192T1_POINT_UNCOMPRESSED_SIZE
206 };
207 
208 static HcfBlob g_p224r1PointUncompressedBlob = {
209     .data = g_p224r1PointUncompressedBlobData,
210     .len = P224R1_POINT_UNCOMPRESSED_SIZE
211 };
212 
213 static HcfBlob g_p224t1PointUncompressedBlob = {
214     .data = g_p224t1PointUncompressedBlobData,
215     .len = P224T1_POINT_UNCOMPRESSED_SIZE
216 };
217 
218 static HcfBlob g_p256r1PointUncompressedBlob = {
219     .data = g_p256r1PointUncompressedBlobData,
220     .len = P256R1_POINT_UNCOMPRESSED_SIZE
221 };
222 
223 static HcfBlob g_p256t1PointUncompressedBlob = {
224     .data = g_p256t1PointUncompressedBlobData,
225     .len = P256T1_POINT_UNCOMPRESSED_SIZE
226 };
227 
228 static HcfBlob g_p320r1PointUncompressedBlob = {
229     .data = g_p320r1PointUncompressedBlobData,
230     .len = P320R1_POINT_UNCOMPRESSED_SIZE
231 };
232 
233 static HcfBlob g_p320t1PointUncompressedBlob = {
234     .data = g_p320t1PointUncompressedBlobData,
235     .len = P320T1_POINT_UNCOMPRESSED_SIZE
236 };
237 
238 static HcfBlob g_p384r1PointUncompressedBlob = {
239     .data = g_p384r1PointUncompressedBlobData,
240     .len = P384R1_POINT_UNCOMPRESSED_SIZE
241 };
242 
243 static HcfBlob g_p384t1PointUncompressedBlob = {
244     .data = g_p384t1PointUncompressedBlobData,
245     .len = P384T1_POINT_UNCOMPRESSED_SIZE
246 };
247 
248 static HcfBlob g_p512r1PointUncompressedBlob = {
249     .data = g_p512r1PointUncompressedBlobData,
250     .len = P512R1_POINT_UNCOMPRESSED_SIZE
251 };
252 
253 static HcfBlob g_p512t1PointUncompressedBlob = {
254     .data = g_p512t1PointUncompressedBlobData,
255     .len = P512T1_POINT_UNCOMPRESSED_SIZE
256 };
257 
258 // compressed point data size
259 constexpr size_t SECP224R1_POINT_COMPRESSED_SIZE = 29;
260 constexpr size_t PRIME256V1_POINT_COMPRESSED_SIZE = 33;
261 constexpr size_t SECP384R1_POINT_COMPRESSED_SIZE = 49;
262 constexpr size_t SECP521R1_POINT_COMPRESSED_SIZE = 67;
263 constexpr size_t P160R1_POINT_COMPRESSED_SIZE = 21;
264 constexpr size_t P160T1_POINT_COMPRESSED_SIZE = 21;
265 constexpr size_t P192R1_POINT_COMPRESSED_SIZE = 25;
266 constexpr size_t P192T1_POINT_COMPRESSED_SIZE = 25;
267 constexpr size_t P224R1_POINT_COMPRESSED_SIZE = 29;
268 constexpr size_t P224T1_POINT_COMPRESSED_SIZE = 29;
269 constexpr size_t P256R1_POINT_COMPRESSED_SIZE = 33;
270 constexpr size_t P256T1_POINT_COMPRESSED_SIZE = 33;
271 constexpr size_t P320R1_POINT_COMPRESSED_SIZE = 41;
272 constexpr size_t P320T1_POINT_COMPRESSED_SIZE = 41;
273 constexpr size_t P384R1_POINT_COMPRESSED_SIZE = 49;
274 constexpr size_t P384T1_POINT_COMPRESSED_SIZE = 49;
275 constexpr size_t P512R1_POINT_COMPRESSED_SIZE = 65;
276 constexpr size_t P512T1_POINT_COMPRESSED_SIZE = 65;
277 
278 // compressed point data
279 static uint8_t g_secp224r1PointCompressedBlobData[] = { 3, 56, 90, 25, 144, 206, 229, 109, 59, 65, 62, 249, 113,
280     247, 239, 20, 63, 107, 72, 217, 43, 12, 124, 241, 209, 32, 66, 134, 239 };
281 
282 static uint8_t g_prime256v1PointCompressedBlobData[] = { 2, 153, 228, 156, 119, 184, 185, 120, 237, 233, 181, 77,
283     70, 183, 30, 68, 2, 70, 37, 251, 5, 22, 199, 84, 87, 222, 65, 103, 8, 26, 255, 137, 206 };
284 
285 static uint8_t g_secp384r1PointCompressedBlobData[] = { 3, 246, 157, 255, 226, 94, 109, 16, 243, 109, 34, 121, 62,
286     12, 160, 181, 60, 89, 27, 60, 236, 118, 93, 113, 123, 64, 220, 231, 248, 113, 220, 130, 75, 164, 174, 128,
287     84, 135, 212, 122, 99, 97, 167, 89, 56, 162, 60, 50, 185 };
288 
289 static uint8_t g_secp521r1PointCompressedBlobData[] = { 2, 0, 234, 87, 65, 173, 170, 194, 156, 174, 174, 229, 236,
290     236, 195, 107, 24, 24, 169, 187, 160, 28, 11, 239, 70, 163, 131, 233, 157, 104, 41, 202, 208, 166, 209, 217, 39,
291     225, 163, 33, 17, 134, 48, 150, 111, 225, 193, 219, 232, 234, 117, 100, 27, 169, 172, 60, 186, 69, 246, 244, 218,
292     249, 188, 96, 49, 247, 125 };
293 
294 static uint8_t g_p160r1PointCompressedBlobData[] = { 2, 162, 100, 90, 91, 16, 253, 183, 186, 164, 222, 247, 223,
295     75, 228, 92, 253, 253, 250, 38, 30 };
296 
297 static uint8_t g_p160t1PointCompressedBlobData[] = { 2, 73, 116, 114, 251, 6, 125, 11, 84, 159, 140, 0, 164, 101,
298     40, 147, 227, 28, 143, 224, 160 };
299 
300 static uint8_t g_p192r1PointCompressedBlobData[] = { 3, 72, 15, 250, 255, 107, 128, 70, 56, 144, 154, 23, 141, 54,
301     19, 255, 134, 235, 12, 187, 128, 121, 41, 255, 141 };
302 
303 static uint8_t g_p192t1PointCompressedBlobData[] = { 3, 131, 174, 50, 196, 198, 2, 164, 255, 193, 233, 237, 217, 47,
304     191, 35, 6, 166, 69, 42, 38, 128, 134, 29, 97 };
305 
306 static uint8_t g_p224r1PointCompressedBlobData[] = { 3, 179, 154, 82, 152, 164, 40, 37, 88, 133, 242, 75, 160, 244,
307     155, 186, 103, 163, 44, 100, 137, 114, 124, 28, 27, 187, 99, 235, 123 };
308 
309 static uint8_t g_p224t1PointCompressedBlobData[] = { 2, 187, 42, 38, 78, 26, 235, 23, 233, 222, 133, 167, 236, 86,
310     95, 104, 44, 160, 133, 41, 92, 214, 174, 194, 43, 214, 123, 12, 188 };
311 
312 static uint8_t g_p256r1PointCompressedBlobData[] = { 2, 0, 181, 254, 30, 31, 239, 138, 26, 134, 97, 46, 250, 9,
313     142, 148, 201, 217, 224, 223, 68, 54, 180, 157, 30, 98, 140, 81, 237, 29, 242, 108, 3 };
314 
315 static uint8_t g_p256t1PointCompressedBlobData[] = { 2, 134, 165, 93, 7, 187, 30, 225, 62, 157, 177, 229, 63, 104,
316     217, 148, 68, 85, 152, 34, 185, 100, 81, 111, 233, 193, 108, 198, 74, 37, 188, 46, 19 };
317 
318 static uint8_t g_p320r1PointCompressedBlobData[] = { 2, 117, 229, 73, 102, 77, 218, 200, 35, 245, 163, 23, 219,
319     50, 180, 7, 60, 219, 87, 135, 67, 214, 34, 71, 1, 75, 227, 143, 253, 203, 40, 246, 249, 210, 64, 255,
320     186, 202, 161, 214, 203 };
321 
322 static uint8_t g_p320t1PointCompressedBlobData[] = { 2, 188, 215, 24, 76, 167, 218, 220, 193, 3, 105, 145, 175,
323     125, 17, 15, 227, 69, 120, 196, 97, 151, 3, 116, 23, 83, 71, 204, 133, 13, 225, 88, 31, 11, 168,
324     66, 57, 64, 233, 125, 156 };
325 
326 static uint8_t g_p384r1PointCompressedBlobData[] = { 2, 24, 149, 106, 30, 33, 152, 247, 126, 23, 231, 139, 197,
327     240, 145, 3, 6, 38, 168, 157, 60, 153, 95, 41, 184, 110, 135, 222, 237, 86, 132, 255, 180, 245, 49, 41, 3,
328     223, 122, 210, 203, 213, 55, 108, 251, 65, 181, 168, 25 };
329 
330 static uint8_t g_p384t1PointCompressedBlobData[] = { 3, 64, 192, 12, 47, 160, 35, 23, 244, 163, 108, 172, 235,
331     185, 100, 0, 180, 112, 85, 105, 29, 120, 105, 164, 148, 59, 168, 183, 168, 142, 141, 14, 121, 240, 132, 168,
332     4, 208, 142, 24, 226, 75, 169, 249, 46, 63, 61, 129, 154 };
333 
334 static uint8_t g_p512r1PointCompressedBlobData[] = { 2, 18, 25, 192, 69, 115, 54, 110, 174, 51, 48, 253, 129,
335     31, 118, 237, 38, 1, 174, 8, 111, 74, 249, 149, 154, 119, 114, 59, 51, 160, 206, 70, 199, 202, 42, 98, 245,
336     170, 251, 154, 22, 243, 137, 182, 239, 219, 166, 28, 202, 183, 229, 2, 83, 16, 244, 211, 100, 30, 179, 251, 17,
337     52, 117, 55, 70 };
338 
339 static uint8_t g_p512t1PointCompressedBlobData[] = { 3, 119, 56, 81, 46, 40, 173, 156, 49, 235, 26, 193, 122, 32,
340     201, 88, 18, 90, 55, 144, 84, 125, 90, 106, 169, 66, 124, 90, 44, 145, 100, 224, 192, 22, 241, 38, 185, 93,
341     163, 146, 221, 126, 222, 57, 95, 136, 139, 231, 85, 250, 133, 140, 81, 138, 66, 148, 253, 192, 217, 210, 33,
342     157, 60, 5, 113 };
343 
344 static HcfBlob g_secp224r1PointCompressedBlob = {
345     .data = g_secp224r1PointCompressedBlobData,
346     .len = SECP224R1_POINT_COMPRESSED_SIZE
347 };
348 
349 static HcfBlob g_prime256v1PointCompressedBlob = {
350     .data = g_prime256v1PointCompressedBlobData,
351     .len = PRIME256V1_POINT_COMPRESSED_SIZE
352 };
353 
354 static HcfBlob g_secp384r1PointCompressedBlob = {
355     .data = g_secp384r1PointCompressedBlobData,
356     .len = SECP384R1_POINT_COMPRESSED_SIZE
357 };
358 
359 static HcfBlob g_secp521r1PointCompressedBlob = {
360     .data = g_secp521r1PointCompressedBlobData,
361     .len = SECP521R1_POINT_COMPRESSED_SIZE
362 };
363 
364 static HcfBlob g_p160r1PointCompressedBlob = {
365     .data = g_p160r1PointCompressedBlobData,
366     .len = P160R1_POINT_COMPRESSED_SIZE
367 };
368 
369 static HcfBlob g_p160t1PointCompressedBlob = {
370     .data = g_p160t1PointCompressedBlobData,
371     .len = P160T1_POINT_COMPRESSED_SIZE
372 };
373 
374 static HcfBlob g_p192r1PointCompressedBlob = {
375     .data = g_p192r1PointCompressedBlobData,
376     .len = P192R1_POINT_COMPRESSED_SIZE
377 };
378 
379 static HcfBlob g_p192t1PointCompressedBlob = {
380     .data = g_p192t1PointCompressedBlobData,
381     .len = P192T1_POINT_COMPRESSED_SIZE
382 };
383 
384 static HcfBlob g_p224r1PointCompressedBlob = {
385     .data = g_p224r1PointCompressedBlobData,
386     .len = P224R1_POINT_COMPRESSED_SIZE
387 };
388 
389 static HcfBlob g_p224t1PointCompressedBlob = {
390     .data = g_p224t1PointCompressedBlobData,
391     .len = P224T1_POINT_COMPRESSED_SIZE
392 };
393 
394 static HcfBlob g_p256r1PointCompressedBlob = {
395     .data = g_p256r1PointCompressedBlobData,
396     .len = P256R1_POINT_COMPRESSED_SIZE
397 };
398 
399 static HcfBlob g_p256t1PointCompressedBlob = {
400     .data = g_p256t1PointCompressedBlobData,
401     .len = P256T1_POINT_COMPRESSED_SIZE
402 };
403 
404 static HcfBlob g_p320r1PointCompressedBlob = {
405     .data = g_p320r1PointCompressedBlobData,
406     .len = P320R1_POINT_COMPRESSED_SIZE
407 };
408 
409 static HcfBlob g_p320t1PointCompressedBlob = {
410     .data = g_p320t1PointCompressedBlobData,
411     .len = P320T1_POINT_COMPRESSED_SIZE
412 };
413 
414 static HcfBlob g_p384r1PointCompressedBlob = {
415     .data = g_p384r1PointCompressedBlobData,
416     .len = P384R1_POINT_COMPRESSED_SIZE
417 };
418 
419 static HcfBlob g_p384t1PointCompressedBlob = {
420     .data = g_p384t1PointCompressedBlobData,
421     .len = P384T1_POINT_COMPRESSED_SIZE
422 };
423 
424 static HcfBlob g_p512r1PointCompressedBlob = {
425     .data = g_p512r1PointCompressedBlobData,
426     .len = P512R1_POINT_COMPRESSED_SIZE
427 };
428 
429 static HcfBlob g_p512t1PointCompressedBlob = {
430     .data = g_p512t1PointCompressedBlobData,
431     .len = P512T1_POINT_COMPRESSED_SIZE
432 };
433 
434 typedef struct {
435     const char *curveName;
436     HcfBlob *pointUncompressedBlob;
437     HcfBlob *pointCompressedBlob;
438 } PointData;
439 
440 static const PointData POINT_DATA_MAP[] = {
441     { "NID_secp224r1", &g_secp224r1PointUncompressedBlob, &g_secp224r1PointCompressedBlob },
442     { "NID_X9_62_prime256v1", &g_prime256v1PointUncompressedBlob, &g_prime256v1PointCompressedBlob },
443     { "NID_secp384r1", &g_secp384r1PointUncompressedBlob, &g_secp384r1PointCompressedBlob },
444     { "NID_secp521r1", &g_secp521r1PointUncompressedBlob, &g_secp521r1PointCompressedBlob },
445     { "NID_brainpoolP160r1", &g_p160r1PointUncompressedBlob, &g_p160r1PointCompressedBlob },
446     { "NID_brainpoolP160t1", &g_p160t1PointUncompressedBlob, &g_p160t1PointCompressedBlob },
447     { "NID_brainpoolP192r1", &g_p192r1PointUncompressedBlob, &g_p192r1PointCompressedBlob },
448     { "NID_brainpoolP192t1", &g_p192t1PointUncompressedBlob, &g_p192t1PointCompressedBlob },
449     { "NID_brainpoolP224r1", &g_p224r1PointUncompressedBlob, &g_p224r1PointCompressedBlob },
450     { "NID_brainpoolP224t1", &g_p224t1PointUncompressedBlob, &g_p224t1PointCompressedBlob },
451     { "NID_brainpoolP256r1", &g_p256r1PointUncompressedBlob, &g_p256r1PointCompressedBlob },
452     { "NID_brainpoolP256t1", &g_p256t1PointUncompressedBlob, &g_p256t1PointCompressedBlob },
453     { "NID_brainpoolP320r1", &g_p320r1PointUncompressedBlob, &g_p320r1PointCompressedBlob },
454     { "NID_brainpoolP320t1", &g_p320t1PointUncompressedBlob, &g_p320t1PointCompressedBlob },
455     { "NID_brainpoolP384r1", &g_p384r1PointUncompressedBlob, &g_p384r1PointCompressedBlob },
456     { "NID_brainpoolP384t1", &g_p384t1PointUncompressedBlob, &g_p384t1PointCompressedBlob },
457     { "NID_brainpoolP512r1", &g_p512r1PointUncompressedBlob, &g_p512r1PointCompressedBlob },
458     { "NID_brainpoolP512t1", &g_p512t1PointUncompressedBlob, &g_p512t1PointCompressedBlob }
459 };
460 
461 // uncompressed pubkey data size
462 constexpr size_t SECP224R1_PUBKEY_UNCOMPRESSED_SIZE = 80;
463 constexpr size_t PRIME256V1_PUBKEY_UNCOMPRESSED_SIZE = 91;
464 constexpr size_t SECP384R1_PUBKEY_UNCOMPRESSED_SIZE = 120;
465 constexpr size_t SECP521R1_PUBKEY_UNCOMPRESSED_SIZE = 158;
466 constexpr size_t P160R1_PUBKEY_UNCOMPRESSED_SIZE = 68;
467 constexpr size_t P160T1_PUBKEY_UNCOMPRESSED_SIZE = 68;
468 constexpr size_t P192R1_PUBKEY_UNCOMPRESSED_SIZE = 76;
469 constexpr size_t P192T1_PUBKEY_UNCOMPRESSED_SIZE = 76;
470 constexpr size_t P224R1_PUBKEY_UNCOMPRESSED_SIZE = 84;
471 constexpr size_t P224T1_PUBKEY_UNCOMPRESSED_SIZE = 84;
472 constexpr size_t P256R1_PUBKEY_UNCOMPRESSED_SIZE = 92;
473 constexpr size_t P256T1_PUBKEY_UNCOMPRESSED_SIZE = 92;
474 constexpr size_t P320R1_PUBKEY_UNCOMPRESSED_SIZE = 108;
475 constexpr size_t P320T1_PUBKEY_UNCOMPRESSED_SIZE = 108;
476 constexpr size_t P384R1_PUBKEY_UNCOMPRESSED_SIZE = 124;
477 constexpr size_t P384T1_PUBKEY_UNCOMPRESSED_SIZE = 124;
478 constexpr size_t P512R1_PUBKEY_UNCOMPRESSED_SIZE = 158;
479 constexpr size_t P512T1_PUBKEY_UNCOMPRESSED_SIZE = 158;
480 
481 // uncompressed pubkey data
482 static uint8_t g_secp224r1PubKeyUncompressedBlobData[] = { 48, 78, 48, 16, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 5, 43,
483     129, 4, 0, 33, 3, 58, 0, 4, 56, 90, 25, 144, 206, 229, 109, 59, 65, 62, 249, 113, 247, 239, 20, 63, 107, 72, 217,
484     43, 12, 124, 241, 209, 32, 66, 134, 239, 169, 154, 59, 182, 106, 163, 190, 214, 232, 213, 73, 97, 57, 163, 137,
485     66, 59, 238, 12, 142, 87, 37, 182, 22, 60, 106, 235, 237 };
486 
487 static uint8_t g_prime256v1PubKeyUncompressedBlobData[] = { 48, 89, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8,
488     42, 134, 72, 206, 61, 3, 1, 7, 3, 66, 0, 4, 153, 228, 156, 119, 184, 185, 120, 237, 233, 181, 77, 70, 183, 30,
489     68, 2, 70, 37, 251, 5, 22, 199, 84, 87, 222, 65, 103, 8, 26, 255, 137, 206, 80, 159, 163, 46, 22, 104, 156, 169,
490     14, 149, 199, 35, 201, 3, 160, 81, 251, 235, 236, 75, 137, 196, 253, 200, 116, 167, 59, 153, 241, 99, 90, 90 };
491 
492 static uint8_t g_secp384r1PubKeyUncompressedBlobData[] = { 48, 118, 48, 16, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 5,
493     43, 129, 4, 0, 34, 3, 98, 0, 4, 246, 157, 255, 226, 94, 109, 16, 243, 109, 34, 121, 62, 12, 160, 181, 60, 89, 27,
494     60, 236, 118, 93, 113, 123, 64, 220, 231, 248, 113, 220, 130, 75, 164, 174, 128, 84, 135, 212, 122, 99, 97, 167,
495     89, 56, 162, 60, 50, 185, 154, 231, 102, 187, 58, 105, 237, 215, 53, 88, 253, 33, 45, 36, 25, 176, 112, 110, 132,
496     39, 33, 56, 224, 21, 225, 8, 108, 81, 106, 157, 33, 210, 105, 138, 130, 163, 96, 112, 183, 179, 241, 25, 188,
497     121, 68, 180, 169, 149 };
498 
499 static uint8_t g_secp521r1PubKeyUncompressedBlobData[] = { 48, 129, 155, 48, 16, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6,
500     5, 43, 129, 4, 0, 35, 3, 129, 134, 0, 4, 0, 234, 87, 65, 173, 170, 194, 156, 174, 174, 229, 236, 236, 195, 107,
501     24, 24, 169, 187, 160, 28, 11, 239, 70, 163, 131, 233, 157, 104, 41, 202, 208, 166, 209, 217, 39, 225, 163, 33,
502     17, 134, 48, 150, 111, 225, 193, 219, 232, 234, 117, 100, 27, 169, 172, 60, 186, 69, 246, 244, 218, 249, 188, 96,
503     49, 247, 125, 0, 70, 67, 187, 0, 72, 109, 99, 50, 173, 42, 250, 10, 89, 166, 85, 64, 28, 145, 30, 130, 174, 147,
504     22, 232, 37, 17, 158, 165, 178, 11, 34, 58, 98, 98, 43, 32, 146, 102, 178, 198, 176, 41, 150, 37, 43, 132, 232,
505     32, 98, 143, 125, 255, 173, 158, 227, 4, 238, 168, 113, 194, 162, 74, 234, 239, 102 };
506 
507 static uint8_t g_p160r1PubKeyUncompressedBlobData[] = { 48, 66, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43,
508     36, 3, 3, 2, 8, 1, 1, 1, 3, 42, 0, 4, 162, 100, 90, 91, 16, 253, 183, 186, 164, 222, 247, 223, 75, 228, 92, 253,
509     253, 250, 38, 30, 125, 172, 62, 13, 109, 61, 63, 160, 20, 103, 94, 7, 68, 115, 202, 170, 157, 244, 174, 26 };
510 
511 static uint8_t g_p160t1PubKeyUncompressedBlobData[] = { 48, 66, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43,
512     36, 3, 3, 2, 8, 1, 1, 2, 3, 42, 0, 4, 73, 116, 114, 251, 6, 125, 11, 84, 159, 140, 0, 164, 101, 40, 147, 227, 28,
513     143, 224, 160, 217, 185, 12, 197, 39, 34, 91, 119, 135, 123, 80, 45, 26, 156, 221, 2, 79, 242, 45, 24 };
514 
515 static uint8_t g_p192r1PubKeyUncompressedBlobData[] = { 48, 74, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43,
516     36, 3, 3, 2, 8, 1, 1, 3, 3, 50, 0, 4, 72, 15, 250, 255, 107, 128, 70, 56, 144, 154, 23, 141, 54, 19, 255, 134,
517     235, 12, 187, 128, 121, 41, 255, 141, 69, 81, 100, 94, 238, 15, 166, 184, 1, 214, 220, 222, 12, 239, 145, 184,
518     143, 146, 165, 9, 107, 74, 199, 1 };
519 
520 static uint8_t g_p192t1PubKeyUncompressedBlobData[] = { 48, 74, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43,
521     36, 3, 3, 2, 8, 1, 1, 4, 3, 50, 0, 4, 131, 174, 50, 196, 198, 2, 164, 255, 193, 233, 237, 217, 47, 191, 35, 6,
522     166, 69, 42, 38, 128, 134, 29, 97, 23, 242, 82, 96, 164, 135, 108, 120, 179, 105, 10, 32, 90, 152, 99, 10, 2,
523     220, 184, 207, 8, 65, 168, 95 };
524 
525 static uint8_t g_p224r1PubKeyUncompressedBlobData[] = { 48, 82, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43,
526     36, 3, 3, 2, 8, 1, 1, 5, 3, 58, 0, 4, 179, 154, 82, 152, 164, 40, 37, 88, 133, 242, 75, 160, 244, 155, 186, 103,
527     163, 44, 100, 137, 114, 124, 28, 27, 187, 99, 235, 123, 46, 127, 137, 234, 188, 6, 91, 68, 250, 89, 231, 62,
528     179, 47, 119, 221, 5, 73, 128, 12, 241, 57, 101, 15, 9, 95, 11, 101 };
529 
530 static uint8_t g_p224t1PubKeyUncompressedBlobData[] = { 48, 82, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43,
531     36, 3, 3, 2, 8, 1, 1, 6, 3, 58, 0, 4, 187, 42, 38, 78, 26, 235, 23, 233, 222, 133, 167, 236, 86, 95, 104, 44,
532     160, 133, 41, 92, 214, 174, 194, 43, 214, 123, 12, 188, 210, 117, 152, 50, 0, 136, 6, 92, 57, 236, 246, 150, 145,
533     249, 150, 185, 255, 116, 28, 111, 22, 173, 25, 205, 96, 251, 61, 238 };
534 
535 static uint8_t g_p256r1PubKeyUncompressedBlobData[] = { 48, 90, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43,
536     36, 3, 3, 2, 8, 1, 1, 7, 3, 66, 0, 4, 0, 181, 254, 30, 31, 239, 138, 26, 134, 97, 46, 250, 9, 142, 148, 201,
537     217, 224, 223, 68, 54, 180, 157, 30, 98, 140, 81, 237, 29, 242, 108, 3, 100, 127, 165, 176, 53, 73, 197, 151,
538     79, 219, 204, 98, 116, 71, 97, 1, 127, 216, 38, 84, 18, 157, 250, 240, 109, 251, 105, 243, 73, 17, 153, 138 };
539 
540 static uint8_t g_p256t1PubKeyUncompressedBlobData[] = { 48, 90, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43,
541     36, 3, 3, 2, 8, 1, 1, 8, 3, 66, 0, 4, 134, 165, 93, 7, 187, 30, 225, 62, 157, 177, 229, 63, 104, 217, 148, 68,
542     85, 152, 34, 185, 100, 81, 111, 233, 193, 108, 198, 74, 37, 188, 46, 19, 136, 157, 88, 166, 194, 167, 157, 163,
543     173, 69, 7, 153, 48, 246, 3, 54, 127, 113, 145, 17, 128, 250, 210, 218, 249, 150, 249, 243, 178, 136, 112, 192 };
544 
545 static uint8_t g_p320r1PubKeyUncompressedBlobData[] = { 48, 106, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43,
546     36, 3, 3, 2, 8, 1, 1, 9, 3, 82, 0, 4, 117, 229, 73, 102, 77, 218, 200, 35, 245, 163, 23, 219, 50, 180, 7, 60,
547     219, 87, 135, 67, 214, 34, 71, 1, 75, 227, 143, 253, 203, 40, 246, 249, 210, 64, 255, 186, 202, 161, 214, 203,
548     91, 159, 114, 252, 134, 230, 86, 188, 103, 223, 217, 12, 238, 118, 6, 232, 161, 198, 195, 139, 62, 36, 98, 212,
549     129, 215, 178, 83, 137, 164, 95, 239, 238, 216, 222, 125, 246, 105, 66, 164 };
550 
551 static uint8_t g_p320t1PubKeyUncompressedBlobData[] = { 48, 106, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43,
552     36, 3, 3, 2, 8, 1, 1, 10, 3, 82, 0, 4, 188, 215, 24, 76, 167, 218, 220, 193, 3, 105, 145, 175, 125, 17, 15, 227,
553     69, 120, 196, 97, 151, 3, 116, 23, 83, 71, 204, 133, 13, 225, 88, 31, 11, 168, 66, 57, 64, 233, 125, 156, 12, 28,
554     241, 242, 224, 110, 133, 157, 230, 106, 16, 126, 66, 37, 8, 235, 230, 90, 20, 253, 2, 223, 157, 135, 71, 161, 64,
555     111, 50, 212, 125, 187, 44, 181, 211, 76, 217, 53, 94, 162 };
556 
557 static uint8_t g_p384r1PubKeyUncompressedBlobData[] = { 48, 122, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43,
558     36, 3, 3, 2, 8, 1, 1, 11, 3, 98, 0, 4, 24, 149, 106, 30, 33, 152, 247, 126, 23, 231, 139, 197, 240, 145, 3, 6, 38,
559     168, 157, 60, 153, 95, 41, 184, 110, 135, 222, 237, 86, 132, 255, 180, 245, 49, 41, 3, 223, 122, 210, 203, 213,
560     55, 108, 251, 65, 181, 168, 25, 69, 50, 124, 233, 124, 121, 89, 187, 238, 186, 163, 169, 88, 48, 7, 108, 206,
561     228, 141, 162, 127, 232, 67, 175, 95, 220, 178, 28, 152, 254, 148, 123, 46, 132, 222, 124, 11, 51, 152, 113,
562     44, 14, 222, 126, 142, 114, 10, 124 };
563 
564 static uint8_t g_p384t1PubKeyUncompressedBlobData[] = { 48, 122, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43,
565     36, 3, 3, 2, 8, 1, 1, 12, 3, 98, 0, 4, 64, 192, 12, 47, 160, 35, 23, 244, 163, 108, 172, 235, 185, 100, 0, 180,
566     112, 85, 105, 29, 120, 105, 164, 148, 59, 168, 183, 168, 142, 141, 14, 121, 240, 132, 168, 4, 208, 142, 24, 226,
567     75, 169, 249, 46, 63, 61, 129, 154, 41, 6, 34, 81, 246, 230, 4, 227, 103, 106, 107, 216, 130, 58, 248, 156, 101,
568     96, 85, 109, 43, 233, 229, 96, 165, 188, 222, 226, 113, 17, 213, 194, 57, 142, 117, 129, 151, 187, 235, 43, 253,
569     132, 151, 96, 49, 85, 37, 101 };
570 
571 static uint8_t g_p512r1PubKeyUncompressedBlobData[] = { 48, 129, 155, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9,
572     43, 36, 3, 3, 2, 8, 1, 1, 13, 3, 129, 130, 0, 4, 18, 25, 192, 69, 115, 54, 110, 174, 51, 48, 253, 129, 31, 118,
573     237, 38, 1, 174, 8, 111, 74, 249, 149, 154, 119, 114, 59, 51, 160, 206, 70, 199, 202, 42, 98, 245, 170, 251, 154,
574     22, 243, 137, 182, 239, 219, 166, 28, 202, 183, 229, 2, 83, 16, 244, 211, 100, 30, 179, 251, 17, 52, 117, 55, 70,
575     114, 203, 60, 190, 163, 132, 156, 63, 246, 140, 173, 122, 80, 68, 155, 60, 74, 199, 248, 71, 134, 52, 228, 28,
576     122, 72, 100, 26, 36, 148, 20, 187, 59, 137, 98, 191, 165, 174, 43, 2, 68, 222, 184, 34, 108, 8, 155, 150, 12,
577     101, 120, 155, 164, 200, 52, 206, 240, 116, 158, 207, 180, 124, 210, 62 };
578 
579 static uint8_t g_p512t1PubKeyUncompressedBlobData[] = { 48, 129, 155, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9,
580     43, 36, 3, 3, 2, 8, 1, 1, 14, 3, 129, 130, 0, 4, 119, 56, 81, 46, 40, 173, 156, 49, 235, 26, 193, 122, 32, 201,
581     88, 18, 90, 55, 144, 84, 125, 90, 106, 169, 66, 124, 90, 44, 145, 100, 224, 192, 22, 241, 38, 185, 93, 163, 146,
582     221, 126, 222, 57, 95, 136, 139, 231, 85, 250, 133, 140, 81, 138, 66, 148, 253, 192, 217, 210, 33, 157, 60, 5,
583     113, 151, 65, 106, 113, 44, 250, 237, 139, 172, 190, 154, 142, 17, 77, 228, 232, 223, 31, 208, 83, 231, 120,
584     127, 36, 129, 82, 186, 219, 207, 87, 130, 231, 224, 111, 210, 88, 19, 147, 0, 37, 194, 9, 217, 191, 162, 77,
585     165, 32, 78, 141, 227, 44, 70, 156, 13, 250, 36, 93, 226, 178, 165, 61, 33, 63 };
586 
587 static HcfBlob g_secp224r1PubKeyUncompressedBlob = {
588     .data = g_secp224r1PubKeyUncompressedBlobData,
589     .len = SECP224R1_PUBKEY_UNCOMPRESSED_SIZE
590 };
591 
592 static HcfBlob g_prime256v1PubKeyUncompressedBlob = {
593     .data = g_prime256v1PubKeyUncompressedBlobData,
594     .len = PRIME256V1_PUBKEY_UNCOMPRESSED_SIZE
595 };
596 
597 static HcfBlob g_secp384r1PubKeyUncompressedBlob = {
598     .data = g_secp384r1PubKeyUncompressedBlobData,
599     .len = SECP384R1_PUBKEY_UNCOMPRESSED_SIZE
600 };
601 
602 static HcfBlob g_secp521r1PubKeyUncompressedBlob = {
603     .data = g_secp521r1PubKeyUncompressedBlobData,
604     .len = SECP521R1_PUBKEY_UNCOMPRESSED_SIZE
605 };
606 
607 static HcfBlob g_p160r1PubKeyUncompressedBlob = {
608     .data = g_p160r1PubKeyUncompressedBlobData,
609     .len = P160R1_PUBKEY_UNCOMPRESSED_SIZE
610 };
611 
612 static HcfBlob g_p160t1PubKeyUncompressedBlob = {
613     .data = g_p160t1PubKeyUncompressedBlobData,
614     .len = P160T1_PUBKEY_UNCOMPRESSED_SIZE
615 };
616 
617 static HcfBlob g_p192r1PubKeyUncompressedBlob = {
618     .data = g_p192r1PubKeyUncompressedBlobData,
619     .len = P192R1_PUBKEY_UNCOMPRESSED_SIZE
620 };
621 
622 static HcfBlob g_p192t1PubKeyUncompressedBlob = {
623     .data = g_p192t1PubKeyUncompressedBlobData,
624     .len = P192T1_PUBKEY_UNCOMPRESSED_SIZE
625 };
626 
627 static HcfBlob g_p224r1PubKeyUncompressedBlob = {
628     .data = g_p224r1PubKeyUncompressedBlobData,
629     .len = P224R1_PUBKEY_UNCOMPRESSED_SIZE
630 };
631 
632 static HcfBlob g_p224t1PubKeyUncompressedBlob = {
633     .data = g_p224t1PubKeyUncompressedBlobData,
634     .len = P224T1_PUBKEY_UNCOMPRESSED_SIZE
635 };
636 
637 static HcfBlob g_p256r1PubKeyUncompressedBlob = {
638     .data = g_p256r1PubKeyUncompressedBlobData,
639     .len = P256R1_PUBKEY_UNCOMPRESSED_SIZE
640 };
641 
642 static HcfBlob g_p256t1PubKeyUncompressedBlob = {
643     .data = g_p256t1PubKeyUncompressedBlobData,
644     .len = P256T1_PUBKEY_UNCOMPRESSED_SIZE
645 };
646 
647 static HcfBlob g_p320r1PubKeyUncompressedBlob = {
648     .data = g_p320r1PubKeyUncompressedBlobData,
649     .len = P320R1_PUBKEY_UNCOMPRESSED_SIZE
650 };
651 
652 static HcfBlob g_p320t1PubKeyUncompressedBlob = {
653     .data = g_p320t1PubKeyUncompressedBlobData,
654     .len = P320T1_PUBKEY_UNCOMPRESSED_SIZE
655 };
656 
657 static HcfBlob g_p384r1PubKeyUncompressedBlob = {
658     .data = g_p384r1PubKeyUncompressedBlobData,
659     .len = P384R1_PUBKEY_UNCOMPRESSED_SIZE
660 };
661 
662 static HcfBlob g_p384t1PubKeyUncompressedBlob = {
663     .data = g_p384t1PubKeyUncompressedBlobData,
664     .len = P384T1_PUBKEY_UNCOMPRESSED_SIZE
665 };
666 
667 static HcfBlob g_p512r1PubKeyUncompressedBlob = {
668     .data = g_p512r1PubKeyUncompressedBlobData,
669     .len = P512R1_PUBKEY_UNCOMPRESSED_SIZE
670 };
671 
672 static HcfBlob g_p512t1PubKeyUncompressedBlob = {
673     .data = g_p512t1PubKeyUncompressedBlobData,
674     .len = P512T1_PUBKEY_UNCOMPRESSED_SIZE
675 };
676 
677 // compressed pubkey data size
678 constexpr size_t SECP224R1_PUBKEY_COMPRESSED_SIZE = 52;
679 constexpr size_t PRIME256V1_PUBKEY_COMPRESSED_SIZE = 59;
680 constexpr size_t SECP384R1_PUBKEY_COMPRESSED_SIZE = 72;
681 constexpr size_t SECP521R1_PUBKEY_COMPRESSED_SIZE = 90;
682 constexpr size_t P160R1_PUBKEY_COMPRESSED_SIZE = 48;
683 constexpr size_t P160T1_PUBKEY_COMPRESSED_SIZE = 48;
684 constexpr size_t P192R1_PUBKEY_COMPRESSED_SIZE = 52;
685 constexpr size_t P192T1_PUBKEY_COMPRESSED_SIZE = 52;
686 constexpr size_t P224R1_PUBKEY_COMPRESSED_SIZE = 56;
687 constexpr size_t P224T1_PUBKEY_COMPRESSED_SIZE = 56;
688 constexpr size_t P256R1_PUBKEY_COMPRESSED_SIZE = 60;
689 constexpr size_t P256T1_PUBKEY_COMPRESSED_SIZE = 60;
690 constexpr size_t P320R1_PUBKEY_COMPRESSED_SIZE = 68;
691 constexpr size_t P320T1_PUBKEY_COMPRESSED_SIZE = 68;
692 constexpr size_t P384R1_PUBKEY_COMPRESSED_SIZE = 76;
693 constexpr size_t P384T1_PUBKEY_COMPRESSED_SIZE = 76;
694 constexpr size_t P512R1_PUBKEY_COMPRESSED_SIZE = 92;
695 constexpr size_t P512T1_PUBKEY_COMPRESSED_SIZE = 92;
696 
697 // compressed pubkey data
698 static uint8_t g_secp224r1PubKeyCompressedBlobData[] = { 48, 50, 48, 16, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 5, 43,
699     129, 4, 0, 33, 3, 30, 0, 3, 56, 90, 25, 144, 206, 229, 109, 59, 65, 62, 249, 113, 247, 239, 20, 63, 107, 72,
700     217, 43, 12, 124, 241, 209, 32, 66, 134, 239 };
701 
702 static uint8_t g_prime256v1PubKeyCompressedBlobData[] = { 48, 57, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8,
703     42, 134, 72, 206, 61, 3, 1, 7, 3, 34, 0, 2, 153, 228, 156, 119, 184, 185, 120, 237, 233, 181, 77, 70, 183, 30,
704     68, 2, 70, 37, 251, 5, 22, 199, 84, 87, 222, 65, 103, 8, 26, 255, 137, 206 };
705 
706 static uint8_t g_secp384r1PubKeyCompressedBlobData[] = { 48, 70, 48, 16, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 5, 43,
707     129, 4, 0, 34, 3, 50, 0, 3, 246, 157, 255, 226, 94, 109, 16, 243, 109, 34, 121, 62, 12, 160, 181, 60, 89, 27, 60,
708     236, 118, 93, 113, 123, 64, 220, 231, 248, 113, 220, 130, 75, 164, 174, 128, 84, 135, 212, 122, 99, 97, 167,
709     89, 56, 162, 60, 50, 185 };
710 
711 static uint8_t g_secp521r1PubKeyCompressedBlobData[] = { 48, 88, 48, 16, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 5, 43,
712     129, 4, 0, 35, 3, 68, 0, 2, 0, 234, 87, 65, 173, 170, 194, 156, 174, 174, 229, 236, 236, 195, 107, 24, 24, 169,
713     187, 160, 28, 11, 239, 70, 163, 131, 233, 157, 104, 41, 202, 208, 166, 209, 217, 39, 225, 163, 33, 17, 134, 48,
714     150, 111, 225, 193, 219, 232, 234, 117, 100, 27, 169, 172, 60, 186, 69, 246, 244, 218, 249, 188, 96, 49, 247, 125 };
715 
716 static uint8_t g_p160r1PubKeyCompressedBlobData[] = { 48, 46, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43,
717     36, 3, 3, 2, 8, 1, 1, 1, 3, 22, 0, 2, 162, 100, 90, 91, 16, 253, 183, 186, 164, 222, 247, 223, 75, 228, 92,
718     253, 253, 250, 38, 30 };
719 
720 static uint8_t g_p160t1PubKeyCompressedBlobData[] = { 48, 46, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43,
721     36, 3, 3, 2, 8, 1, 1, 2, 3, 22, 0, 2, 73, 116, 114, 251, 6, 125, 11, 84, 159, 140, 0, 164, 101, 40, 147, 227,
722     28, 143, 224, 160 };
723 
724 static uint8_t g_p192r1PubKeyCompressedBlobData[] = { 48, 50, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43,
725     36, 3, 3, 2, 8, 1, 1, 3, 3, 26, 0, 3, 72, 15, 250, 255, 107, 128, 70, 56, 144, 154, 23, 141, 54, 19, 255, 134,
726     235, 12, 187, 128, 121, 41, 255, 141 };
727 
728 static uint8_t g_p192t1PubKeyCompressedBlobData[] = { 48, 50, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43,
729     36, 3, 3, 2, 8, 1, 1, 4, 3, 26, 0, 3, 131, 174, 50, 196, 198, 2, 164, 255, 193, 233, 237, 217, 47, 191, 35, 6,
730     166, 69, 42, 38, 128, 134, 29, 97 };
731 
732 static uint8_t g_p224r1PubKeyCompressedBlobData[] = { 48, 54, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43,
733     36, 3, 3, 2, 8, 1, 1, 5, 3, 30, 0, 3, 179, 154, 82, 152, 164, 40, 37, 88, 133, 242, 75, 160, 244, 155, 186, 103,
734     163, 44, 100, 137, 114, 124, 28, 27, 187, 99, 235, 123 };
735 
736 static uint8_t g_p224t1PubKeyCompressedBlobData[] = { 48, 54, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43,
737     36, 3, 3, 2, 8, 1, 1, 6, 3, 30, 0, 2, 187, 42, 38, 78, 26, 235, 23, 233, 222, 133, 167, 236, 86, 95, 104, 44,
738     160, 133, 41, 92, 214, 174, 194, 43, 214, 123, 12, 188 };
739 
740 static uint8_t g_p256r1PubKeyCompressedBlobData[] = { 48, 58, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43, 36,
741     3, 3, 2, 8, 1, 1, 7, 3, 34, 0, 2, 0, 181, 254, 30, 31, 239, 138, 26, 134, 97, 46, 250, 9, 142, 148, 201, 217, 224,
742     223, 68, 54, 180, 157, 30, 98, 140, 81, 237, 29, 242, 108, 3 };
743 
744 static uint8_t g_p256t1PubKeyCompressedBlobData[] = { 48, 58, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43, 36,
745     3, 3, 2, 8, 1, 1, 8, 3, 34, 0, 2, 134, 165, 93, 7, 187, 30, 225, 62, 157, 177, 229, 63, 104, 217, 148, 68, 85,
746     152, 34, 185, 100, 81, 111, 233, 193, 108, 198, 74, 37, 188, 46, 19 };
747 
748 static uint8_t g_p320r1PubKeyCompressedBlobData[] = { 48, 66, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43, 36,
749     3, 3, 2, 8, 1, 1, 9, 3, 42, 0, 2, 117, 229, 73, 102, 77, 218, 200, 35, 245, 163, 23, 219, 50, 180, 7, 60, 219,
750     87, 135, 67, 214, 34, 71, 1, 75, 227, 143, 253, 203, 40, 246, 249, 210, 64, 255, 186, 202, 161, 214, 203 };
751 
752 static uint8_t g_p320t1PubKeyCompressedBlobData[] = { 48, 66, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43, 36,
753     3, 3, 2, 8, 1, 1, 10, 3, 42, 0, 2, 188, 215, 24, 76, 167, 218, 220, 193, 3, 105, 145, 175, 125, 17, 15, 227, 69,
754     120, 196, 97, 151, 3, 116, 23, 83, 71, 204, 133, 13, 225, 88, 31, 11, 168, 66, 57, 64, 233, 125, 156 };
755 
756 static uint8_t g_p384r1PubKeyCompressedBlobData[] = { 48, 74, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43, 36,
757     3, 3, 2, 8, 1, 1, 11, 3, 50, 0, 2, 24, 149, 106, 30, 33, 152, 247, 126, 23, 231, 139, 197, 240, 145, 3, 6, 38,
758     168, 157, 60, 153, 95, 41, 184, 110, 135, 222, 237, 86, 132, 255, 180, 245, 49, 41, 3, 223, 122, 210, 203, 213,
759     55, 108, 251, 65, 181, 168, 25 };
760 
761 static uint8_t g_p384t1PubKeyCompressedBlobData[] = { 48, 74, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43, 36,
762     3, 3, 2, 8, 1, 1, 12, 3, 50, 0, 3, 64, 192, 12, 47, 160, 35, 23, 244, 163, 108, 172, 235, 185, 100, 0, 180, 112,
763     85, 105, 29, 120, 105, 164, 148, 59, 168, 183, 168, 142, 141, 14, 121, 240, 132, 168, 4, 208, 142, 24, 226, 75,
764     169, 249, 46, 63, 61, 129, 154 };
765 
766 static uint8_t g_p512r1PubKeyCompressedBlobData[] = { 48, 90, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43, 36,
767     3, 3, 2, 8, 1, 1, 13, 3, 66, 0, 2, 18, 25, 192, 69, 115, 54, 110, 174, 51, 48, 253, 129, 31, 118, 237, 38, 1, 174,
768     8, 111, 74, 249, 149, 154, 119, 114, 59, 51, 160, 206, 70, 199, 202, 42, 98, 245, 170, 251, 154, 22, 243, 137,
769     182, 239, 219, 166, 28, 202, 183, 229, 2, 83, 16, 244, 211, 100, 30, 179, 251, 17, 52, 117, 55, 70 };
770 
771 static uint8_t g_p512t1PubKeyCompressedBlobData[] = { 48, 90, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43,
772     36, 3, 3, 2, 8, 1, 1, 14, 3, 66, 0, 3, 119, 56, 81, 46, 40, 173, 156, 49, 235, 26, 193, 122, 32, 201, 88, 18, 90,
773     55, 144, 84, 125, 90, 106, 169, 66, 124, 90, 44, 145, 100, 224, 192, 22, 241, 38, 185, 93, 163, 146, 221, 126,
774     222, 57, 95, 136, 139, 231, 85, 250, 133, 140, 81, 138, 66, 148, 253, 192, 217, 210, 33, 157, 60, 5, 113 };
775 
776 static HcfBlob g_secp224r1PubKeyCompressedBlob = {
777     .data = g_secp224r1PubKeyCompressedBlobData,
778     .len = SECP224R1_PUBKEY_COMPRESSED_SIZE
779 };
780 
781 static HcfBlob g_prime256v1PubKeyCompressedBlob = {
782     .data = g_prime256v1PubKeyCompressedBlobData,
783     .len = PRIME256V1_PUBKEY_COMPRESSED_SIZE
784 };
785 
786 static HcfBlob g_secp384r1PubKeyCompressedBlob = {
787     .data = g_secp384r1PubKeyCompressedBlobData,
788     .len = SECP384R1_PUBKEY_COMPRESSED_SIZE
789 };
790 
791 static HcfBlob g_secp521r1PubKeyCompressedBlob = {
792     .data = g_secp521r1PubKeyCompressedBlobData,
793     .len = SECP521R1_PUBKEY_COMPRESSED_SIZE
794 };
795 
796 static HcfBlob g_p160r1PubKeyCompressedBlob = {
797     .data = g_p160r1PubKeyCompressedBlobData,
798     .len = P160R1_PUBKEY_COMPRESSED_SIZE
799 };
800 
801 static HcfBlob g_p160t1PubKeyCompressedBlob = {
802     .data = g_p160t1PubKeyCompressedBlobData,
803     .len = P160T1_PUBKEY_COMPRESSED_SIZE
804 };
805 
806 static HcfBlob g_p192r1PubKeyCompressedBlob = {
807     .data = g_p192r1PubKeyCompressedBlobData,
808     .len = P192R1_PUBKEY_COMPRESSED_SIZE
809 };
810 
811 static HcfBlob g_p192t1PubKeyCompressedBlob = {
812     .data = g_p192t1PubKeyCompressedBlobData,
813     .len = P192T1_PUBKEY_COMPRESSED_SIZE
814 };
815 
816 static HcfBlob g_p224r1PubKeyCompressedBlob = {
817     .data = g_p224r1PubKeyCompressedBlobData,
818     .len = P224R1_PUBKEY_COMPRESSED_SIZE
819 };
820 
821 static HcfBlob g_p224t1PubKeyCompressedBlob = {
822     .data = g_p224t1PubKeyCompressedBlobData,
823     .len = P224T1_PUBKEY_COMPRESSED_SIZE
824 };
825 
826 static HcfBlob g_p256r1PubKeyCompressedBlob = {
827     .data = g_p256r1PubKeyCompressedBlobData,
828     .len = P256R1_PUBKEY_COMPRESSED_SIZE
829 };
830 
831 static HcfBlob g_p256t1PubKeyCompressedBlob = {
832     .data = g_p256t1PubKeyCompressedBlobData,
833     .len = P256T1_PUBKEY_COMPRESSED_SIZE
834 };
835 
836 static HcfBlob g_p320r1PubKeyCompressedBlob = {
837     .data = g_p320r1PubKeyCompressedBlobData,
838     .len = P320R1_PUBKEY_COMPRESSED_SIZE
839 };
840 
841 static HcfBlob g_p320t1PubKeyCompressedBlob = {
842     .data = g_p320t1PubKeyCompressedBlobData,
843     .len = P320T1_PUBKEY_COMPRESSED_SIZE
844 };
845 
846 static HcfBlob g_p384r1PubKeyCompressedBlob = {
847     .data = g_p384r1PubKeyCompressedBlobData,
848     .len = P384R1_PUBKEY_COMPRESSED_SIZE
849 };
850 
851 static HcfBlob g_p384t1PubKeyCompressedBlob = {
852     .data = g_p384t1PubKeyCompressedBlobData,
853     .len = P384T1_PUBKEY_COMPRESSED_SIZE
854 };
855 
856 static HcfBlob g_p512r1PubKeyCompressedBlob = {
857     .data = g_p512r1PubKeyCompressedBlobData,
858     .len = P512R1_PUBKEY_COMPRESSED_SIZE
859 };
860 
861 static HcfBlob g_p512t1PubKeyCompressedBlob = {
862     .data = g_p512t1PubKeyCompressedBlobData,
863     .len = P512T1_PUBKEY_COMPRESSED_SIZE
864 };
865 
866 typedef struct {
867     const char *algoName;
868     HcfBlob *pubKeyUncompressedBlob;
869     HcfBlob *pubKeyCompressedBlob;
870 } PubKeyData;
871 
872 static const PubKeyData PUBKEY_DATA_MAP[] = {
873     { "ECC224", &g_secp224r1PubKeyUncompressedBlob, &g_secp224r1PubKeyCompressedBlob },
874     { "ECC256", &g_prime256v1PubKeyUncompressedBlob, &g_prime256v1PubKeyCompressedBlob },
875     { "ECC384", &g_secp384r1PubKeyUncompressedBlob, &g_secp384r1PubKeyCompressedBlob },
876     { "ECC521", &g_secp521r1PubKeyUncompressedBlob, &g_secp521r1PubKeyCompressedBlob },
877     { "ECC_BrainPoolP160r1", &g_p160r1PubKeyUncompressedBlob, &g_p160r1PubKeyCompressedBlob },
878     { "ECC_BrainPoolP160t1", &g_p160t1PubKeyUncompressedBlob, &g_p160t1PubKeyCompressedBlob },
879     { "ECC_BrainPoolP192r1", &g_p192r1PubKeyUncompressedBlob, &g_p192r1PubKeyCompressedBlob },
880     { "ECC_BrainPoolP192t1", &g_p192t1PubKeyUncompressedBlob, &g_p192t1PubKeyCompressedBlob },
881     { "ECC_BrainPoolP224r1", &g_p224r1PubKeyUncompressedBlob, &g_p224r1PubKeyCompressedBlob },
882     { "ECC_BrainPoolP224t1", &g_p224t1PubKeyUncompressedBlob, &g_p224t1PubKeyCompressedBlob },
883     { "ECC_BrainPoolP256r1", &g_p256r1PubKeyUncompressedBlob, &g_p256r1PubKeyCompressedBlob },
884     { "ECC_BrainPoolP256t1", &g_p256t1PubKeyUncompressedBlob, &g_p256t1PubKeyCompressedBlob },
885     { "ECC_BrainPoolP320r1", &g_p320r1PubKeyUncompressedBlob, &g_p320r1PubKeyCompressedBlob },
886     { "ECC_BrainPoolP320t1", &g_p320t1PubKeyUncompressedBlob, &g_p320t1PubKeyCompressedBlob },
887     { "ECC_BrainPoolP384r1", &g_p384r1PubKeyUncompressedBlob, &g_p384r1PubKeyCompressedBlob },
888     { "ECC_BrainPoolP384t1", &g_p384t1PubKeyUncompressedBlob, &g_p384t1PubKeyCompressedBlob },
889     { "ECC_BrainPoolP512r1", &g_p512r1PubKeyUncompressedBlob, &g_p512r1PubKeyCompressedBlob },
890     { "ECC_BrainPoolP512t1", &g_p512t1PubKeyUncompressedBlob, &g_p512t1PubKeyCompressedBlob }
891 };
892 
CompareBlobEqual(const HcfBlob * returnBlob,const HcfBlob * dataBlob)893 static HcfResult CompareBlobEqual(const HcfBlob *returnBlob, const HcfBlob *dataBlob)
894 {
895     if (returnBlob->len != dataBlob->len) {
896         return HCF_INVALID_PARAMS;
897     }
898     for (size_t i = 0; i < returnBlob->len; ++i) {
899         if (returnBlob->data[i] != dataBlob->data[i]) {
900             return HCF_INVALID_PARAMS;
901         }
902     }
903     return HCF_SUCCESS;
904 }
905 
906 static const char *g_inputMessageOne = "This is Sign test plan1";
907 static const char *g_inputMessageTwo = "This is Sign test plan2";
908 
909 static HcfBlob g_inputOne = {
910     .data = (uint8_t *)g_inputMessageOne,
911     .len = 24
912 };
913 
914 static HcfBlob g_inputTwo = {
915     .data = (uint8_t *)g_inputMessageTwo,
916     .len = 24
917 };
918 
919 // SM2_256 point data
920 constexpr size_t SM2_POINT_UNCOMPRESSED_SIZE = 65;
921 constexpr size_t SM2_POINT_COMPRESSED_SIZE = 33;
922 
923 static uint8_t g_sm2PointUncompressedBlobData[] = { 4, 232, 131, 204, 172, 46, 67, 127, 51, 64, 4, 236, 190, 110, 155,
924     221, 220, 226, 224, 249, 236, 223, 146, 39, 255, 109, 226, 6, 209, 45, 202, 86, 181, 160, 40, 124, 221, 226, 118,
925     123, 183, 204, 45, 101, 225, 70, 63, 119, 206, 144, 7, 150, 144, 217, 99, 86, 72, 5, 201, 78, 229,
926     209, 108, 112, 143 };
927 
928 static HcfBlob g_sm2PointUncompressedBlob = {
929     .data = g_sm2PointUncompressedBlobData,
930     .len = SM2_POINT_UNCOMPRESSED_SIZE
931 };
932 
933 static uint8_t g_sm2PointCompressedBlobData[] = { 3, 232, 131, 204, 172, 46, 67, 127, 51, 64, 4, 236, 190, 110, 155,
934     221, 220, 226, 224, 249, 236, 223, 146, 39, 255, 109, 226, 6, 209, 45, 202, 86, 181 };
935 
936 static HcfBlob g_sm2PointCompressedBlob = {
937     .data = g_sm2PointCompressedBlobData,
938     .len = SM2_POINT_COMPRESSED_SIZE
939 };
940 
941 // ECC_BrainPoolP256r1 public and private key data
942 constexpr size_t P256R1_PUBKEY_DATA_SIZE = 92;
943 constexpr size_t P256R1_PRIKEY_DATA_SIZE = 52;
944 constexpr size_t P256R1_POINT_DATA_SIZE = 65;
945 
946 static uint8_t g_p256r1PubKeyBlobData[] = { 48, 90, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43, 36, 3, 3, 2,
947     8, 1, 1, 7, 3, 66, 0, 4, 143, 39, 57, 249, 145, 50, 63, 222, 35, 70, 178, 121, 202, 154, 21, 146, 129, 75, 76, 63,
948     8, 195, 157, 111, 40, 217, 215, 148, 120, 224, 205, 82, 83, 92, 185, 21, 211, 184, 5, 19, 114, 33, 86, 85, 228,
949     123, 242, 206, 200, 98, 178, 184, 130, 35, 232, 45, 5, 202, 189, 11, 46, 163, 156, 152 };
950 
951 static uint8_t g_p256r1PriKeyBlobData[] = { 48, 50, 2, 1, 1, 4, 32, 165, 118, 226, 8, 158, 142, 142, 244, 62, 181,
952     245, 172, 27, 114, 153, 198, 201, 164, 46, 69, 119, 172, 231, 66, 110, 83, 17, 161, 225, 119, 127, 126, 160, 11,
953     6, 9, 43, 36, 3, 3, 2, 8, 1, 1, 7 };
954 
955 // Modify the first parameter of the x coordinate
956 static uint8_t g_p256r1ModifyPubKeyBlobData[] = { 48, 90, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43, 36, 3,
957     3, 2, 8, 1, 1, 7, 3, 66, 0, 4, 3, 39, 57, 249, 145, 50, 63, 222, 35, 70, 178, 121, 202, 154, 21, 146, 129, 75,
958     76, 63, 8, 195, 157, 111, 40, 217, 215, 148, 120, 224, 205, 82, 83, 92, 185, 21, 211, 184, 5, 19, 114, 33, 86,
959     85, 228, 123, 242, 206, 200, 98, 178, 184, 130, 35, 232, 45, 5, 202, 189, 11, 46, 163, 156, 152 };
960 
961 static uint8_t g_p256r1ModifyPointBlobData[] = { 4, 3, 39, 57, 249, 145, 50, 63, 222, 35, 70, 178, 121, 202, 154,
962     21, 146, 129, 75, 76, 63, 8, 195, 157, 111, 40, 217, 215, 148, 120, 224, 205, 82, 83, 92, 185, 21, 211, 184, 5,
963     19, 114, 33, 86, 85, 228, 123, 242, 206, 200, 98, 178, 184, 130, 35, 232, 45, 5, 202, 189, 11, 46, 163, 156, 152 };
964 
965 static HcfBlob g_p256r1PubKeyBlob = {
966     .data = g_p256r1PubKeyBlobData,
967     .len = P256R1_PUBKEY_DATA_SIZE
968 };
969 
970 static HcfBlob g_p256r1PriKeyBlob = {
971     .data = g_p256r1PriKeyBlobData,
972     .len = P256R1_PRIKEY_DATA_SIZE
973 };
974 
975 static HcfBlob g_p256r1ModifyPubKeyBlob = {
976     .data = g_p256r1ModifyPubKeyBlobData,
977     .len = P256R1_PUBKEY_DATA_SIZE
978 };
979 
980 static HcfBlob g_p256r1ModifyPointBlob = {
981     .data = g_p256r1ModifyPointBlobData,
982     .len = P256R1_POINT_DATA_SIZE
983 };
984 
985 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest001, TestSize.Level0)
986 {
987     HcfAsyKeyGenerator *generator = nullptr;
988     HcfKeyPair *keyPair = nullptr;
989     HcfSign *sign = nullptr;
990     HcfVerify *verify = nullptr;
991     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
992     HcfResult ret = HCF_INVALID_PARAMS;
993 
994     ret = HcfAsyKeyGeneratorCreate("ECC_BrainPoolP256r1", &generator);
995     EXPECT_EQ(ret, HCF_SUCCESS);
996     EXPECT_NE(generator, nullptr);
997 
998     ret = generator->convertKey(generator, nullptr, &g_p256r1PubKeyBlob, &g_p256r1PriKeyBlob, &keyPair);
999     EXPECT_EQ(ret, HCF_SUCCESS);
1000     EXPECT_NE(keyPair, nullptr);
1001 
1002     ret = HcfSignCreate("ECC_BrainPoolP256r1|SHA256", &sign);
1003     EXPECT_EQ(ret, HCF_SUCCESS);
1004     EXPECT_NE(sign, nullptr);
1005 
1006     ret = sign->init(sign, nullptr, keyPair->priKey);
1007     EXPECT_EQ(ret, HCF_SUCCESS);
1008 
1009     ret = sign->update(sign, &g_inputOne);
1010     EXPECT_EQ(ret, HCF_SUCCESS);
1011 
1012     ret = sign->sign(sign, &g_inputTwo, &returnBlob);
1013     EXPECT_EQ(ret, HCF_SUCCESS);
1014     EXPECT_NE(returnBlob.len, 0);
1015 
1016     ret = HcfVerifyCreate("ECC_BrainPoolP256r1|SHA256", &verify);
1017     EXPECT_EQ(ret, HCF_SUCCESS);
1018     EXPECT_NE(verify, nullptr);
1019 
1020     ret = verify->init(verify, nullptr, keyPair->pubKey);
1021     EXPECT_EQ(ret, HCF_SUCCESS);
1022 
1023     ret = verify->update(verify, &g_inputOne);
1024     bool flag = verify->verify(verify, &g_inputTwo, &returnBlob);
1025     EXPECT_EQ(flag, true);
1026 
1027     HcfObjDestroy(generator);
1028     HcfObjDestroy(sign);
1029     HcfObjDestroy(verify);
1030     HcfBlobDataFree(&returnBlob);
1031 }
1032 
1033 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest002, TestSize.Level0)
1034 {
1035     HcfAsyKeyGenerator *generator = nullptr;
1036     HcfKeyAgreement *keyAgreement = nullptr;
1037     HcfKeyPair *keyPair = nullptr;
1038     HcfKeyPair *outKeyPair = nullptr;
1039     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1040     HcfBlob outBlob = { .data = nullptr, .len = 0 };
1041     HcfResult ret = HCF_INVALID_PARAMS;
1042     ret = HcfAsyKeyGeneratorCreate("ECC_BrainPoolP256r1", &generator);
1043     EXPECT_EQ(ret, HCF_SUCCESS);
1044     EXPECT_NE(generator, nullptr);
1045 
1046     ret = generator->convertKey(generator, nullptr, &g_p256r1PubKeyBlob, &g_p256r1PriKeyBlob, &keyPair);
1047     EXPECT_EQ(ret, HCF_SUCCESS);
1048     EXPECT_NE(keyPair, nullptr);
1049 
1050     ret = generator->generateKeyPair(generator, nullptr, &outKeyPair);
1051     EXPECT_EQ(ret, HCF_SUCCESS);
1052     EXPECT_NE(outKeyPair, nullptr);
1053 
1054     ret = HcfKeyAgreementCreate("ECC_BrainPoolP256r1", &keyAgreement);
1055     EXPECT_EQ(ret, HCF_SUCCESS);
1056     EXPECT_NE(keyAgreement, nullptr);
1057 
1058     ret = keyAgreement->generateSecret(keyAgreement, outKeyPair->priKey, keyPair->pubKey, &returnBlob);
1059     EXPECT_EQ(ret, HCF_SUCCESS);
1060     EXPECT_NE(returnBlob.len, 0);
1061 
1062     ret = keyAgreement->generateSecret(keyAgreement, keyPair->priKey, outKeyPair->pubKey, &outBlob);
1063     EXPECT_EQ(ret, HCF_SUCCESS);
1064     EXPECT_NE(outBlob.len, 0);
1065 
1066     ret = CompareBlobEqual(&returnBlob, &outBlob);
1067     EXPECT_EQ(ret, HCF_SUCCESS);
1068 
1069     HcfObjDestroy(keyPair);
1070     HcfObjDestroy(outKeyPair);
1071     HcfObjDestroy(generator);
1072     HcfBlobDataFree(&returnBlob);
1073     HcfBlobDataFree(&outBlob);
1074     HcfObjDestroy(keyAgreement);
1075 }
1076 
1077 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest003, TestSize.Level0)
1078 {
1079     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1080     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1081     HcfResult ret = HCF_INVALID_PARAMS;
1082     ret = HcfConvertPoint("NID_sm2", &g_sm2PointUncompressedBlob, &returnPoint);
1083     EXPECT_EQ(ret, HCF_SUCCESS);
1084     EXPECT_NE(returnPoint.x.len, 0);
1085 
1086     ret = HcfGetEncodedPoint("NID_sm2", &returnPoint, g_pointCompressedFormat, &returnBlob);
1087     EXPECT_EQ(ret, HCF_SUCCESS);
1088     EXPECT_NE(returnBlob.len, 0);
1089 
1090     ret = CompareBlobEqual(&returnBlob, &g_sm2PointCompressedBlob);
1091     EXPECT_EQ(ret, HCF_SUCCESS);
1092 
1093     FreeEcPointMem(&returnPoint);
1094     HcfBlobDataFree(&returnBlob);
1095 }
1096 
1097 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest004, TestSize.Level0)
1098 {
1099     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1100     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1101     HcfResult ret = HCF_INVALID_PARAMS;
1102     ret = HcfConvertPoint("NID_sm2", &g_sm2PointCompressedBlob, &returnPoint);
1103     EXPECT_EQ(ret, HCF_SUCCESS);
1104     EXPECT_NE(returnPoint.x.len, 0);
1105 
1106     ret = HcfGetEncodedPoint("NID_sm2", &returnPoint, g_pointUnCompressedFormat, &returnBlob);
1107     EXPECT_EQ(ret, HCF_SUCCESS);
1108     EXPECT_NE(returnBlob.len, 0);
1109 
1110     ret = CompareBlobEqual(&returnBlob, &g_sm2PointUncompressedBlob);
1111     EXPECT_EQ(ret, HCF_SUCCESS);
1112 
1113     FreeEcPointMem(&returnPoint);
1114     HcfBlobDataFree(&returnBlob);
1115 }
1116 
1117 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest005, TestSize.Level0)
1118 {
1119     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1120     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1121     HcfResult ret = HCF_INVALID_PARAMS;
1122     for (uint32_t i = 0; i < sizeof(POINT_DATA_MAP) / sizeof(POINT_DATA_MAP[0]); i++) {
1123         ret = HcfConvertPoint(POINT_DATA_MAP[i].curveName, POINT_DATA_MAP[i].pointUncompressedBlob, &returnPoint);
1124         EXPECT_EQ(ret, HCF_SUCCESS);
1125         EXPECT_NE(returnPoint.x.len, 0);
1126 
1127         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, &returnPoint, g_pointCompressedFormat, &returnBlob);
1128         EXPECT_EQ(ret, HCF_SUCCESS);
1129         EXPECT_NE(returnBlob.len, 0);
1130 
1131         ret = CompareBlobEqual(&returnBlob, POINT_DATA_MAP[i].pointCompressedBlob);
1132         EXPECT_EQ(ret, HCF_SUCCESS);
1133 
1134         FreeEcPointMem(&returnPoint);
1135         HcfBlobDataFree(&returnBlob);
1136     }
1137 }
1138 
1139 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest006, TestSize.Level0)
1140 {
1141     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1142     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1143     HcfResult ret = HCF_INVALID_PARAMS;
1144     for (uint32_t i = 0; i < sizeof(POINT_DATA_MAP) / sizeof(POINT_DATA_MAP[0]); i++) {
1145         ret = HcfConvertPoint(POINT_DATA_MAP[i].curveName, POINT_DATA_MAP[i].pointUncompressedBlob, &returnPoint);
1146         EXPECT_EQ(ret, HCF_SUCCESS);
1147         EXPECT_NE(returnPoint.x.len, 0);
1148 
1149         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, &returnPoint, g_pointUnCompressedFormat, &returnBlob);
1150         EXPECT_EQ(ret, HCF_SUCCESS);
1151         EXPECT_NE(returnBlob.len, 0);
1152 
1153         ret = CompareBlobEqual(&returnBlob, POINT_DATA_MAP[i].pointUncompressedBlob);
1154         EXPECT_EQ(ret, HCF_SUCCESS);
1155 
1156         FreeEcPointMem(&returnPoint);
1157         HcfBlobDataFree(&returnBlob);
1158     }
1159 }
1160 
1161 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest007, TestSize.Level0)
1162 {
1163     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1164     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1165     HcfResult ret = HCF_INVALID_PARAMS;
1166     for (uint32_t i = 0; i < sizeof(POINT_DATA_MAP) / sizeof(POINT_DATA_MAP[0]); i++) {
1167         ret = HcfConvertPoint(POINT_DATA_MAP[i].curveName, POINT_DATA_MAP[i].pointCompressedBlob, &returnPoint);
1168         EXPECT_EQ(ret, HCF_SUCCESS);
1169         EXPECT_NE(returnPoint.x.len, 0);
1170 
1171         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, &returnPoint, g_pointCompressedFormat, &returnBlob);
1172         EXPECT_EQ(ret, HCF_SUCCESS);
1173         EXPECT_NE(returnBlob.len, 0);
1174 
1175         ret = CompareBlobEqual(&returnBlob, POINT_DATA_MAP[i].pointCompressedBlob);
1176         EXPECT_EQ(ret, HCF_SUCCESS);
1177 
1178         FreeEcPointMem(&returnPoint);
1179         HcfBlobDataFree(&returnBlob);
1180     }
1181 }
1182 
1183 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest008, TestSize.Level0)
1184 {
1185     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1186     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1187     HcfResult ret = HCF_INVALID_PARAMS;
1188     for (uint32_t i = 0; i < sizeof(POINT_DATA_MAP) / sizeof(POINT_DATA_MAP[0]); i++) {
1189         ret = HcfConvertPoint(POINT_DATA_MAP[i].curveName, POINT_DATA_MAP[i].pointCompressedBlob, &returnPoint);
1190         EXPECT_EQ(ret, HCF_SUCCESS);
1191         EXPECT_NE(returnPoint.x.len, 0);
1192 
1193         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, &returnPoint, g_pointUnCompressedFormat, &returnBlob);
1194         EXPECT_EQ(ret, HCF_SUCCESS);
1195         EXPECT_NE(returnBlob.len, 0);
1196 
1197         ret = CompareBlobEqual(&returnBlob, POINT_DATA_MAP[i].pointUncompressedBlob);
1198         EXPECT_EQ(ret, HCF_SUCCESS);
1199 
1200         FreeEcPointMem(&returnPoint);
1201         HcfBlobDataFree(&returnBlob);
1202     }
1203 }
1204 
1205 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest009, TestSize.Level0)
1206 {
1207     HcfAsyKeyGenerator *generator = nullptr;
1208     HcfKeyPair *keyPair = nullptr;
1209     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1210     HcfPoint outPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1211     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1212     AsyKeySpecItem itemPkX = ECC_PK_X_BN;
1213     AsyKeySpecItem itemPkY = ECC_PK_Y_BN;
1214     HcfResult ret = HCF_INVALID_PARAMS;
1215     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1216         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1217         EXPECT_EQ(ret, HCF_SUCCESS);
1218         EXPECT_NE(generator, nullptr);
1219 
1220         ret = generator->generateKeyPair(generator, nullptr, &keyPair);
1221         EXPECT_EQ(ret, HCF_SUCCESS);
1222         EXPECT_NE(keyPair, nullptr);
1223 
1224         ret = keyPair->pubKey->getAsyKeySpecBigInteger(keyPair->pubKey, itemPkX, &(returnPoint.x));
1225         EXPECT_EQ(ret, HCF_SUCCESS);
1226         EXPECT_NE(returnPoint.x.len, 0);
1227 
1228         ret = keyPair->pubKey->getAsyKeySpecBigInteger(keyPair->pubKey, itemPkY, &(returnPoint.y));
1229         EXPECT_EQ(ret, HCF_SUCCESS);
1230         EXPECT_NE(returnPoint.y.len, 0);
1231 
1232         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, &returnPoint, g_pointUnCompressedFormat, &returnBlob);
1233         EXPECT_EQ(ret, HCF_SUCCESS);
1234         EXPECT_NE(returnBlob.len, 0);
1235 
1236         ret = HcfConvertPoint(POINT_DATA_MAP[i].curveName, &returnBlob, &outPoint);
1237         EXPECT_EQ(ret, HCF_SUCCESS);
1238         EXPECT_NE(outPoint.x.len, 0);
1239 
1240         HcfObjDestroy(keyPair);
1241         HcfObjDestroy(generator);
1242         FreeEcPointMem(&returnPoint);
1243         FreeEcPointMem(&outPoint);
1244         HcfBlobDataFree(&returnBlob);
1245     }
1246 }
1247 
1248 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest010, TestSize.Level0)
1249 {
1250     HcfAsyKeyGenerator *generator = nullptr;
1251     HcfKeyPair *keyPair = nullptr;
1252     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1253     HcfPoint outPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1254     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1255     AsyKeySpecItem itemPkX = ECC_PK_X_BN;
1256     AsyKeySpecItem itemPkY = ECC_PK_Y_BN;
1257     HcfResult ret = HCF_INVALID_PARAMS;
1258     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1259         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1260         EXPECT_EQ(ret, HCF_SUCCESS);
1261         EXPECT_NE(generator, nullptr);
1262 
1263         ret = generator->generateKeyPair(generator, nullptr, &keyPair);
1264         EXPECT_EQ(ret, HCF_SUCCESS);
1265         EXPECT_NE(keyPair, nullptr);
1266 
1267         ret = keyPair->pubKey->getAsyKeySpecBigInteger(keyPair->pubKey, itemPkX, &(returnPoint.x));
1268         EXPECT_EQ(ret, HCF_SUCCESS);
1269         EXPECT_NE(returnPoint.x.len, 0);
1270 
1271         ret = keyPair->pubKey->getAsyKeySpecBigInteger(keyPair->pubKey, itemPkY, &(returnPoint.y));
1272         EXPECT_EQ(ret, HCF_SUCCESS);
1273         EXPECT_NE(returnPoint.y.len, 0);
1274 
1275         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, &returnPoint, g_pointCompressedFormat, &returnBlob);
1276         EXPECT_EQ(ret, HCF_SUCCESS);
1277         EXPECT_NE(returnBlob.len, 0);
1278 
1279         ret = HcfConvertPoint(POINT_DATA_MAP[i].curveName, &returnBlob, &outPoint);
1280         EXPECT_EQ(ret, HCF_SUCCESS);
1281         EXPECT_NE(outPoint.x.len, 0);
1282 
1283         HcfObjDestroy(keyPair);
1284         HcfObjDestroy(generator);
1285         FreeEcPointMem(&returnPoint);
1286         FreeEcPointMem(&outPoint);
1287         HcfBlobDataFree(&returnBlob);
1288     }
1289 }
1290 
1291 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest011, TestSize.Level0)
1292 {
1293     HcfAsyKeyGenerator *generator = nullptr;
1294     HcfKeyPair *keyPair = nullptr;
1295     HcfKeyPair *outKeyPair = nullptr;
1296     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1297     HcfResult ret = HCF_INVALID_PARAMS;
1298     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1299         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1300         EXPECT_EQ(ret, HCF_SUCCESS);
1301         EXPECT_NE(generator, nullptr);
1302 
1303         ret = generator->generateKeyPair(generator, nullptr, &keyPair);
1304         EXPECT_EQ(ret, HCF_SUCCESS);
1305         EXPECT_NE(keyPair, nullptr);
1306 
1307         ret = keyPair->pubKey->getEncodedDer(keyPair->pubKey, g_pubKeyUnCompressedFormat, &returnBlob);
1308         EXPECT_EQ(ret, HCF_SUCCESS);
1309         EXPECT_NE(returnBlob.len, 0);
1310 
1311         ret = generator->convertKey(generator, nullptr, &returnBlob, nullptr, &outKeyPair);
1312         EXPECT_EQ(ret, HCF_SUCCESS);
1313         EXPECT_NE(outKeyPair, nullptr);
1314 
1315         HcfObjDestroy(outKeyPair);
1316         HcfObjDestroy(keyPair);
1317         HcfObjDestroy(generator);
1318         HcfBlobDataFree(&returnBlob);
1319     }
1320 }
1321 
1322 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest012, TestSize.Level0)
1323 {
1324     HcfAsyKeyGenerator *generator = nullptr;
1325     HcfKeyPair *keyPair = nullptr;
1326     HcfKeyPair *outKeyPair = nullptr;
1327     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1328     HcfResult ret = HCF_INVALID_PARAMS;
1329     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1330         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1331         EXPECT_EQ(ret, HCF_SUCCESS);
1332         EXPECT_NE(generator, nullptr);
1333 
1334         ret = generator->generateKeyPair(generator, nullptr, &keyPair);
1335         EXPECT_EQ(ret, HCF_SUCCESS);
1336         EXPECT_NE(keyPair, nullptr);
1337 
1338         ret = keyPair->pubKey->getEncodedDer(keyPair->pubKey, g_pubKeyCompressedFormat, &returnBlob);
1339         EXPECT_EQ(ret, HCF_SUCCESS);
1340         EXPECT_NE(returnBlob.len, 0);
1341 
1342         ret = generator->convertKey(generator, nullptr, &returnBlob, nullptr, &outKeyPair);
1343         EXPECT_EQ(ret, HCF_SUCCESS);
1344         EXPECT_NE(outKeyPair, nullptr);
1345 
1346         HcfObjDestroy(outKeyPair);
1347         HcfObjDestroy(keyPair);
1348         HcfObjDestroy(generator);
1349         HcfBlobDataFree(&returnBlob);
1350     }
1351 }
1352 
1353 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest013, TestSize.Level0)
1354 {
1355     HcfAsyKeyGenerator *generator = nullptr;
1356     HcfKeyPair *keyPair = nullptr;
1357     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1358     HcfResult ret = HCF_INVALID_PARAMS;
1359     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1360         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1361         EXPECT_EQ(ret, HCF_SUCCESS);
1362         EXPECT_NE(generator, nullptr);
1363 
1364         ret = generator->convertKey(generator, nullptr, PUBKEY_DATA_MAP[i].pubKeyUncompressedBlob, nullptr, &keyPair);
1365         EXPECT_EQ(ret, HCF_SUCCESS);
1366         EXPECT_NE(keyPair, nullptr);
1367 
1368         ret = keyPair->pubKey->getEncodedDer(keyPair->pubKey, g_pubKeyCompressedFormat, &returnBlob);
1369         EXPECT_EQ(ret, HCF_SUCCESS);
1370         EXPECT_NE(returnBlob.len, 0);
1371 
1372         ret = CompareBlobEqual(&returnBlob, PUBKEY_DATA_MAP[i].pubKeyCompressedBlob);
1373         EXPECT_EQ(ret, HCF_SUCCESS);
1374 
1375         HcfObjDestroy(keyPair);
1376         HcfObjDestroy(generator);
1377         HcfBlobDataFree(&returnBlob);
1378     }
1379 }
1380 
1381 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest014, TestSize.Level0)
1382 {
1383     HcfAsyKeyGenerator *generator = nullptr;
1384     HcfKeyPair *keyPair = nullptr;
1385     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1386     HcfResult ret = HCF_INVALID_PARAMS;
1387     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1388         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1389         EXPECT_EQ(ret, HCF_SUCCESS);
1390         EXPECT_NE(generator, nullptr);
1391 
1392         ret = generator->convertKey(generator, nullptr, PUBKEY_DATA_MAP[i].pubKeyUncompressedBlob, nullptr, &keyPair);
1393         EXPECT_EQ(ret, HCF_SUCCESS);
1394         EXPECT_NE(keyPair, nullptr);
1395 
1396         ret = keyPair->pubKey->getEncodedDer(keyPair->pubKey, g_pubKeyUnCompressedFormat, &returnBlob);
1397         EXPECT_EQ(ret, HCF_SUCCESS);
1398         EXPECT_NE(returnBlob.len, 0);
1399 
1400         ret = CompareBlobEqual(&returnBlob, PUBKEY_DATA_MAP[i].pubKeyUncompressedBlob);
1401         EXPECT_EQ(ret, HCF_SUCCESS);
1402 
1403         HcfObjDestroy(keyPair);
1404         HcfObjDestroy(generator);
1405         HcfBlobDataFree(&returnBlob);
1406     }
1407 }
1408 
1409 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest015, TestSize.Level0)
1410 {
1411     HcfAsyKeyGenerator *generator = nullptr;
1412     HcfKeyPair *keyPair = nullptr;
1413     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1414     HcfResult ret = HCF_INVALID_PARAMS;
1415     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1416         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1417         EXPECT_EQ(ret, HCF_SUCCESS);
1418         EXPECT_NE(generator, nullptr);
1419 
1420         ret = generator->convertKey(generator, nullptr, PUBKEY_DATA_MAP[i].pubKeyCompressedBlob, nullptr, &keyPair);
1421         EXPECT_EQ(ret, HCF_SUCCESS);
1422         EXPECT_NE(keyPair, nullptr);
1423 
1424         ret = keyPair->pubKey->getEncodedDer(keyPair->pubKey, g_pubKeyCompressedFormat, &returnBlob);
1425         EXPECT_EQ(ret, HCF_SUCCESS);
1426         EXPECT_NE(returnBlob.len, 0);
1427 
1428         ret = CompareBlobEqual(&returnBlob, PUBKEY_DATA_MAP[i].pubKeyCompressedBlob);
1429         EXPECT_EQ(ret, HCF_SUCCESS);
1430 
1431         HcfObjDestroy(keyPair);
1432         HcfObjDestroy(generator);
1433         HcfBlobDataFree(&returnBlob);
1434     }
1435 }
1436 
1437 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest016, TestSize.Level0)
1438 {
1439     HcfAsyKeyGenerator *generator = nullptr;
1440     HcfKeyPair *keyPair = nullptr;
1441     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1442     HcfResult ret = HCF_INVALID_PARAMS;
1443     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1444         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1445         EXPECT_EQ(ret, HCF_SUCCESS);
1446         EXPECT_NE(generator, nullptr);
1447 
1448         ret = generator->convertKey(generator, nullptr, PUBKEY_DATA_MAP[i].pubKeyCompressedBlob, nullptr, &keyPair);
1449         EXPECT_EQ(ret, HCF_SUCCESS);
1450         EXPECT_NE(keyPair, nullptr);
1451 
1452         ret = keyPair->pubKey->getEncodedDer(keyPair->pubKey, g_pubKeyUnCompressedFormat, &returnBlob);
1453         EXPECT_EQ(ret, HCF_SUCCESS);
1454         EXPECT_NE(returnBlob.len, 0);
1455 
1456         ret = CompareBlobEqual(&returnBlob, PUBKEY_DATA_MAP[i].pubKeyUncompressedBlob);
1457         EXPECT_EQ(ret, HCF_SUCCESS);
1458 
1459         HcfObjDestroy(keyPair);
1460         HcfObjDestroy(generator);
1461         HcfBlobDataFree(&returnBlob);
1462     }
1463 }
1464 
1465 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest017, TestSize.Level0)
1466 {
1467     HcfAsyKeyGenerator *generator = nullptr;
1468     HcfKeyPair *keyPair = nullptr;
1469     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1470     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1471     AsyKeySpecItem itemPkX = ECC_PK_X_BN;
1472     AsyKeySpecItem itemPkY = ECC_PK_Y_BN;
1473     HcfResult ret = HCF_INVALID_PARAMS;
1474     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1475         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1476         EXPECT_EQ(ret, HCF_SUCCESS);
1477         EXPECT_NE(generator, nullptr);
1478 
1479         ret = generator->convertKey(generator, nullptr, PUBKEY_DATA_MAP[i].pubKeyUncompressedBlob, nullptr, &keyPair);
1480         EXPECT_EQ(ret, HCF_SUCCESS);
1481         EXPECT_NE(keyPair, nullptr);
1482 
1483         ret = keyPair->pubKey->getAsyKeySpecBigInteger(keyPair->pubKey, itemPkX, &(returnPoint.x));
1484         EXPECT_EQ(ret, HCF_SUCCESS);
1485         EXPECT_NE(returnPoint.x.len, 0);
1486 
1487         ret = keyPair->pubKey->getAsyKeySpecBigInteger(keyPair->pubKey, itemPkY, &(returnPoint.y));
1488         EXPECT_EQ(ret, HCF_SUCCESS);
1489         EXPECT_NE(returnPoint.y.len, 0);
1490 
1491         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, &returnPoint, g_pointCompressedFormat, &returnBlob);
1492         EXPECT_EQ(ret, HCF_SUCCESS);
1493         EXPECT_NE(returnBlob.len, 0);
1494 
1495         ret = CompareBlobEqual(&returnBlob, POINT_DATA_MAP[i].pointCompressedBlob);
1496         EXPECT_EQ(ret, HCF_SUCCESS);
1497 
1498         HcfObjDestroy(keyPair);
1499         HcfObjDestroy(generator);
1500         FreeEcPointMem(&returnPoint);
1501         HcfBlobDataFree(&returnBlob);
1502     }
1503 }
1504 
1505 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest018, TestSize.Level0)
1506 {
1507     HcfAsyKeyGenerator *generator = nullptr;
1508     HcfKeyPair *keyPair = nullptr;
1509     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1510     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1511     AsyKeySpecItem itemPkX = ECC_PK_X_BN;
1512     AsyKeySpecItem itemPkY = ECC_PK_Y_BN;
1513     HcfResult ret = HCF_INVALID_PARAMS;
1514     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1515         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1516         EXPECT_EQ(ret, HCF_SUCCESS);
1517         EXPECT_NE(generator, nullptr);
1518 
1519         ret = generator->convertKey(generator, nullptr, PUBKEY_DATA_MAP[i].pubKeyUncompressedBlob, nullptr, &keyPair);
1520         EXPECT_EQ(ret, HCF_SUCCESS);
1521         EXPECT_NE(keyPair, nullptr);
1522 
1523         ret = keyPair->pubKey->getAsyKeySpecBigInteger(keyPair->pubKey, itemPkX, &(returnPoint.x));
1524         EXPECT_EQ(ret, HCF_SUCCESS);
1525         EXPECT_NE(returnPoint.x.len, 0);
1526 
1527         ret = keyPair->pubKey->getAsyKeySpecBigInteger(keyPair->pubKey, itemPkY, &(returnPoint.y));
1528         EXPECT_EQ(ret, HCF_SUCCESS);
1529         EXPECT_NE(returnPoint.y.len, 0);
1530 
1531         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, &returnPoint, g_pointUnCompressedFormat, &returnBlob);
1532         EXPECT_EQ(ret, HCF_SUCCESS);
1533         EXPECT_NE(returnBlob.len, 0);
1534 
1535         ret = CompareBlobEqual(&returnBlob, POINT_DATA_MAP[i].pointUncompressedBlob);
1536         EXPECT_EQ(ret, HCF_SUCCESS);
1537 
1538         HcfObjDestroy(keyPair);
1539         HcfObjDestroy(generator);
1540         FreeEcPointMem(&returnPoint);
1541         HcfBlobDataFree(&returnBlob);
1542     }
1543 }
1544 
1545 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest019, TestSize.Level0)
1546 {
1547     HcfAsyKeyGenerator *generator = nullptr;
1548     HcfKeyPair *keyPair = nullptr;
1549     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1550     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1551     AsyKeySpecItem itemPkX = ECC_PK_X_BN;
1552     AsyKeySpecItem itemPkY = ECC_PK_Y_BN;
1553     HcfResult ret = HCF_INVALID_PARAMS;
1554     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1555         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1556         EXPECT_EQ(ret, HCF_SUCCESS);
1557         EXPECT_NE(generator, nullptr);
1558 
1559         ret = generator->convertKey(generator, nullptr, PUBKEY_DATA_MAP[i].pubKeyCompressedBlob, nullptr, &keyPair);
1560         EXPECT_EQ(ret, HCF_SUCCESS);
1561         EXPECT_NE(keyPair, nullptr);
1562 
1563         ret = keyPair->pubKey->getAsyKeySpecBigInteger(keyPair->pubKey, itemPkX, &(returnPoint.x));
1564         EXPECT_EQ(ret, HCF_SUCCESS);
1565         EXPECT_NE(returnPoint.x.len, 0);
1566 
1567         ret = keyPair->pubKey->getAsyKeySpecBigInteger(keyPair->pubKey, itemPkY, &(returnPoint.y));
1568         EXPECT_EQ(ret, HCF_SUCCESS);
1569         EXPECT_NE(returnPoint.y.len, 0);
1570 
1571         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, &returnPoint, g_pointCompressedFormat, &returnBlob);
1572         EXPECT_EQ(ret, HCF_SUCCESS);
1573         EXPECT_NE(returnBlob.len, 0);
1574 
1575         ret = CompareBlobEqual(&returnBlob, POINT_DATA_MAP[i].pointCompressedBlob);
1576         EXPECT_EQ(ret, HCF_SUCCESS);
1577 
1578         HcfObjDestroy(keyPair);
1579         HcfObjDestroy(generator);
1580         FreeEcPointMem(&returnPoint);
1581         HcfBlobDataFree(&returnBlob);
1582     }
1583 }
1584 
1585 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest020, TestSize.Level0)
1586 {
1587     HcfAsyKeyGenerator *generator = nullptr;
1588     HcfKeyPair *keyPair = nullptr;
1589     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1590     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1591     AsyKeySpecItem itemPkX = ECC_PK_X_BN;
1592     AsyKeySpecItem itemPkY = ECC_PK_Y_BN;
1593     HcfResult ret = HCF_INVALID_PARAMS;
1594     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1595         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1596         EXPECT_EQ(ret, HCF_SUCCESS);
1597         EXPECT_NE(generator, nullptr);
1598 
1599         ret = generator->convertKey(generator, nullptr, PUBKEY_DATA_MAP[i].pubKeyCompressedBlob, nullptr, &keyPair);
1600         EXPECT_EQ(ret, HCF_SUCCESS);
1601         EXPECT_NE(keyPair, nullptr);
1602 
1603         ret = keyPair->pubKey->getAsyKeySpecBigInteger(keyPair->pubKey, itemPkX, &(returnPoint.x));
1604         EXPECT_EQ(ret, HCF_SUCCESS);
1605         EXPECT_NE(returnPoint.x.len, 0);
1606 
1607         ret = keyPair->pubKey->getAsyKeySpecBigInteger(keyPair->pubKey, itemPkY, &(returnPoint.y));
1608         EXPECT_EQ(ret, HCF_SUCCESS);
1609         EXPECT_NE(returnPoint.y.len, 0);
1610 
1611         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, &returnPoint, g_pointUnCompressedFormat, &returnBlob);
1612         EXPECT_EQ(ret, HCF_SUCCESS);
1613         EXPECT_NE(returnBlob.len, 0);
1614 
1615         ret = CompareBlobEqual(&returnBlob, POINT_DATA_MAP[i].pointUncompressedBlob);
1616         EXPECT_EQ(ret, HCF_SUCCESS);
1617 
1618         HcfObjDestroy(keyPair);
1619         HcfObjDestroy(generator);
1620         FreeEcPointMem(&returnPoint);
1621         HcfBlobDataFree(&returnBlob);
1622     }
1623 }
1624 
1625 // Invalid input parameter
1626 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest031, TestSize.Level0)
1627 {
1628     HcfAsyKeyGenerator *generator = nullptr;
1629     HcfKeyPair *keyPair = nullptr;
1630     HcfResult ret = HCF_INVALID_PARAMS;
1631     ret = HcfAsyKeyGeneratorCreate("ECC_BrainPoolP256r1", &generator);
1632     EXPECT_EQ(ret, HCF_SUCCESS);
1633     EXPECT_NE(generator, nullptr);
1634 
1635     ret = generator->convertKey(nullptr, nullptr, &g_p256r1PubKeyUncompressedBlob, nullptr, &keyPair);
1636     EXPECT_NE(ret, HCF_SUCCESS);
1637     EXPECT_EQ(keyPair, nullptr);
1638 
1639     HcfObjDestroy(keyPair);
1640     HcfObjDestroy(generator);
1641 }
1642 
1643 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest032, TestSize.Level0)
1644 {
1645     HcfAsyKeyGenerator *generator = nullptr;
1646     HcfKeyPair *keyPair = nullptr;
1647     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1648     HcfResult ret = HCF_INVALID_PARAMS;
1649     ret = HcfAsyKeyGeneratorCreate("RSA512", &generator);
1650     EXPECT_EQ(ret, HCF_SUCCESS);
1651     EXPECT_NE(generator, nullptr);
1652 
1653     ret = generator->generateKeyPair(generator, nullptr, &keyPair);
1654     EXPECT_EQ(ret, HCF_SUCCESS);
1655     EXPECT_NE(keyPair, nullptr);
1656 
1657     ret = keyPair->pubKey->getEncodedDer(keyPair->pubKey, g_pubKeyCompressedFormat, &returnBlob);
1658     EXPECT_NE(ret, HCF_SUCCESS);
1659     EXPECT_EQ(returnBlob.len, 0);
1660 
1661     HcfObjDestroy(keyPair);
1662     HcfObjDestroy(generator);
1663     HcfBlobDataFree(&returnBlob);
1664 }
1665 
1666 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest033, TestSize.Level0)
1667 {
1668     HcfAsyKeyGenerator *generator = nullptr;
1669     HcfKeyPair *keyPair = nullptr;
1670     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1671     HcfResult ret = HCF_INVALID_PARAMS;
1672     ret = HcfAsyKeyGeneratorCreate("DSA1024", &generator);
1673     EXPECT_EQ(ret, HCF_SUCCESS);
1674     EXPECT_NE(generator, nullptr);
1675 
1676     ret = generator->generateKeyPair(generator, nullptr, &keyPair);
1677     EXPECT_EQ(ret, HCF_SUCCESS);
1678     EXPECT_NE(keyPair, nullptr);
1679 
1680     ret = keyPair->pubKey->getEncodedDer(keyPair->pubKey, g_pubKeyCompressedFormat, &returnBlob);
1681     EXPECT_NE(ret, HCF_SUCCESS);
1682     EXPECT_EQ(returnBlob.len, 0);
1683 
1684     HcfObjDestroy(keyPair);
1685     HcfObjDestroy(generator);
1686     HcfBlobDataFree(&returnBlob);
1687 }
1688 
1689 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest034, TestSize.Level0)
1690 {
1691     HcfAsyKeyGenerator *generator = nullptr;
1692     HcfKeyPair *keyPair = nullptr;
1693     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1694     HcfResult ret = HCF_INVALID_PARAMS;
1695     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1696         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1697         EXPECT_EQ(ret, HCF_SUCCESS);
1698         EXPECT_NE(generator, nullptr);
1699 
1700         ret = generator->generateKeyPair(generator, nullptr, &keyPair);
1701         EXPECT_EQ(ret, HCF_SUCCESS);
1702         EXPECT_NE(keyPair, nullptr);
1703 
1704         ret = keyPair->pubKey->getEncodedDer(nullptr, g_pubKeyCompressedFormat, &returnBlob);
1705         EXPECT_NE(ret, HCF_SUCCESS);
1706         EXPECT_EQ(returnBlob.len, 0);
1707 
1708         HcfObjDestroy(keyPair);
1709         HcfObjDestroy(generator);
1710         HcfBlobDataFree(&returnBlob);
1711     }
1712 }
1713 
1714 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest035, TestSize.Level0)
1715 {
1716     HcfAsyKeyGenerator *generator = nullptr;
1717     HcfKeyPair *keyPair = nullptr;
1718     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1719     HcfResult ret = HCF_INVALID_PARAMS;
1720     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1721         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1722         EXPECT_EQ(ret, HCF_SUCCESS);
1723         EXPECT_NE(generator, nullptr);
1724 
1725         ret = generator->generateKeyPair(generator, nullptr, &keyPair);
1726         EXPECT_EQ(ret, HCF_SUCCESS);
1727         EXPECT_NE(keyPair, nullptr);
1728 
1729         ret = keyPair->pubKey->getEncodedDer(keyPair->pubKey, nullptr, &returnBlob);
1730         EXPECT_NE(ret, HCF_SUCCESS);
1731         EXPECT_EQ(returnBlob.len, 0);
1732 
1733         HcfObjDestroy(keyPair);
1734         HcfObjDestroy(generator);
1735         HcfBlobDataFree(&returnBlob);
1736     }
1737 }
1738 
1739 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest036, TestSize.Level0)
1740 {
1741     HcfAsyKeyGenerator *generator = nullptr;
1742     HcfKeyPair *keyPair = nullptr;
1743     HcfResult ret = HCF_INVALID_PARAMS;
1744     ret = HcfAsyKeyGeneratorCreate("ECC_BrainPoolP256r1", &generator);
1745     EXPECT_EQ(ret, HCF_SUCCESS);
1746     EXPECT_NE(generator, nullptr);
1747 
1748     ret = generator->convertKey(generator, nullptr, &g_p256r1ModifyPubKeyBlob, nullptr, &keyPair);
1749     EXPECT_NE(ret, HCF_SUCCESS);
1750     EXPECT_EQ(keyPair, nullptr);
1751 
1752     HcfObjDestroy(keyPair);
1753     HcfObjDestroy(generator);
1754 }
1755 
1756 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest037, TestSize.Level0)
1757 {
1758     HcfAsyKeyGenerator *generator = nullptr;
1759     HcfKeyPair *keyPair = nullptr;
1760     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1761     HcfResult ret = HCF_INVALID_PARAMS;
1762     ret = HcfAsyKeyGeneratorCreate("ECC_BrainPoolP256r1", &generator);
1763     EXPECT_EQ(ret, HCF_SUCCESS);
1764     EXPECT_NE(generator, nullptr);
1765 
1766     ret = generator->convertKey(generator, nullptr, &g_p256t1PubKeyUncompressedBlob, nullptr, &keyPair);
1767     EXPECT_EQ(ret, HCF_SUCCESS);
1768     EXPECT_NE(keyPair, nullptr);
1769 
1770     ret = keyPair->pubKey->getEncodedDer(keyPair->pubKey, g_pubKeyUnCompressedFormat, &returnBlob);
1771     EXPECT_NE(ret, HCF_SUCCESS);
1772     EXPECT_EQ(returnBlob.len, 0);
1773 
1774     HcfObjDestroy(keyPair);
1775     HcfObjDestroy(generator);
1776     HcfBlobDataFree(&returnBlob);
1777 }
1778 
1779 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest038, TestSize.Level0)
1780 {
1781     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1782     HcfResult ret = HCF_INVALID_PARAMS;
1783     ret = HcfConvertPoint("NID_brainpoolP256r1", &g_p256r1ModifyPointBlob, &returnPoint);
1784     EXPECT_NE(ret, HCF_SUCCESS);
1785     EXPECT_EQ(returnPoint.x.len, 0);
1786 
1787     FreeEcPointMem(&returnPoint);
1788 }
1789 
1790 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest039, TestSize.Level0)
1791 {
1792     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1793     HcfResult ret = HCF_INVALID_PARAMS;
1794     ret = HcfConvertPoint("NID_brainpoolP256t1", &g_p256r1PointUncompressedBlob, &returnPoint);
1795     EXPECT_NE(ret, HCF_SUCCESS);
1796     EXPECT_EQ(returnPoint.x.len, 0);
1797 
1798     FreeEcPointMem(&returnPoint);
1799 }
1800 
1801 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest040, TestSize.Level0)
1802 {
1803     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1804     HcfResult ret = HCF_INVALID_PARAMS;
1805     ret = HcfConvertPoint("NID_brainpoolP256t1", &g_p256r1PointCompressedBlob, &returnPoint);
1806     EXPECT_NE(ret, HCF_SUCCESS);
1807     EXPECT_EQ(returnPoint.x.len, 0);
1808 
1809     FreeEcPointMem(&returnPoint);
1810 }
1811 
1812 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest041, TestSize.Level0)
1813 {
1814     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1815     HcfResult ret = HCF_INVALID_PARAMS;
1816     for (uint32_t i = 0; i < sizeof(POINT_DATA_MAP) / sizeof(POINT_DATA_MAP[0]); i++) {
1817         ret = HcfConvertPoint(PUBKEY_DATA_MAP[i].algoName, POINT_DATA_MAP[i].pointUncompressedBlob, &returnPoint);
1818         EXPECT_NE(ret, HCF_SUCCESS);
1819         EXPECT_EQ(returnPoint.x.len, 0);
1820 
1821         FreeEcPointMem(&returnPoint);
1822     }
1823 }
1824 
1825 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest042, TestSize.Level0)
1826 {
1827     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1828     HcfResult ret = HCF_INVALID_PARAMS;
1829     for (uint32_t i = 0; i < sizeof(POINT_DATA_MAP) / sizeof(POINT_DATA_MAP[0]); i++) {
1830         ret = HcfConvertPoint(POINT_DATA_MAP[i].curveName, PUBKEY_DATA_MAP[i].pubKeyUncompressedBlob, &returnPoint);
1831         EXPECT_NE(ret, HCF_SUCCESS);
1832         EXPECT_EQ(returnPoint.x.len, 0);
1833 
1834         FreeEcPointMem(&returnPoint);
1835     }
1836 }
1837 
1838 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest043, TestSize.Level0)
1839 {
1840     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1841     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1842     HcfResult ret = HCF_INVALID_PARAMS;
1843     for (uint32_t i = 0; i < sizeof(POINT_DATA_MAP) / sizeof(POINT_DATA_MAP[0]); i++) {
1844         ret = HcfConvertPoint(POINT_DATA_MAP[i].curveName, POINT_DATA_MAP[i].pointUncompressedBlob, &returnPoint);
1845         EXPECT_EQ(ret, HCF_SUCCESS);
1846         EXPECT_NE(returnPoint.x.len, 0);
1847 
1848         ret = HcfGetEncodedPoint(PUBKEY_DATA_MAP[i].algoName, &returnPoint, g_pointCompressedFormat, &returnBlob);
1849         EXPECT_NE(ret, HCF_SUCCESS);
1850         EXPECT_EQ(returnBlob.len, 0);
1851 
1852         FreeEcPointMem(&returnPoint);
1853         HcfBlobDataFree(&returnBlob);
1854     }
1855 }
1856 
1857 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest044, TestSize.Level0)
1858 {
1859     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1860     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1861     HcfResult ret = HCF_INVALID_PARAMS;
1862     for (uint32_t i = 0; i < sizeof(POINT_DATA_MAP) / sizeof(POINT_DATA_MAP[0]); i++) {
1863         ret = HcfConvertPoint(POINT_DATA_MAP[i].curveName, POINT_DATA_MAP[i].pointUncompressedBlob, &returnPoint);
1864         EXPECT_EQ(ret, HCF_SUCCESS);
1865         EXPECT_NE(returnPoint.x.len, 0);
1866 
1867         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, &returnPoint, "compress", &returnBlob);
1868         EXPECT_NE(ret, HCF_SUCCESS);
1869         EXPECT_EQ(returnBlob.len, 0);
1870 
1871         FreeEcPointMem(&returnPoint);
1872         HcfBlobDataFree(&returnBlob);
1873     }
1874 }
1875 
1876 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest045, TestSize.Level0)
1877 {
1878     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1879     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1880     HcfResult ret = HCF_INVALID_PARAMS;
1881     for (uint32_t i = 0; i < sizeof(POINT_DATA_MAP) / sizeof(POINT_DATA_MAP[0]); i++) {
1882         ret = HcfConvertPoint(POINT_DATA_MAP[i].curveName, POINT_DATA_MAP[i].pointUncompressedBlob, &returnPoint);
1883         EXPECT_EQ(ret, HCF_SUCCESS);
1884         EXPECT_NE(returnPoint.x.len, 0);
1885 
1886         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, nullptr, g_pointCompressedFormat, &returnBlob);
1887         EXPECT_NE(ret, HCF_SUCCESS);
1888         EXPECT_EQ(returnBlob.len, 0);
1889 
1890         FreeEcPointMem(&returnPoint);
1891         HcfBlobDataFree(&returnBlob);
1892     }
1893 }
1894 
1895 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest046, TestSize.Level0)
1896 {
1897     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1898     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1899     HcfResult ret = HCF_INVALID_PARAMS;
1900     for (uint32_t i = 0; i < sizeof(POINT_DATA_MAP) / sizeof(POINT_DATA_MAP[0]); i++) {
1901         ret = HcfConvertPoint(POINT_DATA_MAP[i].curveName, POINT_DATA_MAP[i].pointUncompressedBlob, &returnPoint);
1902         EXPECT_EQ(ret, HCF_SUCCESS);
1903         EXPECT_NE(returnPoint.x.len, 0);
1904 
1905         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, &returnPoint, g_pointCompressedFormat, nullptr);
1906         EXPECT_NE(ret, HCF_SUCCESS);
1907         EXPECT_EQ(returnBlob.len, 0);
1908 
1909         FreeEcPointMem(&returnPoint);
1910         HcfBlobDataFree(&returnBlob);
1911     }
1912 }
1913 
1914 }