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