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