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