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