summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjsing <>2022-11-06 16:41:29 +0000
committerjsing <>2022-11-06 16:41:29 +0000
commitfd27c1487225585e6442d02f0a4724e10808ee2a (patch)
treebe4d872e675e0bfd39ec714a9e74866c333cabc0 /src
parent31e087414121c2fe69dc13e645736cfb41326928 (diff)
downloadopenbsd-fd27c1487225585e6442d02f0a4724e10808ee2a.tar.gz
openbsd-fd27c1487225585e6442d02f0a4724e10808ee2a.tar.bz2
openbsd-fd27c1487225585e6442d02f0a4724e10808ee2a.zip
Add regress for Ed25519.
From tb@
Diffstat (limited to 'src')
-rw-r--r--src/regress/lib/libcrypto/curve25519/Makefile23
-rw-r--r--src/regress/lib/libcrypto/curve25519/ed25519test.c390
2 files changed, 409 insertions, 4 deletions
diff --git a/src/regress/lib/libcrypto/curve25519/Makefile b/src/regress/lib/libcrypto/curve25519/Makefile
index 1bc4965670..dda7785f83 100644
--- a/src/regress/lib/libcrypto/curve25519/Makefile
+++ b/src/regress/lib/libcrypto/curve25519/Makefile
@@ -1,9 +1,24 @@
1# $OpenBSD: Makefile,v 1.1 2016/11/05 15:09:02 jsing Exp $ 1# $OpenBSD: Makefile,v 1.2 2022/11/06 16:41:29 jsing Exp $
2
3PROGS += ed25519test
4PROGS += x25519test
5
6.for p in ${PROGS}
7REGRESS_TARGETS += run-$p
8.endfor
9
10LDADD = ${CRYPTO_INT}
11DPADD = ${LIBCRYPTO}
2 12
3PROG= x25519test
4LDADD= -lcrypto
5DPADD= ${LIBCRYPTO}
6WARNINGS= Yes 13WARNINGS= Yes
7CFLAGS+= -DLIBRESSL_INTERNAL -Werror 14CFLAGS+= -DLIBRESSL_INTERNAL -Werror
8 15
16.for p in ${PROGS}
17run-$p: $p
18 @echo '\n======== $@ ========'
19 ./$p
20
21.PHONY: run-$p
22.endfor
23
9.include <bsd.regress.mk> 24.include <bsd.regress.mk>
diff --git a/src/regress/lib/libcrypto/curve25519/ed25519test.c b/src/regress/lib/libcrypto/curve25519/ed25519test.c
new file mode 100644
index 0000000000..f01c64a07a
--- /dev/null
+++ b/src/regress/lib/libcrypto/curve25519/ed25519test.c
@@ -0,0 +1,390 @@
1/* $OpenBSD: ed25519test.c,v 1.1 2022/11/06 16:41:29 jsing Exp $ */
2/*
3 * Copyright (c) 2019 Theo Buehler <tb@openbsd.org>
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
18#include <err.h>
19#include <stdio.h>
20#include <string.h>
21
22#include <openssl/curve25519.h>
23
24struct testvector {
25 const uint8_t sec_key[ED25519_PRIVATE_KEY_LEN];
26 const uint8_t pub_key[ED25519_PUBLIC_KEY_LEN];
27 const uint8_t signature[ED25519_SIGNATURE_LEN];
28 size_t message_len;
29 const uint8_t *message;
30};
31
32/*
33 * Test vectors from https://tools.ietf.org/html/rfc8032#section-7.1.
34 * sec_key is the concatenation of SECRET KEY and PUBLIC KEY in that reference.
35 */
36struct testvector testvectors[] = {
37 {
38 .sec_key = {
39 0x9d, 0x61, 0xb1, 0x9d, 0xef, 0xfd, 0x5a, 0x60,
40 0xba, 0x84, 0x4a, 0xf4, 0x92, 0xec, 0x2c, 0xc4,
41 0x44, 0x49, 0xc5, 0x69, 0x7b, 0x32, 0x69, 0x19,
42 0x70, 0x3b, 0xac, 0x03, 0x1c, 0xae, 0x7f, 0x60,
43 0xd7, 0x5a, 0x98, 0x01, 0x82, 0xb1, 0x0a, 0xb7,
44 0xd5, 0x4b, 0xfe, 0xd3, 0xc9, 0x64, 0x07, 0x3a,
45 0x0e, 0xe1, 0x72, 0xf3, 0xda, 0xa6, 0x23, 0x25,
46 0xaf, 0x02, 0x1a, 0x68, 0xf7, 0x07, 0x51, 0x1a,
47 },
48 .pub_key = {
49 0xd7, 0x5a, 0x98, 0x01, 0x82, 0xb1, 0x0a, 0xb7,
50 0xd5, 0x4b, 0xfe, 0xd3, 0xc9, 0x64, 0x07, 0x3a,
51 0x0e, 0xe1, 0x72, 0xf3, 0xda, 0xa6, 0x23, 0x25,
52 0xaf, 0x02, 0x1a, 0x68, 0xf7, 0x07, 0x51, 0x1a,
53 },
54 .message_len = 0,
55 .message = (uint8_t []){ },
56 .signature = {
57 0xe5, 0x56, 0x43, 0x00, 0xc3, 0x60, 0xac, 0x72,
58 0x90, 0x86, 0xe2, 0xcc, 0x80, 0x6e, 0x82, 0x8a,
59 0x84, 0x87, 0x7f, 0x1e, 0xb8, 0xe5, 0xd9, 0x74,
60 0xd8, 0x73, 0xe0, 0x65, 0x22, 0x49, 0x01, 0x55,
61 0x5f, 0xb8, 0x82, 0x15, 0x90, 0xa3, 0x3b, 0xac,
62 0xc6, 0x1e, 0x39, 0x70, 0x1c, 0xf9, 0xb4, 0x6b,
63 0xd2, 0x5b, 0xf5, 0xf0, 0x59, 0x5b, 0xbe, 0x24,
64 0x65, 0x51, 0x41, 0x43, 0x8e, 0x7a, 0x10, 0x0b,
65 },
66 },
67 {
68 .sec_key = {
69 0x4c, 0xcd, 0x08, 0x9b, 0x28, 0xff, 0x96, 0xda,
70 0x9d, 0xb6, 0xc3, 0x46, 0xec, 0x11, 0x4e, 0x0f,
71 0x5b, 0x8a, 0x31, 0x9f, 0x35, 0xab, 0xa6, 0x24,
72 0xda, 0x8c, 0xf6, 0xed, 0x4f, 0xb8, 0xa6, 0xfb,
73 0x3d, 0x40, 0x17, 0xc3, 0xe8, 0x43, 0x89, 0x5a,
74 0x92, 0xb7, 0x0a, 0xa7, 0x4d, 0x1b, 0x7e, 0xbc,
75 0x9c, 0x98, 0x2c, 0xcf, 0x2e, 0xc4, 0x96, 0x8c,
76 0xc0, 0xcd, 0x55, 0xf1, 0x2a, 0xf4, 0x66, 0x0c,
77 },
78 .pub_key = {
79 0x3d, 0x40, 0x17, 0xc3, 0xe8, 0x43, 0x89, 0x5a,
80 0x92, 0xb7, 0x0a, 0xa7, 0x4d, 0x1b, 0x7e, 0xbc,
81 0x9c, 0x98, 0x2c, 0xcf, 0x2e, 0xc4, 0x96, 0x8c,
82 0xc0, 0xcd, 0x55, 0xf1, 0x2a, 0xf4, 0x66, 0x0c,
83 },
84 .message_len = 1,
85 .message = (uint8_t []){ 0x72 },
86 .signature = {
87 0x92, 0xa0, 0x09, 0xa9, 0xf0, 0xd4, 0xca, 0xb8,
88 0x72, 0x0e, 0x82, 0x0b, 0x5f, 0x64, 0x25, 0x40,
89 0xa2, 0xb2, 0x7b, 0x54, 0x16, 0x50, 0x3f, 0x8f,
90 0xb3, 0x76, 0x22, 0x23, 0xeb, 0xdb, 0x69, 0xda,
91 0x08, 0x5a, 0xc1, 0xe4, 0x3e, 0x15, 0x99, 0x6e,
92 0x45, 0x8f, 0x36, 0x13, 0xd0, 0xf1, 0x1d, 0x8c,
93 0x38, 0x7b, 0x2e, 0xae, 0xb4, 0x30, 0x2a, 0xee,
94 0xb0, 0x0d, 0x29, 0x16, 0x12, 0xbb, 0x0c, 0x00,
95 },
96 },
97 {
98 .sec_key = {
99 0xc5, 0xaa, 0x8d, 0xf4, 0x3f, 0x9f, 0x83, 0x7b,
100 0xed, 0xb7, 0x44, 0x2f, 0x31, 0xdc, 0xb7, 0xb1,
101 0x66, 0xd3, 0x85, 0x35, 0x07, 0x6f, 0x09, 0x4b,
102 0x85, 0xce, 0x3a, 0x2e, 0x0b, 0x44, 0x58, 0xf7,
103 0xfc, 0x51, 0xcd, 0x8e, 0x62, 0x18, 0xa1, 0xa3,
104 0x8d, 0xa4, 0x7e, 0xd0, 0x02, 0x30, 0xf0, 0x58,
105 0x08, 0x16, 0xed, 0x13, 0xba, 0x33, 0x03, 0xac,
106 0x5d, 0xeb, 0x91, 0x15, 0x48, 0x90, 0x80, 0x25,
107 },
108 .pub_key = {
109 0xfc, 0x51, 0xcd, 0x8e, 0x62, 0x18, 0xa1, 0xa3,
110 0x8d, 0xa4, 0x7e, 0xd0, 0x02, 0x30, 0xf0, 0x58,
111 0x08, 0x16, 0xed, 0x13, 0xba, 0x33, 0x03, 0xac,
112 0x5d, 0xeb, 0x91, 0x15, 0x48, 0x90, 0x80, 0x25,
113 },
114 .message_len = 2,
115 .message = (uint8_t []){ 0xaf, 0x82, },
116 .signature = {
117 0x62, 0x91, 0xd6, 0x57, 0xde, 0xec, 0x24, 0x02,
118 0x48, 0x27, 0xe6, 0x9c, 0x3a, 0xbe, 0x01, 0xa3,
119 0x0c, 0xe5, 0x48, 0xa2, 0x84, 0x74, 0x3a, 0x44,
120 0x5e, 0x36, 0x80, 0xd7, 0xdb, 0x5a, 0xc3, 0xac,
121 0x18, 0xff, 0x9b, 0x53, 0x8d, 0x16, 0xf2, 0x90,
122 0xae, 0x67, 0xf7, 0x60, 0x98, 0x4d, 0xc6, 0x59,
123 0x4a, 0x7c, 0x15, 0xe9, 0x71, 0x6e, 0xd2, 0x8d,
124 0xc0, 0x27, 0xbe, 0xce, 0xea, 0x1e, 0xc4, 0x0a,
125 },
126 },
127 {
128 .sec_key = {
129 0xf5, 0xe5, 0x76, 0x7c, 0xf1, 0x53, 0x31, 0x95,
130 0x17, 0x63, 0x0f, 0x22, 0x68, 0x76, 0xb8, 0x6c,
131 0x81, 0x60, 0xcc, 0x58, 0x3b, 0xc0, 0x13, 0x74,
132 0x4c, 0x6b, 0xf2, 0x55, 0xf5, 0xcc, 0x0e, 0xe5,
133 0x27, 0x81, 0x17, 0xfc, 0x14, 0x4c, 0x72, 0x34,
134 0x0f, 0x67, 0xd0, 0xf2, 0x31, 0x6e, 0x83, 0x86,
135 0xce, 0xff, 0xbf, 0x2b, 0x24, 0x28, 0xc9, 0xc5,
136 0x1f, 0xef, 0x7c, 0x59, 0x7f, 0x1d, 0x42, 0x6e,
137 },
138 .pub_key = {
139 0x27, 0x81, 0x17, 0xfc, 0x14, 0x4c, 0x72, 0x34,
140 0x0f, 0x67, 0xd0, 0xf2, 0x31, 0x6e, 0x83, 0x86,
141 0xce, 0xff, 0xbf, 0x2b, 0x24, 0x28, 0xc9, 0xc5,
142 0x1f, 0xef, 0x7c, 0x59, 0x7f, 0x1d, 0x42, 0x6e,
143 },
144 .message_len = 1023,
145 .message = (uint8_t []){
146 0x08, 0xb8, 0xb2, 0xb7, 0x33, 0x42, 0x42, 0x43,
147 0x76, 0x0f, 0xe4, 0x26, 0xa4, 0xb5, 0x49, 0x08,
148 0x63, 0x21, 0x10, 0xa6, 0x6c, 0x2f, 0x65, 0x91,
149 0xea, 0xbd, 0x33, 0x45, 0xe3, 0xe4, 0xeb, 0x98,
150 0xfa, 0x6e, 0x26, 0x4b, 0xf0, 0x9e, 0xfe, 0x12,
151 0xee, 0x50, 0xf8, 0xf5, 0x4e, 0x9f, 0x77, 0xb1,
152 0xe3, 0x55, 0xf6, 0xc5, 0x05, 0x44, 0xe2, 0x3f,
153 0xb1, 0x43, 0x3d, 0xdf, 0x73, 0xbe, 0x84, 0xd8,
154 0x79, 0xde, 0x7c, 0x00, 0x46, 0xdc, 0x49, 0x96,
155 0xd9, 0xe7, 0x73, 0xf4, 0xbc, 0x9e, 0xfe, 0x57,
156 0x38, 0x82, 0x9a, 0xdb, 0x26, 0xc8, 0x1b, 0x37,
157 0xc9, 0x3a, 0x1b, 0x27, 0x0b, 0x20, 0x32, 0x9d,
158 0x65, 0x86, 0x75, 0xfc, 0x6e, 0xa5, 0x34, 0xe0,
159 0x81, 0x0a, 0x44, 0x32, 0x82, 0x6b, 0xf5, 0x8c,
160 0x94, 0x1e, 0xfb, 0x65, 0xd5, 0x7a, 0x33, 0x8b,
161 0xbd, 0x2e, 0x26, 0x64, 0x0f, 0x89, 0xff, 0xbc,
162 0x1a, 0x85, 0x8e, 0xfc, 0xb8, 0x55, 0x0e, 0xe3,
163 0xa5, 0xe1, 0x99, 0x8b, 0xd1, 0x77, 0xe9, 0x3a,
164 0x73, 0x63, 0xc3, 0x44, 0xfe, 0x6b, 0x19, 0x9e,
165 0xe5, 0xd0, 0x2e, 0x82, 0xd5, 0x22, 0xc4, 0xfe,
166 0xba, 0x15, 0x45, 0x2f, 0x80, 0x28, 0x8a, 0x82,
167 0x1a, 0x57, 0x91, 0x16, 0xec, 0x6d, 0xad, 0x2b,
168 0x3b, 0x31, 0x0d, 0xa9, 0x03, 0x40, 0x1a, 0xa6,
169 0x21, 0x00, 0xab, 0x5d, 0x1a, 0x36, 0x55, 0x3e,
170 0x06, 0x20, 0x3b, 0x33, 0x89, 0x0c, 0xc9, 0xb8,
171 0x32, 0xf7, 0x9e, 0xf8, 0x05, 0x60, 0xcc, 0xb9,
172 0xa3, 0x9c, 0xe7, 0x67, 0x96, 0x7e, 0xd6, 0x28,
173 0xc6, 0xad, 0x57, 0x3c, 0xb1, 0x16, 0xdb, 0xef,
174 0xef, 0xd7, 0x54, 0x99, 0xda, 0x96, 0xbd, 0x68,
175 0xa8, 0xa9, 0x7b, 0x92, 0x8a, 0x8b, 0xbc, 0x10,
176 0x3b, 0x66, 0x21, 0xfc, 0xde, 0x2b, 0xec, 0xa1,
177 0x23, 0x1d, 0x20, 0x6b, 0xe6, 0xcd, 0x9e, 0xc7,
178 0xaf, 0xf6, 0xf6, 0xc9, 0x4f, 0xcd, 0x72, 0x04,
179 0xed, 0x34, 0x55, 0xc6, 0x8c, 0x83, 0xf4, 0xa4,
180 0x1d, 0xa4, 0xaf, 0x2b, 0x74, 0xef, 0x5c, 0x53,
181 0xf1, 0xd8, 0xac, 0x70, 0xbd, 0xcb, 0x7e, 0xd1,
182 0x85, 0xce, 0x81, 0xbd, 0x84, 0x35, 0x9d, 0x44,
183 0x25, 0x4d, 0x95, 0x62, 0x9e, 0x98, 0x55, 0xa9,
184 0x4a, 0x7c, 0x19, 0x58, 0xd1, 0xf8, 0xad, 0xa5,
185 0xd0, 0x53, 0x2e, 0xd8, 0xa5, 0xaa, 0x3f, 0xb2,
186 0xd1, 0x7b, 0xa7, 0x0e, 0xb6, 0x24, 0x8e, 0x59,
187 0x4e, 0x1a, 0x22, 0x97, 0xac, 0xbb, 0xb3, 0x9d,
188 0x50, 0x2f, 0x1a, 0x8c, 0x6e, 0xb6, 0xf1, 0xce,
189 0x22, 0xb3, 0xde, 0x1a, 0x1f, 0x40, 0xcc, 0x24,
190 0x55, 0x41, 0x19, 0xa8, 0x31, 0xa9, 0xaa, 0xd6,
191 0x07, 0x9c, 0xad, 0x88, 0x42, 0x5d, 0xe6, 0xbd,
192 0xe1, 0xa9, 0x18, 0x7e, 0xbb, 0x60, 0x92, 0xcf,
193 0x67, 0xbf, 0x2b, 0x13, 0xfd, 0x65, 0xf2, 0x70,
194 0x88, 0xd7, 0x8b, 0x7e, 0x88, 0x3c, 0x87, 0x59,
195 0xd2, 0xc4, 0xf5, 0xc6, 0x5a, 0xdb, 0x75, 0x53,
196 0x87, 0x8a, 0xd5, 0x75, 0xf9, 0xfa, 0xd8, 0x78,
197 0xe8, 0x0a, 0x0c, 0x9b, 0xa6, 0x3b, 0xcb, 0xcc,
198 0x27, 0x32, 0xe6, 0x94, 0x85, 0xbb, 0xc9, 0xc9,
199 0x0b, 0xfb, 0xd6, 0x24, 0x81, 0xd9, 0x08, 0x9b,
200 0xec, 0xcf, 0x80, 0xcf, 0xe2, 0xdf, 0x16, 0xa2,
201 0xcf, 0x65, 0xbd, 0x92, 0xdd, 0x59, 0x7b, 0x07,
202 0x07, 0xe0, 0x91, 0x7a, 0xf4, 0x8b, 0xbb, 0x75,
203 0xfe, 0xd4, 0x13, 0xd2, 0x38, 0xf5, 0x55, 0x5a,
204 0x7a, 0x56, 0x9d, 0x80, 0xc3, 0x41, 0x4a, 0x8d,
205 0x08, 0x59, 0xdc, 0x65, 0xa4, 0x61, 0x28, 0xba,
206 0xb2, 0x7a, 0xf8, 0x7a, 0x71, 0x31, 0x4f, 0x31,
207 0x8c, 0x78, 0x2b, 0x23, 0xeb, 0xfe, 0x80, 0x8b,
208 0x82, 0xb0, 0xce, 0x26, 0x40, 0x1d, 0x2e, 0x22,
209 0xf0, 0x4d, 0x83, 0xd1, 0x25, 0x5d, 0xc5, 0x1a,
210 0xdd, 0xd3, 0xb7, 0x5a, 0x2b, 0x1a, 0xe0, 0x78,
211 0x45, 0x04, 0xdf, 0x54, 0x3a, 0xf8, 0x96, 0x9b,
212 0xe3, 0xea, 0x70, 0x82, 0xff, 0x7f, 0xc9, 0x88,
213 0x8c, 0x14, 0x4d, 0xa2, 0xaf, 0x58, 0x42, 0x9e,
214 0xc9, 0x60, 0x31, 0xdb, 0xca, 0xd3, 0xda, 0xd9,
215 0xaf, 0x0d, 0xcb, 0xaa, 0xaf, 0x26, 0x8c, 0xb8,
216 0xfc, 0xff, 0xea, 0xd9, 0x4f, 0x3c, 0x7c, 0xa4,
217 0x95, 0xe0, 0x56, 0xa9, 0xb4, 0x7a, 0xcd, 0xb7,
218 0x51, 0xfb, 0x73, 0xe6, 0x66, 0xc6, 0xc6, 0x55,
219 0xad, 0xe8, 0x29, 0x72, 0x97, 0xd0, 0x7a, 0xd1,
220 0xba, 0x5e, 0x43, 0xf1, 0xbc, 0xa3, 0x23, 0x01,
221 0x65, 0x13, 0x39, 0xe2, 0x29, 0x04, 0xcc, 0x8c,
222 0x42, 0xf5, 0x8c, 0x30, 0xc0, 0x4a, 0xaf, 0xdb,
223 0x03, 0x8d, 0xda, 0x08, 0x47, 0xdd, 0x98, 0x8d,
224 0xcd, 0xa6, 0xf3, 0xbf, 0xd1, 0x5c, 0x4b, 0x4c,
225 0x45, 0x25, 0x00, 0x4a, 0xa0, 0x6e, 0xef, 0xf8,
226 0xca, 0x61, 0x78, 0x3a, 0xac, 0xec, 0x57, 0xfb,
227 0x3d, 0x1f, 0x92, 0xb0, 0xfe, 0x2f, 0xd1, 0xa8,
228 0x5f, 0x67, 0x24, 0x51, 0x7b, 0x65, 0xe6, 0x14,
229 0xad, 0x68, 0x08, 0xd6, 0xf6, 0xee, 0x34, 0xdf,
230 0xf7, 0x31, 0x0f, 0xdc, 0x82, 0xae, 0xbf, 0xd9,
231 0x04, 0xb0, 0x1e, 0x1d, 0xc5, 0x4b, 0x29, 0x27,
232 0x09, 0x4b, 0x2d, 0xb6, 0x8d, 0x6f, 0x90, 0x3b,
233 0x68, 0x40, 0x1a, 0xde, 0xbf, 0x5a, 0x7e, 0x08,
234 0xd7, 0x8f, 0xf4, 0xef, 0x5d, 0x63, 0x65, 0x3a,
235 0x65, 0x04, 0x0c, 0xf9, 0xbf, 0xd4, 0xac, 0xa7,
236 0x98, 0x4a, 0x74, 0xd3, 0x71, 0x45, 0x98, 0x67,
237 0x80, 0xfc, 0x0b, 0x16, 0xac, 0x45, 0x16, 0x49,
238 0xde, 0x61, 0x88, 0xa7, 0xdb, 0xdf, 0x19, 0x1f,
239 0x64, 0xb5, 0xfc, 0x5e, 0x2a, 0xb4, 0x7b, 0x57,
240 0xf7, 0xf7, 0x27, 0x6c, 0xd4, 0x19, 0xc1, 0x7a,
241 0x3c, 0xa8, 0xe1, 0xb9, 0x39, 0xae, 0x49, 0xe4,
242 0x88, 0xac, 0xba, 0x6b, 0x96, 0x56, 0x10, 0xb5,
243 0x48, 0x01, 0x09, 0xc8, 0xb1, 0x7b, 0x80, 0xe1,
244 0xb7, 0xb7, 0x50, 0xdf, 0xc7, 0x59, 0x8d, 0x5d,
245 0x50, 0x11, 0xfd, 0x2d, 0xcc, 0x56, 0x00, 0xa3,
246 0x2e, 0xf5, 0xb5, 0x2a, 0x1e, 0xcc, 0x82, 0x0e,
247 0x30, 0x8a, 0xa3, 0x42, 0x72, 0x1a, 0xac, 0x09,
248 0x43, 0xbf, 0x66, 0x86, 0xb6, 0x4b, 0x25, 0x79,
249 0x37, 0x65, 0x04, 0xcc, 0xc4, 0x93, 0xd9, 0x7e,
250 0x6a, 0xed, 0x3f, 0xb0, 0xf9, 0xcd, 0x71, 0xa4,
251 0x3d, 0xd4, 0x97, 0xf0, 0x1f, 0x17, 0xc0, 0xe2,
252 0xcb, 0x37, 0x97, 0xaa, 0x2a, 0x2f, 0x25, 0x66,
253 0x56, 0x16, 0x8e, 0x6c, 0x49, 0x6a, 0xfc, 0x5f,
254 0xb9, 0x32, 0x46, 0xf6, 0xb1, 0x11, 0x63, 0x98,
255 0xa3, 0x46, 0xf1, 0xa6, 0x41, 0xf3, 0xb0, 0x41,
256 0xe9, 0x89, 0xf7, 0x91, 0x4f, 0x90, 0xcc, 0x2c,
257 0x7f, 0xff, 0x35, 0x78, 0x76, 0xe5, 0x06, 0xb5,
258 0x0d, 0x33, 0x4b, 0xa7, 0x7c, 0x22, 0x5b, 0xc3,
259 0x07, 0xba, 0x53, 0x71, 0x52, 0xf3, 0xf1, 0x61,
260 0x0e, 0x4e, 0xaf, 0xe5, 0x95, 0xf6, 0xd9, 0xd9,
261 0x0d, 0x11, 0xfa, 0xa9, 0x33, 0xa1, 0x5e, 0xf1,
262 0x36, 0x95, 0x46, 0x86, 0x8a, 0x7f, 0x3a, 0x45,
263 0xa9, 0x67, 0x68, 0xd4, 0x0f, 0xd9, 0xd0, 0x34,
264 0x12, 0xc0, 0x91, 0xc6, 0x31, 0x5c, 0xf4, 0xfd,
265 0xe7, 0xcb, 0x68, 0x60, 0x69, 0x37, 0x38, 0x0d,
266 0xb2, 0xea, 0xaa, 0x70, 0x7b, 0x4c, 0x41, 0x85,
267 0xc3, 0x2e, 0xdd, 0xcd, 0xd3, 0x06, 0x70, 0x5e,
268 0x4d, 0xc1, 0xff, 0xc8, 0x72, 0xee, 0xee, 0x47,
269 0x5a, 0x64, 0xdf, 0xac, 0x86, 0xab, 0xa4, 0x1c,
270 0x06, 0x18, 0x98, 0x3f, 0x87, 0x41, 0xc5, 0xef,
271 0x68, 0xd3, 0xa1, 0x01, 0xe8, 0xa3, 0xb8, 0xca,
272 0xc6, 0x0c, 0x90, 0x5c, 0x15, 0xfc, 0x91, 0x08,
273 0x40, 0xb9, 0x4c, 0x00, 0xa0, 0xb9, 0xd0,
274 },
275 .signature = {
276 0x0a, 0xab, 0x4c, 0x90, 0x05, 0x01, 0xb3, 0xe2,
277 0x4d, 0x7c, 0xdf, 0x46, 0x63, 0x32, 0x6a, 0x3a,
278 0x87, 0xdf, 0x5e, 0x48, 0x43, 0xb2, 0xcb, 0xdb,
279 0x67, 0xcb, 0xf6, 0xe4, 0x60, 0xfe, 0xc3, 0x50,
280 0xaa, 0x53, 0x71, 0xb1, 0x50, 0x8f, 0x9f, 0x45,
281 0x28, 0xec, 0xea, 0x23, 0xc4, 0x36, 0xd9, 0x4b,
282 0x5e, 0x8f, 0xcd, 0x4f, 0x68, 0x1e, 0x30, 0xa6,
283 0xac, 0x00, 0xa9, 0x70, 0x4a, 0x18, 0x8a, 0x03,
284 },
285 },
286 {
287 .sec_key = {
288 0x83, 0x3f, 0xe6, 0x24, 0x09, 0x23, 0x7b, 0x9d,
289 0x62, 0xec, 0x77, 0x58, 0x75, 0x20, 0x91, 0x1e,
290 0x9a, 0x75, 0x9c, 0xec, 0x1d, 0x19, 0x75, 0x5b,
291 0x7d, 0xa9, 0x01, 0xb9, 0x6d, 0xca, 0x3d, 0x42,
292 0xec, 0x17, 0x2b, 0x93, 0xad, 0x5e, 0x56, 0x3b,
293 0xf4, 0x93, 0x2c, 0x70, 0xe1, 0x24, 0x50, 0x34,
294 0xc3, 0x54, 0x67, 0xef, 0x2e, 0xfd, 0x4d, 0x64,
295 0xeb, 0xf8, 0x19, 0x68, 0x34, 0x67, 0xe2, 0xbf,
296 },
297 .pub_key = {
298 0xec, 0x17, 0x2b, 0x93, 0xad, 0x5e, 0x56, 0x3b,
299 0xf4, 0x93, 0x2c, 0x70, 0xe1, 0x24, 0x50, 0x34,
300 0xc3, 0x54, 0x67, 0xef, 0x2e, 0xfd, 0x4d, 0x64,
301 0xeb, 0xf8, 0x19, 0x68, 0x34, 0x67, 0xe2, 0xbf,
302 },
303 .message_len = 64,
304 .message = (uint8_t []){
305 0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba,
306 0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31,
307 0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2,
308 0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a,
309 0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8,
310 0x36, 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd,
311 0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e,
312 0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f,
313 },
314 .signature = {
315 0xdc, 0x2a, 0x44, 0x59, 0xe7, 0x36, 0x96, 0x33,
316 0xa5, 0x2b, 0x1b, 0xf2, 0x77, 0x83, 0x9a, 0x00,
317 0x20, 0x10, 0x09, 0xa3, 0xef, 0xbf, 0x3e, 0xcb,
318 0x69, 0xbe, 0xa2, 0x18, 0x6c, 0x26, 0xb5, 0x89,
319 0x09, 0x35, 0x1f, 0xc9, 0xac, 0x90, 0xb3, 0xec,
320 0xfd, 0xfb, 0xc7, 0xc6, 0x64, 0x31, 0xe0, 0x30,
321 0x3d, 0xca, 0x17, 0x9c, 0x13, 0x8a, 0xc1, 0x7a,
322 0xd9, 0xbe, 0xf1, 0x17, 0x73, 0x31, 0xa7, 0x04,
323 },
324 },
325};
326
327const size_t num_testvectors = sizeof(testvectors) / sizeof(testvectors[0]);
328
329int test_ED25519_verify(void);
330int test_ED25519_sign(void);
331
332int
333test_ED25519_verify(void)
334{
335 size_t i;
336 int failed = 0;
337
338 for (i = 0; i < num_testvectors; i++) {
339 struct testvector *tc = &testvectors[i];
340
341 if (!ED25519_verify(tc->message, tc->message_len, tc->signature,
342 tc->pub_key)) {
343 warnx("failed verification in test case %zu", i);
344 failed = 1;
345 }
346 }
347
348 return failed;
349}
350
351int
352test_ED25519_sign(void)
353{
354 size_t i;
355 int failed = 0;
356
357 for (i = 0; i < num_testvectors; i++) {
358 struct testvector *tc = &testvectors[i];
359 uint8_t signature[64];
360
361 if (!ED25519_sign(signature, tc->message, tc->message_len,
362 tc->sec_key)) {
363 warnx("failed signature in test case %zu", i);
364 failed = 1;
365 }
366
367 if (memcmp(tc->signature, signature, sizeof signature) != 0) {
368 warnx("signature mismatch in test case %zu", i);
369 failed = 1;
370 }
371 }
372
373 return failed;
374}
375
376int
377main(int argc, char *argv[])
378{
379 int failed = 0;
380
381 failed |= test_ED25519_verify();
382 failed |= test_ED25519_sign();
383
384 if (failed)
385 fprintf(stderr, "FAILED\n");
386 else
387 fprintf(stderr, "PASS\n");
388
389 return failed;
390}