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