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