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