• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *    http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
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(keyPair);
1028     HcfObjDestroy(generator);
1029     HcfObjDestroy(sign);
1030     HcfObjDestroy(verify);
1031     HcfBlobDataFree(&returnBlob);
1032 }
1033 
1034 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest002, TestSize.Level0)
1035 {
1036     HcfAsyKeyGenerator *generator = nullptr;
1037     HcfKeyAgreement *keyAgreement = nullptr;
1038     HcfKeyPair *keyPair = nullptr;
1039     HcfKeyPair *outKeyPair = nullptr;
1040     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1041     HcfBlob outBlob = { .data = nullptr, .len = 0 };
1042     HcfResult ret = HCF_INVALID_PARAMS;
1043     ret = HcfAsyKeyGeneratorCreate("ECC_BrainPoolP256r1", &generator);
1044     EXPECT_EQ(ret, HCF_SUCCESS);
1045     EXPECT_NE(generator, nullptr);
1046 
1047     ret = generator->convertKey(generator, nullptr, &g_p256r1PubKeyBlob, &g_p256r1PriKeyBlob, &keyPair);
1048     EXPECT_EQ(ret, HCF_SUCCESS);
1049     EXPECT_NE(keyPair, nullptr);
1050 
1051     ret = generator->generateKeyPair(generator, nullptr, &outKeyPair);
1052     EXPECT_EQ(ret, HCF_SUCCESS);
1053     EXPECT_NE(outKeyPair, nullptr);
1054 
1055     ret = HcfKeyAgreementCreate("ECC_BrainPoolP256r1", &keyAgreement);
1056     EXPECT_EQ(ret, HCF_SUCCESS);
1057     EXPECT_NE(keyAgreement, nullptr);
1058 
1059     ret = keyAgreement->generateSecret(keyAgreement, outKeyPair->priKey, keyPair->pubKey, &returnBlob);
1060     EXPECT_EQ(ret, HCF_SUCCESS);
1061     EXPECT_NE(returnBlob.len, 0);
1062 
1063     ret = keyAgreement->generateSecret(keyAgreement, keyPair->priKey, outKeyPair->pubKey, &outBlob);
1064     EXPECT_EQ(ret, HCF_SUCCESS);
1065     EXPECT_NE(outBlob.len, 0);
1066 
1067     ret = CompareBlobEqual(&returnBlob, &outBlob);
1068     EXPECT_EQ(ret, HCF_SUCCESS);
1069 
1070     HcfObjDestroy(keyPair);
1071     HcfObjDestroy(outKeyPair);
1072     HcfObjDestroy(generator);
1073     HcfBlobDataFree(&returnBlob);
1074     HcfBlobDataFree(&outBlob);
1075     HcfObjDestroy(keyAgreement);
1076 }
1077 
1078 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest003, TestSize.Level0)
1079 {
1080     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1081     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1082     HcfResult ret = HCF_INVALID_PARAMS;
1083     ret = HcfConvertPoint("NID_sm2", &g_sm2PointUncompressedBlob, &returnPoint);
1084     EXPECT_EQ(ret, HCF_SUCCESS);
1085     EXPECT_NE(returnPoint.x.len, 0);
1086 
1087     ret = HcfGetEncodedPoint("NID_sm2", &returnPoint, g_pointCompressedFormat, &returnBlob);
1088     EXPECT_EQ(ret, HCF_SUCCESS);
1089     EXPECT_NE(returnBlob.len, 0);
1090 
1091     ret = CompareBlobEqual(&returnBlob, &g_sm2PointCompressedBlob);
1092     EXPECT_EQ(ret, HCF_SUCCESS);
1093 
1094     FreeEcPointMem(&returnPoint);
1095     HcfBlobDataFree(&returnBlob);
1096 }
1097 
1098 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest004, TestSize.Level0)
1099 {
1100     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1101     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1102     HcfResult ret = HCF_INVALID_PARAMS;
1103     ret = HcfConvertPoint("NID_sm2", &g_sm2PointCompressedBlob, &returnPoint);
1104     EXPECT_EQ(ret, HCF_SUCCESS);
1105     EXPECT_NE(returnPoint.x.len, 0);
1106 
1107     ret = HcfGetEncodedPoint("NID_sm2", &returnPoint, g_pointUnCompressedFormat, &returnBlob);
1108     EXPECT_EQ(ret, HCF_SUCCESS);
1109     EXPECT_NE(returnBlob.len, 0);
1110 
1111     ret = CompareBlobEqual(&returnBlob, &g_sm2PointUncompressedBlob);
1112     EXPECT_EQ(ret, HCF_SUCCESS);
1113 
1114     FreeEcPointMem(&returnPoint);
1115     HcfBlobDataFree(&returnBlob);
1116 }
1117 
1118 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest005, TestSize.Level0)
1119 {
1120     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1121     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1122     HcfResult ret = HCF_INVALID_PARAMS;
1123     for (uint32_t i = 0; i < sizeof(POINT_DATA_MAP) / sizeof(POINT_DATA_MAP[0]); i++) {
1124         ret = HcfConvertPoint(POINT_DATA_MAP[i].curveName, POINT_DATA_MAP[i].pointUncompressedBlob, &returnPoint);
1125         EXPECT_EQ(ret, HCF_SUCCESS);
1126         EXPECT_NE(returnPoint.x.len, 0);
1127 
1128         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, &returnPoint, g_pointCompressedFormat, &returnBlob);
1129         EXPECT_EQ(ret, HCF_SUCCESS);
1130         EXPECT_NE(returnBlob.len, 0);
1131 
1132         ret = CompareBlobEqual(&returnBlob, POINT_DATA_MAP[i].pointCompressedBlob);
1133         EXPECT_EQ(ret, HCF_SUCCESS);
1134 
1135         FreeEcPointMem(&returnPoint);
1136         HcfBlobDataFree(&returnBlob);
1137     }
1138 }
1139 
1140 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest006, TestSize.Level0)
1141 {
1142     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1143     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1144     HcfResult ret = HCF_INVALID_PARAMS;
1145     for (uint32_t i = 0; i < sizeof(POINT_DATA_MAP) / sizeof(POINT_DATA_MAP[0]); i++) {
1146         ret = HcfConvertPoint(POINT_DATA_MAP[i].curveName, POINT_DATA_MAP[i].pointUncompressedBlob, &returnPoint);
1147         EXPECT_EQ(ret, HCF_SUCCESS);
1148         EXPECT_NE(returnPoint.x.len, 0);
1149 
1150         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, &returnPoint, g_pointUnCompressedFormat, &returnBlob);
1151         EXPECT_EQ(ret, HCF_SUCCESS);
1152         EXPECT_NE(returnBlob.len, 0);
1153 
1154         ret = CompareBlobEqual(&returnBlob, POINT_DATA_MAP[i].pointUncompressedBlob);
1155         EXPECT_EQ(ret, HCF_SUCCESS);
1156 
1157         FreeEcPointMem(&returnPoint);
1158         HcfBlobDataFree(&returnBlob);
1159     }
1160 }
1161 
1162 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest007, TestSize.Level0)
1163 {
1164     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1165     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1166     HcfResult ret = HCF_INVALID_PARAMS;
1167     for (uint32_t i = 0; i < sizeof(POINT_DATA_MAP) / sizeof(POINT_DATA_MAP[0]); i++) {
1168         ret = HcfConvertPoint(POINT_DATA_MAP[i].curveName, POINT_DATA_MAP[i].pointCompressedBlob, &returnPoint);
1169         EXPECT_EQ(ret, HCF_SUCCESS);
1170         EXPECT_NE(returnPoint.x.len, 0);
1171 
1172         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, &returnPoint, g_pointCompressedFormat, &returnBlob);
1173         EXPECT_EQ(ret, HCF_SUCCESS);
1174         EXPECT_NE(returnBlob.len, 0);
1175 
1176         ret = CompareBlobEqual(&returnBlob, POINT_DATA_MAP[i].pointCompressedBlob);
1177         EXPECT_EQ(ret, HCF_SUCCESS);
1178 
1179         FreeEcPointMem(&returnPoint);
1180         HcfBlobDataFree(&returnBlob);
1181     }
1182 }
1183 
1184 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest008, TestSize.Level0)
1185 {
1186     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1187     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1188     HcfResult ret = HCF_INVALID_PARAMS;
1189     for (uint32_t i = 0; i < sizeof(POINT_DATA_MAP) / sizeof(POINT_DATA_MAP[0]); i++) {
1190         ret = HcfConvertPoint(POINT_DATA_MAP[i].curveName, POINT_DATA_MAP[i].pointCompressedBlob, &returnPoint);
1191         EXPECT_EQ(ret, HCF_SUCCESS);
1192         EXPECT_NE(returnPoint.x.len, 0);
1193 
1194         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, &returnPoint, g_pointUnCompressedFormat, &returnBlob);
1195         EXPECT_EQ(ret, HCF_SUCCESS);
1196         EXPECT_NE(returnBlob.len, 0);
1197 
1198         ret = CompareBlobEqual(&returnBlob, POINT_DATA_MAP[i].pointUncompressedBlob);
1199         EXPECT_EQ(ret, HCF_SUCCESS);
1200 
1201         FreeEcPointMem(&returnPoint);
1202         HcfBlobDataFree(&returnBlob);
1203     }
1204 }
1205 
1206 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest009, TestSize.Level0)
1207 {
1208     HcfAsyKeyGenerator *generator = nullptr;
1209     HcfKeyPair *keyPair = nullptr;
1210     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1211     HcfPoint outPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1212     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1213     AsyKeySpecItem itemPkX = ECC_PK_X_BN;
1214     AsyKeySpecItem itemPkY = ECC_PK_Y_BN;
1215     HcfResult ret = HCF_INVALID_PARAMS;
1216     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1217         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1218         EXPECT_EQ(ret, HCF_SUCCESS);
1219         EXPECT_NE(generator, nullptr);
1220 
1221         ret = generator->generateKeyPair(generator, nullptr, &keyPair);
1222         EXPECT_EQ(ret, HCF_SUCCESS);
1223         EXPECT_NE(keyPair, nullptr);
1224 
1225         ret = keyPair->pubKey->getAsyKeySpecBigInteger(keyPair->pubKey, itemPkX, &(returnPoint.x));
1226         EXPECT_EQ(ret, HCF_SUCCESS);
1227         EXPECT_NE(returnPoint.x.len, 0);
1228 
1229         ret = keyPair->pubKey->getAsyKeySpecBigInteger(keyPair->pubKey, itemPkY, &(returnPoint.y));
1230         EXPECT_EQ(ret, HCF_SUCCESS);
1231         EXPECT_NE(returnPoint.y.len, 0);
1232 
1233         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, &returnPoint, g_pointUnCompressedFormat, &returnBlob);
1234         EXPECT_EQ(ret, HCF_SUCCESS);
1235         EXPECT_NE(returnBlob.len, 0);
1236 
1237         ret = HcfConvertPoint(POINT_DATA_MAP[i].curveName, &returnBlob, &outPoint);
1238         EXPECT_EQ(ret, HCF_SUCCESS);
1239         EXPECT_NE(outPoint.x.len, 0);
1240 
1241         HcfObjDestroy(keyPair);
1242         HcfObjDestroy(generator);
1243         FreeEcPointMem(&returnPoint);
1244         FreeEcPointMem(&outPoint);
1245         HcfBlobDataFree(&returnBlob);
1246     }
1247 }
1248 
1249 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest010, TestSize.Level0)
1250 {
1251     HcfAsyKeyGenerator *generator = nullptr;
1252     HcfKeyPair *keyPair = nullptr;
1253     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1254     HcfPoint outPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1255     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1256     AsyKeySpecItem itemPkX = ECC_PK_X_BN;
1257     AsyKeySpecItem itemPkY = ECC_PK_Y_BN;
1258     HcfResult ret = HCF_INVALID_PARAMS;
1259     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1260         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1261         EXPECT_EQ(ret, HCF_SUCCESS);
1262         EXPECT_NE(generator, nullptr);
1263 
1264         ret = generator->generateKeyPair(generator, nullptr, &keyPair);
1265         EXPECT_EQ(ret, HCF_SUCCESS);
1266         EXPECT_NE(keyPair, nullptr);
1267 
1268         ret = keyPair->pubKey->getAsyKeySpecBigInteger(keyPair->pubKey, itemPkX, &(returnPoint.x));
1269         EXPECT_EQ(ret, HCF_SUCCESS);
1270         EXPECT_NE(returnPoint.x.len, 0);
1271 
1272         ret = keyPair->pubKey->getAsyKeySpecBigInteger(keyPair->pubKey, itemPkY, &(returnPoint.y));
1273         EXPECT_EQ(ret, HCF_SUCCESS);
1274         EXPECT_NE(returnPoint.y.len, 0);
1275 
1276         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, &returnPoint, g_pointCompressedFormat, &returnBlob);
1277         EXPECT_EQ(ret, HCF_SUCCESS);
1278         EXPECT_NE(returnBlob.len, 0);
1279 
1280         ret = HcfConvertPoint(POINT_DATA_MAP[i].curveName, &returnBlob, &outPoint);
1281         EXPECT_EQ(ret, HCF_SUCCESS);
1282         EXPECT_NE(outPoint.x.len, 0);
1283 
1284         HcfObjDestroy(keyPair);
1285         HcfObjDestroy(generator);
1286         FreeEcPointMem(&returnPoint);
1287         FreeEcPointMem(&outPoint);
1288         HcfBlobDataFree(&returnBlob);
1289     }
1290 }
1291 
1292 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest011, TestSize.Level0)
1293 {
1294     HcfAsyKeyGenerator *generator = nullptr;
1295     HcfKeyPair *keyPair = nullptr;
1296     HcfKeyPair *outKeyPair = nullptr;
1297     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1298     HcfResult ret = HCF_INVALID_PARAMS;
1299     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1300         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1301         EXPECT_EQ(ret, HCF_SUCCESS);
1302         EXPECT_NE(generator, nullptr);
1303 
1304         ret = generator->generateKeyPair(generator, nullptr, &keyPair);
1305         EXPECT_EQ(ret, HCF_SUCCESS);
1306         EXPECT_NE(keyPair, nullptr);
1307 
1308         ret = keyPair->pubKey->getEncodedDer(keyPair->pubKey, g_pubKeyUnCompressedFormat, &returnBlob);
1309         EXPECT_EQ(ret, HCF_SUCCESS);
1310         EXPECT_NE(returnBlob.len, 0);
1311 
1312         ret = generator->convertKey(generator, nullptr, &returnBlob, nullptr, &outKeyPair);
1313         EXPECT_EQ(ret, HCF_SUCCESS);
1314         EXPECT_NE(outKeyPair, nullptr);
1315 
1316         HcfObjDestroy(outKeyPair);
1317         HcfObjDestroy(keyPair);
1318         HcfObjDestroy(generator);
1319         HcfBlobDataFree(&returnBlob);
1320     }
1321 }
1322 
1323 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest012, TestSize.Level0)
1324 {
1325     HcfAsyKeyGenerator *generator = nullptr;
1326     HcfKeyPair *keyPair = nullptr;
1327     HcfKeyPair *outKeyPair = nullptr;
1328     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1329     HcfResult ret = HCF_INVALID_PARAMS;
1330     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1331         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1332         EXPECT_EQ(ret, HCF_SUCCESS);
1333         EXPECT_NE(generator, nullptr);
1334 
1335         ret = generator->generateKeyPair(generator, nullptr, &keyPair);
1336         EXPECT_EQ(ret, HCF_SUCCESS);
1337         EXPECT_NE(keyPair, nullptr);
1338 
1339         ret = keyPair->pubKey->getEncodedDer(keyPair->pubKey, g_pubKeyCompressedFormat, &returnBlob);
1340         EXPECT_EQ(ret, HCF_SUCCESS);
1341         EXPECT_NE(returnBlob.len, 0);
1342 
1343         ret = generator->convertKey(generator, nullptr, &returnBlob, nullptr, &outKeyPair);
1344         EXPECT_EQ(ret, HCF_SUCCESS);
1345         EXPECT_NE(outKeyPair, nullptr);
1346 
1347         HcfObjDestroy(outKeyPair);
1348         HcfObjDestroy(keyPair);
1349         HcfObjDestroy(generator);
1350         HcfBlobDataFree(&returnBlob);
1351     }
1352 }
1353 
1354 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest013, TestSize.Level0)
1355 {
1356     HcfAsyKeyGenerator *generator = nullptr;
1357     HcfKeyPair *keyPair = nullptr;
1358     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1359     HcfResult ret = HCF_INVALID_PARAMS;
1360     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1361         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1362         EXPECT_EQ(ret, HCF_SUCCESS);
1363         EXPECT_NE(generator, nullptr);
1364 
1365         ret = generator->convertKey(generator, nullptr, PUBKEY_DATA_MAP[i].pubKeyUncompressedBlob, nullptr, &keyPair);
1366         EXPECT_EQ(ret, HCF_SUCCESS);
1367         EXPECT_NE(keyPair, nullptr);
1368 
1369         ret = keyPair->pubKey->getEncodedDer(keyPair->pubKey, g_pubKeyCompressedFormat, &returnBlob);
1370         EXPECT_EQ(ret, HCF_SUCCESS);
1371         EXPECT_NE(returnBlob.len, 0);
1372 
1373         ret = CompareBlobEqual(&returnBlob, PUBKEY_DATA_MAP[i].pubKeyCompressedBlob);
1374         EXPECT_EQ(ret, HCF_SUCCESS);
1375 
1376         HcfObjDestroy(keyPair);
1377         HcfObjDestroy(generator);
1378         HcfBlobDataFree(&returnBlob);
1379     }
1380 }
1381 
1382 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest014, TestSize.Level0)
1383 {
1384     HcfAsyKeyGenerator *generator = nullptr;
1385     HcfKeyPair *keyPair = nullptr;
1386     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1387     HcfResult ret = HCF_INVALID_PARAMS;
1388     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1389         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1390         EXPECT_EQ(ret, HCF_SUCCESS);
1391         EXPECT_NE(generator, nullptr);
1392 
1393         ret = generator->convertKey(generator, nullptr, PUBKEY_DATA_MAP[i].pubKeyUncompressedBlob, nullptr, &keyPair);
1394         EXPECT_EQ(ret, HCF_SUCCESS);
1395         EXPECT_NE(keyPair, nullptr);
1396 
1397         ret = keyPair->pubKey->getEncodedDer(keyPair->pubKey, g_pubKeyUnCompressedFormat, &returnBlob);
1398         EXPECT_EQ(ret, HCF_SUCCESS);
1399         EXPECT_NE(returnBlob.len, 0);
1400 
1401         ret = CompareBlobEqual(&returnBlob, PUBKEY_DATA_MAP[i].pubKeyUncompressedBlob);
1402         EXPECT_EQ(ret, HCF_SUCCESS);
1403 
1404         HcfObjDestroy(keyPair);
1405         HcfObjDestroy(generator);
1406         HcfBlobDataFree(&returnBlob);
1407     }
1408 }
1409 
1410 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest015, TestSize.Level0)
1411 {
1412     HcfAsyKeyGenerator *generator = nullptr;
1413     HcfKeyPair *keyPair = nullptr;
1414     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1415     HcfResult ret = HCF_INVALID_PARAMS;
1416     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1417         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1418         EXPECT_EQ(ret, HCF_SUCCESS);
1419         EXPECT_NE(generator, nullptr);
1420 
1421         ret = generator->convertKey(generator, nullptr, PUBKEY_DATA_MAP[i].pubKeyCompressedBlob, nullptr, &keyPair);
1422         EXPECT_EQ(ret, HCF_SUCCESS);
1423         EXPECT_NE(keyPair, nullptr);
1424 
1425         ret = keyPair->pubKey->getEncodedDer(keyPair->pubKey, g_pubKeyCompressedFormat, &returnBlob);
1426         EXPECT_EQ(ret, HCF_SUCCESS);
1427         EXPECT_NE(returnBlob.len, 0);
1428 
1429         ret = CompareBlobEqual(&returnBlob, PUBKEY_DATA_MAP[i].pubKeyCompressedBlob);
1430         EXPECT_EQ(ret, HCF_SUCCESS);
1431 
1432         HcfObjDestroy(keyPair);
1433         HcfObjDestroy(generator);
1434         HcfBlobDataFree(&returnBlob);
1435     }
1436 }
1437 
1438 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest016, TestSize.Level0)
1439 {
1440     HcfAsyKeyGenerator *generator = nullptr;
1441     HcfKeyPair *keyPair = nullptr;
1442     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1443     HcfResult ret = HCF_INVALID_PARAMS;
1444     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1445         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1446         EXPECT_EQ(ret, HCF_SUCCESS);
1447         EXPECT_NE(generator, nullptr);
1448 
1449         ret = generator->convertKey(generator, nullptr, PUBKEY_DATA_MAP[i].pubKeyCompressedBlob, nullptr, &keyPair);
1450         EXPECT_EQ(ret, HCF_SUCCESS);
1451         EXPECT_NE(keyPair, nullptr);
1452 
1453         ret = keyPair->pubKey->getEncodedDer(keyPair->pubKey, g_pubKeyUnCompressedFormat, &returnBlob);
1454         EXPECT_EQ(ret, HCF_SUCCESS);
1455         EXPECT_NE(returnBlob.len, 0);
1456 
1457         ret = CompareBlobEqual(&returnBlob, PUBKEY_DATA_MAP[i].pubKeyUncompressedBlob);
1458         EXPECT_EQ(ret, HCF_SUCCESS);
1459 
1460         HcfObjDestroy(keyPair);
1461         HcfObjDestroy(generator);
1462         HcfBlobDataFree(&returnBlob);
1463     }
1464 }
1465 
1466 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest017, TestSize.Level0)
1467 {
1468     HcfAsyKeyGenerator *generator = nullptr;
1469     HcfKeyPair *keyPair = nullptr;
1470     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1471     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1472     AsyKeySpecItem itemPkX = ECC_PK_X_BN;
1473     AsyKeySpecItem itemPkY = ECC_PK_Y_BN;
1474     HcfResult ret = HCF_INVALID_PARAMS;
1475     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1476         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1477         EXPECT_EQ(ret, HCF_SUCCESS);
1478         EXPECT_NE(generator, nullptr);
1479 
1480         ret = generator->convertKey(generator, nullptr, PUBKEY_DATA_MAP[i].pubKeyUncompressedBlob, nullptr, &keyPair);
1481         EXPECT_EQ(ret, HCF_SUCCESS);
1482         EXPECT_NE(keyPair, nullptr);
1483 
1484         ret = keyPair->pubKey->getAsyKeySpecBigInteger(keyPair->pubKey, itemPkX, &(returnPoint.x));
1485         EXPECT_EQ(ret, HCF_SUCCESS);
1486         EXPECT_NE(returnPoint.x.len, 0);
1487 
1488         ret = keyPair->pubKey->getAsyKeySpecBigInteger(keyPair->pubKey, itemPkY, &(returnPoint.y));
1489         EXPECT_EQ(ret, HCF_SUCCESS);
1490         EXPECT_NE(returnPoint.y.len, 0);
1491 
1492         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, &returnPoint, g_pointCompressedFormat, &returnBlob);
1493         EXPECT_EQ(ret, HCF_SUCCESS);
1494         EXPECT_NE(returnBlob.len, 0);
1495 
1496         ret = CompareBlobEqual(&returnBlob, POINT_DATA_MAP[i].pointCompressedBlob);
1497         EXPECT_EQ(ret, HCF_SUCCESS);
1498 
1499         HcfObjDestroy(keyPair);
1500         HcfObjDestroy(generator);
1501         FreeEcPointMem(&returnPoint);
1502         HcfBlobDataFree(&returnBlob);
1503     }
1504 }
1505 
1506 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest018, TestSize.Level0)
1507 {
1508     HcfAsyKeyGenerator *generator = nullptr;
1509     HcfKeyPair *keyPair = nullptr;
1510     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1511     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1512     AsyKeySpecItem itemPkX = ECC_PK_X_BN;
1513     AsyKeySpecItem itemPkY = ECC_PK_Y_BN;
1514     HcfResult ret = HCF_INVALID_PARAMS;
1515     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1516         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1517         EXPECT_EQ(ret, HCF_SUCCESS);
1518         EXPECT_NE(generator, nullptr);
1519 
1520         ret = generator->convertKey(generator, nullptr, PUBKEY_DATA_MAP[i].pubKeyUncompressedBlob, nullptr, &keyPair);
1521         EXPECT_EQ(ret, HCF_SUCCESS);
1522         EXPECT_NE(keyPair, nullptr);
1523 
1524         ret = keyPair->pubKey->getAsyKeySpecBigInteger(keyPair->pubKey, itemPkX, &(returnPoint.x));
1525         EXPECT_EQ(ret, HCF_SUCCESS);
1526         EXPECT_NE(returnPoint.x.len, 0);
1527 
1528         ret = keyPair->pubKey->getAsyKeySpecBigInteger(keyPair->pubKey, itemPkY, &(returnPoint.y));
1529         EXPECT_EQ(ret, HCF_SUCCESS);
1530         EXPECT_NE(returnPoint.y.len, 0);
1531 
1532         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, &returnPoint, g_pointUnCompressedFormat, &returnBlob);
1533         EXPECT_EQ(ret, HCF_SUCCESS);
1534         EXPECT_NE(returnBlob.len, 0);
1535 
1536         ret = CompareBlobEqual(&returnBlob, POINT_DATA_MAP[i].pointUncompressedBlob);
1537         EXPECT_EQ(ret, HCF_SUCCESS);
1538 
1539         HcfObjDestroy(keyPair);
1540         HcfObjDestroy(generator);
1541         FreeEcPointMem(&returnPoint);
1542         HcfBlobDataFree(&returnBlob);
1543     }
1544 }
1545 
1546 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest019, TestSize.Level0)
1547 {
1548     HcfAsyKeyGenerator *generator = nullptr;
1549     HcfKeyPair *keyPair = nullptr;
1550     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1551     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1552     AsyKeySpecItem itemPkX = ECC_PK_X_BN;
1553     AsyKeySpecItem itemPkY = ECC_PK_Y_BN;
1554     HcfResult ret = HCF_INVALID_PARAMS;
1555     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1556         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1557         EXPECT_EQ(ret, HCF_SUCCESS);
1558         EXPECT_NE(generator, nullptr);
1559 
1560         ret = generator->convertKey(generator, nullptr, PUBKEY_DATA_MAP[i].pubKeyCompressedBlob, nullptr, &keyPair);
1561         EXPECT_EQ(ret, HCF_SUCCESS);
1562         EXPECT_NE(keyPair, nullptr);
1563 
1564         ret = keyPair->pubKey->getAsyKeySpecBigInteger(keyPair->pubKey, itemPkX, &(returnPoint.x));
1565         EXPECT_EQ(ret, HCF_SUCCESS);
1566         EXPECT_NE(returnPoint.x.len, 0);
1567 
1568         ret = keyPair->pubKey->getAsyKeySpecBigInteger(keyPair->pubKey, itemPkY, &(returnPoint.y));
1569         EXPECT_EQ(ret, HCF_SUCCESS);
1570         EXPECT_NE(returnPoint.y.len, 0);
1571 
1572         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, &returnPoint, g_pointCompressedFormat, &returnBlob);
1573         EXPECT_EQ(ret, HCF_SUCCESS);
1574         EXPECT_NE(returnBlob.len, 0);
1575 
1576         ret = CompareBlobEqual(&returnBlob, POINT_DATA_MAP[i].pointCompressedBlob);
1577         EXPECT_EQ(ret, HCF_SUCCESS);
1578 
1579         HcfObjDestroy(keyPair);
1580         HcfObjDestroy(generator);
1581         FreeEcPointMem(&returnPoint);
1582         HcfBlobDataFree(&returnBlob);
1583     }
1584 }
1585 
1586 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest020, TestSize.Level0)
1587 {
1588     HcfAsyKeyGenerator *generator = nullptr;
1589     HcfKeyPair *keyPair = nullptr;
1590     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1591     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1592     AsyKeySpecItem itemPkX = ECC_PK_X_BN;
1593     AsyKeySpecItem itemPkY = ECC_PK_Y_BN;
1594     HcfResult ret = HCF_INVALID_PARAMS;
1595     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1596         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1597         EXPECT_EQ(ret, HCF_SUCCESS);
1598         EXPECT_NE(generator, nullptr);
1599 
1600         ret = generator->convertKey(generator, nullptr, PUBKEY_DATA_MAP[i].pubKeyCompressedBlob, nullptr, &keyPair);
1601         EXPECT_EQ(ret, HCF_SUCCESS);
1602         EXPECT_NE(keyPair, nullptr);
1603 
1604         ret = keyPair->pubKey->getAsyKeySpecBigInteger(keyPair->pubKey, itemPkX, &(returnPoint.x));
1605         EXPECT_EQ(ret, HCF_SUCCESS);
1606         EXPECT_NE(returnPoint.x.len, 0);
1607 
1608         ret = keyPair->pubKey->getAsyKeySpecBigInteger(keyPair->pubKey, itemPkY, &(returnPoint.y));
1609         EXPECT_EQ(ret, HCF_SUCCESS);
1610         EXPECT_NE(returnPoint.y.len, 0);
1611 
1612         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, &returnPoint, g_pointUnCompressedFormat, &returnBlob);
1613         EXPECT_EQ(ret, HCF_SUCCESS);
1614         EXPECT_NE(returnBlob.len, 0);
1615 
1616         ret = CompareBlobEqual(&returnBlob, POINT_DATA_MAP[i].pointUncompressedBlob);
1617         EXPECT_EQ(ret, HCF_SUCCESS);
1618 
1619         HcfObjDestroy(keyPair);
1620         HcfObjDestroy(generator);
1621         FreeEcPointMem(&returnPoint);
1622         HcfBlobDataFree(&returnBlob);
1623     }
1624 }
1625 
1626 // Invalid input parameter
1627 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest031, TestSize.Level0)
1628 {
1629     HcfAsyKeyGenerator *generator = nullptr;
1630     HcfKeyPair *keyPair = nullptr;
1631     HcfResult ret = HCF_INVALID_PARAMS;
1632     ret = HcfAsyKeyGeneratorCreate("ECC_BrainPoolP256r1", &generator);
1633     EXPECT_EQ(ret, HCF_SUCCESS);
1634     EXPECT_NE(generator, nullptr);
1635 
1636     ret = generator->convertKey(nullptr, nullptr, &g_p256r1PubKeyUncompressedBlob, nullptr, &keyPair);
1637     EXPECT_NE(ret, HCF_SUCCESS);
1638     EXPECT_EQ(keyPair, nullptr);
1639 
1640     HcfObjDestroy(keyPair);
1641     HcfObjDestroy(generator);
1642 }
1643 
1644 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest032, TestSize.Level0)
1645 {
1646     HcfAsyKeyGenerator *generator = nullptr;
1647     HcfKeyPair *keyPair = nullptr;
1648     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1649     HcfResult ret = HCF_INVALID_PARAMS;
1650     ret = HcfAsyKeyGeneratorCreate("RSA512", &generator);
1651     EXPECT_EQ(ret, HCF_SUCCESS);
1652     EXPECT_NE(generator, nullptr);
1653 
1654     ret = generator->generateKeyPair(generator, nullptr, &keyPair);
1655     EXPECT_EQ(ret, HCF_SUCCESS);
1656     EXPECT_NE(keyPair, nullptr);
1657 
1658     ret = keyPair->pubKey->getEncodedDer(keyPair->pubKey, g_pubKeyCompressedFormat, &returnBlob);
1659     EXPECT_NE(ret, HCF_SUCCESS);
1660     EXPECT_EQ(returnBlob.len, 0);
1661 
1662     HcfObjDestroy(keyPair);
1663     HcfObjDestroy(generator);
1664     HcfBlobDataFree(&returnBlob);
1665 }
1666 
1667 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest033, TestSize.Level0)
1668 {
1669     HcfAsyKeyGenerator *generator = nullptr;
1670     HcfKeyPair *keyPair = nullptr;
1671     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1672     HcfResult ret = HCF_INVALID_PARAMS;
1673     ret = HcfAsyKeyGeneratorCreate("DSA1024", &generator);
1674     EXPECT_EQ(ret, HCF_SUCCESS);
1675     EXPECT_NE(generator, nullptr);
1676 
1677     ret = generator->generateKeyPair(generator, nullptr, &keyPair);
1678     EXPECT_EQ(ret, HCF_SUCCESS);
1679     EXPECT_NE(keyPair, nullptr);
1680 
1681     ret = keyPair->pubKey->getEncodedDer(keyPair->pubKey, g_pubKeyCompressedFormat, &returnBlob);
1682     EXPECT_NE(ret, HCF_SUCCESS);
1683     EXPECT_EQ(returnBlob.len, 0);
1684 
1685     HcfObjDestroy(keyPair);
1686     HcfObjDestroy(generator);
1687     HcfBlobDataFree(&returnBlob);
1688 }
1689 
1690 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest034, TestSize.Level0)
1691 {
1692     HcfAsyKeyGenerator *generator = nullptr;
1693     HcfKeyPair *keyPair = nullptr;
1694     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1695     HcfResult ret = HCF_INVALID_PARAMS;
1696     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1697         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1698         EXPECT_EQ(ret, HCF_SUCCESS);
1699         EXPECT_NE(generator, nullptr);
1700 
1701         ret = generator->generateKeyPair(generator, nullptr, &keyPair);
1702         EXPECT_EQ(ret, HCF_SUCCESS);
1703         EXPECT_NE(keyPair, nullptr);
1704 
1705         ret = keyPair->pubKey->getEncodedDer(nullptr, g_pubKeyCompressedFormat, &returnBlob);
1706         EXPECT_NE(ret, HCF_SUCCESS);
1707         EXPECT_EQ(returnBlob.len, 0);
1708 
1709         HcfObjDestroy(keyPair);
1710         HcfObjDestroy(generator);
1711         HcfBlobDataFree(&returnBlob);
1712     }
1713 }
1714 
1715 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest035, TestSize.Level0)
1716 {
1717     HcfAsyKeyGenerator *generator = nullptr;
1718     HcfKeyPair *keyPair = nullptr;
1719     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1720     HcfResult ret = HCF_INVALID_PARAMS;
1721     for (uint32_t i = 0; i < sizeof(PUBKEY_DATA_MAP) / sizeof(PUBKEY_DATA_MAP[0]); i++) {
1722         ret = HcfAsyKeyGeneratorCreate(PUBKEY_DATA_MAP[i].algoName, &generator);
1723         EXPECT_EQ(ret, HCF_SUCCESS);
1724         EXPECT_NE(generator, nullptr);
1725 
1726         ret = generator->generateKeyPair(generator, nullptr, &keyPair);
1727         EXPECT_EQ(ret, HCF_SUCCESS);
1728         EXPECT_NE(keyPair, nullptr);
1729 
1730         ret = keyPair->pubKey->getEncodedDer(keyPair->pubKey, nullptr, &returnBlob);
1731         EXPECT_NE(ret, HCF_SUCCESS);
1732         EXPECT_EQ(returnBlob.len, 0);
1733 
1734         HcfObjDestroy(keyPair);
1735         HcfObjDestroy(generator);
1736         HcfBlobDataFree(&returnBlob);
1737     }
1738 }
1739 
1740 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest036, TestSize.Level0)
1741 {
1742     HcfAsyKeyGenerator *generator = nullptr;
1743     HcfKeyPair *keyPair = nullptr;
1744     HcfResult ret = HCF_INVALID_PARAMS;
1745     ret = HcfAsyKeyGeneratorCreate("ECC_BrainPoolP256r1", &generator);
1746     EXPECT_EQ(ret, HCF_SUCCESS);
1747     EXPECT_NE(generator, nullptr);
1748 
1749     ret = generator->convertKey(generator, nullptr, &g_p256r1ModifyPubKeyBlob, nullptr, &keyPair);
1750     EXPECT_NE(ret, HCF_SUCCESS);
1751     EXPECT_EQ(keyPair, nullptr);
1752 
1753     HcfObjDestroy(keyPair);
1754     HcfObjDestroy(generator);
1755 }
1756 
1757 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest037, TestSize.Level0)
1758 {
1759     HcfAsyKeyGenerator *generator = nullptr;
1760     HcfKeyPair *keyPair = nullptr;
1761     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1762     HcfResult ret = HCF_INVALID_PARAMS;
1763     ret = HcfAsyKeyGeneratorCreate("ECC_BrainPoolP256r1", &generator);
1764     EXPECT_EQ(ret, HCF_SUCCESS);
1765     EXPECT_NE(generator, nullptr);
1766 
1767     ret = generator->convertKey(generator, nullptr, &g_p256t1PubKeyUncompressedBlob, nullptr, &keyPair);
1768     EXPECT_EQ(ret, HCF_SUCCESS);
1769     EXPECT_NE(keyPair, nullptr);
1770 
1771     ret = keyPair->pubKey->getEncodedDer(keyPair->pubKey, g_pubKeyUnCompressedFormat, &returnBlob);
1772     EXPECT_NE(ret, HCF_SUCCESS);
1773     EXPECT_EQ(returnBlob.len, 0);
1774 
1775     HcfObjDestroy(keyPair);
1776     HcfObjDestroy(generator);
1777     HcfBlobDataFree(&returnBlob);
1778 }
1779 
1780 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest038, TestSize.Level0)
1781 {
1782     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1783     HcfResult ret = HCF_INVALID_PARAMS;
1784     ret = HcfConvertPoint("NID_brainpoolP256r1", &g_p256r1ModifyPointBlob, &returnPoint);
1785     EXPECT_NE(ret, HCF_SUCCESS);
1786     EXPECT_EQ(returnPoint.x.len, 0);
1787 
1788     FreeEcPointMem(&returnPoint);
1789 }
1790 
1791 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest039, TestSize.Level0)
1792 {
1793     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1794     HcfResult ret = HCF_INVALID_PARAMS;
1795     ret = HcfConvertPoint("NID_brainpoolP256t1", &g_p256r1PointUncompressedBlob, &returnPoint);
1796     EXPECT_NE(ret, HCF_SUCCESS);
1797     EXPECT_EQ(returnPoint.x.len, 0);
1798 
1799     FreeEcPointMem(&returnPoint);
1800 }
1801 
1802 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest040, TestSize.Level0)
1803 {
1804     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1805     HcfResult ret = HCF_INVALID_PARAMS;
1806     ret = HcfConvertPoint("NID_brainpoolP256t1", &g_p256r1PointCompressedBlob, &returnPoint);
1807     EXPECT_NE(ret, HCF_SUCCESS);
1808     EXPECT_EQ(returnPoint.x.len, 0);
1809 
1810     FreeEcPointMem(&returnPoint);
1811 }
1812 
1813 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest041, TestSize.Level0)
1814 {
1815     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1816     HcfResult ret = HCF_INVALID_PARAMS;
1817     for (uint32_t i = 0; i < sizeof(POINT_DATA_MAP) / sizeof(POINT_DATA_MAP[0]); i++) {
1818         ret = HcfConvertPoint(PUBKEY_DATA_MAP[i].algoName, POINT_DATA_MAP[i].pointUncompressedBlob, &returnPoint);
1819         EXPECT_NE(ret, HCF_SUCCESS);
1820         EXPECT_EQ(returnPoint.x.len, 0);
1821 
1822         FreeEcPointMem(&returnPoint);
1823     }
1824 }
1825 
1826 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest042, TestSize.Level0)
1827 {
1828     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1829     HcfResult ret = HCF_INVALID_PARAMS;
1830     for (uint32_t i = 0; i < sizeof(POINT_DATA_MAP) / sizeof(POINT_DATA_MAP[0]); i++) {
1831         ret = HcfConvertPoint(POINT_DATA_MAP[i].curveName, PUBKEY_DATA_MAP[i].pubKeyUncompressedBlob, &returnPoint);
1832         EXPECT_NE(ret, HCF_SUCCESS);
1833         EXPECT_EQ(returnPoint.x.len, 0);
1834 
1835         FreeEcPointMem(&returnPoint);
1836     }
1837 }
1838 
1839 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest043, TestSize.Level0)
1840 {
1841     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1842     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1843     HcfResult ret = HCF_INVALID_PARAMS;
1844     for (uint32_t i = 0; i < sizeof(POINT_DATA_MAP) / sizeof(POINT_DATA_MAP[0]); i++) {
1845         ret = HcfConvertPoint(POINT_DATA_MAP[i].curveName, POINT_DATA_MAP[i].pointUncompressedBlob, &returnPoint);
1846         EXPECT_EQ(ret, HCF_SUCCESS);
1847         EXPECT_NE(returnPoint.x.len, 0);
1848 
1849         ret = HcfGetEncodedPoint(PUBKEY_DATA_MAP[i].algoName, &returnPoint, g_pointCompressedFormat, &returnBlob);
1850         EXPECT_NE(ret, HCF_SUCCESS);
1851         EXPECT_EQ(returnBlob.len, 0);
1852 
1853         FreeEcPointMem(&returnPoint);
1854         HcfBlobDataFree(&returnBlob);
1855     }
1856 }
1857 
1858 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest044, TestSize.Level0)
1859 {
1860     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1861     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1862     HcfResult ret = HCF_INVALID_PARAMS;
1863     for (uint32_t i = 0; i < sizeof(POINT_DATA_MAP) / sizeof(POINT_DATA_MAP[0]); i++) {
1864         ret = HcfConvertPoint(POINT_DATA_MAP[i].curveName, POINT_DATA_MAP[i].pointUncompressedBlob, &returnPoint);
1865         EXPECT_EQ(ret, HCF_SUCCESS);
1866         EXPECT_NE(returnPoint.x.len, 0);
1867 
1868         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, &returnPoint, "compress", &returnBlob);
1869         EXPECT_NE(ret, HCF_SUCCESS);
1870         EXPECT_EQ(returnBlob.len, 0);
1871 
1872         FreeEcPointMem(&returnPoint);
1873         HcfBlobDataFree(&returnBlob);
1874     }
1875 }
1876 
1877 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest045, TestSize.Level0)
1878 {
1879     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1880     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1881     HcfResult ret = HCF_INVALID_PARAMS;
1882     for (uint32_t i = 0; i < sizeof(POINT_DATA_MAP) / sizeof(POINT_DATA_MAP[0]); i++) {
1883         ret = HcfConvertPoint(POINT_DATA_MAP[i].curveName, POINT_DATA_MAP[i].pointUncompressedBlob, &returnPoint);
1884         EXPECT_EQ(ret, HCF_SUCCESS);
1885         EXPECT_NE(returnPoint.x.len, 0);
1886 
1887         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, nullptr, g_pointCompressedFormat, &returnBlob);
1888         EXPECT_NE(ret, HCF_SUCCESS);
1889         EXPECT_EQ(returnBlob.len, 0);
1890 
1891         FreeEcPointMem(&returnPoint);
1892         HcfBlobDataFree(&returnBlob);
1893     }
1894 }
1895 
1896 HWTEST_F(CryptoEccEcdhPubTest, CryptoEccEcdhPubTest046, TestSize.Level0)
1897 {
1898     HcfPoint returnPoint = { .x = { .data = nullptr, .len = 0 }, .y = { .data = nullptr, .len = 0 } };
1899     HcfBlob returnBlob = { .data = nullptr, .len = 0 };
1900     HcfResult ret = HCF_INVALID_PARAMS;
1901     for (uint32_t i = 0; i < sizeof(POINT_DATA_MAP) / sizeof(POINT_DATA_MAP[0]); i++) {
1902         ret = HcfConvertPoint(POINT_DATA_MAP[i].curveName, POINT_DATA_MAP[i].pointUncompressedBlob, &returnPoint);
1903         EXPECT_EQ(ret, HCF_SUCCESS);
1904         EXPECT_NE(returnPoint.x.len, 0);
1905 
1906         ret = HcfGetEncodedPoint(POINT_DATA_MAP[i].curveName, &returnPoint, g_pointCompressedFormat, nullptr);
1907         EXPECT_NE(ret, HCF_SUCCESS);
1908         EXPECT_EQ(returnBlob.len, 0);
1909 
1910         FreeEcPointMem(&returnPoint);
1911         HcfBlobDataFree(&returnBlob);
1912     }
1913 }
1914 
1915 }