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 }