xref: /dpdk/app/test/test_cryptodev_ecdh_test_vectors.h (revision 2fba5232e77ea72993d282c170bb7be0a48b8110)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright (C) 2023 Marvell International Ltd.
3  */
4 
5 #ifndef __TEST_CRYPTODEV_ECDH_TEST_VECTORS_H__
6 #define __TEST_CRYPTODEV_ECDH_TEST_VECTORS_H__
7 
8 #include "rte_crypto_asym.h"
9 
10 struct crypto_testsuite_ecdh_params {
11 	rte_crypto_param pubkey_qA_x;
12 	rte_crypto_param pubkey_qA_y;
13 	rte_crypto_param pkey_A;
14 	rte_crypto_param pubkey_qB_x;
15 	rte_crypto_param pubkey_qB_y;
16 	rte_crypto_param pkey_B;
17 	rte_crypto_param secret_x;
18 	rte_crypto_param secret_y;
19 	int curve;
20 };
21 
22 /*
23  * Test vector reference:
24  * https://datatracker.ietf.org/doc/html/rfc5114.html
25  * Appendix A.
26  */
27 
28 /** SECP192R1 (P-192 NIST) test vector */
29 
30 static uint8_t dA_secp192r1[] = {
31 	0x32, 0x3F, 0xA3, 0x16, 0x9D, 0x8E, 0x9C, 0x65,
32 	0x93, 0xF5, 0x94, 0x76, 0xBC, 0x14, 0x20, 0x00,
33 	0xAB, 0x5B, 0xE0, 0xE2, 0x49, 0xC4, 0x34, 0x26
34 };
35 
36 static uint8_t x_qA_secp192r1[] = {
37 	0xCD, 0x46, 0x48, 0x9E, 0xCF, 0xD6, 0xC1, 0x05,
38 	0xE7, 0xB3, 0xD3, 0x25, 0x66, 0xE2, 0xB1, 0x22,
39 	0xE2, 0x49, 0xAB, 0xAA, 0xDD, 0x87, 0x06, 0x12
40 };
41 
42 static uint8_t y_qA_secp192r1[] = {
43 	0x68, 0x88, 0x7B, 0x48, 0x77, 0xDF, 0x51, 0xDD,
44 	0x4D, 0xC3, 0xD6, 0xFD, 0x11, 0xF0, 0xA2, 0x6F,
45 	0x8F, 0xD3, 0x84, 0x43, 0x17, 0x91, 0x6E, 0x9A
46 };
47 
48 static uint8_t dB_secp192r1[] = {
49 	0x63, 0x1F, 0x95, 0xBB, 0x4A, 0x67, 0x63, 0x2C,
50 	0x9C, 0x47, 0x6E, 0xEE, 0x9A, 0xB6, 0x95, 0xAB,
51 	0x24, 0x0A, 0x04, 0x99, 0x30, 0x7F, 0xCF, 0x62
52 };
53 
54 static uint8_t x_qB_secp192r1[] = {
55 	0x51, 0x9A, 0x12, 0x16, 0x80, 0xE0, 0x04, 0x54,
56 	0x66, 0xBA, 0x21, 0xDF, 0x2E, 0xEE, 0x47, 0xF5,
57 	0x97, 0x3B, 0x50, 0x05, 0x77, 0xEF, 0x13, 0xD5
58 };
59 
60 static uint8_t y_qB_secp192r1[] = {
61 	0xFF, 0x61, 0x3A, 0xB4, 0xD6, 0x4C, 0xEE, 0x3A,
62 	0x20, 0x87, 0x5B, 0xDB, 0x10, 0xF9, 0x53, 0xF6,
63 	0xB3, 0x0C, 0xA0, 0x72, 0xC6, 0x0A, 0xA5, 0x7F
64 };
65 
66 static uint8_t x_Z_secp192r1[] = {
67 	0xAD, 0x42, 0x01, 0x82, 0x63, 0x3F, 0x85, 0x26,
68 	0xBF, 0xE9, 0x54, 0xAC, 0xDA, 0x37, 0x6F, 0x05,
69 	0xE5, 0xFF, 0x4F, 0x83, 0x7F, 0x54, 0xFE, 0xBE
70 };
71 
72 static uint8_t y_Z_secp192r1[] = {
73 	0x43, 0x71, 0x54, 0x5E, 0xD7, 0x72, 0xA5, 0x97,
74 	0x41, 0xD0, 0xED, 0xA3, 0x2C, 0x67, 0x11, 0x12,
75 	0xB7, 0xFD, 0xDD, 0x51, 0x46, 0x1F, 0xCF, 0x32
76 };
77 
78 /** ECDH SECP192R1 elliptic curve param */
79 
80 struct crypto_testsuite_ecdh_params ecdh_param_secp192r1 = {
81 	.pubkey_qA_x = {
82 		.data = x_qA_secp192r1,
83 		.length = sizeof(x_qA_secp192r1),
84 	},
85 	.pubkey_qA_y = {
86 		.data = y_qA_secp192r1,
87 		.length = sizeof(y_qA_secp192r1),
88 	},
89 	.pubkey_qB_x = {
90 		.data = x_qB_secp192r1,
91 		.length = sizeof(x_qB_secp192r1),
92 	},
93 	.pubkey_qB_y = {
94 		.data = y_qB_secp192r1,
95 		.length = sizeof(y_qB_secp192r1),
96 	},
97 	.pkey_A = {
98 		.data = dA_secp192r1,
99 		.length = sizeof(dA_secp192r1),
100 	},
101 	.pkey_B = {
102 		.data = dB_secp192r1,
103 		.length = sizeof(dB_secp192r1),
104 	},
105 	.secret_x = {
106 		.data = x_Z_secp192r1,
107 		.length = sizeof(x_Z_secp192r1),
108 	},
109 	.secret_y = {
110 		.data = y_Z_secp192r1,
111 		.length = sizeof(y_Z_secp192r1),
112 	},
113 	.curve = RTE_CRYPTO_EC_GROUP_SECP192R1
114 };
115 
116 /** SECP224R1 (P-224 NIST) test vector */
117 
118 static uint8_t dA_secp224r1[] = {
119 	0xB5, 0x58, 0xEB, 0x6C, 0x28, 0x8D, 0xA7, 0x07,
120 	0xBB, 0xB4, 0xF8, 0xFB, 0xAE, 0x2A, 0xB9, 0xE9,
121 	0xCB, 0x62, 0xE3, 0xBC, 0x5C, 0x75, 0x73, 0xE2,
122 	0x2E, 0x26, 0xD3, 0x7F
123 };
124 
125 static uint8_t x_qA_secp224r1[] = {
126 	0x49, 0xDF, 0xEF, 0x30, 0x9F, 0x81, 0x48, 0x8C,
127 	0x30, 0x4C, 0xFF, 0x5A, 0xB3, 0xEE, 0x5A, 0x21,
128 	0x54, 0x36, 0x7D, 0xC7, 0x83, 0x31, 0x50, 0xE0,
129 	0xA5, 0x1F, 0x3E, 0xEB
130 };
131 
132 static uint8_t y_qA_secp224r1[] = {
133 	0x4F, 0x2B, 0x5E, 0xE4, 0x57, 0x62, 0xC4, 0xF6,
134 	0x54, 0xC1, 0xA0, 0xC6, 0x7F, 0x54, 0xCF, 0x88,
135 	0xB0, 0x16, 0xB5, 0x1B, 0xCE, 0x3D, 0x7C, 0x22,
136 	0x8D, 0x57, 0xAD, 0xB4,
137 };
138 
139 static uint8_t dB_secp224r1[] = {
140 	0xAC, 0x3B, 0x1A, 0xDD, 0x3D, 0x97, 0x70, 0xE6,
141 	0xF6, 0xA7, 0x08, 0xEE, 0x9F, 0x3B, 0x8E, 0x0A,
142 	0xB3, 0xB4, 0x80, 0xE9, 0xF2, 0x7F, 0x85, 0xC8,
143 	0x8B, 0x5E, 0x6D, 0x18,
144 };
145 
146 static uint8_t x_qB_secp224r1[] = {
147 	0x6B, 0x3A, 0xC9, 0x6A, 0x8D, 0x0C, 0xDE, 0x6A,
148 	0x55, 0x99, 0xBE, 0x80, 0x32, 0xED, 0xF1, 0x0C,
149 	0x16, 0x2D, 0x0A, 0x8A, 0xD2, 0x19, 0x50, 0x6D,
150 	0xCD, 0x42, 0xA2, 0x07,
151 };
152 
153 static uint8_t y_qB_secp224r1[] = {
154 	0xD4, 0x91, 0xBE, 0x99, 0xC2, 0x13, 0xA7, 0xD1,
155 	0xCA, 0x37, 0x06, 0xDE, 0xBF, 0xE3, 0x05, 0xF3,
156 	0x61, 0xAF, 0xCB, 0xB3, 0x3E, 0x26, 0x09, 0xC8,
157 	0xB1, 0x61, 0x8A, 0xD5
158 };
159 
160 static uint8_t x_Z_secp224r1[] = {
161 	0x52, 0x27, 0x2F, 0x50, 0xF4, 0x6F, 0x4E, 0xDC,
162 	0x91, 0x51, 0x56, 0x90, 0x92, 0xF4, 0x6D, 0xF2,
163 	0xD9, 0x6E, 0xCC, 0x3B, 0x6D, 0xC1, 0x71, 0x4A,
164 	0x4E, 0xA9, 0x49, 0xFA
165 };
166 
167 static uint8_t y_Z_secp224r1[] = {
168 	0x5F, 0x30, 0xC6, 0xAA, 0x36, 0xDD, 0xC4, 0x03,
169 	0xC0, 0xAC, 0xB7, 0x12, 0xBB, 0x88, 0xF1, 0x76,
170 	0x3C, 0x30, 0x46, 0xF6, 0xD9, 0x19, 0xBD, 0x9C,
171 	0x52, 0x43, 0x22, 0xBF
172 };
173 
174 /** ECDH SECP224R1 elliptic curve param */
175 
176 struct crypto_testsuite_ecdh_params ecdh_param_secp224r1 = {
177 	.pubkey_qA_x = {
178 		.data = x_qA_secp224r1,
179 		.length = sizeof(x_qA_secp224r1),
180 	},
181 	.pubkey_qA_y = {
182 		.data = y_qA_secp224r1,
183 		.length = sizeof(y_qA_secp224r1),
184 	},
185 	.pubkey_qB_x = {
186 		.data = x_qB_secp224r1,
187 		.length = sizeof(x_qB_secp224r1),
188 	},
189 	.pubkey_qB_y = {
190 		.data = y_qB_secp224r1,
191 		.length = sizeof(y_qB_secp224r1),
192 	},
193 	.pkey_A = {
194 		.data = dA_secp224r1,
195 		.length = sizeof(dA_secp224r1),
196 	},
197 	.pkey_B = {
198 		.data = dB_secp224r1,
199 		.length = sizeof(dB_secp224r1),
200 	},
201 	.secret_x = {
202 		.data = x_Z_secp224r1,
203 		.length = sizeof(x_Z_secp224r1),
204 	},
205 	.secret_y = {
206 		.data = y_Z_secp224r1,
207 		.length = sizeof(y_Z_secp224r1),
208 	},
209 	.curve = RTE_CRYPTO_EC_GROUP_SECP224R1
210 };
211 
212 /** SECP256R1 (P-256 NIST) test vector */
213 
214 static uint8_t dA_secp256r1[] = {
215 	0x81, 0x42, 0x64, 0x14, 0x5F, 0x2F, 0x56, 0xF2,
216 	0xE9, 0x6A, 0x8E, 0x33, 0x7A, 0x12, 0x84, 0x99,
217 	0x3F, 0xAF, 0x43, 0x2A, 0x5A, 0xBC, 0xE5, 0x9E,
218 	0x86, 0x7B, 0x72, 0x91, 0xD5, 0x07, 0xA3, 0xAF
219 };
220 
221 static uint8_t x_qA_secp256r1[] = {
222 	0x2A, 0xF5, 0x02, 0xF3, 0xBE, 0x89, 0x52, 0xF2,
223 	0xC9, 0xB5, 0xA8, 0xD4, 0x16, 0x0D, 0x09, 0xE9,
224 	0x71, 0x65, 0xBE, 0x50, 0xBC, 0x42, 0xAE, 0x4A,
225 	0x5E, 0x8D, 0x3B, 0x4B, 0xA8, 0x3A, 0xEB, 0x15
226 };
227 
228 static uint8_t y_qA_secp256r1[] = {
229 	0xEB, 0x0F, 0xAF, 0x4C, 0xA9, 0x86, 0xC4, 0xD3,
230 	0x86, 0x81, 0xA0, 0xF9, 0x87, 0x2D, 0x79, 0xD5,
231 	0x67, 0x95, 0xBD, 0x4B, 0xFF, 0x6E, 0x6D, 0xE3,
232 	0xC0, 0xF5, 0x01, 0x5E, 0xCE, 0x5E, 0xFD, 0x85
233 };
234 
235 static uint8_t dB_secp256r1[] = {
236 	0x2C, 0xE1, 0x78, 0x8E, 0xC1, 0x97, 0xE0, 0x96,
237 	0xDB, 0x95, 0xA2, 0x00, 0xCC, 0x0A, 0xB2, 0x6A,
238 	0x19, 0xCE, 0x6B, 0xCC, 0xAD, 0x56, 0x2B, 0x8E,
239 	0xEE, 0x1B, 0x59, 0x37, 0x61, 0xCF, 0x7F, 0x41
240 };
241 
242 static uint8_t x_qB_secp256r1[] = {
243 	0xB1, 0x20, 0xDE, 0x4A, 0xA3, 0x64, 0x92, 0x79,
244 	0x53, 0x46, 0xE8, 0xDE, 0x6C, 0x2C, 0x86, 0x46,
245 	0xAE, 0x06, 0xAA, 0xEA, 0x27, 0x9F, 0xA7, 0x75,
246 	0xB3, 0xAB, 0x07, 0x15, 0xF6, 0xCE, 0x51, 0xB0
247 };
248 
249 static uint8_t y_qB_secp256r1[] = {
250 	0x9F, 0x1B, 0x7E, 0xEC, 0xE2, 0x0D, 0x7B, 0x5E,
251 	0xD8, 0xEC, 0x68, 0x5F, 0xA3, 0xF0, 0x71, 0xD8,
252 	0x37, 0x27, 0x02, 0x70, 0x92, 0xA8, 0x41, 0x13,
253 	0x85, 0xC3, 0x4D, 0xDE, 0x57, 0x08, 0xB2, 0xB6
254 };
255 
256 static uint8_t x_Z_secp256r1[] = {
257 	0xDD, 0x0F, 0x53, 0x96, 0x21, 0x9D, 0x1E, 0xA3,
258 	0x93, 0x31, 0x04, 0x12, 0xD1, 0x9A, 0x08, 0xF1,
259 	0xF5, 0x81, 0x1E, 0x9D, 0xC8, 0xEC, 0x8E, 0xEA,
260 	0x7F, 0x80, 0xD2, 0x1C, 0x82, 0x0C, 0x27, 0x88
261 };
262 
263 static uint8_t y_Z_secp256r1[] = {
264 	0x03, 0x57, 0xDC, 0xCD, 0x4C, 0x80, 0x4D, 0x0D,
265 	0x8D, 0x33, 0xAA, 0x42, 0xB8, 0x48, 0x83, 0x4A,
266 	0xA5, 0x60, 0x5F, 0x9A, 0xB0, 0xD3, 0x72, 0x39,
267 	0xA1, 0x15, 0xBB, 0xB6, 0x47, 0x93, 0x6F, 0x50
268 };
269 
270 /** ECDH SECP256R1 elliptic curve param */
271 
272 struct crypto_testsuite_ecdh_params ecdh_param_secp256r1 = {
273 	.pubkey_qA_x = {
274 		.data = x_qA_secp256r1,
275 		.length = sizeof(x_qA_secp256r1),
276 	},
277 	.pubkey_qA_y = {
278 		.data = y_qA_secp256r1,
279 		.length = sizeof(y_qA_secp256r1),
280 	},
281 	.pubkey_qB_x = {
282 		.data = x_qB_secp256r1,
283 		.length = sizeof(x_qB_secp256r1),
284 	},
285 	.pubkey_qB_y = {
286 		.data = y_qB_secp256r1,
287 		.length = sizeof(y_qB_secp256r1),
288 	},
289 	.pkey_A = {
290 		.data = dA_secp256r1,
291 		.length = sizeof(dA_secp256r1),
292 	},
293 	.pkey_B = {
294 		.data = dB_secp256r1,
295 		.length = sizeof(dB_secp256r1),
296 	},
297 	.secret_x = {
298 		.data = x_Z_secp256r1,
299 		.length = sizeof(x_Z_secp256r1),
300 	},
301 	.secret_y = {
302 		.data = y_Z_secp256r1,
303 		.length = sizeof(y_Z_secp256r1),
304 	},
305 	.curve = RTE_CRYPTO_EC_GROUP_SECP256R1
306 };
307 
308 /** SECP384R1 (P-384 NIST) test vector */
309 
310 static uint8_t dA_secp384r1[] = {
311 	0xD2, 0x73, 0x35, 0xEA, 0x71, 0x66, 0x4A, 0xF2,
312 	0x44, 0xDD, 0x14, 0xE9, 0xFD, 0x12, 0x60, 0x71,
313 	0x5D, 0xFD, 0x8A, 0x79, 0x65, 0x57, 0x1C, 0x48,
314 	0xD7, 0x09, 0xEE, 0x7A, 0x79, 0x62, 0xA1, 0x56,
315 	0xD7, 0x06, 0xA9, 0x0C, 0xBC, 0xB5, 0xDF, 0x29,
316 	0x86, 0xF0, 0x5F, 0xEA, 0xDB, 0x93, 0x76, 0xF1
317 };
318 
319 static uint8_t x_qA_secp384r1[] = {
320 	0x79, 0x31, 0x48, 0xF1, 0x78, 0x76, 0x34, 0xD5,
321 	0xDA, 0x4C, 0x6D, 0x90, 0x74, 0x41, 0x7D, 0x05,
322 	0xE0, 0x57, 0xAB, 0x62, 0xF8, 0x20, 0x54, 0xD1,
323 	0x0E, 0xE6, 0xB0, 0x40, 0x3D, 0x62, 0x79, 0x54,
324 	0x7E, 0x6A, 0x8E, 0xA9, 0xD1, 0xFD, 0x77, 0x42,
325 	0x7D, 0x01, 0x6F, 0xE2, 0x7A, 0x8B, 0x8C, 0x66
326 };
327 
328 static uint8_t y_qA_secp384r1[] = {
329 	0xC6, 0xC4, 0x12, 0x94, 0x33, 0x1D, 0x23, 0xE6,
330 	0xF4, 0x80, 0xF4, 0xFB, 0x4C, 0xD4, 0x05, 0x04,
331 	0xC9, 0x47, 0x39, 0x2E, 0x94, 0xF4, 0xC3, 0xF0,
332 	0x6B, 0x8F, 0x39, 0x8B, 0xB2, 0x9E, 0x42, 0x36,
333 	0x8F, 0x7A, 0x68, 0x59, 0x23, 0xDE, 0x3B, 0x67,
334 	0xBA, 0xCE, 0xD2, 0x14, 0xA1, 0xA1, 0xD1, 0x28
335 };
336 
337 static uint8_t dB_secp384r1[] = {
338 	0x52, 0xD1, 0x79, 0x1F, 0xDB, 0x4B, 0x70, 0xF8,
339 	0x9C, 0x0F, 0x00, 0xD4, 0x56, 0xC2, 0xF7, 0x02,
340 	0x3B, 0x61, 0x25, 0x26, 0x2C, 0x36, 0xA7, 0xDF,
341 	0x1F, 0x80, 0x23, 0x11, 0x21, 0xCC, 0xE3, 0xD3,
342 	0x9B, 0xE5, 0x2E, 0x00, 0xC1, 0x94, 0xA4, 0x13,
343 	0x2C, 0x4A, 0x6C, 0x76, 0x8B, 0xCD, 0x94, 0xD2
344 };
345 
346 static uint8_t x_qB_secp384r1[] = {
347 	0x5C, 0xD4, 0x2A, 0xB9, 0xC4, 0x1B, 0x53, 0x47,
348 	0xF7, 0x4B, 0x8D, 0x4E, 0xFB, 0x70, 0x8B, 0x3D,
349 	0x5B, 0x36, 0xDB, 0x65, 0x91, 0x53, 0x59, 0xB4,
350 	0x4A, 0xBC, 0x17, 0x64, 0x7B, 0x6B, 0x99, 0x99,
351 	0x78, 0x9D, 0x72, 0xA8, 0x48, 0x65, 0xAE, 0x2F,
352 	0x22, 0x3F, 0x12, 0xB5, 0xA1, 0xAB, 0xC1, 0x20
353 };
354 
355 static uint8_t y_qB_secp384r1[] = {
356 	0xE1, 0x71, 0x45, 0x8F, 0xEA, 0xA9, 0x39, 0xAA,
357 	0xA3, 0xA8, 0xBF, 0xAC, 0x46, 0xB4, 0x04, 0xBD,
358 	0x8F, 0x6D, 0x5B, 0x34, 0x8C, 0x0F, 0xA4, 0xD8,
359 	0x0C, 0xEC, 0xA1, 0x63, 0x56, 0xCA, 0x93, 0x32,
360 	0x40, 0xBD, 0xE8, 0x72, 0x34, 0x15, 0xA8, 0xEC,
361 	0xE0, 0x35, 0xB0, 0xED, 0xF3, 0x67, 0x55, 0xDE
362 };
363 
364 static uint8_t x_Z_secp384r1[] = {
365 	0x5E, 0xA1, 0xFC, 0x4A, 0xF7, 0x25, 0x6D, 0x20,
366 	0x55, 0x98, 0x1B, 0x11, 0x05, 0x75, 0xE0, 0xA8,
367 	0xCA, 0xE5, 0x31, 0x60, 0x13, 0x7D, 0x90, 0x4C,
368 	0x59, 0xD9, 0x26, 0xEB, 0x1B, 0x84, 0x56, 0xE4,
369 	0x27, 0xAA, 0x8A, 0x45, 0x40, 0x88, 0x4C, 0x37,
370 	0xDE, 0x15, 0x9A, 0x58, 0x02, 0x8A, 0xBC, 0x0E
371 };
372 
373 static uint8_t y_Z_secp384r1[] = {
374 	0x0C, 0xC5, 0x9E, 0x4B, 0x04, 0x64, 0x14, 0xA8,
375 	0x1C, 0x8A, 0x3B, 0xDF, 0xDC, 0xA9, 0x25, 0x26,
376 	0xC4, 0x87, 0x69, 0xDD, 0x8D, 0x31, 0x27, 0xCA,
377 	0xA9, 0x9B, 0x36, 0x32, 0xD1, 0x91, 0x39, 0x42,
378 	0xDE, 0x36, 0x2E, 0xAF, 0xAA, 0x96, 0x23, 0x79,
379 	0x37, 0x4D, 0x9F, 0x3F, 0x06, 0x68, 0x41, 0xCA
380 };
381 
382 /** ECDH SECP384R1 elliptic curve param */
383 
384 struct crypto_testsuite_ecdh_params ecdh_param_secp384r1 = {
385 	.pubkey_qA_x = {
386 		.data = x_qA_secp384r1,
387 		.length = sizeof(x_qA_secp384r1),
388 	},
389 	.pubkey_qA_y = {
390 		.data = y_qA_secp384r1,
391 		.length = sizeof(y_qA_secp384r1),
392 	},
393 	.pubkey_qB_x = {
394 		.data = x_qB_secp384r1,
395 		.length = sizeof(x_qB_secp384r1),
396 	},
397 	.pubkey_qB_y = {
398 		.data = y_qB_secp384r1,
399 		.length = sizeof(y_qB_secp384r1),
400 	},
401 	.pkey_A = {
402 		.data = dA_secp384r1,
403 		.length = sizeof(dA_secp384r1),
404 	},
405 	.pkey_B = {
406 		.data = dB_secp384r1,
407 		.length = sizeof(dB_secp384r1),
408 	},
409 	.secret_x = {
410 		.data = x_Z_secp384r1,
411 		.length = sizeof(x_Z_secp384r1),
412 	},
413 	.secret_y = {
414 		.data = y_Z_secp384r1,
415 		.length = sizeof(y_Z_secp384r1),
416 	},
417 	.curve = RTE_CRYPTO_EC_GROUP_SECP384R1
418 };
419 
420 /** SECP521R1 (P-521 NIST) test vector */
421 
422 static uint8_t dA_secp521r1[] = {
423 	0x01, 0x13, 0xF8, 0x2D, 0xA8, 0x25, 0x73, 0x5E,
424 	0x3D, 0x97, 0x27, 0x66, 0x83, 0xB2, 0xB7, 0x42,
425 	0x77, 0xBA, 0xD2, 0x73, 0x35, 0xEA, 0x71, 0x66,
426 	0x4A, 0xF2, 0x43, 0x0C, 0xC4, 0xF3, 0x34, 0x59,
427 	0xB9, 0x66, 0x9E, 0xE7, 0x8B, 0x3F, 0xFB, 0x9B,
428 	0x86, 0x83, 0x01, 0x5D, 0x34, 0x4D, 0xCB, 0xFE,
429 	0xF6, 0xFB, 0x9A, 0xF4, 0xC6, 0xC4, 0x70, 0xBE,
430 	0x25, 0x45, 0x16, 0xCD, 0x3C, 0x1A, 0x1F, 0xB4,
431 	0x73, 0x62
432 };
433 
434 static uint8_t x_qA_secp521r1[] = {
435 	0x01, 0xEB, 0xB3, 0x4D, 0xD7, 0x57, 0x21, 0xAB,
436 	0xF8, 0xAD, 0xC9, 0xDB, 0xED, 0x17, 0x88, 0x9C,
437 	0xBB, 0x97, 0x65, 0xD9, 0x0A, 0x7C, 0x60, 0xF2,
438 	0xCE, 0xF0, 0x07, 0xBB, 0x0F, 0x2B, 0x26, 0xE1,
439 	0x48, 0x81, 0xFD, 0x44, 0x42, 0xE6, 0x89, 0xD6,
440 	0x1C, 0xB2, 0xDD, 0x04, 0x6E, 0xE3, 0x0E, 0x3F,
441 	0xFD, 0x20, 0xF9, 0xA4, 0x5B, 0xBD, 0xF6, 0x41,
442 	0x3D, 0x58, 0x3A, 0x2D, 0xBF, 0x59, 0x92, 0x4F,
443 	0xD3, 0x5C
444 };
445 
446 static uint8_t y_qA_secp521r1[] = {
447 	0x00, 0xF6, 0xB6, 0x32, 0xD1, 0x94, 0xC0, 0x38,
448 	0x8E, 0x22, 0xD8, 0x43, 0x7E, 0x55, 0x8C, 0x55,
449 	0x2A, 0xE1, 0x95, 0xAD, 0xFD, 0x15, 0x3F, 0x92,
450 	0xD7, 0x49, 0x08, 0x35, 0x1B, 0x2F, 0x8C, 0x4E,
451 	0xDA, 0x94, 0xED, 0xB0, 0x91, 0x6D, 0x1B, 0x53,
452 	0xC0, 0x20, 0xB5, 0xEE, 0xCA, 0xED, 0x1A, 0x5F,
453 	0xC3, 0x8A, 0x23, 0x3E, 0x48, 0x30, 0x58, 0x7B,
454 	0xB2, 0xEE, 0x34, 0x89, 0xB3, 0xB4, 0x2A, 0x5A,
455 	0x86, 0xA4
456 };
457 
458 static uint8_t dB_secp521r1[] = {
459 	0x00, 0xCE, 0xE3, 0x48, 0x0D, 0x86, 0x45, 0xA1,
460 	0x7D, 0x24, 0x9F, 0x27, 0x76, 0xD2, 0x8B, 0xAE,
461 	0x61, 0x69, 0x52, 0xD1, 0x79, 0x1F, 0xDB, 0x4B,
462 	0x70, 0xF7, 0xC3, 0x37, 0x87, 0x32, 0xAA, 0x1B,
463 	0x22, 0x92, 0x84, 0x48, 0xBC, 0xD1, 0xDC, 0x24,
464 	0x96, 0xD4, 0x35, 0xB0, 0x10, 0x48, 0x06, 0x6E,
465 	0xBE, 0x4F, 0x72, 0x90, 0x3C, 0x36, 0x1B, 0x1A,
466 	0x9D, 0xC1, 0x19, 0x3D, 0xC2, 0xC9, 0xD0, 0x89,
467 	0x1B, 0x96
468 };
469 
470 static uint8_t x_qB_secp521r1[] = {
471 	0x01, 0x0E, 0xBF, 0xAF, 0xC6, 0xE8, 0x5E, 0x08,
472 	0xD2, 0x4B, 0xFF, 0xFC, 0xC1, 0xA4, 0x51, 0x1D,
473 	0xB0, 0xE6, 0x34, 0xBE, 0xEB, 0x1B, 0x6D, 0xEC,
474 	0x8C, 0x59, 0x39, 0xAE, 0x44, 0x76, 0x62, 0x01,
475 	0xAF, 0x62, 0x00, 0x43, 0x0B, 0xA9, 0x7C, 0x8A,
476 	0xC6, 0xA0, 0xE9, 0xF0, 0x8B, 0x33, 0xCE, 0x7E,
477 	0x9F, 0xEE, 0xB5, 0xBA, 0x4E, 0xE5, 0xE0, 0xD8,
478 	0x15, 0x10, 0xC2, 0x42, 0x95, 0xB8, 0xA0, 0x8D,
479 	0x02, 0x35
480 };
481 
482 static uint8_t y_qB_secp521r1[] = {
483 	0x00, 0xA4, 0xA6, 0xEC, 0x30, 0x0D, 0xF9, 0xE2,
484 	0x57, 0xB0, 0x37, 0x2B, 0x5E, 0x7A, 0xBF, 0xEF,
485 	0x09, 0x34, 0x36, 0x71, 0x9A, 0x77, 0x88, 0x7E,
486 	0xBB, 0x0B, 0x18, 0xCF, 0x80, 0x99, 0xB9, 0xF4,
487 	0x21, 0x2B, 0x6E, 0x30, 0xA1, 0x41, 0x9C, 0x18,
488 	0xE0, 0x29, 0xD3, 0x68, 0x63, 0xCC, 0x9D, 0x44,
489 	0x8F, 0x4D, 0xBA, 0x4D, 0x2A, 0x0E, 0x60, 0x71,
490 	0x1B, 0xE5, 0x72, 0x91, 0x5F, 0xBD, 0x4F, 0xEF,
491 	0x26, 0x95
492 };
493 
494 static uint8_t x_Z_secp521r1[] = {
495 	0x00, 0xCD, 0xEA, 0x89, 0x62, 0x1C, 0xFA, 0x46,
496 	0xB1, 0x32, 0xF9, 0xE4, 0xCF, 0xE2, 0x26, 0x1C,
497 	0xDE, 0x2D, 0x43, 0x68, 0xEB, 0x56, 0x56, 0x63,
498 	0x4C, 0x7C, 0xC9, 0x8C, 0x7A, 0x00, 0xCD, 0xE5,
499 	0x4E, 0xD1, 0x86, 0x6A, 0x0D, 0xD3, 0xE6, 0x12,
500 	0x6C, 0x9D, 0x2F, 0x84, 0x5D, 0xAF, 0xF8, 0x2C,
501 	0xEB, 0x1D, 0xA0, 0x8F, 0x5D, 0x87, 0x52, 0x1B,
502 	0xB0, 0xEB, 0xEC, 0xA7, 0x79, 0x11, 0x16, 0x9C,
503 	0x20, 0xCC
504 };
505 
506 static uint8_t y_Z_secp521r1[] = {
507 	0x00, 0xF9, 0xA7, 0x16, 0x41, 0x02, 0x9B, 0x7F,
508 	0xC1, 0xA8, 0x08, 0xAD, 0x07, 0xCD, 0x48, 0x61,
509 	0xE8, 0x68, 0x61, 0x4B, 0x86, 0x5A, 0xFB, 0xEC,
510 	0xAB, 0x1F, 0x2B, 0xD4, 0xD8, 0xB5, 0x5E, 0xBC,
511 	0xB5, 0xE3, 0xA5, 0x31, 0x43, 0xCE, 0xB2, 0xC5,
512 	0x11, 0xB1, 0xAE, 0x0A, 0xF5, 0xAC, 0x82, 0x7F,
513 	0x60, 0xF2, 0xFD, 0x87, 0x25, 0x65, 0xAC, 0x5C,
514 	0xA0, 0xA1, 0x64, 0x03, 0x8F, 0xE9, 0x80, 0xA7,
515 	0xE4, 0xBD
516 };
517 
518 /** ECDH SECP521R1 elliptic curve param */
519 
520 struct crypto_testsuite_ecdh_params ecdh_param_secp521r1 = {
521 	.pubkey_qA_x = {
522 		.data = x_qA_secp521r1,
523 		.length = sizeof(x_qA_secp521r1),
524 	},
525 	.pubkey_qA_y = {
526 		.data = y_qA_secp521r1,
527 		.length = sizeof(y_qA_secp521r1),
528 	},
529 	.pubkey_qB_x = {
530 		.data = x_qB_secp521r1,
531 		.length = sizeof(x_qB_secp521r1),
532 	},
533 	.pubkey_qB_y = {
534 		.data = y_qB_secp521r1,
535 		.length = sizeof(y_qB_secp521r1),
536 	},
537 	.pkey_A = {
538 		.data = dA_secp521r1,
539 		.length = sizeof(dA_secp521r1),
540 	},
541 	.pkey_B = {
542 		.data = dB_secp521r1,
543 		.length = sizeof(dB_secp521r1),
544 	},
545 	.secret_x = {
546 		.data = x_Z_secp521r1,
547 		.length = sizeof(x_Z_secp521r1),
548 	},
549 	.secret_y = {
550 		.data = y_Z_secp521r1,
551 		.length = sizeof(y_Z_secp521r1),
552 	},
553 	.curve = RTE_CRYPTO_EC_GROUP_SECP521R1
554 };
555 
556 /** ED25519 test vector */
557 
558 static uint8_t privkey_ed25519[] = {
559 	0x83, 0x3f, 0xe6, 0x24, 0x09, 0x23, 0x7b, 0x9d,
560 	0x62, 0xec, 0x77, 0x58, 0x75, 0x20, 0x91, 0x1e,
561 	0x9a, 0x75, 0x9c, 0xec, 0x1d, 0x19, 0x75, 0x5b,
562 	0x7d, 0xa9, 0x01, 0xb9, 0x6d, 0xca, 0x3d, 0x42
563 };
564 
565 static uint8_t pubkey_ed25519[] = {
566 	0xec, 0x17, 0x2b, 0x93, 0xad, 0x5e, 0x56, 0x3b,
567 	0xf4, 0x93, 0x2c, 0x70, 0xe1, 0x24, 0x50, 0x34,
568 	0xc3, 0x54, 0x67, 0xef, 0x2e, 0xfd, 0x4d, 0x64,
569 	0xeb, 0xf8, 0x19, 0x68, 0x34, 0x67, 0xe2, 0xbf
570 };
571 
572 /** ECDH ED25519 elliptic curve param */
573 
574 struct crypto_testsuite_ecdh_params ecdh_param_ed25519 = {
575 	.pubkey_qA_x = {
576 		.data = pubkey_ed25519,
577 		.length = sizeof(pubkey_ed25519),
578 	},
579 	.pubkey_qA_y = {
580 	},
581 	.pubkey_qB_x = {
582 	},
583 	.pubkey_qB_y = {
584 	},
585 	.pkey_A = {
586 		.data = privkey_ed25519,
587 		.length = sizeof(privkey_ed25519),
588 	},
589 	.pkey_B = {
590 	},
591 	.secret_x = {
592 	},
593 	.secret_y = {
594 	},
595 	.curve = RTE_CRYPTO_EC_GROUP_ED25519
596 };
597 
598 /** ED448 test vector */
599 
600 static uint8_t privkey_ed448[] = {
601 	0xd6, 0x5d, 0xf3, 0x41, 0xad, 0x13, 0xe0, 0x08,
602 	0x56, 0x76, 0x88, 0xba, 0xed, 0xda, 0x8e, 0x9d,
603 	0xcd, 0xc1, 0x7d, 0xc0, 0x24, 0x97, 0x4e, 0xa5,
604 	0xb4, 0x22, 0x7b, 0x65, 0x30, 0xe3, 0x39, 0xbf,
605 	0xf2, 0x1f, 0x99, 0xe6, 0x8c, 0xa6, 0x96, 0x8f,
606 	0x3c, 0xca, 0x6d, 0xfe, 0x0f, 0xb9, 0xf4, 0xfa,
607 	0xb4, 0xfa, 0x13, 0x5d, 0x55, 0x42, 0xea, 0x3f,
608 	0x01
609 };
610 
611 static uint8_t pubkey_ed448[] = {
612 	0xdf, 0x97, 0x05, 0xf5, 0x8e, 0xdb, 0xab, 0x80,
613 	0x2c, 0x7f, 0x83, 0x63, 0xcf, 0xe5, 0x56, 0x0a,
614 	0xb1, 0xc6, 0x13, 0x2c, 0x20, 0xa9, 0xf1, 0xdd,
615 	0x16, 0x34, 0x83, 0xa2, 0x6f, 0x8a, 0xc5, 0x3a,
616 	0x39, 0xd6, 0x80, 0x8b, 0xf4, 0xa1, 0xdf, 0xbd,
617 	0x26, 0x1b, 0x09, 0x9b, 0xb0, 0x3b, 0x3f, 0xb5,
618 	0x09, 0x06, 0xcb, 0x28, 0xbd, 0x8a, 0x08, 0x1f,
619 	0x00
620 };
621 
622 /** ECDH ED448 elliptic curve param */
623 
624 struct crypto_testsuite_ecdh_params ecdh_param_ed448 = {
625 	.pubkey_qA_x = {
626 		.data = pubkey_ed448,
627 		.length = sizeof(pubkey_ed448),
628 	},
629 	.pubkey_qA_y = {
630 	},
631 	.pubkey_qB_x = {
632 	},
633 	.pubkey_qB_y = {
634 	},
635 	.pkey_A = {
636 		.data = privkey_ed448,
637 		.length = sizeof(privkey_ed448),
638 	},
639 	.pkey_B = {
640 	},
641 	.secret_x = {
642 	},
643 	.secret_y = {
644 	},
645 	.curve = RTE_CRYPTO_EC_GROUP_ED448
646 };
647 
648 #endif /* __TEST_CRYPTODEV_ECDH_TEST_VECTORS_H__ */
649