xref: /dpdk/app/test/test_cryptodev_ecdsa_test_vectors.h (revision 2fba5232e77ea72993d282c170bb7be0a48b8110)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright (C) 2020 Marvell International Ltd.
3  */
4 
5 #ifndef __TEST_CRYPTODEV_ECDSA_TEST_VECTORS_H__
6 #define __TEST_CRYPTODEV_ECDSA_TEST_VECTORS_H__
7 
8 #include "rte_crypto_asym.h"
9 
10 /* EC curve id */
11 enum curve {
12 	SECP192R1,
13 	SECP224R1,
14 	SECP256R1,
15 	SECP384R1,
16 	SECP521R1,
17 	SECP521R1_UA,
18 	ED25519,
19 	ED448,
20 	END_OF_CURVE_LIST
21 };
22 
23 const char *curve[] = {"SECP192R1",
24 		       "SECP224R1",
25 		       "SECP256R1",
26 		       "SECP384R1",
27 		       "SECP521R1",
28 		       "SECP521R1(unaligned)",
29 		       "ED25519",
30 		       "ED448",
31 };
32 
33 struct crypto_testsuite_ecdsa_params {
34 	rte_crypto_param pubkey_qx;
35 	rte_crypto_param pubkey_qy;
36 	rte_crypto_param scalar;
37 	rte_crypto_param digest;
38 	rte_crypto_param sign_r;
39 	rte_crypto_param sign_s;
40 	rte_crypto_param pkey;
41 	int curve;
42 };
43 
44 /*
45  * Test vector reference:
46  * https://csrc.nist.gov/CSRC/media/Projects/
47  * Cryptographic-Algorithm-Validation-Program/
48  * documents/components/186-3ecdsasiggencomponenttestvectors.zip
49  */
50 
51 /* SECP192R1 (P-192 NIST) test vector */
52 
53 static uint8_t digest_secp192r1[] = {
54 	0x5a, 0xe8, 0x31, 0x7d, 0x34, 0xd1, 0xe5, 0x95,
55 	0xe3, 0xfa, 0x72, 0x47, 0xdb, 0x80, 0xc0, 0xaf,
56 	0x43, 0x20, 0xcc, 0xe1, 0x11, 0x6d, 0xe1, 0x87,
57 	0xf8, 0xf7, 0xe2, 0xe0, 0x99, 0xc0, 0xd8, 0xd0
58 };
59 
60 static uint8_t pkey_secp192r1[] = {
61 	0x24, 0xed, 0xd2, 0x2f, 0x7d, 0xdd, 0x6f, 0xa5,
62 	0xbc, 0x61, 0xfc, 0x06, 0x53, 0x47, 0x9a, 0xa4,
63 	0x08, 0x09, 0xef, 0x86, 0x5c, 0xf2, 0x7a, 0x47
64 };
65 
66 static uint8_t scalar_secp192r1[] = {
67 	0xa5, 0xc8, 0x17, 0xa2, 0x36, 0xa5, 0xf7, 0xfa,
68 	0xa3, 0x29, 0xb8, 0xec, 0xc3, 0xc5, 0x96, 0x68,
69 	0x7c, 0x71, 0xaa, 0xaf, 0x86, 0xc7, 0x70, 0x3e
70 };
71 
72 static uint8_t pubkey_qx_secp192r1[] = {
73 	0x9b, 0xf1, 0x2d, 0x71, 0x74, 0xb7, 0x70, 0x8a,
74 	0x07, 0x6a, 0x38, 0xbc, 0x80, 0xaa, 0x28, 0x66,
75 	0x2f, 0x25, 0x1e, 0x2e, 0xd8, 0xd4, 0x14, 0xdc
76 };
77 
78 static uint8_t pubkey_qy_secp192r1[] = {
79 	0x48, 0x54, 0xc8, 0xd0, 0x7d, 0xfc, 0x08, 0x82,
80 	0x4e, 0x9e, 0x47, 0x1c, 0xa2, 0xfe, 0xdc, 0xfc,
81 	0xff, 0x3d, 0xdc, 0xb0, 0x11, 0x57, 0x34, 0x98
82 };
83 
84 static uint8_t sign_secp192r1_r[] = {
85 	0x35, 0x4a, 0xba, 0xec, 0xf4, 0x36, 0x1f, 0xea,
86 	0x90, 0xc2, 0x9b, 0x91, 0x99, 0x88, 0x2e, 0xdf,
87 	0x85, 0x73, 0xe6, 0x86, 0xa8, 0x13, 0xef, 0xf8
88 };
89 
90 static uint8_t sign_secp192r1_s[] = {
91 	0x80, 0xf5, 0x00, 0x00, 0xac, 0x86, 0x11, 0x1c,
92 	0x9b, 0x30, 0x47, 0x38, 0x5a, 0x15, 0xd7, 0x8e,
93 	0x63, 0x2c, 0x58, 0xb7, 0x94, 0x9e, 0x82, 0xc1
94 };
95 
96 /** ECDSA SECP192R1 elliptic curve param */
97 
98 struct crypto_testsuite_ecdsa_params ecdsa_param_secp192r1 = {
99 	.pubkey_qx = {
100 		.data = pubkey_qx_secp192r1,
101 		.length = sizeof(pubkey_qx_secp192r1),
102 	},
103 	.pubkey_qy = {
104 		.data = pubkey_qy_secp192r1,
105 		.length = sizeof(pubkey_qy_secp192r1),
106 	},
107 	.scalar = {
108 		.data = scalar_secp192r1,
109 		.length = sizeof(scalar_secp192r1),
110 	},
111 	.digest = {
112 		.data = digest_secp192r1,
113 		.length = sizeof(digest_secp192r1),
114 	},
115 	.sign_r = {
116 		.data = sign_secp192r1_r,
117 		.length = sizeof(sign_secp192r1_r),
118 	},
119 	.sign_s = {
120 		.data = sign_secp192r1_s,
121 		.length = sizeof(sign_secp192r1_s),
122 	},
123 	.pkey = {
124 		.data = pkey_secp192r1,
125 		.length = sizeof(pkey_secp192r1),
126 	},
127 	.curve = RTE_CRYPTO_EC_GROUP_SECP192R1
128 };
129 
130 /* SECP224R1 (P-224 NIST) test vectors */
131 
132 static uint8_t digest_secp224r1[] = {
133 	0x00, 0xc6, 0xfc, 0x53, 0xc1, 0x98, 0x6d, 0x19,
134 	0xa8, 0xa8, 0xb5, 0x80, 0xee, 0x55, 0x3d, 0xc1,
135 	0x24, 0x07, 0x45, 0xd7, 0x60, 0x64, 0x7d, 0x1c,
136 	0x0a, 0xdf, 0x44, 0x2c, 0x13, 0x3c, 0x7f, 0x56
137 };
138 
139 static uint8_t pkey_secp224r1[] = {
140 	0x88, 0x8f, 0xc9, 0x92, 0x89, 0x3b, 0xdd, 0x8a,
141 	0xa0, 0x2c, 0x80, 0x76, 0x88, 0x32, 0x60, 0x5d,
142 	0x02, 0x0b, 0x81, 0xae, 0x0b, 0x25, 0x47, 0x41,
143 	0x54, 0xec, 0x89, 0xaa
144 };
145 
146 static uint8_t scalar_secp224r1[] = {
147 	0x06, 0xf7, 0xa5, 0x60, 0x07, 0x82, 0x54, 0x33,
148 	0xc4, 0xc6, 0x11, 0x53, 0xdf, 0x1a, 0x13, 0x5e,
149 	0xee, 0x2f, 0x38, 0xec, 0x68, 0x7b, 0x49, 0x2e,
150 	0xd4, 0x0d, 0x9c, 0x90
151 };
152 
153 static uint8_t pubkey_qx_secp224r1[] = {
154 	0x4c, 0x74, 0x1e, 0x4d, 0x20, 0x10, 0x36, 0x70,
155 	0xb7, 0x16, 0x1a, 0xe7, 0x22, 0x71, 0x08, 0x21,
156 	0x55, 0x83, 0x84, 0x18, 0x08, 0x43, 0x35, 0x33,
157 	0x8a, 0xc3, 0x8f, 0xa4
158 };
159 
160 static uint8_t pubkey_qy_secp224r1[] = {
161 	0xdb, 0x79, 0x19, 0x15, 0x1a, 0xc2, 0x85, 0x87,
162 	0xb7, 0x2b, 0xad, 0x7a, 0xb1, 0x80, 0xec, 0x8e,
163 	0x95, 0xab, 0x9e, 0x2c, 0x8d, 0x81, 0xd9, 0xb9,
164 	0xd7, 0xe2, 0xe3, 0x83
165 };
166 
167 static uint8_t sign_secp224r1_r[] = {
168 	0x09, 0x09, 0xc9, 0xb9, 0xca, 0xe8, 0xd2, 0x79,
169 	0x0e, 0x29, 0xdb, 0x6a, 0xfd, 0xb4, 0x5c, 0x04,
170 	0xf5, 0xb0, 0x72, 0xc4, 0xc2, 0x04, 0x10, 0xc7,
171 	0xdc, 0x9b, 0x67, 0x72
172 };
173 
174 static uint8_t sign_secp224r1_s[] = {
175 	0x29, 0x8f, 0x4f, 0xca, 0xe1, 0xfe, 0x27, 0x1d,
176 	0xa1, 0xe0, 0x34, 0x5d, 0x11, 0xd0, 0x7a, 0x1f,
177 	0xca, 0x43, 0xf5, 0x8a, 0xf4, 0xc1, 0x13, 0xb9,
178 	0x09, 0xee, 0xde, 0xa0
179 };
180 
181 /** ECDSA SECP224R1 elliptic curve param */
182 
183 struct crypto_testsuite_ecdsa_params ecdsa_param_secp224r1 = {
184 	.pubkey_qx = {
185 		.data = pubkey_qx_secp224r1,
186 		.length = sizeof(pubkey_qx_secp224r1),
187 	},
188 	.pubkey_qy = {
189 		.data = pubkey_qy_secp224r1,
190 		.length = sizeof(pubkey_qy_secp224r1),
191 	},
192 	.scalar = {
193 		.data = scalar_secp224r1,
194 		.length = sizeof(scalar_secp224r1),
195 	},
196 	.digest = {
197 		.data = digest_secp224r1,
198 		.length = sizeof(digest_secp224r1),
199 	},
200 	.sign_r = {
201 		.data = sign_secp224r1_r,
202 		.length = sizeof(sign_secp224r1_r),
203 	},
204 	.sign_s = {
205 		.data = sign_secp224r1_s,
206 		.length = sizeof(sign_secp224r1_s),
207 	},
208 	.pkey = {
209 		.data = pkey_secp224r1,
210 		.length = sizeof(pkey_secp224r1),
211 	},
212 	.curve = RTE_CRYPTO_EC_GROUP_SECP224R1
213 };
214 
215 /* SECP256R1 (P-256 NIST) test vectors */
216 
217 static uint8_t digest_secp256r1[] = {
218 	0x44, 0xac, 0xf6, 0xb7, 0xe3, 0x6c, 0x13, 0x42,
219 	0xc2, 0xc5, 0x89, 0x72, 0x04, 0xfe, 0x09, 0x50,
220 	0x4e, 0x1e, 0x2e, 0xfb, 0x1a, 0x90, 0x03, 0x77,
221 	0xdb, 0xc4, 0xe7, 0xa6, 0xa1, 0x33, 0xec, 0x56
222 };
223 
224 static uint8_t pkey_secp256r1[] = {
225 	0x51, 0x9b, 0x42, 0x3d, 0x71, 0x5f, 0x8b, 0x58,
226 	0x1f, 0x4f, 0xa8, 0xee, 0x59, 0xf4, 0x77, 0x1a,
227 	0x5b, 0x44, 0xc8, 0x13, 0x0b, 0x4e, 0x3e, 0xac,
228 	0xca, 0x54, 0xa5, 0x6d, 0xda, 0x72, 0xb4, 0x64
229 };
230 
231 static uint8_t scalar_secp256r1[] = {
232 	0x94, 0xa1, 0xbb, 0xb1, 0x4b, 0x90, 0x6a, 0x61,
233 	0xa2, 0x80, 0xf2, 0x45, 0xf9, 0xe9, 0x3c, 0x7f,
234 	0x3b, 0x4a, 0x62, 0x47, 0x82, 0x4f, 0x5d, 0x33,
235 	0xb9, 0x67, 0x07, 0x87, 0x64, 0x2a, 0x68, 0xde
236 };
237 
238 static uint8_t pubkey_qx_secp256r1[] = {
239 	0x1c, 0xcb, 0xe9, 0x1c, 0x07, 0x5f, 0xc7, 0xf4,
240 	0xf0, 0x33, 0xbf, 0xa2, 0x48, 0xdb, 0x8f, 0xcc,
241 	0xd3, 0x56, 0x5d, 0xe9, 0x4b, 0xbf, 0xb1, 0x2f,
242 	0x3c, 0x59, 0xff, 0x46, 0xc2, 0x71, 0xbf, 0x83
243 };
244 
245 static uint8_t pubkey_qy_secp256r1[] = {
246 	0xce, 0x40, 0x14, 0xc6, 0x88, 0x11, 0xf9, 0xa2,
247 	0x1a, 0x1f, 0xdb, 0x2c, 0x0e, 0x61, 0x13, 0xe0,
248 	0x6d, 0xb7, 0xca, 0x93, 0xb7, 0x40, 0x4e, 0x78,
249 	0xdc, 0x7c, 0xcd, 0x5c, 0xa8, 0x9a, 0x4c, 0xa9
250 };
251 
252 static uint8_t sign_secp256r1_r[] = {
253 	0xf3, 0xac, 0x80, 0x61, 0xb5, 0x14, 0x79, 0x5b,
254 	0x88, 0x43, 0xe3, 0xd6, 0x62, 0x95, 0x27, 0xed,
255 	0x2a, 0xfd, 0x6b, 0x1f, 0x6a, 0x55, 0x5a, 0x7a,
256 	0xca, 0xbb, 0x5e, 0x6f, 0x79, 0xc8, 0xc2, 0xac
257 };
258 
259 static uint8_t sign_secp256r1_s[] = {
260 	0x8b, 0xf7, 0x78, 0x19, 0xca, 0x05, 0xa6, 0xb2,
261 	0x78, 0x6c, 0x76, 0x26, 0x2b, 0xf7, 0x37, 0x1c,
262 	0xef, 0x97, 0xb2, 0x18, 0xe9, 0x6f, 0x17, 0x5a,
263 	0x3c, 0xcd, 0xda, 0x2a, 0xcc, 0x05, 0x89, 0x03
264 };
265 
266 /** ECDSA SECP256R1 elliptic curve param */
267 
268 struct crypto_testsuite_ecdsa_params ecdsa_param_secp256r1 = {
269 	.pubkey_qx = {
270 		.data = pubkey_qx_secp256r1,
271 		.length = sizeof(pubkey_qx_secp256r1),
272 	},
273 	.pubkey_qy = {
274 		.data = pubkey_qy_secp256r1,
275 		.length = sizeof(pubkey_qy_secp256r1),
276 	},
277 	.scalar = {
278 		.data = scalar_secp256r1,
279 		.length = sizeof(scalar_secp256r1),
280 	},
281 	.digest = {
282 		.data = digest_secp256r1,
283 		.length = sizeof(digest_secp256r1),
284 	},
285 	.sign_r = {
286 		.data = sign_secp256r1_r,
287 		.length = sizeof(sign_secp256r1_r),
288 	},
289 	.sign_s = {
290 		.data = sign_secp256r1_s,
291 		.length = sizeof(sign_secp256r1_s),
292 	},
293 	.pkey = {
294 		.data = pkey_secp256r1,
295 		.length = sizeof(pkey_secp256r1),
296 	},
297 	.curve = RTE_CRYPTO_EC_GROUP_SECP256R1
298 };
299 
300 /* SECP384R1 (P-384 NIST) test vectors */
301 
302 static uint8_t digest_secp384r1[] = {
303 	0xbb, 0xbd, 0x0a, 0x5f, 0x64, 0x5d, 0x3f, 0xda,
304 	0x10, 0xe2, 0x88, 0xd1, 0x72, 0xb2, 0x99, 0x45,
305 	0x5f, 0x9d, 0xff, 0x00, 0xe0, 0xfb, 0xc2, 0x83,
306 	0x3e, 0x18, 0xcd, 0x01, 0x7d, 0x7f, 0x3e, 0xd1
307 };
308 
309 static uint8_t pkey_secp384r1[] = {
310 	0xc6, 0x02, 0xbc, 0x74, 0xa3, 0x45, 0x92, 0xc3,
311 	0x11, 0xa6, 0x56, 0x96, 0x61, 0xe0, 0x83, 0x2c,
312 	0x84, 0xf7, 0x20, 0x72, 0x74, 0x67, 0x6c, 0xc4,
313 	0x2a, 0x89, 0xf0, 0x58, 0x16, 0x26, 0x30, 0x18,
314 	0x4b, 0x52, 0xf0, 0xd9, 0x9b, 0x85, 0x5a, 0x77,
315 	0x83, 0xc9, 0x87, 0x47, 0x6d, 0x7f, 0x9e, 0x6b
316 };
317 
318 static uint8_t scalar_secp384r1[] = {
319 	0xc1, 0x0b, 0x5c, 0x25, 0xc4, 0x68, 0x3d, 0x0b,
320 	0x78, 0x27, 0xd0, 0xd8, 0x86, 0x97, 0xcd, 0xc0,
321 	0x93, 0x24, 0x96, 0xb5, 0x29, 0x9b, 0x79, 0x8c,
322 	0x0d, 0xd1, 0xe7, 0xaf, 0x6c, 0xc7, 0x57, 0xcc,
323 	0xb3, 0x0f, 0xcd, 0x3d, 0x36, 0xea, 0xd4, 0xa8,
324 	0x04, 0x87, 0x7e, 0x24, 0xf3, 0xa3, 0x24, 0x43
325 };
326 
327 static uint8_t pubkey_qx_secp384r1[] = {
328 	0x04, 0x00, 0x19, 0x3b, 0x21, 0xf0, 0x7c, 0xd0,
329 	0x59, 0x82, 0x6e, 0x94, 0x53, 0xd3, 0xe9, 0x6d,
330 	0xd1, 0x45, 0x04, 0x1c, 0x97, 0xd4, 0x9f, 0xf6,
331 	0xb7, 0x04, 0x7f, 0x86, 0xbb, 0x0b, 0x04, 0x39,
332 	0xe9, 0x09, 0x27, 0x4c, 0xb9, 0xc2, 0x82, 0xbf,
333 	0xab, 0x88, 0x67, 0x4c, 0x07, 0x65, 0xbc, 0x75
334 };
335 
336 static uint8_t pubkey_qy_secp384r1[] = {
337 	0xf7, 0x0d, 0x89, 0xc5, 0x2a, 0xcb, 0xc7, 0x04,
338 	0x68, 0xd2, 0xc5, 0xae, 0x75, 0xc7, 0x6d, 0x7f,
339 	0x69, 0xb7, 0x6a, 0xf6, 0x2d, 0xcf, 0x95, 0xe9,
340 	0x9e, 0xba, 0x5d, 0xd1, 0x1a, 0xdf, 0x8f, 0x42,
341 	0xec, 0x9a, 0x42, 0x5b, 0x0c, 0x5e, 0xc9, 0x8e,
342 	0x2f, 0x23, 0x4a, 0x92, 0x6b, 0x82, 0xa1, 0x47
343 };
344 
345 static uint8_t sign_secp384r1_r[] = {
346 	0xb1, 0x1d, 0xb0, 0x0c, 0xda, 0xf5, 0x32, 0x86,
347 	0xd4, 0x48, 0x3f, 0x38, 0xcd, 0x02, 0x78, 0x59,
348 	0x48, 0x47, 0x7e, 0xd7, 0xeb, 0xc2, 0xad, 0x60,
349 	0x90, 0x54, 0x55, 0x1d, 0xa0, 0xab, 0x03, 0x59,
350 	0x97, 0x8c, 0x61, 0x85, 0x17, 0x88, 0xaa, 0x2e,
351 	0xc3, 0x26, 0x79, 0x46, 0xd4, 0x40, 0xe8, 0x78
352 };
353 
354 static uint8_t sign_secp384r1_s[] = {
355 	0x16, 0x00, 0x78, 0x73, 0xc5, 0xb0, 0x60, 0x4c,
356 	0xe6, 0x81, 0x12, 0xa8, 0xfe, 0xe9, 0x73, 0xe8,
357 	0xe2, 0xb6, 0xe3, 0x31, 0x9c, 0x68, 0x3a, 0x76,
358 	0x2f, 0xf5, 0x06, 0x5a, 0x07, 0x65, 0x12, 0xd7,
359 	0xc9, 0x8b, 0x27, 0xe7, 0x4b, 0x78, 0x87, 0x67,
360 	0x10, 0x48, 0xac, 0x02, 0x7d, 0xf8, 0xcb, 0xf2
361 };
362 
363 /** ECDSA SECP384R1 elliptic curve param */
364 
365 struct crypto_testsuite_ecdsa_params ecdsa_param_secp384r1 = {
366 	.pubkey_qx = {
367 		.data = pubkey_qx_secp384r1,
368 		.length = sizeof(pubkey_qx_secp384r1),
369 	},
370 	.pubkey_qy = {
371 		.data = pubkey_qy_secp384r1,
372 		.length = sizeof(pubkey_qy_secp384r1),
373 	},
374 	.scalar = {
375 		.data = scalar_secp384r1,
376 		.length = sizeof(scalar_secp384r1),
377 	},
378 	.digest = {
379 		.data = digest_secp384r1,
380 		.length = sizeof(digest_secp384r1),
381 	},
382 	.sign_r = {
383 		.data = sign_secp384r1_r,
384 		.length = sizeof(sign_secp384r1_r),
385 	},
386 	.sign_s = {
387 		.data = sign_secp384r1_s,
388 		.length = sizeof(sign_secp384r1_s),
389 	},
390 	.pkey = {
391 		.data = pkey_secp384r1,
392 		.length = sizeof(pkey_secp384r1),
393 	},
394 	.curve = RTE_CRYPTO_EC_GROUP_SECP384R1
395 };
396 
397 /* SECP521R1 (P-521 NIST) test vectors */
398 
399 static uint8_t digest_secp521r1[] = {
400 	0x53, 0xe6, 0x53, 0x7c, 0xb6, 0xea, 0x68, 0xae,
401 	0x47, 0xa8, 0x16, 0x11, 0xc2, 0x27, 0x56, 0xd7,
402 	0x70, 0xd7, 0xa3, 0x7e, 0x33, 0x6c, 0x3a, 0xf0,
403 	0xb0, 0x81, 0x4b, 0x04, 0xfa, 0x39, 0x43, 0x4b
404 };
405 
406 static uint8_t pkey_secp521r1[] = {
407 	0x01, 0xe8, 0xc0, 0x59, 0x96, 0xb8, 0x5e, 0x6f,
408 	0x3f, 0x87, 0x57, 0x12, 0xa0, 0x9c, 0x1b, 0x40,
409 	0x67, 0x2b, 0x5e, 0x7a, 0x78, 0xd5, 0x85, 0x2d,
410 	0xe0, 0x15, 0x85, 0xc5, 0xfb, 0x99, 0x0b, 0xf3,
411 	0x81, 0x2c, 0x32, 0x45, 0x53, 0x4a, 0x71, 0x43,
412 	0x89, 0xae, 0x90, 0x14, 0xd6, 0x77, 0xa4, 0x49,
413 	0xef, 0xd6, 0x58, 0x25, 0x4e, 0x61, 0x0d, 0xa8,
414 	0xe6, 0xca, 0xd3, 0x34, 0x14, 0xb9, 0xd3, 0x3e,
415 	0x0d, 0x7a
416 };
417 
418 static uint8_t scalar_secp521r1[] = {
419 	0x00, 0xdc, 0x8d, 0xaa, 0xac, 0xdd, 0xb8, 0xfd,
420 	0x2f, 0xf5, 0xc3, 0x4a, 0x5c, 0xe1, 0x83, 0xa4,
421 	0x22, 0x61, 0xad, 0x3c, 0x64, 0xdb, 0xfc, 0x09,
422 	0x5e, 0x58, 0x92, 0x43, 0x64, 0xdc, 0x47, 0xea,
423 	0x1c, 0x05, 0xe2, 0x59, 0x9a, 0xae, 0x91, 0x7c,
424 	0x2c, 0x95, 0xf4, 0x7d, 0x6b, 0xb3, 0x7d, 0xa0,
425 	0x08, 0xaf, 0x9f, 0x55, 0x73, 0x0d, 0xdb, 0xe4,
426 	0xd8, 0xde, 0xd2, 0x4f, 0x9e, 0x8d, 0xaa, 0x46,
427 	0xdb, 0x6a
428 };
429 
430 static uint8_t pubkey_qx_secp521r1[] = {
431 	0x00, 0x7d, 0x04, 0x2c, 0xa1, 0x94, 0x08, 0x52,
432 	0x4e, 0x68, 0xb9, 0x81, 0xf1, 0x41, 0x93, 0x51,
433 	0xe3, 0xb8, 0x47, 0x36, 0xc7, 0x7f, 0xe5, 0x8f,
434 	0xee, 0x7d, 0x11, 0x31, 0x7d, 0xf2, 0xe8, 0x50,
435 	0xd9, 0x60, 0xc7, 0xdd, 0x10, 0xd1, 0x0b, 0xa7,
436 	0x14, 0xc8, 0xa6, 0x09, 0xd1, 0x63, 0x50, 0x2b,
437 	0x79, 0xd6, 0x82, 0xe8, 0xbb, 0xec, 0xd4, 0xf5,
438 	0x25, 0x91, 0xd2, 0x74, 0x85, 0x33, 0xe4, 0x5a,
439 	0x86, 0x7a
440 };
441 
442 static uint8_t pubkey_qy_secp521r1[] = {
443 	0x01, 0x97, 0xac, 0x64, 0x16, 0x11, 0x1c, 0xcf,
444 	0x98, 0x7d, 0x29, 0x04, 0x59, 0xeb, 0xc8, 0xad,
445 	0x9e, 0xc5, 0x6e, 0x49, 0x05, 0x9c, 0x99, 0x21,
446 	0x55, 0x53, 0x9a, 0x36, 0xa6, 0x26, 0x63, 0x1f,
447 	0x4a, 0x2d, 0x89, 0x16, 0x4b, 0x98, 0x51, 0x54,
448 	0xf2, 0xdd, 0xdc, 0x02, 0x81, 0xee, 0x5b, 0x51,
449 	0x78, 0x27, 0x1f, 0x3a, 0x76, 0xa0, 0x91, 0x4c,
450 	0x3f, 0xcd, 0x1f, 0x97, 0xbe, 0x8e, 0x83, 0x76,
451 	0xef, 0xb3
452 };
453 
454 static uint8_t sign_secp521r1_r[] = {
455 	0x00, 0x9d, 0xd1, 0xf2, 0xa7, 0x16, 0x84, 0x3e,
456 	0xed, 0xec, 0x7a, 0x66, 0x45, 0xac, 0x83, 0x4d,
457 	0x43, 0x36, 0xe7, 0xb1, 0x8e, 0x35, 0x70, 0x1f,
458 	0x06, 0xca, 0xe9, 0xd6, 0xb2, 0x90, 0xd4, 0x14,
459 	0x91, 0x42, 0x47, 0x35, 0xf3, 0xb5, 0x7e, 0x82,
460 	0x9a, 0xd5, 0xde, 0x05, 0x5e, 0xae, 0xef, 0x17,
461 	0x78, 0xf0, 0x51, 0xc1, 0xee, 0x15, 0x2b, 0xf2,
462 	0x13, 0x1a, 0x08, 0x1e, 0x53, 0xdf, 0x2a, 0x56,
463 	0x7a, 0x8a
464 };
465 
466 static uint8_t sign_secp521r1_s[] = {
467 	0x00, 0x21, 0x48, 0xe8, 0x42, 0x8d, 0x70, 0xa7,
468 	0x2b, 0xc9, 0xfa, 0x98, 0x6c, 0x38, 0xc2, 0xc9,
469 	0x7d, 0xed, 0xa0, 0x42, 0x0f, 0x22, 0x2f, 0x9d,
470 	0xc9, 0x9d, 0x32, 0xc0, 0xac, 0xba, 0x69, 0x9d,
471 	0xc7, 0xba, 0x0a, 0x2b, 0x79, 0xce, 0x59, 0x99,
472 	0xff, 0x61, 0xbd, 0x0b, 0x23, 0x3c, 0x74, 0x4a,
473 	0x89, 0x3b, 0xc1, 0x05, 0xbc, 0xa5, 0xc2, 0x35,
474 	0x42, 0x3e, 0x53, 0x16, 0x12, 0xda, 0x65, 0xd7,
475 	0x2e, 0x62
476 };
477 
478 /** ECDSA SECP521R1 elliptic curve param */
479 
480 struct crypto_testsuite_ecdsa_params ecdsa_param_secp521r1 = {
481 	.pubkey_qx = {
482 		.data = pubkey_qx_secp521r1,
483 		.length = sizeof(pubkey_qx_secp521r1),
484 	},
485 	.pubkey_qy = {
486 		.data = pubkey_qy_secp521r1,
487 		.length = sizeof(pubkey_qy_secp521r1),
488 	},
489 	.scalar = {
490 		.data = scalar_secp521r1,
491 		.length = sizeof(scalar_secp521r1),
492 	},
493 	.digest = {
494 		.data = digest_secp521r1,
495 		.length = sizeof(digest_secp521r1),
496 	},
497 	.sign_r = {
498 		.data = sign_secp521r1_r,
499 		.length = sizeof(sign_secp521r1_r),
500 	},
501 	.sign_s = {
502 		.data = sign_secp521r1_s,
503 		.length = sizeof(sign_secp521r1_s),
504 	},
505 	.pkey = {
506 		.data = pkey_secp521r1,
507 		.length = sizeof(pkey_secp521r1),
508 	},
509 	.curve = RTE_CRYPTO_EC_GROUP_SECP521R1
510 };
511 
512 /* SECP521R1 (P-521 NIST) test vectors (unaligned) */
513 
514 static uint8_t ua_digest_secp521r1[] = {
515 	0x7b, 0xec, 0xf5, 0x96, 0xa8, 0x12, 0x04, 0x4c,
516 	0x07, 0x96, 0x98, 0x4b, 0xe2, 0x3e, 0x9c, 0x02,
517 	0xbf, 0xc5, 0x90, 0x96, 0xf4, 0x2f, 0xfc, 0x8a,
518 	0x3f, 0x9a, 0x65, 0x0e
519 };
520 
521 static uint8_t ua_pkey_secp521r1[] = {
522 	0x00, 0x70, 0xa8, 0x4d, 0x30, 0xfd, 0xc9, 0x01,
523 	0x1c, 0xc6, 0xc3, 0x38, 0xd4, 0x75, 0x6f, 0x3e,
524 	0x59, 0xd8, 0x91, 0xaa, 0xb4, 0x18, 0x3e, 0x3c,
525 	0xa5, 0x3d, 0x3f, 0x23, 0xd8, 0xe6, 0xfb, 0x3c,
526 	0x54, 0x5a, 0xa1, 0xdd, 0x40, 0xec, 0xc5, 0xa0,
527 	0x40, 0xa7, 0xb1, 0xb1, 0xbc, 0xfe, 0x34, 0xe4,
528 	0xbf, 0xdb, 0x40, 0x89, 0x45, 0xb5, 0xf7, 0x45,
529 	0x69, 0xca, 0xa7, 0xc1, 0x9e, 0x4a, 0x76, 0xa8,
530 	0x05, 0x58
531 };
532 
533 static uint8_t ua_scalar_secp521r1[] = {
534 	0x00, 0x70, 0xa8, 0x4d, 0x30, 0xfd, 0xc9, 0x01,
535 	0x1c, 0xc6, 0xc3, 0x38, 0xd4, 0x75, 0x6f, 0x3e,
536 	0x59, 0xd8, 0x91, 0xaa, 0xb4, 0x18, 0x3e, 0x3c,
537 	0xa5, 0x3d, 0x3f, 0x23, 0xd8, 0xe6, 0xfb, 0x3c,
538 	0x54, 0x5a, 0xa1, 0xdd, 0x40, 0xec, 0xc5, 0xa0,
539 	0x40, 0xa7, 0xb1, 0xb1, 0xbc, 0xfe, 0x34, 0xe4,
540 	0xbf, 0xdb, 0x40, 0x89, 0x45, 0xb5, 0xf7, 0x45,
541 	0x69, 0xca, 0xa7, 0xc1, 0x9e, 0x4a, 0x76, 0xa8,
542 	0x05, 0x57
543 };
544 
545 static uint8_t ua_pubkey_qx_secp521r1[] = {
546 	0x01, 0x29, 0x15, 0x13, 0xa6, 0x45, 0x98, 0x5c,
547 	0x5e, 0x2b, 0xc3, 0x99, 0xc5, 0x25, 0x64, 0x29,
548 	0x14, 0x91, 0x12, 0xcc, 0x58, 0x3a, 0x9d, 0x91,
549 	0x95, 0x64, 0x10, 0x9e, 0xc3, 0x2d, 0xde, 0xe2,
550 	0xb1, 0xac, 0x44, 0xb7, 0x90, 0x70, 0xbf, 0xb5,
551 	0x50, 0x3b, 0x06, 0x78, 0x36, 0x05, 0x7e, 0x48,
552 	0xe7, 0x31, 0x6e, 0x3f, 0x78, 0x3b, 0x37, 0xbc,
553 	0xa8, 0xcd, 0xc0, 0x34, 0xb6, 0x4f, 0xf8, 0x73,
554 	0xd0, 0xb3
555 };
556 
557 static uint8_t ua_pubkey_qy_secp521r1[] = {
558 	0x00, 0xc1, 0x46, 0x92, 0x6e, 0x1a, 0xb5, 0xe6,
559 	0xee, 0x25, 0xe3, 0x62, 0x68, 0x30, 0x38, 0xef,
560 	0x44, 0x2a, 0xb0, 0xb8, 0xa9, 0xbc, 0x4b, 0x4b,
561 	0x55, 0x4c, 0x35, 0xde, 0x50, 0xcc, 0xc6, 0x9e,
562 	0xf9, 0x9d, 0x8d, 0xe9, 0x0f, 0x84, 0x95, 0xcb,
563 	0x41, 0xa2, 0xc7, 0xf3, 0x7d, 0xea, 0xb1, 0x8b,
564 	0x52, 0x5d, 0x58, 0x45, 0xac, 0xa0, 0xb4, 0x64,
565 	0x60, 0x74, 0x1f, 0x59, 0x71, 0x97, 0xe8, 0x6b,
566 	0x9f, 0x5d
567 };
568 
569 static uint8_t ua_sign_secp521r1_r[] = {
570 	0x00, 0xf1, 0xea, 0x3b, 0x7b, 0xfb, 0x49, 0x60,
571 	0xf3, 0x93, 0x66, 0x8d, 0x81, 0x28, 0x7f, 0x40,
572 	0xe9, 0x35, 0xd6, 0x13, 0xe1, 0x51, 0x1a, 0xee,
573 	0xc8, 0x98, 0xa1, 0xf9, 0x62, 0xb6, 0x9f, 0xf3,
574 	0x18, 0xdd, 0x45, 0x3c, 0xbb, 0x9d, 0xee, 0x89,
575 	0xf1, 0x91, 0xf3, 0xd9, 0xe7, 0x08, 0xc8, 0xe6,
576 	0xd3, 0x61, 0x19, 0x28, 0x19, 0x17, 0x23, 0x2b,
577 	0x69, 0x49, 0x32, 0x9c, 0x98, 0x19, 0x52, 0x5c,
578 	0x73, 0xbf
579 };
580 
581 static uint8_t ua_sign_secp521r1_s[] = {
582 	0x00, 0xa5, 0xab, 0x72, 0xc5, 0x71, 0x2a, 0x21,
583 	0x47, 0x6a, 0x45, 0xc8, 0xc2, 0xe3, 0x45, 0x40,
584 	0x8e, 0x79, 0xf8, 0x19, 0x65, 0xd4, 0xfd, 0xf2,
585 	0xd7, 0x28, 0xae, 0x70, 0xb8, 0xc1, 0x6d, 0x09,
586 	0x16, 0x31, 0x6e, 0xa0, 0x9c, 0xbf, 0x86, 0x19,
587 	0x9c, 0x04, 0x46, 0x48, 0xc1, 0x3f, 0x89, 0xb1,
588 	0xdd, 0xa2, 0x71, 0xb7, 0xf7, 0x0e, 0xa6, 0x66,
589 	0x15, 0x26, 0x66, 0x9b, 0xed, 0xda, 0x00, 0x1b,
590 	0x2b, 0xc5
591 };
592 
593 /** ECDSA SECP521R1 elliptic curve param (unaligned) */
594 
595 struct crypto_testsuite_ecdsa_params ecdsa_param_secp521r1_ua = {
596 	.pubkey_qx = {
597 		.data = ua_pubkey_qx_secp521r1,
598 		.length = sizeof(ua_pubkey_qx_secp521r1),
599 	},
600 	.pubkey_qy = {
601 		.data = ua_pubkey_qy_secp521r1,
602 		.length = sizeof(ua_pubkey_qy_secp521r1),
603 	},
604 	.scalar = {
605 		.data = ua_scalar_secp521r1,
606 		.length = sizeof(ua_scalar_secp521r1),
607 	},
608 	.digest = {
609 		.data = ua_digest_secp521r1,
610 		.length = sizeof(ua_digest_secp521r1),
611 	},
612 	.sign_r = {
613 		.data = ua_sign_secp521r1_r,
614 		.length = sizeof(ua_sign_secp521r1_r),
615 	},
616 	.sign_s = {
617 		.data = ua_sign_secp521r1_s,
618 		.length = sizeof(ua_sign_secp521r1_s),
619 	},
620 	.pkey = {
621 		.data = ua_pkey_secp521r1,
622 		.length = sizeof(ua_pkey_secp521r1),
623 	},
624 	.curve = RTE_CRYPTO_EC_GROUP_SECP521R1
625 };
626 
627 #endif /* __TEST_CRYPTODEV_ECDSA_TEST_VECTORS_H__ */
628