summaryrefslogtreecommitdiff
path: root/regress/unittests
diff options
context:
space:
mode:
Diffstat (limited to 'regress/unittests')
-rw-r--r--regress/unittests/sshkey/common.c81
-rw-r--r--regress/unittests/sshkey/common.h11
-rwxr-xr-xregress/unittests/sshkey/mktestdata.sh14
-rw-r--r--regress/unittests/sshkey/test_file.c32
-rw-r--r--regress/unittests/sshkey/test_sshkey.c58
-rw-r--r--regress/unittests/sshkey/testdata/rsa_1_sha115
-rw-r--r--regress/unittests/sshkey/testdata/rsa_1_sha1-cert.pub1
-rw-r--r--regress/unittests/sshkey/testdata/rsa_1_sha1.pub1
-rw-r--r--regress/unittests/sshkey/testdata/rsa_1_sha51215
-rw-r--r--regress/unittests/sshkey/testdata/rsa_1_sha512-cert.pub1
-rw-r--r--regress/unittests/sshkey/testdata/rsa_1_sha512.pub1
-rw-r--r--regress/unittests/test_helper/fuzz.c8
-rw-r--r--regress/unittests/test_helper/test_helper.c3
13 files changed, 183 insertions, 58 deletions
diff --git a/regress/unittests/sshkey/common.c b/regress/unittests/sshkey/common.c
index b598f05cb..e63465c47 100644
--- a/regress/unittests/sshkey/common.c
+++ b/regress/unittests/sshkey/common.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: common.c,v 1.2 2015/01/08 13:10:58 djm Exp $ */ 1/* $OpenBSD: common.c,v 1.3 2018/09/13 09:03:20 djm Exp $ */
2/* 2/*
3 * Helpers for key API tests 3 * Helpers for key API tests
4 * 4 *
@@ -27,6 +27,8 @@
27# include <openssl/ec.h> 27# include <openssl/ec.h>
28#endif 28#endif
29 29
30#include "openbsd-compat/openssl-compat.h"
31
30#include "../test_helper/test_helper.h" 32#include "../test_helper/test_helper.h"
31 33
32#include "ssherr.h" 34#include "ssherr.h"
@@ -82,3 +84,80 @@ load_bignum(const char *name)
82 return ret; 84 return ret;
83} 85}
84 86
87const BIGNUM *
88rsa_n(struct sshkey *k)
89{
90 const BIGNUM *n = NULL;
91
92 ASSERT_PTR_NE(k, NULL);
93 ASSERT_PTR_NE(k->rsa, NULL);
94 RSA_get0_key(k->rsa, &n, NULL, NULL);
95 return n;
96}
97
98const BIGNUM *
99rsa_e(struct sshkey *k)
100{
101 const BIGNUM *e = NULL;
102
103 ASSERT_PTR_NE(k, NULL);
104 ASSERT_PTR_NE(k->rsa, NULL);
105 RSA_get0_key(k->rsa, NULL, &e, NULL);
106 return e;
107}
108
109const BIGNUM *
110rsa_p(struct sshkey *k)
111{
112 const BIGNUM *p = NULL;
113
114 ASSERT_PTR_NE(k, NULL);
115 ASSERT_PTR_NE(k->rsa, NULL);
116 RSA_get0_factors(k->rsa, &p, NULL);
117 return p;
118}
119
120const BIGNUM *
121rsa_q(struct sshkey *k)
122{
123 const BIGNUM *q = NULL;
124
125 ASSERT_PTR_NE(k, NULL);
126 ASSERT_PTR_NE(k->rsa, NULL);
127 RSA_get0_factors(k->rsa, NULL, &q);
128 return q;
129}
130
131const BIGNUM *
132dsa_g(struct sshkey *k)
133{
134 const BIGNUM *g = NULL;
135
136 ASSERT_PTR_NE(k, NULL);
137 ASSERT_PTR_NE(k->dsa, NULL);
138 DSA_get0_pqg(k->dsa, NULL, NULL, &g);
139 return g;
140}
141
142const BIGNUM *
143dsa_pub_key(struct sshkey *k)
144{
145 const BIGNUM *pub_key = NULL;
146
147 ASSERT_PTR_NE(k, NULL);
148 ASSERT_PTR_NE(k->dsa, NULL);
149 DSA_get0_key(k->dsa, &pub_key, NULL);
150 return pub_key;
151}
152
153const BIGNUM *
154dsa_priv_key(struct sshkey *k)
155{
156 const BIGNUM *priv_key = NULL;
157
158 ASSERT_PTR_NE(k, NULL);
159 ASSERT_PTR_NE(k->dsa, NULL);
160 DSA_get0_key(k->dsa, NULL, &priv_key);
161 return priv_key;
162}
163
diff --git a/regress/unittests/sshkey/common.h b/regress/unittests/sshkey/common.h
index bf7d19dce..7a514fdc8 100644
--- a/regress/unittests/sshkey/common.h
+++ b/regress/unittests/sshkey/common.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: common.h,v 1.1 2014/06/24 01:14:18 djm Exp $ */ 1/* $OpenBSD: common.h,v 1.2 2018/09/13 09:03:20 djm Exp $ */
2/* 2/*
3 * Helpers for key API tests 3 * Helpers for key API tests
4 * 4 *
@@ -14,3 +14,12 @@ struct sshbuf *load_text_file(const char *name);
14/* Load a bignum from a file */ 14/* Load a bignum from a file */
15BIGNUM *load_bignum(const char *name); 15BIGNUM *load_bignum(const char *name);
16 16
17/* Accessors for key components */
18const BIGNUM *rsa_n(struct sshkey *k);
19const BIGNUM *rsa_e(struct sshkey *k);
20const BIGNUM *rsa_p(struct sshkey *k);
21const BIGNUM *rsa_q(struct sshkey *k);
22const BIGNUM *dsa_g(struct sshkey *k);
23const BIGNUM *dsa_pub_key(struct sshkey *k);
24const BIGNUM *dsa_priv_key(struct sshkey *k);
25
diff --git a/regress/unittests/sshkey/mktestdata.sh b/regress/unittests/sshkey/mktestdata.sh
index 8047bc62f..93da34c64 100755
--- a/regress/unittests/sshkey/mktestdata.sh
+++ b/regress/unittests/sshkey/mktestdata.sh
@@ -1,5 +1,5 @@
1#!/bin/sh 1#!/bin/sh
2# $OpenBSD: mktestdata.sh,v 1.6 2017/04/30 23:33:48 djm Exp $ 2# $OpenBSD: mktestdata.sh,v 1.7 2018/09/12 01:36:45 djm Exp $
3 3
4PW=mekmitasdigoat 4PW=mekmitasdigoat
5 5
@@ -128,6 +128,18 @@ ssh-keygen -s rsa_2 -I hugo -n user1,user2 \
128 -Oforce-command=/bin/ls -Ono-port-forwarding -Osource-address=10.0.0.0/8 \ 128 -Oforce-command=/bin/ls -Ono-port-forwarding -Osource-address=10.0.0.0/8 \
129 -V 19990101:20110101 -z 4 ed25519_1.pub 129 -V 19990101:20110101 -z 4 ed25519_1.pub
130 130
131# Make a few RSA variant signature too.
132cp rsa_1 rsa_1_sha1
133cp rsa_1 rsa_1_sha512
134cp rsa_1.pub rsa_1_sha1.pub
135cp rsa_1.pub rsa_1_sha512.pub
136ssh-keygen -s rsa_2 -I hugo -n user1,user2 -t ssh-rsa \
137 -Oforce-command=/bin/ls -Ono-port-forwarding -Osource-address=10.0.0.0/8 \
138 -V 19990101:20110101 -z 1 rsa_1_sha1.pub
139ssh-keygen -s rsa_2 -I hugo -n user1,user2 -t rsa-sha2-512 \
140 -Oforce-command=/bin/ls -Ono-port-forwarding -Osource-address=10.0.0.0/8 \
141 -V 19990101:20110101 -z 1 rsa_1_sha512.pub
142
131ssh-keygen -s ed25519_1 -I julius -n host1,host2 -h \ 143ssh-keygen -s ed25519_1 -I julius -n host1,host2 -h \
132 -V 19990101:20110101 -z 5 rsa_1.pub 144 -V 19990101:20110101 -z 5 rsa_1.pub
133ssh-keygen -s ed25519_1 -I julius -n host1,host2 -h \ 145ssh-keygen -s ed25519_1 -I julius -n host1,host2 -h \
diff --git a/regress/unittests/sshkey/test_file.c b/regress/unittests/sshkey/test_file.c
index 99b7e21c0..65610dacc 100644
--- a/regress/unittests/sshkey/test_file.c
+++ b/regress/unittests/sshkey/test_file.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: test_file.c,v 1.6 2017/04/30 23:33:48 djm Exp $ */ 1/* $OpenBSD: test_file.c,v 1.8 2018/09/13 09:03:20 djm Exp $ */
2/* 2/*
3 * Regress test for sshkey.h key management API 3 * Regress test for sshkey.h key management API
4 * 4 *
@@ -60,9 +60,9 @@ sshkey_file_tests(void)
60 a = load_bignum("rsa_1.param.n"); 60 a = load_bignum("rsa_1.param.n");
61 b = load_bignum("rsa_1.param.p"); 61 b = load_bignum("rsa_1.param.p");
62 c = load_bignum("rsa_1.param.q"); 62 c = load_bignum("rsa_1.param.q");
63 ASSERT_BIGNUM_EQ(k1->rsa->n, a); 63 ASSERT_BIGNUM_EQ(rsa_n(k1), a);
64 ASSERT_BIGNUM_EQ(k1->rsa->p, b); 64 ASSERT_BIGNUM_EQ(rsa_p(k1), b);
65 ASSERT_BIGNUM_EQ(k1->rsa->q, c); 65 ASSERT_BIGNUM_EQ(rsa_q(k1), c);
66 BN_free(a); 66 BN_free(a);
67 BN_free(b); 67 BN_free(b);
68 BN_free(c); 68 BN_free(c);
@@ -105,6 +105,24 @@ sshkey_file_tests(void)
105 sshkey_free(k2); 105 sshkey_free(k2);
106 TEST_DONE(); 106 TEST_DONE();
107 107
108 TEST_START("load RSA cert with SHA1 signature");
109 ASSERT_INT_EQ(sshkey_load_cert(test_data_file("rsa_1_sha1"), &k2), 0);
110 ASSERT_PTR_NE(k2, NULL);
111 ASSERT_INT_EQ(k2->type, KEY_RSA_CERT);
112 ASSERT_INT_EQ(sshkey_equal_public(k1, k2), 1);
113 ASSERT_STRING_EQ(k2->cert->signature_type, "ssh-rsa");
114 sshkey_free(k2);
115 TEST_DONE();
116
117 TEST_START("load RSA cert with SHA512 signature");
118 ASSERT_INT_EQ(sshkey_load_cert(test_data_file("rsa_1_sha512"), &k2), 0);
119 ASSERT_PTR_NE(k2, NULL);
120 ASSERT_INT_EQ(k2->type, KEY_RSA_CERT);
121 ASSERT_INT_EQ(sshkey_equal_public(k1, k2), 1);
122 ASSERT_STRING_EQ(k2->cert->signature_type, "rsa-sha2-512");
123 sshkey_free(k2);
124 TEST_DONE();
125
108 TEST_START("load RSA cert"); 126 TEST_START("load RSA cert");
109 ASSERT_INT_EQ(sshkey_load_cert(test_data_file("rsa_1"), &k2), 0); 127 ASSERT_INT_EQ(sshkey_load_cert(test_data_file("rsa_1"), &k2), 0);
110 ASSERT_PTR_NE(k2, NULL); 128 ASSERT_PTR_NE(k2, NULL);
@@ -151,9 +169,9 @@ sshkey_file_tests(void)
151 a = load_bignum("dsa_1.param.g"); 169 a = load_bignum("dsa_1.param.g");
152 b = load_bignum("dsa_1.param.priv"); 170 b = load_bignum("dsa_1.param.priv");
153 c = load_bignum("dsa_1.param.pub"); 171 c = load_bignum("dsa_1.param.pub");
154 ASSERT_BIGNUM_EQ(k1->dsa->g, a); 172 ASSERT_BIGNUM_EQ(dsa_g(k1), a);
155 ASSERT_BIGNUM_EQ(k1->dsa->priv_key, b); 173 ASSERT_BIGNUM_EQ(dsa_priv_key(k1), b);
156 ASSERT_BIGNUM_EQ(k1->dsa->pub_key, c); 174 ASSERT_BIGNUM_EQ(dsa_pub_key(k1), c);
157 BN_free(a); 175 BN_free(a);
158 BN_free(b); 176 BN_free(b);
159 BN_free(c); 177 BN_free(c);
diff --git a/regress/unittests/sshkey/test_sshkey.c b/regress/unittests/sshkey/test_sshkey.c
index 72367bde7..47a03fad4 100644
--- a/regress/unittests/sshkey/test_sshkey.c
+++ b/regress/unittests/sshkey/test_sshkey.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: test_sshkey.c,v 1.14 2018/07/13 02:13:19 djm Exp $ */ 1/* $OpenBSD: test_sshkey.c,v 1.17 2018/09/13 09:03:20 djm Exp $ */
2/* 2/*
3 * Regress test for sshkey.h key management API 3 * Regress test for sshkey.h key management API
4 * 4 *
@@ -197,9 +197,6 @@ sshkey_tests(void)
197 k1 = sshkey_new(KEY_RSA); 197 k1 = sshkey_new(KEY_RSA);
198 ASSERT_PTR_NE(k1, NULL); 198 ASSERT_PTR_NE(k1, NULL);
199 ASSERT_PTR_NE(k1->rsa, NULL); 199 ASSERT_PTR_NE(k1->rsa, NULL);
200 ASSERT_PTR_NE(k1->rsa->n, NULL);
201 ASSERT_PTR_NE(k1->rsa->e, NULL);
202 ASSERT_PTR_EQ(k1->rsa->p, NULL);
203 sshkey_free(k1); 200 sshkey_free(k1);
204 TEST_DONE(); 201 TEST_DONE();
205 202
@@ -207,8 +204,6 @@ sshkey_tests(void)
207 k1 = sshkey_new(KEY_DSA); 204 k1 = sshkey_new(KEY_DSA);
208 ASSERT_PTR_NE(k1, NULL); 205 ASSERT_PTR_NE(k1, NULL);
209 ASSERT_PTR_NE(k1->dsa, NULL); 206 ASSERT_PTR_NE(k1->dsa, NULL);
210 ASSERT_PTR_NE(k1->dsa->g, NULL);
211 ASSERT_PTR_EQ(k1->dsa->priv_key, NULL);
212 sshkey_free(k1); 207 sshkey_free(k1);
213 TEST_DONE(); 208 TEST_DONE();
214 209
@@ -230,27 +225,6 @@ sshkey_tests(void)
230 sshkey_free(k1); 225 sshkey_free(k1);
231 TEST_DONE(); 226 TEST_DONE();
232 227
233 TEST_START("new_private KEY_RSA");
234 k1 = sshkey_new_private(KEY_RSA);
235 ASSERT_PTR_NE(k1, NULL);
236 ASSERT_PTR_NE(k1->rsa, NULL);
237 ASSERT_PTR_NE(k1->rsa->n, NULL);
238 ASSERT_PTR_NE(k1->rsa->e, NULL);
239 ASSERT_PTR_NE(k1->rsa->p, NULL);
240 ASSERT_INT_EQ(sshkey_add_private(k1), 0);
241 sshkey_free(k1);
242 TEST_DONE();
243
244 TEST_START("new_private KEY_DSA");
245 k1 = sshkey_new_private(KEY_DSA);
246 ASSERT_PTR_NE(k1, NULL);
247 ASSERT_PTR_NE(k1->dsa, NULL);
248 ASSERT_PTR_NE(k1->dsa->g, NULL);
249 ASSERT_PTR_NE(k1->dsa->priv_key, NULL);
250 ASSERT_INT_EQ(sshkey_add_private(k1), 0);
251 sshkey_free(k1);
252 TEST_DONE();
253
254 TEST_START("generate KEY_RSA too small modulus"); 228 TEST_START("generate KEY_RSA too small modulus");
255 ASSERT_INT_EQ(sshkey_generate(KEY_RSA, 128, &k1), 229 ASSERT_INT_EQ(sshkey_generate(KEY_RSA, 128, &k1),
256 SSH_ERR_KEY_LENGTH); 230 SSH_ERR_KEY_LENGTH);
@@ -285,18 +259,18 @@ sshkey_tests(void)
285 ASSERT_INT_EQ(sshkey_generate(KEY_RSA, 1024, &kr), 0); 259 ASSERT_INT_EQ(sshkey_generate(KEY_RSA, 1024, &kr), 0);
286 ASSERT_PTR_NE(kr, NULL); 260 ASSERT_PTR_NE(kr, NULL);
287 ASSERT_PTR_NE(kr->rsa, NULL); 261 ASSERT_PTR_NE(kr->rsa, NULL);
288 ASSERT_PTR_NE(kr->rsa->n, NULL); 262 ASSERT_PTR_NE(rsa_n(kr), NULL);
289 ASSERT_PTR_NE(kr->rsa->e, NULL); 263 ASSERT_PTR_NE(rsa_e(kr), NULL);
290 ASSERT_PTR_NE(kr->rsa->p, NULL); 264 ASSERT_PTR_NE(rsa_p(kr), NULL);
291 ASSERT_INT_EQ(BN_num_bits(kr->rsa->n), 1024); 265 ASSERT_INT_EQ(BN_num_bits(rsa_n(kr)), 1024);
292 TEST_DONE(); 266 TEST_DONE();
293 267
294 TEST_START("generate KEY_DSA"); 268 TEST_START("generate KEY_DSA");
295 ASSERT_INT_EQ(sshkey_generate(KEY_DSA, 1024, &kd), 0); 269 ASSERT_INT_EQ(sshkey_generate(KEY_DSA, 1024, &kd), 0);
296 ASSERT_PTR_NE(kd, NULL); 270 ASSERT_PTR_NE(kd, NULL);
297 ASSERT_PTR_NE(kd->dsa, NULL); 271 ASSERT_PTR_NE(kd->dsa, NULL);
298 ASSERT_PTR_NE(kd->dsa->g, NULL); 272 ASSERT_PTR_NE(dsa_g(kd), NULL);
299 ASSERT_PTR_NE(kd->dsa->priv_key, NULL); 273 ASSERT_PTR_NE(dsa_priv_key(kd), NULL);
300 TEST_DONE(); 274 TEST_DONE();
301 275
302#ifdef OPENSSL_HAS_ECC 276#ifdef OPENSSL_HAS_ECC
@@ -318,14 +292,14 @@ sshkey_tests(void)
318 TEST_DONE(); 292 TEST_DONE();
319 293
320 TEST_START("demote KEY_RSA"); 294 TEST_START("demote KEY_RSA");
321 ASSERT_INT_EQ(sshkey_demote(kr, &k1), 0); 295 ASSERT_INT_EQ(sshkey_from_private(kr, &k1), 0);
322 ASSERT_PTR_NE(k1, NULL); 296 ASSERT_PTR_NE(k1, NULL);
323 ASSERT_PTR_NE(kr, k1); 297 ASSERT_PTR_NE(kr, k1);
324 ASSERT_INT_EQ(k1->type, KEY_RSA); 298 ASSERT_INT_EQ(k1->type, KEY_RSA);
325 ASSERT_PTR_NE(k1->rsa, NULL); 299 ASSERT_PTR_NE(k1->rsa, NULL);
326 ASSERT_PTR_NE(k1->rsa->n, NULL); 300 ASSERT_PTR_NE(rsa_n(k1), NULL);
327 ASSERT_PTR_NE(k1->rsa->e, NULL); 301 ASSERT_PTR_NE(rsa_e(k1), NULL);
328 ASSERT_PTR_EQ(k1->rsa->p, NULL); 302 ASSERT_PTR_EQ(rsa_p(k1), NULL);
329 TEST_DONE(); 303 TEST_DONE();
330 304
331 TEST_START("equal KEY_RSA/demoted KEY_RSA"); 305 TEST_START("equal KEY_RSA/demoted KEY_RSA");
@@ -334,13 +308,13 @@ sshkey_tests(void)
334 TEST_DONE(); 308 TEST_DONE();
335 309
336 TEST_START("demote KEY_DSA"); 310 TEST_START("demote KEY_DSA");
337 ASSERT_INT_EQ(sshkey_demote(kd, &k1), 0); 311 ASSERT_INT_EQ(sshkey_from_private(kd, &k1), 0);
338 ASSERT_PTR_NE(k1, NULL); 312 ASSERT_PTR_NE(k1, NULL);
339 ASSERT_PTR_NE(kd, k1); 313 ASSERT_PTR_NE(kd, k1);
340 ASSERT_INT_EQ(k1->type, KEY_DSA); 314 ASSERT_INT_EQ(k1->type, KEY_DSA);
341 ASSERT_PTR_NE(k1->dsa, NULL); 315 ASSERT_PTR_NE(k1->dsa, NULL);
342 ASSERT_PTR_NE(k1->dsa->g, NULL); 316 ASSERT_PTR_NE(dsa_g(k1), NULL);
343 ASSERT_PTR_EQ(k1->dsa->priv_key, NULL); 317 ASSERT_PTR_EQ(dsa_priv_key(k1), NULL);
344 TEST_DONE(); 318 TEST_DONE();
345 319
346 TEST_START("equal KEY_DSA/demoted KEY_DSA"); 320 TEST_START("equal KEY_DSA/demoted KEY_DSA");
@@ -350,7 +324,7 @@ sshkey_tests(void)
350 324
351#ifdef OPENSSL_HAS_ECC 325#ifdef OPENSSL_HAS_ECC
352 TEST_START("demote KEY_ECDSA"); 326 TEST_START("demote KEY_ECDSA");
353 ASSERT_INT_EQ(sshkey_demote(ke, &k1), 0); 327 ASSERT_INT_EQ(sshkey_from_private(ke, &k1), 0);
354 ASSERT_PTR_NE(k1, NULL); 328 ASSERT_PTR_NE(k1, NULL);
355 ASSERT_PTR_NE(ke, k1); 329 ASSERT_PTR_NE(ke, k1);
356 ASSERT_INT_EQ(k1->type, KEY_ECDSA); 330 ASSERT_INT_EQ(k1->type, KEY_ECDSA);
@@ -367,7 +341,7 @@ sshkey_tests(void)
367#endif 341#endif
368 342
369 TEST_START("demote KEY_ED25519"); 343 TEST_START("demote KEY_ED25519");
370 ASSERT_INT_EQ(sshkey_demote(kf, &k1), 0); 344 ASSERT_INT_EQ(sshkey_from_private(kf, &k1), 0);
371 ASSERT_PTR_NE(k1, NULL); 345 ASSERT_PTR_NE(k1, NULL);
372 ASSERT_PTR_NE(kf, k1); 346 ASSERT_PTR_NE(kf, k1);
373 ASSERT_INT_EQ(k1->type, KEY_ED25519); 347 ASSERT_INT_EQ(k1->type, KEY_ED25519);
diff --git a/regress/unittests/sshkey/testdata/rsa_1_sha1 b/regress/unittests/sshkey/testdata/rsa_1_sha1
new file mode 100644
index 000000000..5de3f8422
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/rsa_1_sha1
@@ -0,0 +1,15 @@
1-----BEGIN RSA PRIVATE KEY-----
2MIICXAIBAAKBgQDLV5lUTt7FrADseB/CGhEZzpoojjEW5y8+ePvLppmK3MmMI18u
3d6vxzpK3bwZLYkVSyfJYI0HmIuGhdu7yMrW6wb84gbq8C31Xoe9EORcIUuGSvDKd
4NSM1SjlhDquRblDFB8kToqXyx1lqrXecXylxIUOL0jE+u0rU1967pDJx+wIDAQAB
5AoGAXyj5mpjmbD+YlxGIWz/zrM4hGsWgd4VteKEJxT6MMI4uzCRpkMd0ck8oHiwZ
6GAI/SwUzIsgtONQuH3AXVsUgghW4Ynn+8ksEv0IZ918WDMDwqvqkyrVzsOsZzqYj
7Pf8DUDKCpwFjnlknJ04yvWBZvVhWtY4OiZ8GV0Ttsu3k+GECQQD1YHfvBb5FdJBv
8Uhde2Il+jaFia8mwVVNNaiD2ECxXx6CzGz54ZLEB9NPVfDUZK8lJ4UJDqelWNh3i
9PF3RefWDAkEA1CVBzAFL4mNwpleVPzrfy69xP3gWOa26MxM/GE6zx9jC7HgQ3KPa
10WKdG/FuHs085aTRDaDLmGcZ8IvMuu7NgKQJAcIOKmxR0Gd8IN7NZugjqixggb0Pj
11mLKXXwESGiJyYtHL0zTj4Uqyi6Ya2GJ66o7UXscmnmYz828fJtTtZBdbRwJBALfi
12C2QvA32Zv/0PEXibKXy996WSC4G3ShwXZKtHHKHvCxY5BDSbehk59VesZrVPyG2e
13NYdOBxD0cIlCzJE56/ECQAndVkxvO8hwyEFGGwF3faHIAe/OxVb+MjaU25//Pe1/
14h/e6tlCk4w9CODpyV685gV394eYwMcGDcIkipTNUDZs=
15-----END RSA PRIVATE KEY-----
diff --git a/regress/unittests/sshkey/testdata/rsa_1_sha1-cert.pub b/regress/unittests/sshkey/testdata/rsa_1_sha1-cert.pub
new file mode 100644
index 000000000..ff49d7598
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/rsa_1_sha1-cert.pub
@@ -0,0 +1 @@
ssh-rsa-cert-v01@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgy5PGFfSaEuSuXsjvKlMZGXYD0xlnqdZftuW9tMkUYz4AAAADAQABAAAAgQDLV5lUTt7FrADseB/CGhEZzpoojjEW5y8+ePvLppmK3MmMI18ud6vxzpK3bwZLYkVSyfJYI0HmIuGhdu7yMrW6wb84gbq8C31Xoe9EORcIUuGSvDKdNSM1SjlhDquRblDFB8kToqXyx1lqrXecXylxIUOL0jE+u0rU1967pDJx+wAAAAAAAAABAAAAAQAAAARodWdvAAAAEgAAAAV1c2VyMQAAAAV1c2VyMgAAAAA2i4NgAAAAAE0d4eAAAABEAAAADWZvcmNlLWNvbW1hbmQAAAALAAAABy9iaW4vbHMAAAAOc291cmNlLWFkZHJlc3MAAAAOAAAACjEwLjAuMC4wLzgAAABkAAAAFXBlcm1pdC1YMTEtZm9yd2FyZGluZwAAAAAAAAAXcGVybWl0LWFnZW50LWZvcndhcmRpbmcAAAAAAAAACnBlcm1pdC1wdHkAAAAAAAAADnBlcm1pdC11c2VyLXJjAAAAAAAAAAAAAAEXAAAAB3NzaC1yc2EAAAADAQABAAABAQD00RRenvxICSYvj54CPiYHM86OT5xwI9XORNH6Zkl3JPCQkAEdQ3hyfhraROaHsSv43wJcKyKrEg5XUZ8fZ/BoKIGU4Rd5AmL9wyPGv2RVY7gWELqXVSpu89R2tQJRmMVMD38CH0wqCTuoZirlKMTen6yfgYuFEpuqar0uOIeAyaQG6/9rVKWK36tcfM7YXx8fmGSN4eK/JhWDDjlo28YJ7ZFF9umh5baZG2Ai/vL3BJ7C3pqaEQNdKj8XqaSoDvFWKfOujk1620Rcuj3W0D0dvp/rH8xz8YkM1dMqGlYIZ4nrF5acB58Nk5FYBjtj1hu4DGEQlWL1Avk1agU4DQLrAAABDwAAAAdzc2gtcnNhAAABAF5BtPY8FbmIekK/zNq6/Lp5agKT5zEVxqAyZKhp75bLRP+kOMZBVB9ZWrekZk6IAVAOCZGQzTsD4mxIQsxBLl8k5hvEWb90/+w9/BzW9ScOGQe+y0COa0QWWR7L3k1S8WX2oAGvtDWOj7Md85nij4ZSU9/QQQFVDF8VilWPSMxUf/3I1fqyDq7AWcZkGk/bFUN6K6RsCSxIPlGmKt0IauyvSMI2IT0XeRT242RngeeUW8vFrn9TXy9YxJRW+cSeLKCuu8agBYyQMXWQ+q39eZZqVYSoo7nFEEhtaLs8d6jzgGkcE9wGJ9KLgfY/mG2vX3gI4IzncKkVJRoeiDzXFIk= RSA test key #1
diff --git a/regress/unittests/sshkey/testdata/rsa_1_sha1.pub b/regress/unittests/sshkey/testdata/rsa_1_sha1.pub
new file mode 100644
index 000000000..23ef872e0
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/rsa_1_sha1.pub
@@ -0,0 +1 @@
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDLV5lUTt7FrADseB/CGhEZzpoojjEW5y8+ePvLppmK3MmMI18ud6vxzpK3bwZLYkVSyfJYI0HmIuGhdu7yMrW6wb84gbq8C31Xoe9EORcIUuGSvDKdNSM1SjlhDquRblDFB8kToqXyx1lqrXecXylxIUOL0jE+u0rU1967pDJx+w== RSA test key #1
diff --git a/regress/unittests/sshkey/testdata/rsa_1_sha512 b/regress/unittests/sshkey/testdata/rsa_1_sha512
new file mode 100644
index 000000000..5de3f8422
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/rsa_1_sha512
@@ -0,0 +1,15 @@
1-----BEGIN RSA PRIVATE KEY-----
2MIICXAIBAAKBgQDLV5lUTt7FrADseB/CGhEZzpoojjEW5y8+ePvLppmK3MmMI18u
3d6vxzpK3bwZLYkVSyfJYI0HmIuGhdu7yMrW6wb84gbq8C31Xoe9EORcIUuGSvDKd
4NSM1SjlhDquRblDFB8kToqXyx1lqrXecXylxIUOL0jE+u0rU1967pDJx+wIDAQAB
5AoGAXyj5mpjmbD+YlxGIWz/zrM4hGsWgd4VteKEJxT6MMI4uzCRpkMd0ck8oHiwZ
6GAI/SwUzIsgtONQuH3AXVsUgghW4Ynn+8ksEv0IZ918WDMDwqvqkyrVzsOsZzqYj
7Pf8DUDKCpwFjnlknJ04yvWBZvVhWtY4OiZ8GV0Ttsu3k+GECQQD1YHfvBb5FdJBv
8Uhde2Il+jaFia8mwVVNNaiD2ECxXx6CzGz54ZLEB9NPVfDUZK8lJ4UJDqelWNh3i
9PF3RefWDAkEA1CVBzAFL4mNwpleVPzrfy69xP3gWOa26MxM/GE6zx9jC7HgQ3KPa
10WKdG/FuHs085aTRDaDLmGcZ8IvMuu7NgKQJAcIOKmxR0Gd8IN7NZugjqixggb0Pj
11mLKXXwESGiJyYtHL0zTj4Uqyi6Ya2GJ66o7UXscmnmYz828fJtTtZBdbRwJBALfi
12C2QvA32Zv/0PEXibKXy996WSC4G3ShwXZKtHHKHvCxY5BDSbehk59VesZrVPyG2e
13NYdOBxD0cIlCzJE56/ECQAndVkxvO8hwyEFGGwF3faHIAe/OxVb+MjaU25//Pe1/
14h/e6tlCk4w9CODpyV685gV394eYwMcGDcIkipTNUDZs=
15-----END RSA PRIVATE KEY-----
diff --git a/regress/unittests/sshkey/testdata/rsa_1_sha512-cert.pub b/regress/unittests/sshkey/testdata/rsa_1_sha512-cert.pub
new file mode 100644
index 000000000..47451968f
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/rsa_1_sha512-cert.pub
@@ -0,0 +1 @@
ssh-rsa-cert-v01@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAg/bUEmnMYHxlv1N7iXvnYPYdzDjlTRKoaIGEPkaQQQDwAAAADAQABAAAAgQDLV5lUTt7FrADseB/CGhEZzpoojjEW5y8+ePvLppmK3MmMI18ud6vxzpK3bwZLYkVSyfJYI0HmIuGhdu7yMrW6wb84gbq8C31Xoe9EORcIUuGSvDKdNSM1SjlhDquRblDFB8kToqXyx1lqrXecXylxIUOL0jE+u0rU1967pDJx+wAAAAAAAAABAAAAAQAAAARodWdvAAAAEgAAAAV1c2VyMQAAAAV1c2VyMgAAAAA2i4NgAAAAAE0d4eAAAABEAAAADWZvcmNlLWNvbW1hbmQAAAALAAAABy9iaW4vbHMAAAAOc291cmNlLWFkZHJlc3MAAAAOAAAACjEwLjAuMC4wLzgAAABkAAAAFXBlcm1pdC1YMTEtZm9yd2FyZGluZwAAAAAAAAAXcGVybWl0LWFnZW50LWZvcndhcmRpbmcAAAAAAAAACnBlcm1pdC1wdHkAAAAAAAAADnBlcm1pdC11c2VyLXJjAAAAAAAAAAAAAAEXAAAAB3NzaC1yc2EAAAADAQABAAABAQD00RRenvxICSYvj54CPiYHM86OT5xwI9XORNH6Zkl3JPCQkAEdQ3hyfhraROaHsSv43wJcKyKrEg5XUZ8fZ/BoKIGU4Rd5AmL9wyPGv2RVY7gWELqXVSpu89R2tQJRmMVMD38CH0wqCTuoZirlKMTen6yfgYuFEpuqar0uOIeAyaQG6/9rVKWK36tcfM7YXx8fmGSN4eK/JhWDDjlo28YJ7ZFF9umh5baZG2Ai/vL3BJ7C3pqaEQNdKj8XqaSoDvFWKfOujk1620Rcuj3W0D0dvp/rH8xz8YkM1dMqGlYIZ4nrF5acB58Nk5FYBjtj1hu4DGEQlWL1Avk1agU4DQLrAAABFAAAAAxyc2Etc2hhMi01MTIAAAEA7/GoZsJqrq4xYotsRbpM8arZDjCzT6kohXeD/GVy26s5E/YWXRYCrOMIzSZxjuN5rAaNRW8ffxq14JyI94566Kg2OeoxQ6rK/dTqkk7I1RyypSXunT3I4++RPs1Q+hu9eS/WBzur0/D3dMejhuc3IBg6iB0481I4pGBGcD8/KjQFfhlCuGVXwB1ALk2zfXFT1HYYrs6bYZuQqjgvArnjYJ0do3fTSDC20/ydV4BHnI3fVAY2THVjX45V2ppPadl/rpczaJqW1ZtpnpJkV8Un316stQSD0xLHUDjp89O6d9Yq5S0kDdfwTRJIPm9f2cGNakJwN5qzmmmdDroRKODYcg== RSA test key #1
diff --git a/regress/unittests/sshkey/testdata/rsa_1_sha512.pub b/regress/unittests/sshkey/testdata/rsa_1_sha512.pub
new file mode 100644
index 000000000..23ef872e0
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/rsa_1_sha512.pub
@@ -0,0 +1 @@
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDLV5lUTt7FrADseB/CGhEZzpoojjEW5y8+ePvLppmK3MmMI18ud6vxzpK3bwZLYkVSyfJYI0HmIuGhdu7yMrW6wb84gbq8C31Xoe9EORcIUuGSvDKdNSM1SjlhDquRblDFB8kToqXyx1lqrXecXylxIUOL0jE+u0rU1967pDJx+w== RSA test key #1
diff --git a/regress/unittests/test_helper/fuzz.c b/regress/unittests/test_helper/fuzz.c
index 99f1d036c..78b36654d 100644
--- a/regress/unittests/test_helper/fuzz.c
+++ b/regress/unittests/test_helper/fuzz.c
@@ -196,7 +196,6 @@ fuzz_dump(struct fuzz *fuzz)
196 dump(fuzz_ptr(fuzz), fuzz_len(fuzz)); 196 dump(fuzz_ptr(fuzz), fuzz_len(fuzz));
197} 197}
198 198
199#ifdef SIGINFO
200static struct fuzz *last_fuzz; 199static struct fuzz *last_fuzz;
201 200
202static void 201static void
@@ -211,7 +210,6 @@ siginfo(int unused __attribute__((__unused__)))
211 atomicio(vwrite, STDERR_FILENO, buf, strlen(buf)); 210 atomicio(vwrite, STDERR_FILENO, buf, strlen(buf));
212 } 211 }
213} 212}
214#endif
215 213
216struct fuzz * 214struct fuzz *
217fuzz_begin(u_int strategies, const void *p, size_t l) 215fuzz_begin(u_int strategies, const void *p, size_t l)
@@ -233,10 +231,11 @@ fuzz_begin(u_int strategies, const void *p, size_t l)
233 231
234 fuzz_next(ret); 232 fuzz_next(ret);
235 233
236#ifdef SIGINFO
237 last_fuzz = ret; 234 last_fuzz = ret;
235#ifdef SIGINFO
238 signal(SIGINFO, siginfo); 236 signal(SIGINFO, siginfo);
239#endif 237#endif
238 signal(SIGUSR1, siginfo);
240 239
241 return ret; 240 return ret;
242} 241}
@@ -245,10 +244,11 @@ void
245fuzz_cleanup(struct fuzz *fuzz) 244fuzz_cleanup(struct fuzz *fuzz)
246{ 245{
247 FUZZ_DBG(("cleanup, fuzz = %p", fuzz)); 246 FUZZ_DBG(("cleanup, fuzz = %p", fuzz));
248#ifdef SIGINFO
249 last_fuzz = NULL; 247 last_fuzz = NULL;
248#ifdef SIGINFO
250 signal(SIGINFO, SIG_DFL); 249 signal(SIGINFO, SIG_DFL);
251#endif 250#endif
251 signal(SIGUSR1, SIG_DFL);
252 assert(fuzz != NULL); 252 assert(fuzz != NULL);
253 assert(fuzz->seed != NULL); 253 assert(fuzz->seed != NULL);
254 assert(fuzz->fuzzed != NULL); 254 assert(fuzz->fuzzed != NULL);
diff --git a/regress/unittests/test_helper/test_helper.c b/regress/unittests/test_helper/test_helper.c
index 866f3495d..4cc70852c 100644
--- a/regress/unittests/test_helper/test_helper.c
+++ b/regress/unittests/test_helper/test_helper.c
@@ -203,7 +203,6 @@ test_info(char *s, size_t len)
203 *subtest_info != '\0' ? " - " : "", subtest_info); 203 *subtest_info != '\0' ? " - " : "", subtest_info);
204} 204}
205 205
206#ifdef SIGINFO
207static void 206static void
208siginfo(int unused __attribute__((__unused__))) 207siginfo(int unused __attribute__((__unused__)))
209{ 208{
@@ -212,7 +211,6 @@ siginfo(int unused __attribute__((__unused__)))
212 test_info(buf, sizeof(buf)); 211 test_info(buf, sizeof(buf));
213 atomicio(vwrite, STDERR_FILENO, buf, strlen(buf)); 212 atomicio(vwrite, STDERR_FILENO, buf, strlen(buf));
214} 213}
215#endif
216 214
217void 215void
218test_start(const char *n) 216test_start(const char *n)
@@ -226,6 +224,7 @@ test_start(const char *n)
226#ifdef SIGINFO 224#ifdef SIGINFO
227 signal(SIGINFO, siginfo); 225 signal(SIGINFO, siginfo);
228#endif 226#endif
227 signal(SIGUSR1, siginfo);
229} 228}
230 229
231void 230void