summaryrefslogtreecommitdiff
path: root/regress
diff options
context:
space:
mode:
authordjm@openbsd.org <djm@openbsd.org>2020-06-19 03:48:49 +0000
committerDarren Tucker <dtucker@dtucker.net>2020-06-19 15:58:10 +1000
commite95c0a0e964827722d29b4bc00d5c0ff4afe0ed2 (patch)
tree81abb88f5c16468515ad78a2f842fbc4715c3993 /regress
parent7775819c6de3e9547ac57b87c7dd2bfd28cefcc5 (diff)
upstream: basic unit test for FIDO kep parsing
OpenBSD-Regress-ID: 8089b88393dd916d7c95422b442a6fd4cfe00c82
Diffstat (limited to 'regress')
-rwxr-xr-xregress/unittests/sshkey/mktestdata.sh53
-rw-r--r--regress/unittests/sshkey/test_file.c131
-rw-r--r--regress/unittests/sshkey/testdata/ecdsa_sk113
-rw-r--r--regress/unittests/sshkey/testdata/ecdsa_sk1-cert.fp1
-rw-r--r--regress/unittests/sshkey/testdata/ecdsa_sk1-cert.pub1
-rw-r--r--regress/unittests/sshkey/testdata/ecdsa_sk1.fp1
-rw-r--r--regress/unittests/sshkey/testdata/ecdsa_sk1.fp.bb1
-rw-r--r--regress/unittests/sshkey/testdata/ecdsa_sk1.pub1
-rw-r--r--regress/unittests/sshkey/testdata/ecdsa_sk1_pw14
-rw-r--r--regress/unittests/sshkey/testdata/ecdsa_sk213
-rw-r--r--regress/unittests/sshkey/testdata/ecdsa_sk2.fp1
-rw-r--r--regress/unittests/sshkey/testdata/ecdsa_sk2.fp.bb1
-rw-r--r--regress/unittests/sshkey/testdata/ecdsa_sk2.pub1
-rw-r--r--regress/unittests/sshkey/testdata/ed25519_sk18
-rw-r--r--regress/unittests/sshkey/testdata/ed25519_sk1-cert.fp1
-rw-r--r--regress/unittests/sshkey/testdata/ed25519_sk1-cert.pub1
-rw-r--r--regress/unittests/sshkey/testdata/ed25519_sk1.fp1
-rw-r--r--regress/unittests/sshkey/testdata/ed25519_sk1.fp.bb1
-rw-r--r--regress/unittests/sshkey/testdata/ed25519_sk1.pub1
-rw-r--r--regress/unittests/sshkey/testdata/ed25519_sk1_pw9
-rw-r--r--regress/unittests/sshkey/testdata/ed25519_sk28
-rw-r--r--regress/unittests/sshkey/testdata/ed25519_sk2.fp1
-rw-r--r--regress/unittests/sshkey/testdata/ed25519_sk2.fp.bb1
-rw-r--r--regress/unittests/sshkey/testdata/ed25519_sk2.pub1
24 files changed, 258 insertions, 7 deletions
diff --git a/regress/unittests/sshkey/mktestdata.sh b/regress/unittests/sshkey/mktestdata.sh
index 8efe6dd03..fcd78e990 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.10 2020/05/01 04:03:14 djm Exp $ 2# $OpenBSD: mktestdata.sh,v 1.11 2020/06/19 03:48:49 djm Exp $
3 3
4PW=mekmitasdigoat 4PW=mekmitasdigoat
5 5
@@ -70,6 +70,15 @@ set -ex
70 70
71cd testdata 71cd testdata
72 72
73if [ -f ../../../misc/sk-dummy/sk-dummy.so ] ; then
74 SK_DUMMY=../../../misc/sk-dummy/sk-dummy.so
75elif [ -f ../../../misc/sk-dummy/obj/sk-dummy.so ] ; then
76 SK_DUMMY=../../../misc/sk-dummy/obj/sk-dummy.so
77else
78 echo "Can't find sk-dummy.so" 1>&2
79 exit 1
80fi
81
73rm -f rsa_1 dsa_1 ecdsa_1 ed25519_1 82rm -f rsa_1 dsa_1 ecdsa_1 ed25519_1
74rm -f rsa_2 dsa_2 ecdsa_2 ed25519_2 83rm -f rsa_2 dsa_2 ecdsa_2 ed25519_2
75rm -f rsa_n dsa_n ecdsa_n # new-format keys 84rm -f rsa_n dsa_n ecdsa_n # new-format keys
@@ -81,11 +90,20 @@ ssh-keygen -t rsa -b 1024 -C "RSA test key #1" -N "" -f rsa_1 -m PEM
81ssh-keygen -t dsa -b 1024 -C "DSA test key #1" -N "" -f dsa_1 -m PEM 90ssh-keygen -t dsa -b 1024 -C "DSA test key #1" -N "" -f dsa_1 -m PEM
82ssh-keygen -t ecdsa -b 256 -C "ECDSA test key #1" -N "" -f ecdsa_1 -m PEM 91ssh-keygen -t ecdsa -b 256 -C "ECDSA test key #1" -N "" -f ecdsa_1 -m PEM
83ssh-keygen -t ed25519 -C "ED25519 test key #1" -N "" -f ed25519_1 92ssh-keygen -t ed25519 -C "ED25519 test key #1" -N "" -f ed25519_1
93ssh-keygen -w "$SK_DUMMY" -t ecdsa-sk -C "ECDSA-SK test key #1" \
94 -N "" -f ecdsa_sk1
95ssh-keygen -w "$SK_DUMMY" -t ed25519-sk -C "ED25519-SK test key #1" \
96 -N "" -f ed25519_sk1
97
84 98
85ssh-keygen -t rsa -b 2048 -C "RSA test key #2" -N "" -f rsa_2 -m PEM 99ssh-keygen -t rsa -b 2048 -C "RSA test key #2" -N "" -f rsa_2 -m PEM
86ssh-keygen -t dsa -b 1024 -C "DSA test key #2" -N "" -f dsa_2 -m PEM 100ssh-keygen -t dsa -b 1024 -C "DSA test key #2" -N "" -f dsa_2 -m PEM
87ssh-keygen -t ecdsa -b 521 -C "ECDSA test key #2" -N "" -f ecdsa_2 -m PEM 101ssh-keygen -t ecdsa -b 521 -C "ECDSA test key #2" -N "" -f ecdsa_2 -m PEM
88ssh-keygen -t ed25519 -C "ED25519 test key #1" -N "" -f ed25519_2 102ssh-keygen -t ed25519 -C "ED25519 test key #2" -N "" -f ed25519_2
103ssh-keygen -w "$SK_DUMMY" -t ecdsa-sk -C "ECDSA-SK test key #2" \
104 -N "" -f ecdsa_sk2
105ssh-keygen -w "$SK_DUMMY" -t ed25519-sk -C "ED25519-SK test key #2" \
106 -N "" -f ed25519_sk2
89 107
90cp rsa_1 rsa_n 108cp rsa_1 rsa_n
91cp dsa_1 dsa_n 109cp dsa_1 dsa_n
@@ -99,6 +117,8 @@ cp rsa_1 rsa_1_pw
99cp dsa_1 dsa_1_pw 117cp dsa_1 dsa_1_pw
100cp ecdsa_1 ecdsa_1_pw 118cp ecdsa_1 ecdsa_1_pw
101cp ed25519_1 ed25519_1_pw 119cp ed25519_1 ed25519_1_pw
120cp ecdsa_sk1 ecdsa_sk1_pw
121cp ed25519_sk1 ed25519_sk1_pw
102cp rsa_1 rsa_n_pw 122cp rsa_1 rsa_n_pw
103cp dsa_1 dsa_n_pw 123cp dsa_1 dsa_n_pw
104cp ecdsa_1 ecdsa_n_pw 124cp ecdsa_1 ecdsa_n_pw
@@ -107,6 +127,8 @@ ssh-keygen -pf rsa_1_pw -m PEM -N "$PW"
107ssh-keygen -pf dsa_1_pw -m PEM -N "$PW" 127ssh-keygen -pf dsa_1_pw -m PEM -N "$PW"
108ssh-keygen -pf ecdsa_1_pw -m PEM -N "$PW" 128ssh-keygen -pf ecdsa_1_pw -m PEM -N "$PW"
109ssh-keygen -pf ed25519_1_pw -N "$PW" 129ssh-keygen -pf ed25519_1_pw -N "$PW"
130ssh-keygen -pf ecdsa_sk1_pw -m PEM -N "$PW"
131ssh-keygen -pf ed25519_sk1_pw -N "$PW"
110ssh-keygen -pf rsa_n_pw -N "$PW" 132ssh-keygen -pf rsa_n_pw -N "$PW"
111ssh-keygen -pf dsa_n_pw -N "$PW" 133ssh-keygen -pf dsa_n_pw -N "$PW"
112ssh-keygen -pf ecdsa_n_pw -N "$PW" 134ssh-keygen -pf ecdsa_n_pw -N "$PW"
@@ -117,7 +139,7 @@ dsa_params dsa_1 dsa_1.param
117dsa_params dsa_1 dsa_1.param 139dsa_params dsa_1 dsa_1.param
118ecdsa_params ecdsa_1 ecdsa_1.param 140ecdsa_params ecdsa_1 ecdsa_1.param
119ecdsa_params ecdsa_2 ecdsa_2.param 141ecdsa_params ecdsa_2 ecdsa_2.param
120# XXX ed25519 params 142# XXX ed25519, *sk params
121 143
122ssh-keygen -s rsa_2 -I hugo -n user1,user2 \ 144ssh-keygen -s rsa_2 -I hugo -n user1,user2 \
123 -Oforce-command=/bin/ls -Ono-port-forwarding -Osource-address=10.0.0.0/8 \ 145 -Oforce-command=/bin/ls -Ono-port-forwarding -Osource-address=10.0.0.0/8 \
@@ -131,6 +153,13 @@ ssh-keygen -s rsa_2 -I hugo -n user1,user2 \
131ssh-keygen -s rsa_2 -I hugo -n user1,user2 \ 153ssh-keygen -s rsa_2 -I hugo -n user1,user2 \
132 -Oforce-command=/bin/ls -Ono-port-forwarding -Osource-address=10.0.0.0/8 \ 154 -Oforce-command=/bin/ls -Ono-port-forwarding -Osource-address=10.0.0.0/8 \
133 -V 19990101:20110101 -z 4 ed25519_1.pub 155 -V 19990101:20110101 -z 4 ed25519_1.pub
156ssh-keygen -s rsa_2 -I hugo -n user1,user2 \
157 -Oforce-command=/bin/ls -Ono-port-forwarding -Osource-address=10.0.0.0/8 \
158 -V 19990101:20110101 -z 4 ecdsa_sk1.pub
159ssh-keygen -s rsa_2 -I hugo -n user1,user2 \
160 -Oforce-command=/bin/ls -Ono-port-forwarding -Osource-address=10.0.0.0/8 \
161 -V 19990101:20110101 -z 4 ed25519_sk1.pub
162
134 163
135# Make a few RSA variant signature too. 164# Make a few RSA variant signature too.
136cp rsa_1 rsa_1_sha1 165cp rsa_1 rsa_1_sha1
@@ -152,30 +181,42 @@ ssh-keygen -s ecdsa_1 -I julius -n host1,host2 -h \
152 -V 19990101:20110101 -z 7 ecdsa_1.pub 181 -V 19990101:20110101 -z 7 ecdsa_1.pub
153ssh-keygen -s ed25519_1 -I julius -n host1,host2 -h \ 182ssh-keygen -s ed25519_1 -I julius -n host1,host2 -h \
154 -V 19990101:20110101 -z 8 ed25519_1.pub 183 -V 19990101:20110101 -z 8 ed25519_1.pub
184ssh-keygen -s ecdsa_1 -I julius -n host1,host2 -h \
185 -V 19990101:20110101 -z 7 ecdsa_sk1.pub
186ssh-keygen -s ed25519_1 -I julius -n host1,host2 -h \
187 -V 19990101:20110101 -z 8 ed25519_sk1.pub
155 188
156ssh-keygen -lf rsa_1 | awk '{print $2}' > rsa_1.fp 189ssh-keygen -lf rsa_1 | awk '{print $2}' > rsa_1.fp
157ssh-keygen -lf dsa_1 | awk '{print $2}' > dsa_1.fp 190ssh-keygen -lf dsa_1 | awk '{print $2}' > dsa_1.fp
158ssh-keygen -lf ecdsa_1 | awk '{print $2}' > ecdsa_1.fp 191ssh-keygen -lf ecdsa_1 | awk '{print $2}' > ecdsa_1.fp
159ssh-keygen -lf ed25519_1 | awk '{print $2}' > ed25519_1.fp 192ssh-keygen -lf ed25519_1 | awk '{print $2}' > ed25519_1.fp
193ssh-keygen -lf ecdsa_sk1 | awk '{print $2}' > ecdsa_sk1.fp
194ssh-keygen -lf ed25519_sk1 | awk '{print $2}' > ed25519_sk1.fp
160ssh-keygen -lf rsa_2 | awk '{print $2}' > rsa_2.fp 195ssh-keygen -lf rsa_2 | awk '{print $2}' > rsa_2.fp
161ssh-keygen -lf dsa_2 | awk '{print $2}' > dsa_2.fp 196ssh-keygen -lf dsa_2 | awk '{print $2}' > dsa_2.fp
162ssh-keygen -lf ecdsa_2 | awk '{print $2}' > ecdsa_2.fp 197ssh-keygen -lf ecdsa_2 | awk '{print $2}' > ecdsa_2.fp
163ssh-keygen -lf ed25519_2 | awk '{print $2}' > ed25519_2.fp 198ssh-keygen -lf ed25519_2 | awk '{print $2}' > ed25519_2.fp
199ssh-keygen -lf ecdsa_sk2 | awk '{print $2}' > ecdsa_sk2.fp
200ssh-keygen -lf ed25519_sk2 | awk '{print $2}' > ed25519_sk2.fp
164 201
202ssh-keygen -lf rsa_1-cert.pub | awk '{print $2}' > rsa_1-cert.fp
165ssh-keygen -lf dsa_1-cert.pub | awk '{print $2}' > dsa_1-cert.fp 203ssh-keygen -lf dsa_1-cert.pub | awk '{print $2}' > dsa_1-cert.fp
166ssh-keygen -lf ecdsa_1-cert.pub | awk '{print $2}' > ecdsa_1-cert.fp 204ssh-keygen -lf ecdsa_1-cert.pub | awk '{print $2}' > ecdsa_1-cert.fp
167ssh-keygen -lf ed25519_1-cert.pub | awk '{print $2}' > ed25519_1-cert.fp 205ssh-keygen -lf ed25519_1-cert.pub | awk '{print $2}' > ed25519_1-cert.fp
168ssh-keygen -lf rsa_1-cert.pub | awk '{print $2}' > rsa_1-cert.fp 206ssh-keygen -lf ecdsa_sk1-cert.pub | awk '{print $2}' > ecdsa_sk1-cert.fp
207ssh-keygen -lf ed25519_sk1-cert.pub | awk '{print $2}' > ed25519_sk1-cert.fp
169 208
170ssh-keygen -Bf rsa_1 | awk '{print $2}' > rsa_1.fp.bb 209ssh-keygen -Bf rsa_1 | awk '{print $2}' > rsa_1.fp.bb
171ssh-keygen -Bf dsa_1 | awk '{print $2}' > dsa_1.fp.bb 210ssh-keygen -Bf dsa_1 | awk '{print $2}' > dsa_1.fp.bb
172ssh-keygen -Bf ecdsa_1 | awk '{print $2}' > ecdsa_1.fp.bb 211ssh-keygen -Bf ecdsa_1 | awk '{print $2}' > ecdsa_1.fp.bb
173ssh-keygen -Bf ed25519_1 | awk '{print $2}' > ed25519_1.fp.bb 212ssh-keygen -Bf ed25519_1 | awk '{print $2}' > ed25519_1.fp.bb
213ssh-keygen -Bf ecdsa_sk1 | awk '{print $2}' > ecdsa_sk1.fp.bb
214ssh-keygen -Bf ed25519_sk1 | awk '{print $2}' > ed25519_sk1.fp.bb
174ssh-keygen -Bf rsa_2 | awk '{print $2}' > rsa_2.fp.bb 215ssh-keygen -Bf rsa_2 | awk '{print $2}' > rsa_2.fp.bb
175ssh-keygen -Bf dsa_2 | awk '{print $2}' > dsa_2.fp.bb 216ssh-keygen -Bf dsa_2 | awk '{print $2}' > dsa_2.fp.bb
176ssh-keygen -Bf ecdsa_2 | awk '{print $2}' > ecdsa_2.fp.bb 217ssh-keygen -Bf ecdsa_2 | awk '{print $2}' > ecdsa_2.fp.bb
177ssh-keygen -Bf ed25519_2 | awk '{print $2}' > ed25519_2.fp.bb 218ssh-keygen -Bf ed25519_2 | awk '{print $2}' > ed25519_2.fp.bb
178 219ssh-keygen -Bf ecdsa_sk2 | awk '{print $2}' > ecdsa_sk2.fp.bb
179# XXX Extend ssh-keygen to do detached signatures (better to test/fuzz against) 220ssh-keygen -Bf ed25519_sk2 | awk '{print $2}' > ed25519_sk2.fp.bb
180 221
181echo "$PW" > pw 222echo "$PW" > pw
diff --git a/regress/unittests/sshkey/test_file.c b/regress/unittests/sshkey/test_file.c
index 55627bc12..6afe3ba2b 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.8 2018/09/13 09:03:20 djm Exp $ */ 1/* $OpenBSD: test_file.c,v 1.9 2020/06/19 03:48:49 djm Exp $ */
2/* 2/*
3 * Regress test for sshkey.h key management API 3 * Regress test for sshkey.h key management API
4 * 4 *
@@ -422,6 +422,135 @@ sshkey_file_tests(void)
422 422
423 sshkey_free(k1); 423 sshkey_free(k1);
424 424
425 TEST_START("parse ECDSA-SK from private");
426 buf = load_file("ecdsa_sk1");
427 ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", &k1, NULL), 0);
428 sshbuf_free(buf);
429 ASSERT_PTR_NE(k1, NULL);
430 ASSERT_INT_EQ(k1->type, KEY_ECDSA_SK);
431 TEST_DONE();
432
433 TEST_START("parse ECDSA-SK from private w/ passphrase");
434 buf = load_file("ecdsa_sk1_pw");
435 ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf,
436 (const char *)sshbuf_ptr(pw), &k2, NULL), 0);
437 sshbuf_free(buf);
438 ASSERT_PTR_NE(k2, NULL);
439 ASSERT_INT_EQ(sshkey_equal(k1, k2), 1);
440 sshkey_free(k2);
441 TEST_DONE();
442
443 TEST_START("load ECDSA-SK from public");
444 ASSERT_INT_EQ(sshkey_load_public(test_data_file("ecdsa_sk1.pub"), &k2,
445 NULL), 0);
446 ASSERT_PTR_NE(k2, NULL);
447 ASSERT_INT_EQ(sshkey_equal(k1, k2), 1);
448 sshkey_free(k2);
449 TEST_DONE();
450
451 TEST_START("load ECDSA-SK cert");
452 ASSERT_INT_EQ(sshkey_load_cert(test_data_file("ecdsa_sk1"), &k2), 0);
453 ASSERT_PTR_NE(k2, NULL);
454 ASSERT_INT_EQ(k2->type, KEY_ECDSA_SK_CERT);
455 ASSERT_INT_EQ(sshkey_equal(k1, k2), 0);
456 ASSERT_INT_EQ(sshkey_equal_public(k1, k2), 1);
457 TEST_DONE();
458
459 TEST_START("ECDSA-SK key hex fingerprint");
460 buf = load_text_file("ecdsa_sk1.fp");
461 cp = sshkey_fingerprint(k1, SSH_DIGEST_SHA256, SSH_FP_BASE64);
462 ASSERT_PTR_NE(cp, NULL);
463 ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf));
464 sshbuf_free(buf);
465 free(cp);
466 TEST_DONE();
467
468 TEST_START("ECDSA-SK cert hex fingerprint");
469 buf = load_text_file("ecdsa_sk1-cert.fp");
470 cp = sshkey_fingerprint(k2, SSH_DIGEST_SHA256, SSH_FP_BASE64);
471 ASSERT_PTR_NE(cp, NULL);
472 ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf));
473 sshbuf_free(buf);
474 free(cp);
475 sshkey_free(k2);
476 TEST_DONE();
477
478 TEST_START("ECDSA-SK key bubblebabble fingerprint");
479 buf = load_text_file("ecdsa_sk1.fp.bb");
480 cp = sshkey_fingerprint(k1, SSH_DIGEST_SHA1, SSH_FP_BUBBLEBABBLE);
481 ASSERT_PTR_NE(cp, NULL);
482 ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf));
483 sshbuf_free(buf);
484 free(cp);
485 TEST_DONE();
486
487 sshkey_free(k1);
488
489 TEST_START("parse Ed25519-SK from private");
490 buf = load_file("ed25519_sk1");
491 ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", &k1, NULL), 0);
492 sshbuf_free(buf);
493 ASSERT_PTR_NE(k1, NULL);
494 ASSERT_INT_EQ(k1->type, KEY_ED25519_SK);
495 /* XXX check key contents */
496 TEST_DONE();
497
498 TEST_START("parse Ed25519-SK from private w/ passphrase");
499 buf = load_file("ed25519_sk1_pw");
500 ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf,
501 (const char *)sshbuf_ptr(pw), &k2, NULL), 0);
502 sshbuf_free(buf);
503 ASSERT_PTR_NE(k2, NULL);
504 ASSERT_INT_EQ(sshkey_equal(k1, k2), 1);
505 sshkey_free(k2);
506 TEST_DONE();
507
508 TEST_START("load Ed25519-SK from public");
509 ASSERT_INT_EQ(sshkey_load_public(test_data_file("ed25519_sk1.pub"),
510 &k2, NULL), 0);
511 ASSERT_PTR_NE(k2, NULL);
512 ASSERT_INT_EQ(sshkey_equal(k1, k2), 1);
513 sshkey_free(k2);
514 TEST_DONE();
515
516 TEST_START("load Ed25519-SK cert");
517 ASSERT_INT_EQ(sshkey_load_cert(test_data_file("ed25519_sk1"), &k2), 0);
518 ASSERT_PTR_NE(k2, NULL);
519 ASSERT_INT_EQ(k2->type, KEY_ED25519_SK_CERT);
520 ASSERT_INT_EQ(sshkey_equal(k1, k2), 0);
521 ASSERT_INT_EQ(sshkey_equal_public(k1, k2), 1);
522 TEST_DONE();
523
524 TEST_START("Ed25519-SK key hex fingerprint");
525 buf = load_text_file("ed25519_sk1.fp");
526 cp = sshkey_fingerprint(k1, SSH_DIGEST_SHA256, SSH_FP_BASE64);
527 ASSERT_PTR_NE(cp, NULL);
528 ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf));
529 sshbuf_free(buf);
530 free(cp);
531 TEST_DONE();
532
533 TEST_START("Ed25519-SK cert hex fingerprint");
534 buf = load_text_file("ed25519_sk1-cert.fp");
535 cp = sshkey_fingerprint(k2, SSH_DIGEST_SHA256, SSH_FP_BASE64);
536 ASSERT_PTR_NE(cp, NULL);
537 ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf));
538 sshbuf_free(buf);
539 free(cp);
540 sshkey_free(k2);
541 TEST_DONE();
542
543 TEST_START("Ed25519-SK key bubblebabble fingerprint");
544 buf = load_text_file("ed25519_sk1.fp.bb");
545 cp = sshkey_fingerprint(k1, SSH_DIGEST_SHA1, SSH_FP_BUBBLEBABBLE);
546 ASSERT_PTR_NE(cp, NULL);
547 ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf));
548 sshbuf_free(buf);
549 free(cp);
550 TEST_DONE();
551
552 sshkey_free(k1);
553
425 sshbuf_free(pw); 554 sshbuf_free(pw);
426 555
427} 556}
diff --git a/regress/unittests/sshkey/testdata/ecdsa_sk1 b/regress/unittests/sshkey/testdata/ecdsa_sk1
new file mode 100644
index 000000000..b51fb73d6
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/ecdsa_sk1
@@ -0,0 +1,13 @@
1-----BEGIN OPENSSH PRIVATE KEY-----
2b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAfwAAACJzay1lY2
3RzYS1zaGEyLW5pc3RwMjU2QG9wZW5zc2guY29tAAAACG5pc3RwMjU2AAAAQQRnVT5Cji1D
4Ge2+q2X0vATh6LYnODV+DJrshJorr5GnipW29RfuaDXs0WB6XBej9dOLazVRDjQrtV19Qg
5O6cfkFAAAABHNzaDoAAAGQuPdnP7j3Zz8AAAAic2stZWNkc2Etc2hhMi1uaXN0cDI1NkBv
6cGVuc3NoLmNvbQAAAAhuaXN0cDI1NgAAAEEEZ1U+Qo4tQxntvqtl9LwE4ei2Jzg1fgya7I
7SaK6+Rp4qVtvUX7mg17NFgelwXo/XTi2s1UQ40K7VdfUIDunH5BQAAAARzc2g6AQAAAOMt
8LS0tLUJFR0lOIEVDIFBSSVZBVEUgS0VZLS0tLS0KTUhjQ0FRRUVJRURmVFB4YzA0alN5Zk
9Z5NlhoV1pTVlpzcnU5ZFlaSVpTOWhjeVFhcDlVT29Bb0dDQ3FHU000OQpBd0VIb1VRRFFn
10QUVaMVUrUW80dFF4bnR2cXRsOUx3RTRlaTJKemcxZmd5YTdJU2FLNitScDRxVnR2VVg3bW
11cxCjdORmdlbHdYby9YVGkyczFVUTQwSzdWZGZVSUR1bkg1QlE9PQotLS0tLUVORCBFQyBQ
12UklWQVRFIEtFWS0tLS0tCgAAAAAAAAAURUNEU0EtU0sgdGVzdCBrZXkgIzEBAgMEBQ==
13-----END OPENSSH PRIVATE KEY-----
diff --git a/regress/unittests/sshkey/testdata/ecdsa_sk1-cert.fp b/regress/unittests/sshkey/testdata/ecdsa_sk1-cert.fp
new file mode 100644
index 000000000..d1921451d
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/ecdsa_sk1-cert.fp
@@ -0,0 +1 @@
SHA256:Go7HO0CVPYG+BSDSk9ZUJBKGSrtBExp6obTa9iqzIUo
diff --git a/regress/unittests/sshkey/testdata/ecdsa_sk1-cert.pub b/regress/unittests/sshkey/testdata/ecdsa_sk1-cert.pub
new file mode 100644
index 000000000..9586c61a7
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/ecdsa_sk1-cert.pub
@@ -0,0 +1 @@
sk-ecdsa-sha2-nistp256-cert-v01@openssh.com AAAAK3NrLWVjZHNhLXNoYTItbmlzdHAyNTYtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgE012YoSBE9hEC2FRzblcSx784JNo2A4g611A7I75YMMAAAAIbmlzdHAyNTYAAABBBGdVPkKOLUMZ7b6rZfS8BOHotic4NX4MmuyEmiuvkaeKlbb1F+5oNezRYHpcF6P104trNVEONCu1XX1CA7px+QUAAAAEc3NoOgAAAAAAAAAHAAAAAgAAAAZqdWxpdXMAAAASAAAABWhvc3QxAAAABWhvc3QyAAAAADaLg2AAAAAATR3h4AAAAAAAAAAAAAAAAAAAAGgAAAATZWNkc2Etc2hhMi1uaXN0cDI1NgAAAAhuaXN0cDI1NgAAAEEEAlTtPiWUHubBeCys4Xp0QF91dYARpkyqtCnzg10HRS+ZDgkMrSUvPPG+Ge8iqtnB951MBxDq9FqDFIkhQBYXDAAAAGQAAAATZWNkc2Etc2hhMi1uaXN0cDI1NgAAAEkAAAAhALY+eXRJjVGnMk38Sm5S+H5CloNq757ypsoxt+WYoadtAAAAIA42/mAhUfLij1GY7wl+OFrI+icB/t4tGiEUZmhx6Foo ECDSA-SK test key #1
diff --git a/regress/unittests/sshkey/testdata/ecdsa_sk1.fp b/regress/unittests/sshkey/testdata/ecdsa_sk1.fp
new file mode 100644
index 000000000..d1921451d
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/ecdsa_sk1.fp
@@ -0,0 +1 @@
SHA256:Go7HO0CVPYG+BSDSk9ZUJBKGSrtBExp6obTa9iqzIUo
diff --git a/regress/unittests/sshkey/testdata/ecdsa_sk1.fp.bb b/regress/unittests/sshkey/testdata/ecdsa_sk1.fp.bb
new file mode 100644
index 000000000..cb9f4dd0d
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/ecdsa_sk1.fp.bb
@@ -0,0 +1 @@
xovem-sacac-dageg-vovoc-symyz-bozal-cibiv-cyvat-vylyn-romib-hoxax
diff --git a/regress/unittests/sshkey/testdata/ecdsa_sk1.pub b/regress/unittests/sshkey/testdata/ecdsa_sk1.pub
new file mode 100644
index 000000000..c3b21e02b
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/ecdsa_sk1.pub
@@ -0,0 +1 @@
sk-ecdsa-sha2-nistp256@openssh.com AAAAInNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20AAAAIbmlzdHAyNTYAAABBBGdVPkKOLUMZ7b6rZfS8BOHotic4NX4MmuyEmiuvkaeKlbb1F+5oNezRYHpcF6P104trNVEONCu1XX1CA7px+QUAAAAEc3NoOg== ECDSA-SK test key #1
diff --git a/regress/unittests/sshkey/testdata/ecdsa_sk1_pw b/regress/unittests/sshkey/testdata/ecdsa_sk1_pw
new file mode 100644
index 000000000..4fa23a738
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/ecdsa_sk1_pw
@@ -0,0 +1,14 @@
1-----BEGIN OPENSSH PRIVATE KEY-----
2b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABB6vcJVx2
3cPc7yYRROup8VnAAAAEAAAAAEAAAB/AAAAInNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3Bl
4bnNzaC5jb20AAAAIbmlzdHAyNTYAAABBBGdVPkKOLUMZ7b6rZfS8BOHotic4NX4MmuyEmi
5uvkaeKlbb1F+5oNezRYHpcF6P104trNVEONCu1XX1CA7px+QUAAAAEc3NoOgAAAZBrvCxe
6xFz0bvzXwaPhrUHBeNCoZy/wNKDx0kxlxUPuA+lgOvy5l3lT3yxxd0qj5PQB+NTcuz8AAE
71f7aSWQNZSifox3COsBGoHV9C8i+glcxiBKheAZD+EBnRGjG8kbcaLhuYDW/I39qNe8lHW
8YSDjmvsT55Hy0IAtVRAXizDoXKNdFPTZisC67WyOSJ3ED7Fy4bfT4ApbvhoFTwjikZBEhy
9LOad1sbJa4eT19TsskYfQdnJf8sjAmCMOZY4ZV0FiNW5XZOp8nIal1oyULPfzTAm6oaeFN
100ImCSU3U8h4wUQ8q/3XvBWtTKycZaoou0AwPoP0QN95Ywte7FHezNPb/n8KD7k0S6h9XAX
11UcBeCe5NHyov/0ZzA2p737hzm3w+MXGOboTQMu8WFXeGh4m7QH2o8ZJdgBhM5JF17uii+Q
12ppGoPWHf33MXwB3wxWmKZ0ua0f9AVLkQ2DfFszUoBJE/kcHRd4kj4Q4FWXeMBN0GoH8gdE
13gRWIlxn2/FAOce/BFPzzdP87H0jwz7SdcuVO1L
14-----END OPENSSH PRIVATE KEY-----
diff --git a/regress/unittests/sshkey/testdata/ecdsa_sk2 b/regress/unittests/sshkey/testdata/ecdsa_sk2
new file mode 100644
index 000000000..19db5a3f5
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/ecdsa_sk2
@@ -0,0 +1,13 @@
1-----BEGIN OPENSSH PRIVATE KEY-----
2b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAfwAAACJzay1lY2
3RzYS1zaGEyLW5pc3RwMjU2QG9wZW5zc2guY29tAAAACG5pc3RwMjU2AAAAQQSTl+SR6rTg
4lOZmcQkCtJ3Pd+lWinezo/gHk4oZdZcTQsmEYs766BlWGuB2Bz3qQRLa6cXsP+4K9kAjAJ
57zdoFUAAAABHNzaDoAAAGQ1qllJtapZSYAAAAic2stZWNkc2Etc2hhMi1uaXN0cDI1NkBv
6cGVuc3NoLmNvbQAAAAhuaXN0cDI1NgAAAEEEk5fkkeq04JTmZnEJArSdz3fpVop3s6P4B5
7OKGXWXE0LJhGLO+ugZVhrgdgc96kES2unF7D/uCvZAIwCe83aBVAAAAARzc2g6AQAAAOMt
8LS0tLUJFR0lOIEVDIFBSSVZBVEUgS0VZLS0tLS0KTUhjQ0FRRUVJSkxwVkxnSTVvdkRlOW
9VMWmZodCs5WWlMaitnam0rTXhHTXg5NndiRWw0Wm9Bb0dDQ3FHU000OQpBd0VIb1VRRFFn
10QUVrNWZra2VxMDRKVG1abkVKQXJTZHozZnBWb3AzczZQNEI1T0tHWFdYRTBMSmhHTE8rdW
11daClZocmdkZ2M5NmtFUzJ1bkY3RC91Q3ZaQUl3Q2U4M2FCVkE9PQotLS0tLUVORCBFQyBQ
12UklWQVRFIEtFWS0tLS0tCgAAAAAAAAAURUNEU0EtU0sgdGVzdCBrZXkgIzIBAgMEBQ==
13-----END OPENSSH PRIVATE KEY-----
diff --git a/regress/unittests/sshkey/testdata/ecdsa_sk2.fp b/regress/unittests/sshkey/testdata/ecdsa_sk2.fp
new file mode 100644
index 000000000..1bc99ea0d
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/ecdsa_sk2.fp
@@ -0,0 +1 @@
SHA256:pz8VkgtRY3r50F4zSuzRlmq9c6vPTpJXLKKOgkyUcKE
diff --git a/regress/unittests/sshkey/testdata/ecdsa_sk2.fp.bb b/regress/unittests/sshkey/testdata/ecdsa_sk2.fp.bb
new file mode 100644
index 000000000..bfee7658a
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/ecdsa_sk2.fp.bb
@@ -0,0 +1 @@
xobel-gavur-gorym-pedop-rarob-bunek-gucer-lofeg-syhaf-fylur-zoxix
diff --git a/regress/unittests/sshkey/testdata/ecdsa_sk2.pub b/regress/unittests/sshkey/testdata/ecdsa_sk2.pub
new file mode 100644
index 000000000..2629d9509
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/ecdsa_sk2.pub
@@ -0,0 +1 @@
sk-ecdsa-sha2-nistp256@openssh.com AAAAInNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20AAAAIbmlzdHAyNTYAAABBBJOX5JHqtOCU5mZxCQK0nc936VaKd7Oj+AeTihl1lxNCyYRizvroGVYa4HYHPepBEtrpxew/7gr2QCMAnvN2gVQAAAAEc3NoOg== ECDSA-SK test key #2
diff --git a/regress/unittests/sshkey/testdata/ed25519_sk1 b/regress/unittests/sshkey/testdata/ed25519_sk1
new file mode 100644
index 000000000..4196d9c6a
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/ed25519_sk1
@@ -0,0 +1,8 @@
1-----BEGIN OPENSSH PRIVATE KEY-----
2b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAASgAAABpzay1zc2
3gtZWQyNTUxOUBvcGVuc3NoLmNvbQAAACAhaP5OS1PPOt7uumAvXlDtte9EHbqIT1EZEJ2y
42v3XMwAAAARzc2g6AAAAuBocY6UaHGOlAAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY2
59tAAAAICFo/k5LU8863u66YC9eUO2170QduohPURkQnbLa/dczAAAABHNzaDoBAAAAQJYq
6lGHhFoA25/q8X/rdTqDAb7dhqs4ehhd/w8x99CwiIWj+TktTzzre7rpgL15Q7bXvRB26iE
79RGRCdstr91zMAAAAAAAAAFkVEMjU1MTktU0sgdGVzdCBrZXkgIzEBAgM=
8-----END OPENSSH PRIVATE KEY-----
diff --git a/regress/unittests/sshkey/testdata/ed25519_sk1-cert.fp b/regress/unittests/sshkey/testdata/ed25519_sk1-cert.fp
new file mode 100644
index 000000000..a6bb1a99c
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/ed25519_sk1-cert.fp
@@ -0,0 +1 @@
SHA256:6WZVJ44bqhAWLVP4Ns0TDkoSQSsZo/h2K+mEvOaNFbw
diff --git a/regress/unittests/sshkey/testdata/ed25519_sk1-cert.pub b/regress/unittests/sshkey/testdata/ed25519_sk1-cert.pub
new file mode 100644
index 000000000..3c72c268d
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/ed25519_sk1-cert.pub
@@ -0,0 +1 @@
sk-ssh-ed25519-cert-v01@openssh.com AAAAI3NrLXNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIJr7CuMntQKvHoUshx374fJLFEkyxKsEOBA1H6hk5scoAAAAICFo/k5LU8863u66YC9eUO2170QduohPURkQnbLa/dczAAAABHNzaDoAAAAAAAAACAAAAAIAAAAGanVsaXVzAAAAEgAAAAVob3N0MQAAAAVob3N0MgAAAAA2i4NgAAAAAE0d4eAAAAAAAAAAAAAAAAAAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIOo/0xneV3iM2qWEo5RUwvUYa2bjff292T5vvuXRomGQAAAAUwAAAAtzc2gtZWQyNTUxOQAAAECgsRGLDh1SI3m66MRp9D2iLP4wabQ0OrDgGidk7LsVn2XZHV5jBZN1RtNfe6PBMeVzfRtGUzOg18sO7H7uU+EC ED25519-SK test key #1
diff --git a/regress/unittests/sshkey/testdata/ed25519_sk1.fp b/regress/unittests/sshkey/testdata/ed25519_sk1.fp
new file mode 100644
index 000000000..a6bb1a99c
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/ed25519_sk1.fp
@@ -0,0 +1 @@
SHA256:6WZVJ44bqhAWLVP4Ns0TDkoSQSsZo/h2K+mEvOaNFbw
diff --git a/regress/unittests/sshkey/testdata/ed25519_sk1.fp.bb b/regress/unittests/sshkey/testdata/ed25519_sk1.fp.bb
new file mode 100644
index 000000000..1bfe20a48
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/ed25519_sk1.fp.bb
@@ -0,0 +1 @@
xucac-vusip-tydoz-dudad-nerif-raran-tezun-cogyd-pamoh-bahef-ruxix
diff --git a/regress/unittests/sshkey/testdata/ed25519_sk1.pub b/regress/unittests/sshkey/testdata/ed25519_sk1.pub
new file mode 100644
index 000000000..60fe00c39
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/ed25519_sk1.pub
@@ -0,0 +1 @@
sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAICFo/k5LU8863u66YC9eUO2170QduohPURkQnbLa/dczAAAABHNzaDo= ED25519-SK test key #1
diff --git a/regress/unittests/sshkey/testdata/ed25519_sk1_pw b/regress/unittests/sshkey/testdata/ed25519_sk1_pw
new file mode 100644
index 000000000..1c29ff07f
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/ed25519_sk1_pw
@@ -0,0 +1,9 @@
1-----BEGIN OPENSSH PRIVATE KEY-----
2b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABDr5R9Yf/
3ucEh0Ns6c34tcIAAAAEAAAAAEAAABKAAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29t
4AAAAICFo/k5LU8863u66YC9eUO2170QduohPURkQnbLa/dczAAAABHNzaDoAAADA2T6owx
5OSgKz4DvLnS3UJ/renbuew5mbkIWB1/y8xd3y5Usm08iUCAlKxep9dVRQvmyoTrc/7rHOM
6DkokNw+WgKambnlYT/9QfqViZ9iCBtbdmhLM6ksUCgQefvquRyXoJxlWstjXUll6Ru+ZbT
7H//Ss8C1bYtAiXR68OQ+rhDrvQxA9P8J1sGIlkuV3h8YXddSpyBW2Sn0LTHHBXYZo86cXZ
8G4Lnc8aGYm65eqdHgkfRmht3eS8DTdzEBfBNH5Ml
9-----END OPENSSH PRIVATE KEY-----
diff --git a/regress/unittests/sshkey/testdata/ed25519_sk2 b/regress/unittests/sshkey/testdata/ed25519_sk2
new file mode 100644
index 000000000..b9b748966
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/ed25519_sk2
@@ -0,0 +1,8 @@
1-----BEGIN OPENSSH PRIVATE KEY-----
2b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAASgAAABpzay1zc2
3gtZWQyNTUxOUBvcGVuc3NoLmNvbQAAACAV8fu1Sc31QLK2R/zGPdN3ve5xuFvDc7mEAWxb
4aI+YcwAAAARzc2g6AAAAuJCMX5uQjF+bAAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY2
59tAAAAIBXx+7VJzfVAsrZH/MY903e97nG4W8NzuYQBbFtoj5hzAAAABHNzaDoBAAAAQObE
6PajcKI1W30EKOhBb6u+Fgx464kf7EjnqDSg4l7gAFfH7tUnN9UCytkf8xj3Td73ucbhbw3
7O5hAFsW2iPmHMAAAAAAAAAFkVEMjU1MTktU0sgdGVzdCBrZXkgIzIBAgM=
8-----END OPENSSH PRIVATE KEY-----
diff --git a/regress/unittests/sshkey/testdata/ed25519_sk2.fp b/regress/unittests/sshkey/testdata/ed25519_sk2.fp
new file mode 100644
index 000000000..1c4369a00
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/ed25519_sk2.fp
@@ -0,0 +1 @@
SHA256:b9BVPS5vuU4yu/FgweojLLg6zbfmBBoWLUgibdxxsoo
diff --git a/regress/unittests/sshkey/testdata/ed25519_sk2.fp.bb b/regress/unittests/sshkey/testdata/ed25519_sk2.fp.bb
new file mode 100644
index 000000000..f5fd9efd8
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/ed25519_sk2.fp.bb
@@ -0,0 +1 @@
xemac-tizim-dihep-supar-zupib-cukak-pasis-febeg-dyguv-hutec-dyxox
diff --git a/regress/unittests/sshkey/testdata/ed25519_sk2.pub b/regress/unittests/sshkey/testdata/ed25519_sk2.pub
new file mode 100644
index 000000000..c7ed9f524
--- /dev/null
+++ b/regress/unittests/sshkey/testdata/ed25519_sk2.pub
@@ -0,0 +1 @@
sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIBXx+7VJzfVAsrZH/MY903e97nG4W8NzuYQBbFtoj5hzAAAABHNzaDo= ED25519-SK test key #2