1 // SPDX-License-Identifier: GPL-2.0 OR MIT 1 2 /* 3 * Copyright (C) 2015-2019 Jason A. Donenfeld 4 */ 5 6 #include <crypto/curve25519.h> 7 8 struct curve25519_test_vector { 9 u8 private[CURVE25519_KEY_SIZE]; 10 u8 public[CURVE25519_KEY_SIZE]; 11 u8 result[CURVE25519_KEY_SIZE]; 12 bool valid; 13 }; 14 static const struct curve25519_test_vector cur 15 { 16 .private = { 0x77, 0x07, 0x6d, 17 0x3c, 0x16, 0xc1, 18 0xdf, 0x4c, 0x2f, 19 0xb1, 0x77, 0xfb, 20 .public = { 0xde, 0x9e, 0xdb, 21 0xd3, 0x5b, 0x61, 22 0x3f, 0x83, 0x43, 23 0xad, 0xfc, 0x7e, 24 .result = { 0x4a, 0x5d, 0x9d, 25 0x72, 0x8e, 0x3b, 26 0xe0, 0x7e, 0x21, 27 0x76, 0xf0, 0x9b, 28 .valid = true 29 }, 30 { 31 .private = { 0x5d, 0xab, 0x08, 32 0x79, 0xe1, 0x7f, 33 0x6f, 0x3b, 0xb1, 34 0x1c, 0x2f, 0x8b, 35 .public = { 0x85, 0x20, 0xf0, 36 0x74, 0x8b, 0x7d, 37 0x0d, 0xbf, 0x3a, 38 0xeb, 0xa4, 0xa9, 39 .result = { 0x4a, 0x5d, 0x9d, 40 0x72, 0x8e, 0x3b, 41 0xe0, 0x7e, 0x21, 42 0x76, 0xf0, 0x9b, 43 .valid = true 44 }, 45 { 46 .private = { 1 }, 47 .public = { 0x25, 0x00, 0x00, 48 0x00, 0x00, 0x00, 49 0x00, 0x00, 0x00, 50 0x00, 0x00, 0x00, 51 .result = { 0x3c, 0x77, 0x77, 52 0x41, 0x60, 0x77, 53 0x0b, 0x95, 0x48, 54 0xdd, 0xcd, 0xc5, 55 .valid = true 56 }, 57 { 58 .private = { 1 }, 59 .public = { 0xff, 0xff, 0xff, 60 0xff, 0xff, 0xff, 61 0xff, 0xff, 0xff, 62 0xff, 0xff, 0xff, 63 .result = { 0xb3, 0x2d, 0x13, 64 0xe6, 0x26, 0x19, 65 0xb7, 0x3f, 0xfc, 66 0x0b, 0x78, 0xd8, 67 .valid = true 68 }, 69 { 70 .private = { 0xa5, 0x46, 0xe3, 71 0x3b, 0x16, 0x15, 72 0x62, 0x14, 0x4c, 73 0x50, 0x6a, 0x22, 74 .public = { 0xe6, 0xdb, 0x68, 75 0x35, 0x94, 0xc1, 76 0x72, 0x66, 0x24, 77 0x10, 0xa9, 0x03, 78 .result = { 0xc3, 0xda, 0x55, 79 0x8e, 0x94, 0xea, 80 0x32, 0xec, 0xcf, 81 0x54, 0xb4, 0x07, 82 .valid = true 83 }, 84 { 85 .private = { 1, 2, 3, 4 }, 86 .public = { 0 }, 87 .result = { 0 }, 88 .valid = false 89 }, 90 { 91 .private = { 2, 4, 6, 8 }, 92 .public = { 0xe0, 0xeb, 0x7a, 93 0x16, 0x56, 0xe3, 94 0xda, 0x09, 0x8d, 95 0x86, 0x62, 0x05, 96 .result = { 0 }, 97 .valid = false 98 }, 99 { 100 .private = { 0xff, 0xff, 0xff, 101 0xff, 0xff, 0xff, 102 0xff, 0xff, 0xff, 103 0xff, 0xff, 0xff, 104 .public = { 0xff, 0xff, 0xff, 105 0xff, 0xff, 0xff, 106 0xff, 0xff, 0xff, 107 0xff, 0xff, 0xff, 108 .result = { 0x77, 0x52, 0xb6, 109 0xc6, 0x93, 0x46, 110 0xf3, 0x31, 0x03, 111 0x42, 0x2b, 0x4e, 112 .valid = true 113 }, 114 { 115 .private = { 0x8e, 0x0a, 0x00, 116 0x00, 0x00, 0x00, 117 0x00, 0x00, 0x00, 118 0x00, 0x00, 0x00, 119 .public = { 0x00, 0x00, 0x00, 120 0x00, 0x00, 0x00, 121 0x00, 0x00, 0x00, 122 0x00, 0x00, 0x00, 123 .result = { 0x5a, 0xdf, 0xaa, 124 0xae, 0x49, 0x62, 125 0xe1, 0xc5, 0xc7, 126 0xb0, 0xba, 0x16, 127 .valid = true 128 }, 129 /* wycheproof - normal case */ 130 { 131 .private = { 0x48, 0x52, 0x83, 132 0xde, 0xab, 0xaa, 133 0xd1, 0x9f, 0xe7, 134 0x6c, 0x6e, 0x16, 135 .public = { 0x9c, 0x64, 0x7d, 136 0x8f, 0xdc, 0x3c, 137 0x15, 0xc4, 0xb2, 138 0xdf, 0x46, 0x9d, 139 .result = { 0x87, 0xb7, 0xf2, 140 0x4c, 0xa5, 0xe0, 141 0x9d, 0x9d, 0xe6, 142 0xbe, 0x14, 0xff, 143 .valid = true 144 }, 145 /* wycheproof - public key on twist */ 146 { 147 .private = { 0x58, 0x8c, 0x06, 148 0x88, 0xad, 0x77, 149 0xba, 0x71, 0x4b, 150 0x13, 0x79, 0xa5, 151 .public = { 0x63, 0xaa, 0x40, 152 0xca, 0xf2, 0x3a, 153 0x08, 0x89, 0xa0, 154 0x56, 0x34, 0x49, 155 .result = { 0xb1, 0xa7, 0x07, 156 0xb2, 0x98, 0xff, 157 0xfa, 0xb8, 0x7c, 158 0x2b, 0xe9, 0xa2, 159 .valid = true 160 }, 161 /* wycheproof - public key on twist */ 162 { 163 .private = { 0xb0, 0x5b, 0xfd, 164 0xfd, 0x64, 0x8c, 165 0x00, 0x0b, 0x39, 166 0x8a, 0xab, 0x3b, 167 .public = { 0x0f, 0x83, 0xc3, 168 0xad, 0xf4, 0xef, 169 0xb5, 0xcf, 0xa6, 170 0x43, 0xfa, 0x72, 171 .result = { 0x67, 0xdd, 0x4a, 172 0x4c, 0x0e, 0x3f, 173 0x6b, 0xca, 0x92, 174 0x69, 0xb4, 0xc3, 175 .valid = true 176 }, 177 /* wycheproof - public key on twist */ 178 { 179 .private = { 0x70, 0xe3, 0x4b, 180 0x0f, 0xdd, 0xfd, 181 0x57, 0xbf, 0xe0, 182 0xb4, 0x24, 0xbb, 183 .public = { 0x0b, 0x82, 0x11, 184 0xf6, 0x87, 0x1c, 185 0xc1, 0xba, 0x17, 186 0x84, 0x03, 0xb0, 187 .result = { 0x4a, 0x06, 0x38, 188 0x3b, 0x47, 0xf8, 189 0x5b, 0xe5, 0x41, 190 0xc0, 0xbc, 0xc0, 191 .valid = true 192 }, 193 /* wycheproof - public key on twist */ 194 { 195 .private = { 0x68, 0xc1, 0xf3, 196 0xd3, 0x7b, 0xba, 197 0x7a, 0x57, 0xbe, 198 0x4d, 0xc2, 0x9a, 199 .public = { 0x34, 0x3a, 0xc2, 200 0xb1, 0x00, 0x81, 201 0x35, 0x85, 0x6e, 202 0x13, 0x91, 0x2d, 203 .result = { 0x39, 0x94, 0x91, 204 0xb4, 0xf9, 0xf6, 205 0x7b, 0x28, 0xf8, 206 0x47, 0x5d, 0x58, 207 .valid = true 208 }, 209 /* wycheproof - public key on twist */ 210 { 211 .private = { 0xd8, 0x77, 0xb2, 212 0xf7, 0xfd, 0x4c, 213 0xd5, 0xb3, 0x05, 214 0xe3, 0x24, 0xff, 215 .public = { 0xfa, 0x69, 0x5f, 216 0xbf, 0x70, 0x48, 217 0xba, 0xfd, 0xd3, 218 0x68, 0x1a, 0x8d, 219 .result = { 0x2c, 0x4f, 0xe1, 220 0x17, 0x76, 0xb1, 221 0xcf, 0x5a, 0x97, 222 0x8c, 0x16, 0x26, 223 .valid = true 224 }, 225 /* wycheproof - public key = 0 */ 226 { 227 .private = { 0x20, 0x74, 0x94, 228 0xd4, 0x78, 0x05, 229 0x58, 0x5a, 0xda, 230 0xfd, 0x46, 0x58, 231 .public = { 0x00, 0x00, 0x00, 232 0x00, 0x00, 0x00, 233 0x00, 0x00, 0x00, 234 0x00, 0x00, 0x00, 235 .result = { 0x00, 0x00, 0x00, 236 0x00, 0x00, 0x00, 237 0x00, 0x00, 0x00, 238 0x00, 0x00, 0x00, 239 .valid = false 240 }, 241 /* wycheproof - public key = 1 */ 242 { 243 .private = { 0x20, 0x2e, 0x89, 244 0x93, 0x0e, 0xb9, 245 0xe1, 0xc6, 0x70, 246 0x04, 0x76, 0x21, 247 .public = { 0x01, 0x00, 0x00, 248 0x00, 0x00, 0x00, 249 0x00, 0x00, 0x00, 250 0x00, 0x00, 0x00, 251 .result = { 0x00, 0x00, 0x00, 252 0x00, 0x00, 0x00, 253 0x00, 0x00, 0x00, 254 0x00, 0x00, 0x00, 255 .valid = false 256 }, 257 /* wycheproof - edge case on twist */ 258 { 259 .private = { 0x38, 0xdd, 0xe9, 260 0x5f, 0x9a, 0xc3, 261 0xda, 0xde, 0xad, 262 0xf8, 0x1f, 0x74, 263 .public = { 0x02, 0x00, 0x00, 264 0x00, 0x00, 0x00, 265 0x00, 0x00, 0x00, 266 0x00, 0x00, 0x00, 267 .result = { 0x9a, 0x2c, 0xfe, 268 0x39, 0x62, 0x5c, 269 0x06, 0x87, 0x7a, 270 0xb3, 0xd7, 0x95, 271 .valid = true 272 }, 273 /* wycheproof - edge case on twist */ 274 { 275 .private = { 0x98, 0x57, 0xa9, 276 0xfd, 0x9a, 0x44, 277 0xcd, 0xf2, 0x82, 278 0x10, 0x67, 0x7a, 279 .public = { 0x03, 0x00, 0x00, 280 0x00, 0x00, 0x00, 281 0x00, 0x00, 0x00, 282 0x00, 0x00, 0x00, 283 .result = { 0x4d, 0xa4, 0xe0, 284 0xe2, 0xf0, 0xfa, 285 0x52, 0xc1, 0xed, 286 0xf3, 0x46, 0xc2, 287 .valid = true 288 }, 289 /* wycheproof - edge case on twist */ 290 { 291 .private = { 0x48, 0xe2, 0x13, 292 0x05, 0xe6, 0xe5, 293 0x33, 0x36, 0x7a, 294 0xf0, 0xa8, 0x8e, 295 .public = { 0xff, 0xff, 0xff, 296 0xff, 0x1f, 0x00, 297 0x00, 0x00, 0x00, 298 0x00, 0xf0, 0xff, 299 .result = { 0x9e, 0xd1, 0x0c, 300 0x82, 0xf4, 0x51, 301 0xe6, 0xb8, 0x24, 302 0xff, 0xcc, 0x3c, 303 .valid = true 304 }, 305 /* wycheproof - edge case on twist */ 306 { 307 .private = { 0x28, 0xf4, 0x10, 308 0xa6, 0x2b, 0x64, 309 0xfd, 0xdc, 0xb8, 310 0xa7, 0xbe, 0x2f, 311 .public = { 0x00, 0x00, 0x00, 312 0x00, 0xe0, 0xff, 313 0xff, 0xff, 0xff, 314 0xff, 0x0f, 0x00, 315 .result = { 0xcf, 0x72, 0xb4, 316 0x94, 0xf4, 0x16, 317 0x68, 0x51, 0x76, 318 0xe1, 0xab, 0x08, 319 .valid = true 320 }, 321 /* wycheproof - edge case on twist */ 322 { 323 .private = { 0x18, 0xa9, 0x3b, 324 0x22, 0x5c, 0xa0, 325 0xde, 0xc2, 0x35, 326 0xf1, 0xa6, 0xd6, 327 .public = { 0x00, 0x00, 0x00, 328 0x00, 0x00, 0x00, 329 0x00, 0x00, 0x00, 330 0x00, 0x00, 0x00, 331 .result = { 0x5d, 0x50, 0xb6, 332 0x94, 0x10, 0x38, 333 0x14, 0xbf, 0x85, 334 0x24, 0xc7, 0xff, 335 .valid = true 336 }, 337 /* wycheproof - edge case on twist */ 338 { 339 .private = { 0xc0, 0x1d, 0x13, 340 0xca, 0xc2, 0xba, 341 0x7e, 0x0b, 0x04, 342 0x57, 0xd8, 0xd0, 343 .public = { 0xea, 0xff, 0xff, 344 0xff, 0xff, 0xff, 345 0xff, 0xff, 0xff, 346 0xff, 0xff, 0xff, 347 .result = { 0x19, 0x23, 0x0e, 348 0x3c, 0x22, 0xab, 349 0x7e, 0xae, 0x42, 350 0x7b, 0x2c, 0x80, 351 .valid = true 352 }, 353 /* wycheproof - edge case for public k 354 { 355 .private = { 0x38, 0x6f, 0x7f, 356 0x4f, 0x82, 0xe6, 357 0xe3, 0x4f, 0x31, 358 0x90, 0x29, 0x25, 359 .public = { 0x04, 0x00, 0x00, 360 0x00, 0x00, 0x00, 361 0x00, 0x00, 0x00, 362 0x00, 0x00, 0x00, 363 .result = { 0x0f, 0xca, 0xb5, 364 0xa7, 0x1f, 0xc5, 365 0x0b, 0xe6, 0x87, 366 0x44, 0xe1, 0x4a, 367 .valid = true 368 }, 369 /* wycheproof - edge case for public k 370 { 371 .private = { 0xe0, 0x23, 0xa2, 372 0x28, 0x04, 0xdd, 373 0xe7, 0x9d, 0x43, 374 0x2e, 0xcb, 0x64, 375 .public = { 0xff, 0xff, 0xff, 376 0xff, 0xff, 0xff, 377 0xff, 0xff, 0xff, 378 0xff, 0xff, 0xff, 379 .result = { 0x54, 0xce, 0x8f, 380 0xb1, 0x30, 0x6a, 381 0xef, 0x6b, 0xbb, 382 0x8d, 0x9f, 0xef, 383 .valid = true 384 }, 385 /* wycheproof - edge case for public k 386 { 387 .private = { 0x68, 0xf0, 0x10, 388 0x05, 0x3a, 0x36, 389 0x4e, 0xbd, 0xc8, 390 0x3a, 0x6f, 0x8f, 391 .public = { 0xff, 0xff, 0xff, 392 0xff, 0xff, 0xff, 393 0xff, 0xff, 0xff, 394 0xff, 0xff, 0xff, 395 .result = { 0xf1, 0x36, 0x77, 396 0x11, 0x0a, 0xf1, 397 0x04, 0x3c, 0xab, 398 0x75, 0xa2, 0x23, 399 .valid = true 400 }, 401 /* wycheproof - edge case for public k 402 { 403 .private = { 0x58, 0xeb, 0xcb, 404 0xaf, 0x1e, 0xc6, 405 0x2c, 0x4b, 0x7b, 406 0x2c, 0xb0, 0x08, 407 .public = { 0xff, 0xff, 0xff, 408 0xff, 0xdf, 0xff, 409 0xfe, 0xff, 0xff, 410 0xff, 0xf7, 0xff, 411 .result = { 0xbf, 0x9a, 0xff, 412 0x58, 0x64, 0x60, 413 0xf3, 0xd4, 0x53, 414 0x06, 0xeb, 0x88, 415 .valid = true 416 }, 417 /* wycheproof - edge case for public k 418 { 419 .private = { 0x18, 0x8c, 0x4b, 420 0xbb, 0x65, 0x8b, 421 0x01, 0x01, 0x5e, 422 0xb7, 0x86, 0x35, 423 .public = { 0xff, 0xff, 0xff, 424 0xff, 0xff, 0xff, 425 0xff, 0xff, 0xff, 426 0xff, 0xff, 0xff, 427 .result = { 0xd4, 0x80, 0xde, 428 0xe0, 0x68, 0x4a, 429 0xea, 0x0b, 0xc5, 430 0xd2, 0x01, 0x58, 431 .valid = true 432 }, 433 /* wycheproof - edge case for public k 434 { 435 .private = { 0xe0, 0x6c, 0x11, 436 0xc7, 0x67, 0x3f, 437 0x90, 0x94, 0x23, 438 0x6a, 0x98, 0x8d, 439 .public = { 0xff, 0xff, 0xff, 440 0xff, 0xff, 0xff, 441 0xff, 0xff, 0xff, 442 0xff, 0xff, 0xff, 443 .result = { 0x4c, 0x44, 0x01, 444 0xb1, 0x8f, 0x27, 445 0x14, 0xdb, 0x66, 446 0x06, 0x90, 0x92, 447 .valid = true 448 }, 449 /* wycheproof - edge case for public k 450 { 451 .private = { 0xc0, 0x65, 0x8c, 452 0x29, 0x38, 0x77, 453 0xf9, 0xf5, 0x41, 454 0xbc, 0x14, 0x0a, 455 .public = { 0xeb, 0xff, 0xff, 456 0xff, 0xff, 0xff, 457 0xff, 0xff, 0xff, 458 0xff, 0xff, 0xff, 459 .result = { 0x57, 0x8b, 0xa8, 460 0xaf, 0xcf, 0x9d, 461 0xf5, 0x33, 0x7d, 462 0xe1, 0x65, 0xea, 463 .valid = true 464 }, 465 /* wycheproof - public key with low or 466 { 467 .private = { 0x10, 0x25, 0x5c, 468 0xa4, 0x58, 0xca, 469 0x29, 0x3a, 0x31, 470 0x7f, 0xeb, 0xc7, 471 .public = { 0xe0, 0xeb, 0x7a, 472 0x16, 0x56, 0xe3, 473 0xda, 0x09, 0x8d, 474 0x86, 0x62, 0x05, 475 .result = { 0x00, 0x00, 0x00, 476 0x00, 0x00, 0x00, 477 0x00, 0x00, 0x00, 478 0x00, 0x00, 0x00, 479 .valid = false 480 }, 481 /* wycheproof - public key with low or 482 { 483 .private = { 0x78, 0xf1, 0xe8, 484 0x89, 0x44, 0x8d, 485 0x03, 0x8e, 0x7c, 486 0xf5, 0x7a, 0x72, 487 .public = { 0x5f, 0x9c, 0x95, 488 0xb1, 0xd0, 0xb1, 489 0x04, 0x44, 0x5c, 490 0xd8, 0x22, 0x4e, 491 .result = { 0x00, 0x00, 0x00, 492 0x00, 0x00, 0x00, 493 0x00, 0x00, 0x00, 494 0x00, 0x00, 0x00, 495 .valid = false 496 }, 497 /* wycheproof - public key with low or 498 { 499 .private = { 0xa0, 0xa0, 0x5a, 500 0x4d, 0x5f, 0x80, 501 0xc3, 0x9a, 0x49, 502 0xdb, 0xfa, 0x43, 503 .public = { 0xec, 0xff, 0xff, 504 0xff, 0xff, 0xff, 505 0xff, 0xff, 0xff, 506 0xff, 0xff, 0xff, 507 .result = { 0x00, 0x00, 0x00, 508 0x00, 0x00, 0x00, 509 0x00, 0x00, 0x00, 510 0x00, 0x00, 0x00, 511 .valid = false 512 }, 513 /* wycheproof - public key with low or 514 { 515 .private = { 0xd0, 0xdb, 0xb3, 516 0x15, 0x42, 0x0a, 517 0x09, 0xd9, 0xa9, 518 0x05, 0xad, 0x7c, 519 .public = { 0xed, 0xff, 0xff, 520 0xff, 0xff, 0xff, 521 0xff, 0xff, 0xff, 522 0xff, 0xff, 0xff, 523 .result = { 0x00, 0x00, 0x00, 524 0x00, 0x00, 0x00, 525 0x00, 0x00, 0x00, 526 0x00, 0x00, 0x00, 527 .valid = false 528 }, 529 /* wycheproof - public key with low or 530 { 531 .private = { 0xc0, 0xb1, 0xd0, 532 0x32, 0x91, 0x14, 533 0x89, 0xb5, 0xf0, 534 0xeb, 0x5b, 0xca, 535 .public = { 0xee, 0xff, 0xff, 536 0xff, 0xff, 0xff, 537 0xff, 0xff, 0xff, 538 0xff, 0xff, 0xff, 539 .result = { 0x00, 0x00, 0x00, 540 0x00, 0x00, 0x00, 541 0x00, 0x00, 0x00, 542 0x00, 0x00, 0x00, 543 .valid = false 544 }, 545 /* wycheproof - public key with low or 546 { 547 .private = { 0x48, 0x0b, 0xf4, 548 0xbc, 0x0f, 0x33, 549 0x3d, 0x77, 0xf3, 550 0x2d, 0x1a, 0xbf, 551 .public = { 0x00, 0x00, 0x00, 552 0x00, 0x00, 0x00, 553 0x00, 0x00, 0x00, 554 0x00, 0x00, 0x00, 555 .result = { 0x00, 0x00, 0x00, 556 0x00, 0x00, 0x00, 557 0x00, 0x00, 0x00, 558 0x00, 0x00, 0x00, 559 .valid = false 560 }, 561 /* wycheproof - public key with low or 562 { 563 .private = { 0x30, 0xf9, 0x93, 564 0x9b, 0xd8, 0xdb, 565 0x4b, 0x25, 0x30, 566 0x5e, 0x1b, 0x14, 567 .public = { 0x01, 0x00, 0x00, 568 0x00, 0x00, 0x00, 569 0x00, 0x00, 0x00, 570 0x00, 0x00, 0x00, 571 .result = { 0x00, 0x00, 0x00, 572 0x00, 0x00, 0x00, 573 0x00, 0x00, 0x00, 574 0x00, 0x00, 0x00, 575 .valid = false 576 }, 577 /* wycheproof - public key with low or 578 { 579 .private = { 0xc0, 0x49, 0x74, 580 0x5b, 0x5d, 0xf6, 581 0x34, 0x34, 0xf9, 582 0x6d, 0x3d, 0xa2, 583 .public = { 0xe0, 0xeb, 0x7a, 584 0x16, 0x56, 0xe3, 585 0xda, 0x09, 0x8d, 586 0x86, 0x62, 0x05, 587 .result = { 0x00, 0x00, 0x00, 588 0x00, 0x00, 0x00, 589 0x00, 0x00, 0x00, 590 0x00, 0x00, 0x00, 591 .valid = false 592 }, 593 /* wycheproof - public key with low or 594 { 595 .private = { 0x50, 0x2a, 0x31, 596 0x84, 0x2f, 0xe5, 597 0x2e, 0xa5, 0x4f, 598 0xd9, 0xf1, 0xbb, 599 .public = { 0x5f, 0x9c, 0x95, 600 0xb1, 0xd0, 0xb1, 601 0x04, 0x44, 0x5c, 602 0xd8, 0x22, 0x4e, 603 .result = { 0x00, 0x00, 0x00, 604 0x00, 0x00, 0x00, 605 0x00, 0x00, 0x00, 606 0x00, 0x00, 0x00, 607 .valid = false 608 }, 609 /* wycheproof - public key with low or 610 { 611 .private = { 0x90, 0xfa, 0x64, 612 0xfd, 0x6e, 0x43, 613 0x4c, 0x67, 0x93, 614 0x21, 0x31, 0x8b, 615 .public = { 0xec, 0xff, 0xff, 616 0xff, 0xff, 0xff, 617 0xff, 0xff, 0xff, 618 0xff, 0xff, 0xff, 619 .result = { 0x00, 0x00, 0x00, 620 0x00, 0x00, 0x00, 621 0x00, 0x00, 0x00, 622 0x00, 0x00, 0x00, 623 .valid = false 624 }, 625 /* wycheproof - public key with low or 626 { 627 .private = { 0x78, 0xad, 0x3f, 628 0xdd, 0x97, 0x5a, 629 0x9b, 0xad, 0x2c, 630 0x18, 0x40, 0x88, 631 .public = { 0xed, 0xff, 0xff, 632 0xff, 0xff, 0xff, 633 0xff, 0xff, 0xff, 634 0xff, 0xff, 0xff, 635 .result = { 0x00, 0x00, 0x00, 636 0x00, 0x00, 0x00, 637 0x00, 0x00, 0x00, 638 0x00, 0x00, 0x00, 639 .valid = false 640 }, 641 /* wycheproof - public key with low or 642 { 643 .private = { 0x98, 0xe2, 0x3d, 644 0xd9, 0xc8, 0x7e, 645 0x49, 0x7a, 0x1d, 646 0x68, 0x0e, 0x44, 647 .public = { 0xee, 0xff, 0xff, 648 0xff, 0xff, 0xff, 649 0xff, 0xff, 0xff, 650 0xff, 0xff, 0xff, 651 .result = { 0x00, 0x00, 0x00, 652 0x00, 0x00, 0x00, 653 0x00, 0x00, 0x00, 654 0x00, 0x00, 0x00, 655 .valid = false 656 }, 657 /* wycheproof - public key >= p */ 658 { 659 .private = { 0xf0, 0x1e, 0x48, 660 0xf5, 0x89, 0xcb, 661 0x8b, 0xda, 0x35, 662 0x50, 0xb5, 0x23, 663 .public = { 0xef, 0xff, 0xff, 664 0xff, 0xff, 0xff, 665 0xff, 0xff, 0xff, 666 0xff, 0xff, 0xff, 667 .result = { 0xbd, 0x36, 0xa0, 668 0x8c, 0x98, 0x8b, 669 0x0b, 0x3a, 0x4d, 670 0x10, 0xde, 0x18, 671 .valid = true 672 }, 673 /* wycheproof - public key >= p */ 674 { 675 .private = { 0x28, 0x87, 0x96, 676 0xa3, 0x75, 0x01, 677 0x3c, 0x21, 0x96, 678 0x30, 0x8d, 0xeb, 679 .public = { 0xf0, 0xff, 0xff, 680 0xff, 0xff, 0xff, 681 0xff, 0xff, 0xff, 682 0xff, 0xff, 0xff, 683 .result = { 0xb4, 0xe0, 0xdd, 684 0x28, 0xb6, 0x1f, 685 0x6e, 0x57, 0xed, 686 0xcc, 0x38, 0x20, 687 .valid = true 688 }, 689 /* wycheproof - public key >= p */ 690 { 691 .private = { 0x98, 0xdf, 0x84, 692 0x38, 0x22, 0x1f, 693 0x6d, 0xbc, 0x3c, 694 0x9f, 0xd5, 0x5a, 695 .public = { 0xf1, 0xff, 0xff, 696 0xff, 0xff, 0xff, 697 0xff, 0xff, 0xff, 698 0xff, 0xff, 0xff, 699 .result = { 0x6f, 0xdf, 0x6c, 700 0x04, 0xdc, 0x0f, 701 0xb3, 0xc5, 0x0e, 702 0xde, 0xc2, 0x70, 703 .valid = true 704 }, 705 /* wycheproof - public key >= p */ 706 { 707 .private = { 0xf0, 0x94, 0x98, 708 0x82, 0x9e, 0x78, 709 0xed, 0x69, 0x5d, 710 0xf8, 0x27, 0x69, 711 .public = { 0xff, 0xff, 0xff, 712 0xff, 0xff, 0xff, 713 0xff, 0xff, 0xff, 714 0xff, 0xff, 0xff, 715 .result = { 0x4c, 0x8f, 0xc4, 716 0x21, 0xf1, 0x8f, 717 0xd4, 0xe9, 0x46, 718 0xc8, 0x63, 0xce, 719 .valid = true 720 }, 721 /* wycheproof - public key >= p */ 722 { 723 .private = { 0x18, 0x13, 0xc1, 724 0x6e, 0x17, 0xf2, 725 0x7c, 0x04, 0xc5, 726 0x4f, 0x9e, 0x2f, 727 .public = { 0x02, 0x00, 0x00, 728 0x00, 0x00, 0x00, 729 0x00, 0x00, 0x00, 730 0x00, 0x00, 0x00, 731 .result = { 0x1c, 0xd0, 0xb2, 732 0x64, 0x2d, 0x6d, 733 0x8a, 0x63, 0x73, 734 0x01, 0xff, 0xbb, 735 .valid = true 736 }, 737 /* wycheproof - public key >= p */ 738 { 739 .private = { 0x78, 0x57, 0xfb, 740 0x0b, 0xeb, 0x13, 741 0x33, 0xa4, 0x5e, 742 0xa9, 0xc0, 0x6f, 743 .public = { 0x03, 0x00, 0x00, 744 0x00, 0x00, 0x00, 745 0x00, 0x00, 0x00, 746 0x00, 0x00, 0x00, 747 .result = { 0x87, 0x55, 0xbe, 748 0x5c, 0xff, 0x3e, 749 0x33, 0x38, 0x61, 750 0x51, 0xa8, 0xb2, 751 .valid = true 752 }, 753 /* wycheproof - public key >= p */ 754 { 755 .private = { 0xe0, 0x3a, 0xa8, 756 0x81, 0xe8, 0x7b, 757 0x1e, 0x59, 0x13, 758 0x75, 0x2f, 0x8d, 759 .public = { 0x04, 0x00, 0x00, 760 0x00, 0x00, 0x00, 761 0x00, 0x00, 0x00, 762 0x00, 0x00, 0x00, 763 .result = { 0x54, 0xc9, 0xa1, 764 0x78, 0x22, 0xa3, 765 0xa1, 0xdf, 0x04, 766 0x3c, 0x06, 0x12, 767 .valid = true 768 }, 769 /* wycheproof - public key >= p */ 770 { 771 .private = { 0xf8, 0xf7, 0x07, 772 0x0d, 0x6b, 0x96, 773 0x2c, 0xa2, 0x74, 774 0x87, 0x03, 0x8c, 775 .public = { 0xda, 0xff, 0xff, 776 0xff, 0xff, 0xff, 777 0xff, 0xff, 0xff, 778 0xff, 0xff, 0xff, 779 .result = { 0xcc, 0x1f, 0x40, 780 0x0e, 0x10, 0x43, 781 0x10, 0xf1, 0xfb, 782 0xbd, 0x9e, 0xbb, 783 .valid = true 784 }, 785 /* wycheproof - public key >= p */ 786 { 787 .private = { 0xa0, 0x34, 0xf6, 788 0x34, 0x81, 0x18, 789 0x1f, 0x2d, 0x9e, 790 0x4a, 0x05, 0xd6, 791 .public = { 0xdb, 0xff, 0xff, 792 0xff, 0xff, 0xff, 793 0xff, 0xff, 0xff, 794 0xff, 0xff, 0xff, 795 .result = { 0x54, 0x99, 0x8e, 796 0xf4, 0x99, 0xf0, 797 0x00, 0xa8, 0xb5, 798 0x71, 0x74, 0x8c, 799 .valid = true 800 }, 801 /* wycheproof - public key >= p */ 802 { 803 .private = { 0x30, 0xb6, 0xc6, 804 0x76, 0x8f, 0x99, 805 0x5b, 0xc9, 0x89, 806 0xe4, 0xf7, 0x67, 807 .public = { 0xdc, 0xff, 0xff, 808 0xff, 0xff, 0xff, 809 0xff, 0xff, 0xff, 810 0xff, 0xff, 0xff, 811 .result = { 0xea, 0xd9, 0xb3, 812 0x79, 0x34, 0xe5, 813 0x09, 0xeb, 0x86, 814 0xee, 0xb8, 0x8b, 815 .valid = true 816 }, 817 /* wycheproof - public key >= p */ 818 { 819 .private = { 0x90, 0x1b, 0x9d, 820 0x27, 0x57, 0x50, 821 0xc1, 0xc5, 0x24, 822 0x5b, 0x0c, 0x72, 823 .public = { 0xea, 0xff, 0xff, 824 0xff, 0xff, 0xff, 825 0xff, 0xff, 0xff, 826 0xff, 0xff, 0xff, 827 .result = { 0x60, 0x2f, 0xf4, 828 0x80, 0x59, 0x15, 829 0x7a, 0x50, 0xff, 830 0x61, 0xf1, 0x3d, 831 .valid = true 832 }, 833 /* wycheproof - public key >= p */ 834 { 835 .private = { 0x80, 0x46, 0x67, 836 0xa1, 0xbd, 0xb7, 837 0xba, 0x12, 0x25, 838 0x4d, 0x10, 0xbd, 839 .public = { 0xeb, 0xff, 0xff, 840 0xff, 0xff, 0xff, 841 0xff, 0xff, 0xff, 842 0xff, 0xff, 0xff, 843 .result = { 0xe0, 0x0a, 0xe8, 844 0xba, 0x24, 0xf1, 845 0xcb, 0x98, 0x1b, 846 0xaf, 0x35, 0xc1, 847 .valid = true 848 }, 849 /* wycheproof - public key >= p */ 850 { 851 .private = { 0x60, 0x2f, 0x7e, 852 0x2c, 0xc2, 0x69, 853 0x86, 0xae, 0x54, 854 0x74, 0xd7, 0x10, 855 .public = { 0xef, 0xff, 0xff, 856 0xff, 0xff, 0xff, 857 0xff, 0xff, 0xff, 858 0xff, 0xff, 0xff, 859 .result = { 0x98, 0xcb, 0x9b, 860 0xd4, 0xf2, 0xd2, 861 0x0c, 0x8f, 0xcd, 862 0xd4, 0x4f, 0x47, 863 .valid = true 864 }, 865 /* wycheproof - public key >= p */ 866 { 867 .private = { 0x60, 0x88, 0x7b, 868 0x6e, 0xbe, 0xdb, 869 0x2b, 0x87, 0xad, 870 0xfb, 0xd7, 0xe8, 871 .public = { 0xf0, 0xff, 0xff, 872 0xff, 0xff, 0xff, 873 0xff, 0xff, 0xff, 874 0xff, 0xff, 0xff, 875 .result = { 0x38, 0xd6, 0x30, 876 0x79, 0x59, 0x33, 877 0xc7, 0x54, 0x52, 878 0x02, 0x06, 0x92, 879 .valid = true 880 }, 881 /* wycheproof - public key >= p */ 882 { 883 .private = { 0x78, 0xd3, 0x1d, 884 0x2d, 0x8d, 0xef, 885 0xce, 0xc2, 0xd8, 886 0x38, 0x14, 0xae, 887 .public = { 0xf1, 0xff, 0xff, 888 0xff, 0xff, 0xff, 889 0xff, 0xff, 0xff, 890 0xff, 0xff, 0xff, 891 .result = { 0x78, 0x6c, 0xd5, 892 0xa0, 0x31, 0xec, 893 0x83, 0x55, 0x06, 894 0xa8, 0x00, 0xac, 895 .valid = true 896 }, 897 /* wycheproof - public key >= p */ 898 { 899 .private = { 0xc0, 0x4c, 0x5b, 900 0xde, 0xd6, 0xa4, 901 0xeb, 0x97, 0xae, 902 0x30, 0x85, 0xf9, 903 .public = { 0xff, 0xff, 0xff, 904 0xff, 0xff, 0xff, 905 0xff, 0xff, 0xff, 906 0xff, 0xff, 0xff, 907 .result = { 0x29, 0xae, 0x8b, 908 0x8b, 0x4f, 0x68, 909 0x1a, 0x17, 0x1d, 910 0xef, 0xba, 0x29, 911 .valid = true 912 }, 913 /* wycheproof - RFC 7748 */ 914 { 915 .private = { 0xa0, 0x46, 0xe3, 916 0x3b, 0x16, 0x15, 917 0x62, 0x14, 0x4c, 918 0x50, 0x6a, 0x22, 919 .public = { 0xe6, 0xdb, 0x68, 920 0x35, 0x94, 0xc1, 921 0x72, 0x66, 0x24, 922 0x10, 0xa9, 0x03, 923 .result = { 0xc3, 0xda, 0x55, 924 0x8e, 0x94, 0xea, 925 0x32, 0xec, 0xcf, 926 0x54, 0xb4, 0x07, 927 .valid = true 928 }, 929 /* wycheproof - RFC 7748 */ 930 { 931 .private = { 0x48, 0x66, 0xe9, 932 0x5a, 0xd2, 0x26, 933 0xc1, 0x1b, 0x64, 934 0x2c, 0xa4, 0x16, 935 .public = { 0xe5, 0x21, 0x0f, 936 0xf4, 0xb7, 0x95, 937 0x31, 0xdb, 0xe7, 938 0xfc, 0x4c, 0xd5, 939 .result = { 0x95, 0xcb, 0xde, 940 0x7a, 0xad, 0xe4, 941 0x8b, 0x59, 0x5a, 942 0xe6, 0xf8, 0xf7, 943 .valid = true 944 }, 945 /* wycheproof - edge case for shared s 946 { 947 .private = { 0xa0, 0xa4, 0xf1, 948 0xb1, 0xce, 0xdb, 949 0x52, 0x0e, 0x14, 950 0xb9, 0x09, 0xa0, 951 .public = { 0x0a, 0xb4, 0xe7, 952 0x4f, 0x68, 0x33, 953 0xf8, 0x3b, 0xb0, 954 0xb6, 0xe0, 0x59, 955 .result = { 0x02, 0x00, 0x00, 956 0x00, 0x00, 0x00, 957 0x00, 0x00, 0x00, 958 0x00, 0x00, 0x00, 959 .valid = true 960 }, 961 /* wycheproof - edge case for shared s 962 { 963 .private = { 0xa0, 0xa4, 0xf1, 964 0xb1, 0xce, 0xdb, 965 0x52, 0x0e, 0x14, 966 0xb9, 0x09, 0xa0, 967 .public = { 0x89, 0xe1, 0x0d, 968 0x2d, 0x03, 0x21, 969 0xbd, 0x40, 0x84, 970 0x12, 0x66, 0x3a, 971 .result = { 0x09, 0x00, 0x00, 972 0x00, 0x00, 0x00, 973 0x00, 0x00, 0x00, 974 0x00, 0x00, 0x00, 975 .valid = true 976 }, 977 /* wycheproof - edge case for shared s 978 { 979 .private = { 0xa0, 0xa4, 0xf1, 980 0xb1, 0xce, 0xdb, 981 0x52, 0x0e, 0x14, 982 0xb9, 0x09, 0xa0, 983 .public = { 0x2b, 0x55, 0xd3, 984 0xc0, 0xb2, 0xae, 985 0x49, 0xbe, 0xac, 986 0xba, 0xb7, 0x6c, 987 .result = { 0x10, 0x00, 0x00, 988 0x00, 0x00, 0x00, 989 0x00, 0x00, 0x00, 990 0x00, 0x00, 0x00, 991 .valid = true 992 }, 993 /* wycheproof - edge case for shared s 994 { 995 .private = { 0xa0, 0xa4, 0xf1, 996 0xb1, 0xce, 0xdb, 997 0x52, 0x0e, 0x14, 998 0xb9, 0x09, 0xa0, 999 .public = { 0x63, 0xe5, 0xb1, 1000 0x38, 0x5d, 0x88, 1001 0xf7, 0x8f, 0xbf, 1002 0x62, 0x66, 0x79, 1003 .result = { 0xfe, 0xff, 0xff, 1004 0xff, 0xff, 0xff, 1005 0xff, 0xff, 0xff, 1006 0xff, 0xff, 0xff, 1007 .valid = true 1008 }, 1009 /* wycheproof - edge case for shared 1010 { 1011 .private = { 0xa0, 0xa4, 0xf1 1012 0xb1, 0xce, 0xdb 1013 0x52, 0x0e, 0x14 1014 0xb9, 0x09, 0xa0 1015 .public = { 0xe4, 0x28, 0xf3, 1016 0x27, 0xa5, 0x22, 1017 0xd0, 0x73, 0x69, 1018 0xee, 0x10, 0x13, 1019 .result = { 0xfc, 0xff, 0xff, 1020 0xff, 0xff, 0xff, 1021 0xff, 0xff, 0xff, 1022 0xff, 0xff, 0xff, 1023 .valid = true 1024 }, 1025 /* wycheproof - edge case for shared 1026 { 1027 .private = { 0xa0, 0xa4, 0xf1 1028 0xb1, 0xce, 0xdb 1029 0x52, 0x0e, 0x14 1030 0xb9, 0x09, 0xa0 1031 .public = { 0xb3, 0xb5, 0x0e, 1032 0x5d, 0xe9, 0x42, 1033 0xb8, 0xa1, 0x0c, 1034 0xd6, 0x0b, 0xdf, 1035 .result = { 0xf9, 0xff, 0xff, 1036 0xff, 0xff, 0xff, 1037 0xff, 0xff, 0xff, 1038 0xff, 0xff, 0xff, 1039 .valid = true 1040 }, 1041 /* wycheproof - edge case for shared 1042 { 1043 .private = { 0xa0, 0xa4, 0xf1 1044 0xb1, 0xce, 0xdb 1045 0x52, 0x0e, 0x14 1046 0xb9, 0x09, 0xa0 1047 .public = { 0x21, 0x3f, 0xff, 1048 0x24, 0x2e, 0x46, 1049 0xc4, 0x3c, 0x77, 1050 0x2f, 0x48, 0x5d, 1051 .result = { 0xf3, 0xff, 0xff, 1052 0xff, 0xff, 0xff, 1053 0xff, 0xff, 0xff, 1054 0xff, 0xff, 0xff, 1055 .valid = true 1056 }, 1057 /* wycheproof - edge case for shared 1058 { 1059 .private = { 0xa0, 0xa4, 0xf1 1060 0xb1, 0xce, 0xdb 1061 0x52, 0x0e, 0x14 1062 0xb9, 0x09, 0xa0 1063 .public = { 0x91, 0xb2, 0x32, 1064 0x09, 0x32, 0x44, 1065 0x72, 0x17, 0x22, 1066 0x34, 0xfc, 0x5e, 1067 .result = { 0xff, 0xff, 0xff, 1068 0xff, 0xff, 0xff, 1069 0xff, 0xff, 0xff, 1070 0xff, 0xff, 0xff, 1071 .valid = true 1072 }, 1073 /* wycheproof - edge case for shared 1074 { 1075 .private = { 0xa0, 0xa4, 0xf1 1076 0xb1, 0xce, 0xdb 1077 0x52, 0x0e, 0x14 1078 0xb9, 0x09, 0xa0 1079 .public = { 0x04, 0x5c, 0x6e, 1080 0x6c, 0x78, 0x22, 1081 0x56, 0xa3, 0x87, 1082 0x10, 0x30, 0x58, 1083 .result = { 0xe5, 0xff, 0xff, 1084 0xff, 0xff, 0xff, 1085 0xff, 0xff, 0xff, 1086 0xff, 0xff, 0xff, 1087 .valid = true 1088 }, 1089 /* wycheproof - edge case for shared 1090 { 1091 .private = { 0xa0, 0xa4, 0xf1 1092 0xb1, 0xce, 0xdb 1093 0x52, 0x0e, 0x14 1094 0xb9, 0x09, 0xa0 1095 .public = { 0x1c, 0xa2, 0x19, 1096 0x06, 0x3c, 0x35, 1097 0x92, 0x8e, 0x91, 1098 0x09, 0x3f, 0x09, 1099 .result = { 0xe3, 0xff, 0xff, 1100 0xff, 0xff, 0xff, 1101 0xff, 0xff, 0xff, 1102 0xff, 0xff, 0xff, 1103 .valid = true 1104 }, 1105 /* wycheproof - edge case for shared 1106 { 1107 .private = { 0xa0, 0xa4, 0xf1 1108 0xb1, 0xce, 0xdb 1109 0x52, 0x0e, 0x14 1110 0xb9, 0x09, 0xa0 1111 .public = { 0xf7, 0x6e, 0x90, 1112 0x3b, 0x2d, 0x3b, 1113 0x00, 0xc4, 0x91, 1114 0x97, 0xa0, 0xae, 1115 .result = { 0xdd, 0xff, 0xff, 1116 0xff, 0xff, 0xff, 1117 0xff, 0xff, 0xff, 1118 0xff, 0xff, 0xff, 1119 .valid = true 1120 }, 1121 /* wycheproof - edge case for shared 1122 { 1123 .private = { 0xa0, 0xa4, 0xf1 1124 0xb1, 0xce, 0xdb 1125 0x52, 0x0e, 0x14 1126 0xb9, 0x09, 0xa0 1127 .public = { 0xbb, 0x72, 0x68, 1128 0x9c, 0xd6, 0x06, 1129 0xde, 0xc6, 0xfe, 1130 0x6a, 0x99, 0x34, 1131 .result = { 0xdb, 0xff, 0xff, 1132 0xff, 0xff, 0xff, 1133 0xff, 0xff, 0xff, 1134 0xff, 0xff, 0xff, 1135 .valid = true 1136 }, 1137 /* wycheproof - edge case for shared 1138 { 1139 .private = { 0xa0, 0xa4, 0xf1 1140 0xb1, 0xce, 0xdb 1141 0x52, 0x0e, 0x14 1142 0xb9, 0x09, 0xa0 1143 .public = { 0x88, 0xfd, 0xde, 1144 0x59, 0x33, 0xef, 1145 0x44, 0x72, 0x05, 1146 0x6b, 0x91, 0xa3, 1147 .result = { 0x00, 0x00, 0x00, 1148 0x00, 0x00, 0x00, 1149 0x00, 0x00, 0x00, 1150 0x00, 0x00, 0x00, 1151 .valid = true 1152 }, 1153 /* wycheproof - edge case for shared 1154 { 1155 .private = { 0xa0, 0xa4, 0xf1 1156 0xb1, 0xce, 0xdb 1157 0x52, 0x0e, 0x14 1158 0xb9, 0x09, 0xa0 1159 .public = { 0x30, 0x3b, 0x39, 1160 0xd9, 0xcc, 0x68, 1161 0x95, 0xff, 0x0d, 1162 0x6c, 0x4e, 0x73, 1163 .result = { 0x00, 0x00, 0x00, 1164 0x00, 0x00, 0x00, 1165 0x00, 0x00, 0x00, 1166 0x00, 0x00, 0x00, 1167 .valid = true 1168 }, 1169 /* wycheproof - checking for overflow 1170 { 1171 .private = { 0xc8, 0x17, 0x24 1172 0x31, 0x70, 0x3c 1173 0x56, 0xfa, 0xd8 1174 0xca, 0x8b, 0xd7 1175 .public = { 0xfd, 0x30, 0x0a, 1176 0x25, 0x18, 0x41, 1177 0x84, 0x2b, 0x1e, 1178 0x78, 0xea, 0x41, 1179 .result = { 0xb7, 0x34, 0x10, 1180 0x73, 0xb5, 0x66, 1181 0x95, 0xcc, 0xbe, 1182 0x02, 0xf3, 0xe5, 1183 .valid = true 1184 }, 1185 /* wycheproof - checking for overflow 1186 { 1187 .private = { 0xc8, 0x17, 0x24 1188 0x31, 0x70, 0x3c 1189 0x56, 0xfa, 0xd8 1190 0xca, 0x8b, 0xd7 1191 .public = { 0xc8, 0xef, 0x79, 1192 0x77, 0xbc, 0x79, 1193 0x7c, 0x9b, 0x39, 1194 0x73, 0xf5, 0x54, 1195 .result = { 0x64, 0x7a, 0x46, 1196 0x21, 0x41, 0xee, 1197 0x7a, 0x92, 0x71, 1198 0x8e, 0x2e, 0x22, 1199 .valid = true 1200 }, 1201 /* wycheproof - checking for overflow 1202 { 1203 .private = { 0xc8, 0x17, 0x24 1204 0x31, 0x70, 0x3c 1205 0x56, 0xfa, 0xd8 1206 0xca, 0x8b, 0xd7 1207 .public = { 0x64, 0xae, 0xac, 1208 0x53, 0x2b, 0x7b, 1209 0xdd, 0x4c, 0x1f, 1210 0xff, 0xb9, 0x5a, 1211 .result = { 0x4f, 0xf0, 0x3d, 1212 0x7a, 0x3c, 0xf3, 1213 0xcc, 0xe5, 0x09, 1214 0xef, 0x40, 0xb4, 1215 .valid = true 1216 }, 1217 /* wycheproof - checking for overflow 1218 { 1219 .private = { 0xc8, 0x17, 0x24 1220 0x31, 0x70, 0x3c 1221 0x56, 0xfa, 0xd8 1222 0xca, 0x8b, 0xd7 1223 .public = { 0xbf, 0x68, 0xe3, 1224 0x1b, 0x50, 0x57, 1225 0xcd, 0xad, 0x8a, 1226 0x97, 0x4c, 0xc4, 1227 .result = { 0x21, 0xce, 0xe5, 1228 0x1d, 0x02, 0x1a, 1229 0x4d, 0xb3, 0xc4, 1230 0x6a, 0x39, 0x26, 1231 .valid = true 1232 }, 1233 /* wycheproof - checking for overflow 1234 { 1235 .private = { 0xc8, 0x17, 0x24 1236 0x31, 0x70, 0x3c 1237 0x56, 0xfa, 0xd8 1238 0xca, 0x8b, 0xd7 1239 .public = { 0x53, 0x47, 0xc4, 1240 0x3d, 0xdc, 0x68, 1241 0x3d, 0xc3, 0x2b, 1242 0x15, 0xa8, 0x3b, 1243 .result = { 0x18, 0xcb, 0x89, 1244 0xd3, 0x24, 0x30, 1245 0x27, 0x69, 0x0b, 1246 0x5b, 0x8f, 0xb3, 1247 .valid = true 1248 }, 1249 /* wycheproof - private key == -1 (mo 1250 { 1251 .private = { 0xa0, 0x23, 0xcd 1252 0x2f, 0x10, 0xd6 1253 0x00, 0x00, 0x00 1254 0x00, 0x00, 0x00 1255 .public = { 0x25, 0x8e, 0x04, 1256 0xe6, 0x57, 0x19, 1257 0x19, 0x2d, 0x80, 1258 0xa0, 0xaf, 0x21, 1259 .result = { 0x25, 0x8e, 0x04, 1260 0xe6, 0x57, 0x19, 1261 0x19, 0x2d, 0x80, 1262 0xa0, 0xaf, 0x21, 1263 .valid = true 1264 }, 1265 /* wycheproof - private key == 1 (mod 1266 { 1267 .private = { 0x58, 0x08, 0x3d 1268 0xf9, 0x52, 0x32 1269 0xff, 0xff, 0xff 1270 0xff, 0xff, 0xff 1271 .public = { 0x2e, 0xae, 0x5e, 1272 0x2d, 0x37, 0xd2, 1273 0xe9, 0xd0, 0xdb, 1274 0xd9, 0x8b, 0xb9, 1275 .result = { 0x2e, 0xae, 0x5e, 1276 0x2d, 0x37, 0xd2, 1277 0xe9, 0xd0, 0xdb, 1278 0xd9, 0x8b, 0xb9, 1279 .valid = true 1280 } 1281 }; 1282 1283 bool __init curve25519_selftest(void) 1284 { 1285 bool success = true, ret, ret2; 1286 size_t i = 0, j; 1287 u8 in[CURVE25519_KEY_SIZE]; 1288 u8 out[CURVE25519_KEY_SIZE], out2[CUR 1289 out3[CURVE25519_KEY_SIZE]; 1290 1291 for (i = 0; i < ARRAY_SIZE(curve25519 1292 memset(out, 0, CURVE25519_KEY 1293 ret = curve25519(out, curve25 1294 curve25519_t 1295 if (ret != curve25519_test_ve 1296 memcmp(out, curve25519_te 1297 CURVE25519_KEY_SIZ 1298 pr_err("curve25519 se 1299 success = false; 1300 } 1301 } 1302 1303 for (i = 0; i < 5; ++i) { 1304 get_random_bytes(in, sizeof(i 1305 ret = curve25519_generate_pub 1306 ret2 = curve25519(out2, in, ( 1307 curve25519_generic(out3, in, 1308 if (ret != ret2 || 1309 memcmp(out, out2, CURVE25 1310 memcmp(out, out3, CURVE25 1311 pr_err("curve25519 ba 1312 i + 1); 1313 for (j = CURVE25519_K 1314 printk(KERN_C 1315 printk(KERN_CONT "\n" 1316 success = false; 1317 } 1318 } 1319 1320 return success; 1321 } 1322
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.