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