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