diff options
Diffstat (limited to 'regress/unittests/sshkey')
85 files changed, 1815 insertions, 0 deletions
diff --git a/regress/unittests/sshkey/Makefile b/regress/unittests/sshkey/Makefile new file mode 100644 index 000000000..1bcd26676 --- /dev/null +++ b/regress/unittests/sshkey/Makefile | |||
@@ -0,0 +1,13 @@ | |||
1 | # $OpenBSD: Makefile,v 1.1 2014/06/24 01:14:18 djm Exp $ | ||
2 | |||
3 | TEST_ENV= "MALLOC_OPTIONS=AFGJPRX" | ||
4 | |||
5 | PROG=test_sshkey | ||
6 | SRCS=tests.c test_sshkey.c test_file.c test_fuzz.c common.c | ||
7 | REGRESS_TARGETS=run-regress-${PROG} | ||
8 | |||
9 | run-regress-${PROG}: ${PROG} | ||
10 | env ${TEST_ENV} ./${PROG} -d ${.CURDIR}/testdata | ||
11 | |||
12 | .include <bsd.regress.mk> | ||
13 | |||
diff --git a/regress/unittests/sshkey/common.c b/regress/unittests/sshkey/common.c new file mode 100644 index 000000000..0a4b3a90c --- /dev/null +++ b/regress/unittests/sshkey/common.c | |||
@@ -0,0 +1,84 @@ | |||
1 | /* $OpenBSD: common.c,v 1.1 2014/06/24 01:14:18 djm Exp $ */ | ||
2 | /* | ||
3 | * Helpers for key API tests | ||
4 | * | ||
5 | * Placed in the public domain | ||
6 | */ | ||
7 | |||
8 | #include "includes.h" | ||
9 | |||
10 | #include <sys/types.h> | ||
11 | #include <sys/param.h> | ||
12 | #include <sys/stat.h> | ||
13 | #include <fcntl.h> | ||
14 | #include <stdio.h> | ||
15 | #ifdef HAVE_STDINT_H | ||
16 | #include <stdint.h> | ||
17 | #endif | ||
18 | #include <stdlib.h> | ||
19 | #include <string.h> | ||
20 | #include <unistd.h> | ||
21 | |||
22 | #include <openssl/bn.h> | ||
23 | #include <openssl/rsa.h> | ||
24 | #include <openssl/dsa.h> | ||
25 | #include <openssl/objects.h> | ||
26 | #ifdef OPENSSL_HAS_NISTP256 | ||
27 | # include <openssl/ec.h> | ||
28 | #endif | ||
29 | |||
30 | #include "../test_helper/test_helper.h" | ||
31 | |||
32 | #include "ssherr.h" | ||
33 | #include "authfile.h" | ||
34 | #include "sshkey.h" | ||
35 | #include "sshbuf.h" | ||
36 | |||
37 | #include "common.h" | ||
38 | |||
39 | struct sshbuf * | ||
40 | load_file(const char *name) | ||
41 | { | ||
42 | int fd; | ||
43 | struct sshbuf *ret; | ||
44 | |||
45 | ASSERT_PTR_NE(ret = sshbuf_new(), NULL); | ||
46 | ASSERT_INT_NE(fd = open(test_data_file(name), O_RDONLY), -1); | ||
47 | ASSERT_INT_EQ(sshkey_load_file(fd, name, ret), 0); | ||
48 | close(fd); | ||
49 | return ret; | ||
50 | } | ||
51 | |||
52 | struct sshbuf * | ||
53 | load_text_file(const char *name) | ||
54 | { | ||
55 | struct sshbuf *ret = load_file(name); | ||
56 | const u_char *p; | ||
57 | |||
58 | /* Trim whitespace at EOL */ | ||
59 | for (p = sshbuf_ptr(ret); sshbuf_len(ret) > 0;) { | ||
60 | if (p[sshbuf_len(ret) - 1] == '\r' || | ||
61 | p[sshbuf_len(ret) - 1] == '\t' || | ||
62 | p[sshbuf_len(ret) - 1] == ' ' || | ||
63 | p[sshbuf_len(ret) - 1] == '\n') | ||
64 | ASSERT_INT_EQ(sshbuf_consume_end(ret, 1), 0); | ||
65 | else | ||
66 | break; | ||
67 | } | ||
68 | /* \0 terminate */ | ||
69 | ASSERT_INT_EQ(sshbuf_put_u8(ret, 0), 0); | ||
70 | return ret; | ||
71 | } | ||
72 | |||
73 | BIGNUM * | ||
74 | load_bignum(const char *name) | ||
75 | { | ||
76 | BIGNUM *ret = NULL; | ||
77 | struct sshbuf *buf; | ||
78 | |||
79 | buf = load_text_file(name); | ||
80 | ASSERT_INT_NE(BN_hex2bn(&ret, (const char *)sshbuf_ptr(buf)), 0); | ||
81 | sshbuf_free(buf); | ||
82 | return ret; | ||
83 | } | ||
84 | |||
diff --git a/regress/unittests/sshkey/common.h b/regress/unittests/sshkey/common.h new file mode 100644 index 000000000..bf7d19dce --- /dev/null +++ b/regress/unittests/sshkey/common.h | |||
@@ -0,0 +1,16 @@ | |||
1 | /* $OpenBSD: common.h,v 1.1 2014/06/24 01:14:18 djm Exp $ */ | ||
2 | /* | ||
3 | * Helpers for key API tests | ||
4 | * | ||
5 | * Placed in the public domain | ||
6 | */ | ||
7 | |||
8 | /* Load a binary file into a buffer */ | ||
9 | struct sshbuf *load_file(const char *name); | ||
10 | |||
11 | /* Load a text file into a buffer */ | ||
12 | struct sshbuf *load_text_file(const char *name); | ||
13 | |||
14 | /* Load a bignum from a file */ | ||
15 | BIGNUM *load_bignum(const char *name); | ||
16 | |||
diff --git a/regress/unittests/sshkey/mktestdata.sh b/regress/unittests/sshkey/mktestdata.sh new file mode 100755 index 000000000..ee1fe3962 --- /dev/null +++ b/regress/unittests/sshkey/mktestdata.sh | |||
@@ -0,0 +1,190 @@ | |||
1 | #!/bin/sh | ||
2 | # $OpenBSD: mktestdata.sh,v 1.3 2014/07/22 23:57:40 dtucker Exp $ | ||
3 | |||
4 | PW=mekmitasdigoat | ||
5 | |||
6 | rsa1_params() { | ||
7 | _in="$1" | ||
8 | _outbase="$2" | ||
9 | set -e | ||
10 | ssh-keygen -f $_in -e -m pkcs8 | \ | ||
11 | openssl rsa -noout -text -pubin | \ | ||
12 | awk '/^Modulus:$/,/^Exponent:/' | \ | ||
13 | grep -v '^[a-zA-Z]' | tr -d ' \n:' > ${_outbase}.n | ||
14 | # XXX need conversion support in ssh-keygen for the other params | ||
15 | for x in n ; do | ||
16 | echo "" >> ${_outbase}.$x | ||
17 | echo ============ ${_outbase}.$x | ||
18 | cat ${_outbase}.$x | ||
19 | echo ============ | ||
20 | done | ||
21 | } | ||
22 | |||
23 | rsa_params() { | ||
24 | _in="$1" | ||
25 | _outbase="$2" | ||
26 | set -e | ||
27 | openssl rsa -noout -text -in $_in | \ | ||
28 | awk '/^modulus:$/,/^publicExponent:/' | \ | ||
29 | grep -v '^[a-zA-Z]' | tr -d ' \n:' > ${_outbase}.n | ||
30 | openssl rsa -noout -text -in $_in | \ | ||
31 | awk '/^prime1:$/,/^prime2:/' | \ | ||
32 | grep -v '^[a-zA-Z]' | tr -d ' \n:' > ${_outbase}.p | ||
33 | openssl rsa -noout -text -in $_in | \ | ||
34 | awk '/^prime2:$/,/^exponent1:/' | \ | ||
35 | grep -v '^[a-zA-Z]' | tr -d ' \n:' > ${_outbase}.q | ||
36 | for x in n p q ; do | ||
37 | echo "" >> ${_outbase}.$x | ||
38 | echo ============ ${_outbase}.$x | ||
39 | cat ${_outbase}.$x | ||
40 | echo ============ | ||
41 | done | ||
42 | } | ||
43 | |||
44 | dsa_params() { | ||
45 | _in="$1" | ||
46 | _outbase="$2" | ||
47 | set -e | ||
48 | openssl dsa -noout -text -in $_in | \ | ||
49 | awk '/^priv:$/,/^pub:/' | \ | ||
50 | grep -v '^[a-zA-Z]' | tr -d ' \n:' > ${_outbase}.priv | ||
51 | openssl dsa -noout -text -in $_in | \ | ||
52 | awk '/^pub:/,/^P:/' | #\ | ||
53 | grep -v '^[a-zA-Z]' | tr -d ' \n:' > ${_outbase}.pub | ||
54 | openssl dsa -noout -text -in $_in | \ | ||
55 | awk '/^G:/,0' | \ | ||
56 | grep -v '^[a-zA-Z]' | tr -d ' \n:' > ${_outbase}.g | ||
57 | for x in priv pub g ; do | ||
58 | echo "" >> ${_outbase}.$x | ||
59 | echo ============ ${_outbase}.$x | ||
60 | cat ${_outbase}.$x | ||
61 | echo ============ | ||
62 | done | ||
63 | } | ||
64 | |||
65 | ecdsa_params() { | ||
66 | _in="$1" | ||
67 | _outbase="$2" | ||
68 | set -e | ||
69 | openssl ec -noout -text -in $_in | \ | ||
70 | awk '/^priv:$/,/^pub:/' | \ | ||
71 | grep -v '^[a-zA-Z]' | tr -d ' \n:' > ${_outbase}.priv | ||
72 | openssl ec -noout -text -in $_in | \ | ||
73 | awk '/^pub:/,/^ASN1 OID:/' | #\ | ||
74 | grep -v '^[a-zA-Z]' | tr -d ' \n:' > ${_outbase}.pub | ||
75 | openssl ec -noout -text -in $_in | \ | ||
76 | grep "ASN1 OID:" | tr -d '\n' | \ | ||
77 | sed 's/.*: //;s/ *$//' > ${_outbase}.curve | ||
78 | for x in priv pub curve ; do | ||
79 | echo "" >> ${_outbase}.$x | ||
80 | echo ============ ${_outbase}.$x | ||
81 | cat ${_outbase}.$x | ||
82 | echo ============ | ||
83 | done | ||
84 | } | ||
85 | |||
86 | set -ex | ||
87 | |||
88 | cd testdata | ||
89 | |||
90 | rm -f rsa1_1 rsa_1 dsa_1 ecdsa_1 ed25519_1 | ||
91 | rm -f rsa1_2 rsa_2 dsa_2 ecdsa_2 ed25519_2 | ||
92 | rm -f rsa_n dsa_n ecdsa_n # new-format keys | ||
93 | rm -f rsa1_1_pw rsa_1_pw dsa_1_pw ecdsa_1_pw ed25519_1_pw | ||
94 | rm -f rsa_n_pw dsa_n_pw ecdsa_n_pw | ||
95 | rm -f pw *.pub *.bn.* *.param.* *.fp *.fp.bb | ||
96 | |||
97 | ssh-keygen -t rsa1 -b 768 -C "RSA1 test key #1" -N "" -f rsa1_1 | ||
98 | ssh-keygen -t rsa -b 768 -C "RSA test key #1" -N "" -f rsa_1 | ||
99 | ssh-keygen -t dsa -b 1024 -C "DSA test key #1" -N "" -f dsa_1 | ||
100 | ssh-keygen -t ecdsa -b 256 -C "ECDSA test key #1" -N "" -f ecdsa_1 | ||
101 | ssh-keygen -t ed25519 -C "ED25519 test key #1" -N "" -f ed25519_1 | ||
102 | |||
103 | ssh-keygen -t rsa1 -b 2048 -C "RSA1 test key #2" -N "" -f rsa1_2 | ||
104 | ssh-keygen -t rsa -b 2048 -C "RSA test key #2" -N "" -f rsa_2 | ||
105 | ssh-keygen -t dsa -b 1024 -C "DSA test key #2" -N "" -f dsa_2 | ||
106 | ssh-keygen -t ecdsa -b 521 -C "ECDSA test key #2" -N "" -f ecdsa_2 | ||
107 | ssh-keygen -t ed25519 -C "ED25519 test key #1" -N "" -f ed25519_2 | ||
108 | |||
109 | cp rsa_1 rsa_n | ||
110 | cp dsa_1 dsa_n | ||
111 | cp ecdsa_1 ecdsa_n | ||
112 | |||
113 | cp rsa1_1 rsa1_1_pw | ||
114 | cp rsa_1 rsa_1_pw | ||
115 | cp dsa_1 dsa_1_pw | ||
116 | cp ecdsa_1 ecdsa_1_pw | ||
117 | cp ed25519_1 ed25519_1_pw | ||
118 | cp rsa_1 rsa_n_pw | ||
119 | cp dsa_1 dsa_n_pw | ||
120 | cp ecdsa_1 ecdsa_n_pw | ||
121 | |||
122 | ssh-keygen -pf rsa1_1_pw -N "$PW" | ||
123 | ssh-keygen -pf rsa_1_pw -N "$PW" | ||
124 | ssh-keygen -pf dsa_1_pw -N "$PW" | ||
125 | ssh-keygen -pf ecdsa_1_pw -N "$PW" | ||
126 | ssh-keygen -pf ed25519_1_pw -N "$PW" | ||
127 | ssh-keygen -opf rsa_n_pw -N "$PW" | ||
128 | ssh-keygen -opf dsa_n_pw -N "$PW" | ||
129 | ssh-keygen -opf ecdsa_n_pw -N "$PW" | ||
130 | |||
131 | rsa1_params rsa1_1 rsa1_1.param | ||
132 | rsa1_params rsa1_2 rsa1_2.param | ||
133 | rsa_params rsa_1 rsa_1.param | ||
134 | rsa_params rsa_2 rsa_2.param | ||
135 | dsa_params dsa_1 dsa_1.param | ||
136 | dsa_params dsa_1 dsa_1.param | ||
137 | ecdsa_params ecdsa_1 ecdsa_1.param | ||
138 | ecdsa_params ecdsa_2 ecdsa_2.param | ||
139 | # XXX ed25519 params | ||
140 | |||
141 | ssh-keygen -s rsa_2 -I hugo -n user1,user2 \ | ||
142 | -Oforce-command=/bin/ls -Ono-port-forwarding -Osource-address=10.0.0.0/8 \ | ||
143 | -V 19990101:20110101 -z 1 rsa_1.pub | ||
144 | ssh-keygen -s rsa_2 -I hugo -n user1,user2 \ | ||
145 | -Oforce-command=/bin/ls -Ono-port-forwarding -Osource-address=10.0.0.0/8 \ | ||
146 | -V 19990101:20110101 -z 2 dsa_1.pub | ||
147 | ssh-keygen -s rsa_2 -I hugo -n user1,user2 \ | ||
148 | -Oforce-command=/bin/ls -Ono-port-forwarding -Osource-address=10.0.0.0/8 \ | ||
149 | -V 19990101:20110101 -z 3 ecdsa_1.pub | ||
150 | ssh-keygen -s rsa_2 -I hugo -n user1,user2 \ | ||
151 | -Oforce-command=/bin/ls -Ono-port-forwarding -Osource-address=10.0.0.0/8 \ | ||
152 | -V 19990101:20110101 -z 4 ed25519_1.pub | ||
153 | |||
154 | ssh-keygen -s ed25519_1 -I julius -n host1,host2 -h \ | ||
155 | -V 19990101:20110101 -z 5 rsa_1.pub | ||
156 | ssh-keygen -s ed25519_1 -I julius -n host1,host2 -h \ | ||
157 | -V 19990101:20110101 -z 6 dsa_1.pub | ||
158 | ssh-keygen -s ecdsa_1 -I julius -n host1,host2 -h \ | ||
159 | -V 19990101:20110101 -z 7 ecdsa_1.pub | ||
160 | ssh-keygen -s ed25519_1 -I julius -n host1,host2 -h \ | ||
161 | -V 19990101:20110101 -z 8 ed25519_1.pub | ||
162 | |||
163 | ssh-keygen -lf rsa1_1 | awk '{print $2}' > rsa1_1.fp | ||
164 | ssh-keygen -lf rsa_1 | awk '{print $2}' > rsa_1.fp | ||
165 | ssh-keygen -lf dsa_1 | awk '{print $2}' > dsa_1.fp | ||
166 | ssh-keygen -lf ecdsa_1 | awk '{print $2}' > ecdsa_1.fp | ||
167 | ssh-keygen -lf ed25519_1 | awk '{print $2}' > ed25519_1.fp | ||
168 | ssh-keygen -lf rsa1_2 | awk '{print $2}' > rsa1_2.fp | ||
169 | ssh-keygen -lf rsa_2 | awk '{print $2}' > rsa_2.fp | ||
170 | ssh-keygen -lf dsa_2 | awk '{print $2}' > dsa_2.fp | ||
171 | ssh-keygen -lf ecdsa_2 | awk '{print $2}' > ecdsa_2.fp | ||
172 | ssh-keygen -lf ed25519_2 | awk '{print $2}' > ed25519_2.fp | ||
173 | |||
174 | ssh-keygen -lf dsa_1-cert.pub | awk '{print $2}' > dsa_1-cert.fp | ||
175 | ssh-keygen -lf ecdsa_1-cert.pub | awk '{print $2}' > ecdsa_1-cert.fp | ||
176 | ssh-keygen -lf ed25519_1-cert.pub | awk '{print $2}' > ed25519_1-cert.fp | ||
177 | ssh-keygen -lf rsa_1-cert.pub | awk '{print $2}' > rsa_1-cert.fp | ||
178 | |||
179 | ssh-keygen -Bf rsa1_1 | awk '{print $2}' > rsa1_1.fp.bb | ||
180 | ssh-keygen -Bf rsa_1 | awk '{print $2}' > rsa_1.fp.bb | ||
181 | ssh-keygen -Bf dsa_1 | awk '{print $2}' > dsa_1.fp.bb | ||
182 | ssh-keygen -Bf ecdsa_1 | awk '{print $2}' > ecdsa_1.fp.bb | ||
183 | ssh-keygen -Bf ed25519_1 | awk '{print $2}' > ed25519_1.fp.bb | ||
184 | ssh-keygen -Bf rsa1_2 | awk '{print $2}' > rsa1_2.fp.bb | ||
185 | ssh-keygen -Bf rsa_2 | awk '{print $2}' > rsa_2.fp.bb | ||
186 | ssh-keygen -Bf dsa_2 | awk '{print $2}' > dsa_2.fp.bb | ||
187 | ssh-keygen -Bf ecdsa_2 | awk '{print $2}' > ecdsa_2.fp.bb | ||
188 | ssh-keygen -Bf ed25519_2 | awk '{print $2}' > ed25519_2.fp.bb | ||
189 | |||
190 | echo "$PW" > pw | ||
diff --git a/regress/unittests/sshkey/test_file.c b/regress/unittests/sshkey/test_file.c new file mode 100644 index 000000000..764f7fb76 --- /dev/null +++ b/regress/unittests/sshkey/test_file.c | |||
@@ -0,0 +1,457 @@ | |||
1 | /* $OpenBSD: test_file.c,v 1.1 2014/06/24 01:14:18 djm Exp $ */ | ||
2 | /* | ||
3 | * Regress test for sshkey.h key management API | ||
4 | * | ||
5 | * Placed in the public domain | ||
6 | */ | ||
7 | |||
8 | #include "includes.h" | ||
9 | |||
10 | #include <sys/types.h> | ||
11 | #include <sys/param.h> | ||
12 | #include <sys/stat.h> | ||
13 | #include <fcntl.h> | ||
14 | #include <stdio.h> | ||
15 | #ifdef HAVE_STDINT_H | ||
16 | #include <stdint.h> | ||
17 | #endif | ||
18 | #include <stdlib.h> | ||
19 | #include <string.h> | ||
20 | #include <unistd.h> | ||
21 | |||
22 | #include <openssl/bn.h> | ||
23 | #include <openssl/rsa.h> | ||
24 | #include <openssl/dsa.h> | ||
25 | #include <openssl/objects.h> | ||
26 | #ifdef OPENSSL_HAS_NISTP256 | ||
27 | # include <openssl/ec.h> | ||
28 | #endif | ||
29 | |||
30 | #include "../test_helper/test_helper.h" | ||
31 | |||
32 | #include "ssherr.h" | ||
33 | #include "authfile.h" | ||
34 | #include "sshkey.h" | ||
35 | #include "sshbuf.h" | ||
36 | |||
37 | #include "common.h" | ||
38 | |||
39 | void sshkey_file_tests(void); | ||
40 | |||
41 | void | ||
42 | sshkey_file_tests(void) | ||
43 | { | ||
44 | struct sshkey *k1, *k2; | ||
45 | struct sshbuf *buf, *pw; | ||
46 | BIGNUM *a, *b, *c; | ||
47 | char *cp; | ||
48 | |||
49 | TEST_START("load passphrase"); | ||
50 | pw = load_text_file("pw"); | ||
51 | TEST_DONE(); | ||
52 | |||
53 | TEST_START("parse RSA1 from private"); | ||
54 | buf = load_file("rsa1_1"); | ||
55 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", "rsa1_1", | ||
56 | &k1, NULL), 0); | ||
57 | sshbuf_free(buf); | ||
58 | ASSERT_PTR_NE(k1, NULL); | ||
59 | a = load_bignum("rsa1_1.param.n"); | ||
60 | ASSERT_BIGNUM_EQ(k1->rsa->n, a); | ||
61 | BN_free(a); | ||
62 | TEST_DONE(); | ||
63 | |||
64 | TEST_START("parse RSA1 from private w/ passphrase"); | ||
65 | buf = load_file("rsa1_1_pw"); | ||
66 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, | ||
67 | (const char *)sshbuf_ptr(pw), "rsa1_1_pw", &k2, NULL), 0); | ||
68 | sshbuf_free(buf); | ||
69 | ASSERT_PTR_NE(k2, NULL); | ||
70 | ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); | ||
71 | sshkey_free(k2); | ||
72 | TEST_DONE(); | ||
73 | |||
74 | TEST_START("load RSA1 from public"); | ||
75 | ASSERT_INT_EQ(sshkey_load_public(test_data_file("rsa1_1.pub"), &k2, | ||
76 | NULL), 0); | ||
77 | ASSERT_PTR_NE(k2, NULL); | ||
78 | ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); | ||
79 | sshkey_free(k2); | ||
80 | TEST_DONE(); | ||
81 | |||
82 | TEST_START("RSA1 key hex fingerprint"); | ||
83 | buf = load_text_file("rsa1_1.fp"); | ||
84 | cp = sshkey_fingerprint(k1, SSH_FP_MD5, SSH_FP_HEX); | ||
85 | ASSERT_PTR_NE(cp, NULL); | ||
86 | ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); | ||
87 | sshbuf_free(buf); | ||
88 | free(cp); | ||
89 | TEST_DONE(); | ||
90 | |||
91 | TEST_START("RSA1 key bubblebabble fingerprint"); | ||
92 | buf = load_text_file("rsa1_1.fp.bb"); | ||
93 | cp = sshkey_fingerprint(k1, SSH_FP_SHA1, SSH_FP_BUBBLEBABBLE); | ||
94 | ASSERT_PTR_NE(cp, NULL); | ||
95 | ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); | ||
96 | sshbuf_free(buf); | ||
97 | free(cp); | ||
98 | TEST_DONE(); | ||
99 | |||
100 | sshkey_free(k1); | ||
101 | |||
102 | TEST_START("parse RSA from private"); | ||
103 | buf = load_file("rsa_1"); | ||
104 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", "rsa_1", | ||
105 | &k1, NULL), 0); | ||
106 | sshbuf_free(buf); | ||
107 | ASSERT_PTR_NE(k1, NULL); | ||
108 | a = load_bignum("rsa_1.param.n"); | ||
109 | b = load_bignum("rsa_1.param.p"); | ||
110 | c = load_bignum("rsa_1.param.q"); | ||
111 | ASSERT_BIGNUM_EQ(k1->rsa->n, a); | ||
112 | ASSERT_BIGNUM_EQ(k1->rsa->p, b); | ||
113 | ASSERT_BIGNUM_EQ(k1->rsa->q, c); | ||
114 | BN_free(a); | ||
115 | BN_free(b); | ||
116 | BN_free(c); | ||
117 | TEST_DONE(); | ||
118 | |||
119 | TEST_START("parse RSA from private w/ passphrase"); | ||
120 | buf = load_file("rsa_1_pw"); | ||
121 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, | ||
122 | (const char *)sshbuf_ptr(pw), "rsa_1_pw", &k2, NULL), 0); | ||
123 | sshbuf_free(buf); | ||
124 | ASSERT_PTR_NE(k2, NULL); | ||
125 | ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); | ||
126 | sshkey_free(k2); | ||
127 | TEST_DONE(); | ||
128 | |||
129 | TEST_START("parse RSA from new-format"); | ||
130 | buf = load_file("rsa_n"); | ||
131 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, | ||
132 | "", "rsa_n", &k2, NULL), 0); | ||
133 | sshbuf_free(buf); | ||
134 | ASSERT_PTR_NE(k2, NULL); | ||
135 | ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); | ||
136 | sshkey_free(k2); | ||
137 | TEST_DONE(); | ||
138 | |||
139 | TEST_START("parse RSA from new-format w/ passphrase"); | ||
140 | buf = load_file("rsa_n_pw"); | ||
141 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, | ||
142 | (const char *)sshbuf_ptr(pw), "rsa_n_pw", &k2, NULL), 0); | ||
143 | sshbuf_free(buf); | ||
144 | ASSERT_PTR_NE(k2, NULL); | ||
145 | ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); | ||
146 | sshkey_free(k2); | ||
147 | TEST_DONE(); | ||
148 | |||
149 | TEST_START("load RSA from public"); | ||
150 | ASSERT_INT_EQ(sshkey_load_public(test_data_file("rsa_1.pub"), &k2, | ||
151 | NULL), 0); | ||
152 | ASSERT_PTR_NE(k2, NULL); | ||
153 | ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); | ||
154 | sshkey_free(k2); | ||
155 | TEST_DONE(); | ||
156 | |||
157 | TEST_START("load RSA cert"); | ||
158 | ASSERT_INT_EQ(sshkey_load_cert(test_data_file("rsa_1"), &k2), 0); | ||
159 | ASSERT_PTR_NE(k2, NULL); | ||
160 | ASSERT_INT_EQ(k2->type, KEY_RSA_CERT); | ||
161 | ASSERT_INT_EQ(sshkey_equal(k1, k2), 0); | ||
162 | ASSERT_INT_EQ(sshkey_equal_public(k1, k2), 1); | ||
163 | TEST_DONE(); | ||
164 | |||
165 | TEST_START("RSA key hex fingerprint"); | ||
166 | buf = load_text_file("rsa_1.fp"); | ||
167 | cp = sshkey_fingerprint(k1, SSH_FP_MD5, SSH_FP_HEX); | ||
168 | ASSERT_PTR_NE(cp, NULL); | ||
169 | ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); | ||
170 | sshbuf_free(buf); | ||
171 | free(cp); | ||
172 | TEST_DONE(); | ||
173 | |||
174 | TEST_START("RSA cert hex fingerprint"); | ||
175 | buf = load_text_file("rsa_1-cert.fp"); | ||
176 | cp = sshkey_fingerprint(k2, SSH_FP_MD5, SSH_FP_HEX); | ||
177 | ASSERT_PTR_NE(cp, NULL); | ||
178 | ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); | ||
179 | sshbuf_free(buf); | ||
180 | free(cp); | ||
181 | sshkey_free(k2); | ||
182 | TEST_DONE(); | ||
183 | |||
184 | TEST_START("RSA key bubblebabble fingerprint"); | ||
185 | buf = load_text_file("rsa_1.fp.bb"); | ||
186 | cp = sshkey_fingerprint(k1, SSH_FP_SHA1, SSH_FP_BUBBLEBABBLE); | ||
187 | ASSERT_PTR_NE(cp, NULL); | ||
188 | ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); | ||
189 | sshbuf_free(buf); | ||
190 | free(cp); | ||
191 | TEST_DONE(); | ||
192 | |||
193 | sshkey_free(k1); | ||
194 | |||
195 | TEST_START("parse DSA from private"); | ||
196 | buf = load_file("dsa_1"); | ||
197 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", "dsa_1", | ||
198 | &k1, NULL), 0); | ||
199 | sshbuf_free(buf); | ||
200 | ASSERT_PTR_NE(k1, NULL); | ||
201 | a = load_bignum("dsa_1.param.g"); | ||
202 | b = load_bignum("dsa_1.param.priv"); | ||
203 | c = load_bignum("dsa_1.param.pub"); | ||
204 | ASSERT_BIGNUM_EQ(k1->dsa->g, a); | ||
205 | ASSERT_BIGNUM_EQ(k1->dsa->priv_key, b); | ||
206 | ASSERT_BIGNUM_EQ(k1->dsa->pub_key, c); | ||
207 | BN_free(a); | ||
208 | BN_free(b); | ||
209 | BN_free(c); | ||
210 | TEST_DONE(); | ||
211 | |||
212 | TEST_START("parse DSA from private w/ passphrase"); | ||
213 | buf = load_file("dsa_1_pw"); | ||
214 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, | ||
215 | (const char *)sshbuf_ptr(pw), "dsa_1_pw", &k2, NULL), 0); | ||
216 | sshbuf_free(buf); | ||
217 | ASSERT_PTR_NE(k2, NULL); | ||
218 | ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); | ||
219 | sshkey_free(k2); | ||
220 | TEST_DONE(); | ||
221 | |||
222 | TEST_START("parse DSA from new-format"); | ||
223 | buf = load_file("dsa_n"); | ||
224 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, | ||
225 | "", "dsa_n", &k2, NULL), 0); | ||
226 | sshbuf_free(buf); | ||
227 | ASSERT_PTR_NE(k2, NULL); | ||
228 | ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); | ||
229 | sshkey_free(k2); | ||
230 | TEST_DONE(); | ||
231 | |||
232 | TEST_START("parse DSA from new-format w/ passphrase"); | ||
233 | buf = load_file("dsa_n_pw"); | ||
234 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, | ||
235 | (const char *)sshbuf_ptr(pw), "dsa_n_pw", &k2, NULL), 0); | ||
236 | sshbuf_free(buf); | ||
237 | ASSERT_PTR_NE(k2, NULL); | ||
238 | ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); | ||
239 | sshkey_free(k2); | ||
240 | TEST_DONE(); | ||
241 | |||
242 | TEST_START("load DSA from public"); | ||
243 | ASSERT_INT_EQ(sshkey_load_public(test_data_file("dsa_1.pub"), &k2, | ||
244 | NULL), 0); | ||
245 | ASSERT_PTR_NE(k2, NULL); | ||
246 | ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); | ||
247 | sshkey_free(k2); | ||
248 | TEST_DONE(); | ||
249 | |||
250 | TEST_START("load DSA cert"); | ||
251 | ASSERT_INT_EQ(sshkey_load_cert(test_data_file("dsa_1"), &k2), 0); | ||
252 | ASSERT_PTR_NE(k2, NULL); | ||
253 | ASSERT_INT_EQ(k2->type, KEY_DSA_CERT); | ||
254 | ASSERT_INT_EQ(sshkey_equal(k1, k2), 0); | ||
255 | ASSERT_INT_EQ(sshkey_equal_public(k1, k2), 1); | ||
256 | TEST_DONE(); | ||
257 | |||
258 | TEST_START("DSA key hex fingerprint"); | ||
259 | buf = load_text_file("dsa_1.fp"); | ||
260 | cp = sshkey_fingerprint(k1, SSH_FP_MD5, SSH_FP_HEX); | ||
261 | ASSERT_PTR_NE(cp, NULL); | ||
262 | ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); | ||
263 | sshbuf_free(buf); | ||
264 | free(cp); | ||
265 | TEST_DONE(); | ||
266 | |||
267 | TEST_START("DSA cert hex fingerprint"); | ||
268 | buf = load_text_file("dsa_1-cert.fp"); | ||
269 | cp = sshkey_fingerprint(k2, SSH_FP_MD5, SSH_FP_HEX); | ||
270 | ASSERT_PTR_NE(cp, NULL); | ||
271 | ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); | ||
272 | sshbuf_free(buf); | ||
273 | free(cp); | ||
274 | sshkey_free(k2); | ||
275 | TEST_DONE(); | ||
276 | |||
277 | TEST_START("DSA key bubblebabble fingerprint"); | ||
278 | buf = load_text_file("dsa_1.fp.bb"); | ||
279 | cp = sshkey_fingerprint(k1, SSH_FP_SHA1, SSH_FP_BUBBLEBABBLE); | ||
280 | ASSERT_PTR_NE(cp, NULL); | ||
281 | ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); | ||
282 | sshbuf_free(buf); | ||
283 | free(cp); | ||
284 | TEST_DONE(); | ||
285 | |||
286 | sshkey_free(k1); | ||
287 | |||
288 | #ifdef OPENSSL_HAS_ECC | ||
289 | TEST_START("parse ECDSA from private"); | ||
290 | buf = load_file("ecdsa_1"); | ||
291 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", "ecdsa_1", | ||
292 | &k1, NULL), 0); | ||
293 | sshbuf_free(buf); | ||
294 | ASSERT_PTR_NE(k1, NULL); | ||
295 | buf = load_text_file("ecdsa_1.param.curve"); | ||
296 | ASSERT_STRING_EQ((const char *)sshbuf_ptr(buf), | ||
297 | OBJ_nid2sn(k1->ecdsa_nid)); | ||
298 | sshbuf_free(buf); | ||
299 | a = load_bignum("ecdsa_1.param.priv"); | ||
300 | b = load_bignum("ecdsa_1.param.pub"); | ||
301 | c = EC_POINT_point2bn(EC_KEY_get0_group(k1->ecdsa), | ||
302 | EC_KEY_get0_public_key(k1->ecdsa), POINT_CONVERSION_UNCOMPRESSED, | ||
303 | NULL, NULL); | ||
304 | ASSERT_PTR_NE(c, NULL); | ||
305 | ASSERT_BIGNUM_EQ(EC_KEY_get0_private_key(k1->ecdsa), a); | ||
306 | ASSERT_BIGNUM_EQ(b, c); | ||
307 | BN_free(a); | ||
308 | BN_free(b); | ||
309 | BN_free(c); | ||
310 | TEST_DONE(); | ||
311 | |||
312 | TEST_START("parse ECDSA from private w/ passphrase"); | ||
313 | buf = load_file("ecdsa_1_pw"); | ||
314 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, | ||
315 | (const char *)sshbuf_ptr(pw), "ecdsa_1_pw", &k2, NULL), 0); | ||
316 | sshbuf_free(buf); | ||
317 | ASSERT_PTR_NE(k2, NULL); | ||
318 | ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); | ||
319 | sshkey_free(k2); | ||
320 | TEST_DONE(); | ||
321 | |||
322 | TEST_START("parse ECDSA from new-format"); | ||
323 | buf = load_file("ecdsa_n"); | ||
324 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, | ||
325 | "", "ecdsa_n", &k2, NULL), 0); | ||
326 | sshbuf_free(buf); | ||
327 | ASSERT_PTR_NE(k2, NULL); | ||
328 | ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); | ||
329 | sshkey_free(k2); | ||
330 | TEST_DONE(); | ||
331 | |||
332 | TEST_START("parse ECDSA from new-format w/ passphrase"); | ||
333 | buf = load_file("ecdsa_n_pw"); | ||
334 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, | ||
335 | (const char *)sshbuf_ptr(pw), "ecdsa_n_pw", &k2, NULL), 0); | ||
336 | sshbuf_free(buf); | ||
337 | ASSERT_PTR_NE(k2, NULL); | ||
338 | ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); | ||
339 | sshkey_free(k2); | ||
340 | TEST_DONE(); | ||
341 | |||
342 | TEST_START("load ECDSA from public"); | ||
343 | ASSERT_INT_EQ(sshkey_load_public(test_data_file("ecdsa_1.pub"), &k2, | ||
344 | NULL), 0); | ||
345 | ASSERT_PTR_NE(k2, NULL); | ||
346 | ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); | ||
347 | sshkey_free(k2); | ||
348 | TEST_DONE(); | ||
349 | |||
350 | TEST_START("load ECDSA cert"); | ||
351 | ASSERT_INT_EQ(sshkey_load_cert(test_data_file("ecdsa_1"), &k2), 0); | ||
352 | ASSERT_PTR_NE(k2, NULL); | ||
353 | ASSERT_INT_EQ(k2->type, KEY_ECDSA_CERT); | ||
354 | ASSERT_INT_EQ(sshkey_equal(k1, k2), 0); | ||
355 | ASSERT_INT_EQ(sshkey_equal_public(k1, k2), 1); | ||
356 | TEST_DONE(); | ||
357 | |||
358 | TEST_START("ECDSA key hex fingerprint"); | ||
359 | buf = load_text_file("ecdsa_1.fp"); | ||
360 | cp = sshkey_fingerprint(k1, SSH_FP_MD5, SSH_FP_HEX); | ||
361 | ASSERT_PTR_NE(cp, NULL); | ||
362 | ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); | ||
363 | sshbuf_free(buf); | ||
364 | free(cp); | ||
365 | TEST_DONE(); | ||
366 | |||
367 | TEST_START("ECDSA cert hex fingerprint"); | ||
368 | buf = load_text_file("ecdsa_1-cert.fp"); | ||
369 | cp = sshkey_fingerprint(k2, SSH_FP_MD5, SSH_FP_HEX); | ||
370 | ASSERT_PTR_NE(cp, NULL); | ||
371 | ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); | ||
372 | sshbuf_free(buf); | ||
373 | free(cp); | ||
374 | sshkey_free(k2); | ||
375 | TEST_DONE(); | ||
376 | |||
377 | TEST_START("ECDSA key bubblebabble fingerprint"); | ||
378 | buf = load_text_file("ecdsa_1.fp.bb"); | ||
379 | cp = sshkey_fingerprint(k1, SSH_FP_SHA1, SSH_FP_BUBBLEBABBLE); | ||
380 | ASSERT_PTR_NE(cp, NULL); | ||
381 | ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); | ||
382 | sshbuf_free(buf); | ||
383 | free(cp); | ||
384 | TEST_DONE(); | ||
385 | |||
386 | sshkey_free(k1); | ||
387 | #endif /* OPENSSL_HAS_ECC */ | ||
388 | |||
389 | TEST_START("parse Ed25519 from private"); | ||
390 | buf = load_file("ed25519_1"); | ||
391 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", "ed25519_1", | ||
392 | &k1, NULL), 0); | ||
393 | sshbuf_free(buf); | ||
394 | ASSERT_PTR_NE(k1, NULL); | ||
395 | ASSERT_INT_EQ(k1->type, KEY_ED25519); | ||
396 | /* XXX check key contents */ | ||
397 | TEST_DONE(); | ||
398 | |||
399 | TEST_START("parse Ed25519 from private w/ passphrase"); | ||
400 | buf = load_file("ed25519_1_pw"); | ||
401 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, | ||
402 | (const char *)sshbuf_ptr(pw), "ed25519_1_pw", &k2, NULL), 0); | ||
403 | sshbuf_free(buf); | ||
404 | ASSERT_PTR_NE(k2, NULL); | ||
405 | ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); | ||
406 | sshkey_free(k2); | ||
407 | TEST_DONE(); | ||
408 | |||
409 | TEST_START("load Ed25519 from public"); | ||
410 | ASSERT_INT_EQ(sshkey_load_public(test_data_file("ed25519_1.pub"), &k2, | ||
411 | NULL), 0); | ||
412 | ASSERT_PTR_NE(k2, NULL); | ||
413 | ASSERT_INT_EQ(sshkey_equal(k1, k2), 1); | ||
414 | sshkey_free(k2); | ||
415 | TEST_DONE(); | ||
416 | |||
417 | TEST_START("load Ed25519 cert"); | ||
418 | ASSERT_INT_EQ(sshkey_load_cert(test_data_file("ed25519_1"), &k2), 0); | ||
419 | ASSERT_PTR_NE(k2, NULL); | ||
420 | ASSERT_INT_EQ(k2->type, KEY_ED25519_CERT); | ||
421 | ASSERT_INT_EQ(sshkey_equal(k1, k2), 0); | ||
422 | ASSERT_INT_EQ(sshkey_equal_public(k1, k2), 1); | ||
423 | TEST_DONE(); | ||
424 | |||
425 | TEST_START("Ed25519 key hex fingerprint"); | ||
426 | buf = load_text_file("ed25519_1.fp"); | ||
427 | cp = sshkey_fingerprint(k1, SSH_FP_MD5, SSH_FP_HEX); | ||
428 | ASSERT_PTR_NE(cp, NULL); | ||
429 | ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); | ||
430 | sshbuf_free(buf); | ||
431 | free(cp); | ||
432 | TEST_DONE(); | ||
433 | |||
434 | TEST_START("Ed25519 cert hex fingerprint"); | ||
435 | buf = load_text_file("ed25519_1-cert.fp"); | ||
436 | cp = sshkey_fingerprint(k2, SSH_FP_MD5, SSH_FP_HEX); | ||
437 | ASSERT_PTR_NE(cp, NULL); | ||
438 | ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); | ||
439 | sshbuf_free(buf); | ||
440 | free(cp); | ||
441 | sshkey_free(k2); | ||
442 | TEST_DONE(); | ||
443 | |||
444 | TEST_START("Ed25519 key bubblebabble fingerprint"); | ||
445 | buf = load_text_file("ed25519_1.fp.bb"); | ||
446 | cp = sshkey_fingerprint(k1, SSH_FP_SHA1, SSH_FP_BUBBLEBABBLE); | ||
447 | ASSERT_PTR_NE(cp, NULL); | ||
448 | ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf)); | ||
449 | sshbuf_free(buf); | ||
450 | free(cp); | ||
451 | TEST_DONE(); | ||
452 | |||
453 | sshkey_free(k1); | ||
454 | |||
455 | sshbuf_free(pw); | ||
456 | |||
457 | } | ||
diff --git a/regress/unittests/sshkey/test_fuzz.c b/regress/unittests/sshkey/test_fuzz.c new file mode 100644 index 000000000..a3f61a6df --- /dev/null +++ b/regress/unittests/sshkey/test_fuzz.c | |||
@@ -0,0 +1,406 @@ | |||
1 | /* $OpenBSD: test_fuzz.c,v 1.1 2014/06/24 01:14:18 djm Exp $ */ | ||
2 | /* | ||
3 | * Fuzz tests for key parsing | ||
4 | * | ||
5 | * Placed in the public domain | ||
6 | */ | ||
7 | |||
8 | #include "includes.h" | ||
9 | |||
10 | #include <sys/types.h> | ||
11 | #include <sys/param.h> | ||
12 | #include <sys/stat.h> | ||
13 | #include <fcntl.h> | ||
14 | #include <stdio.h> | ||
15 | #ifdef HAVE_STDINT_H | ||
16 | #include <stdint.h> | ||
17 | #endif | ||
18 | #include <stdlib.h> | ||
19 | #include <string.h> | ||
20 | #include <unistd.h> | ||
21 | |||
22 | #include <openssl/bn.h> | ||
23 | #include <openssl/rsa.h> | ||
24 | #include <openssl/dsa.h> | ||
25 | #include <openssl/objects.h> | ||
26 | #ifdef OPENSSL_HAS_NISTP256 | ||
27 | # include <openssl/ec.h> | ||
28 | #endif | ||
29 | |||
30 | #include "../test_helper/test_helper.h" | ||
31 | |||
32 | #include "ssherr.h" | ||
33 | #include "authfile.h" | ||
34 | #include "sshkey.h" | ||
35 | #include "sshbuf.h" | ||
36 | |||
37 | #include "common.h" | ||
38 | |||
39 | void sshkey_fuzz_tests(void); | ||
40 | |||
41 | static void | ||
42 | onerror(void *fuzz) | ||
43 | { | ||
44 | fprintf(stderr, "Failed during fuzz:\n"); | ||
45 | fuzz_dump((struct fuzz *)fuzz); | ||
46 | } | ||
47 | |||
48 | static void | ||
49 | public_fuzz(struct sshkey *k) | ||
50 | { | ||
51 | struct sshkey *k1; | ||
52 | struct sshbuf *buf; | ||
53 | struct fuzz *fuzz; | ||
54 | |||
55 | ASSERT_PTR_NE(buf = sshbuf_new(), NULL); | ||
56 | ASSERT_INT_EQ(sshkey_to_blob_buf(k, buf), 0); | ||
57 | /* XXX need a way to run the tests in "slow, but complete" mode */ | ||
58 | fuzz = fuzz_begin(FUZZ_1_BIT_FLIP | /* XXX too slow FUZZ_2_BIT_FLIP | */ | ||
59 | FUZZ_1_BYTE_FLIP | /* XXX too slow FUZZ_2_BYTE_FLIP | */ | ||
60 | FUZZ_TRUNCATE_START | FUZZ_TRUNCATE_END, | ||
61 | sshbuf_mutable_ptr(buf), sshbuf_len(buf)); | ||
62 | ASSERT_INT_EQ(sshkey_from_blob(sshbuf_ptr(buf), sshbuf_len(buf), | ||
63 | &k1), 0); | ||
64 | sshkey_free(k1); | ||
65 | sshbuf_free(buf); | ||
66 | TEST_ONERROR(onerror, fuzz); | ||
67 | for(; !fuzz_done(fuzz); fuzz_next(fuzz)) { | ||
68 | if (sshkey_from_blob(fuzz_ptr(fuzz), fuzz_len(fuzz), &k1) == 0) | ||
69 | sshkey_free(k1); | ||
70 | } | ||
71 | fuzz_cleanup(fuzz); | ||
72 | } | ||
73 | |||
74 | static void | ||
75 | sig_fuzz(struct sshkey *k) | ||
76 | { | ||
77 | struct fuzz *fuzz; | ||
78 | u_char *sig, c[] = "some junk to be signed"; | ||
79 | size_t l; | ||
80 | |||
81 | ASSERT_INT_EQ(sshkey_sign(k, &sig, &l, c, sizeof(c), 0), 0); | ||
82 | ASSERT_SIZE_T_GT(l, 0); | ||
83 | fuzz = fuzz_begin(FUZZ_1_BIT_FLIP | /* too slow FUZZ_2_BIT_FLIP | */ | ||
84 | FUZZ_1_BYTE_FLIP | FUZZ_2_BYTE_FLIP | | ||
85 | FUZZ_TRUNCATE_START | FUZZ_TRUNCATE_END, sig, l); | ||
86 | ASSERT_INT_EQ(sshkey_verify(k, sig, l, c, sizeof(c), 0), 0); | ||
87 | free(sig); | ||
88 | TEST_ONERROR(onerror, fuzz); | ||
89 | for(; !fuzz_done(fuzz); fuzz_next(fuzz)) { | ||
90 | sshkey_verify(k, fuzz_ptr(fuzz), fuzz_len(fuzz), | ||
91 | c, sizeof(c), 0); | ||
92 | } | ||
93 | fuzz_cleanup(fuzz); | ||
94 | } | ||
95 | |||
96 | void | ||
97 | sshkey_fuzz_tests(void) | ||
98 | { | ||
99 | struct sshkey *k1; | ||
100 | struct sshbuf *buf, *fuzzed; | ||
101 | struct fuzz *fuzz; | ||
102 | int r; | ||
103 | |||
104 | TEST_START("fuzz RSA1 private"); | ||
105 | buf = load_file("rsa1_1"); | ||
106 | fuzz = fuzz_begin(FUZZ_1_BIT_FLIP | FUZZ_1_BYTE_FLIP | | ||
107 | FUZZ_TRUNCATE_START | FUZZ_TRUNCATE_END, | ||
108 | sshbuf_mutable_ptr(buf), sshbuf_len(buf)); | ||
109 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", "key", | ||
110 | &k1, NULL), 0); | ||
111 | sshkey_free(k1); | ||
112 | sshbuf_free(buf); | ||
113 | ASSERT_PTR_NE(fuzzed = sshbuf_new(), NULL); | ||
114 | TEST_ONERROR(onerror, fuzz); | ||
115 | for(; !fuzz_done(fuzz); fuzz_next(fuzz)) { | ||
116 | r = sshbuf_put(fuzzed, fuzz_ptr(fuzz), fuzz_len(fuzz)); | ||
117 | ASSERT_INT_EQ(r, 0); | ||
118 | if (sshkey_parse_private_fileblob(fuzzed, "", "key", | ||
119 | &k1, NULL) == 0) | ||
120 | sshkey_free(k1); | ||
121 | sshbuf_reset(fuzzed); | ||
122 | } | ||
123 | sshbuf_free(fuzzed); | ||
124 | fuzz_cleanup(fuzz); | ||
125 | TEST_DONE(); | ||
126 | |||
127 | TEST_START("fuzz RSA1 public"); | ||
128 | buf = load_file("rsa1_1_pw"); | ||
129 | fuzz = fuzz_begin(FUZZ_1_BIT_FLIP | FUZZ_1_BYTE_FLIP | | ||
130 | FUZZ_TRUNCATE_START | FUZZ_TRUNCATE_END, | ||
131 | sshbuf_mutable_ptr(buf), sshbuf_len(buf)); | ||
132 | ASSERT_INT_EQ(sshkey_parse_public_rsa1_fileblob(buf, &k1, NULL), 0); | ||
133 | sshkey_free(k1); | ||
134 | sshbuf_free(buf); | ||
135 | ASSERT_PTR_NE(fuzzed = sshbuf_new(), NULL); | ||
136 | TEST_ONERROR(onerror, fuzz); | ||
137 | for(; !fuzz_done(fuzz); fuzz_next(fuzz)) { | ||
138 | r = sshbuf_put(fuzzed, fuzz_ptr(fuzz), fuzz_len(fuzz)); | ||
139 | ASSERT_INT_EQ(r, 0); | ||
140 | if (sshkey_parse_public_rsa1_fileblob(fuzzed, &k1, NULL) == 0) | ||
141 | sshkey_free(k1); | ||
142 | sshbuf_reset(fuzzed); | ||
143 | } | ||
144 | sshbuf_free(fuzzed); | ||
145 | fuzz_cleanup(fuzz); | ||
146 | TEST_DONE(); | ||
147 | |||
148 | TEST_START("fuzz RSA private"); | ||
149 | buf = load_file("rsa_1"); | ||
150 | fuzz = fuzz_begin(FUZZ_BASE64, sshbuf_mutable_ptr(buf), | ||
151 | sshbuf_len(buf)); | ||
152 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", "key", | ||
153 | &k1, NULL), 0); | ||
154 | sshkey_free(k1); | ||
155 | sshbuf_free(buf); | ||
156 | ASSERT_PTR_NE(fuzzed = sshbuf_new(), NULL); | ||
157 | TEST_ONERROR(onerror, fuzz); | ||
158 | for(; !fuzz_done(fuzz); fuzz_next(fuzz)) { | ||
159 | r = sshbuf_put(fuzzed, fuzz_ptr(fuzz), fuzz_len(fuzz)); | ||
160 | ASSERT_INT_EQ(r, 0); | ||
161 | if (sshkey_parse_private_fileblob(fuzzed, "", "key", | ||
162 | &k1, NULL) == 0) | ||
163 | sshkey_free(k1); | ||
164 | sshbuf_reset(fuzzed); | ||
165 | } | ||
166 | sshbuf_free(fuzzed); | ||
167 | fuzz_cleanup(fuzz); | ||
168 | TEST_DONE(); | ||
169 | |||
170 | TEST_START("fuzz RSA new-format private"); | ||
171 | buf = load_file("rsa_n"); | ||
172 | fuzz = fuzz_begin(FUZZ_BASE64, sshbuf_mutable_ptr(buf), | ||
173 | sshbuf_len(buf)); | ||
174 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", "key", | ||
175 | &k1, NULL), 0); | ||
176 | sshkey_free(k1); | ||
177 | sshbuf_free(buf); | ||
178 | ASSERT_PTR_NE(fuzzed = sshbuf_new(), NULL); | ||
179 | TEST_ONERROR(onerror, fuzz); | ||
180 | for(; !fuzz_done(fuzz); fuzz_next(fuzz)) { | ||
181 | r = sshbuf_put(fuzzed, fuzz_ptr(fuzz), fuzz_len(fuzz)); | ||
182 | ASSERT_INT_EQ(r, 0); | ||
183 | if (sshkey_parse_private_fileblob(fuzzed, "", "key", | ||
184 | &k1, NULL) == 0) | ||
185 | sshkey_free(k1); | ||
186 | sshbuf_reset(fuzzed); | ||
187 | } | ||
188 | sshbuf_free(fuzzed); | ||
189 | fuzz_cleanup(fuzz); | ||
190 | TEST_DONE(); | ||
191 | |||
192 | TEST_START("fuzz DSA private"); | ||
193 | buf = load_file("dsa_1"); | ||
194 | fuzz = fuzz_begin(FUZZ_BASE64, sshbuf_mutable_ptr(buf), | ||
195 | sshbuf_len(buf)); | ||
196 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", "key", | ||
197 | &k1, NULL), 0); | ||
198 | sshkey_free(k1); | ||
199 | sshbuf_free(buf); | ||
200 | ASSERT_PTR_NE(fuzzed = sshbuf_new(), NULL); | ||
201 | TEST_ONERROR(onerror, fuzz); | ||
202 | for(; !fuzz_done(fuzz); fuzz_next(fuzz)) { | ||
203 | r = sshbuf_put(fuzzed, fuzz_ptr(fuzz), fuzz_len(fuzz)); | ||
204 | ASSERT_INT_EQ(r, 0); | ||
205 | if (sshkey_parse_private_fileblob(fuzzed, "", "key", | ||
206 | &k1, NULL) == 0) | ||
207 | sshkey_free(k1); | ||
208 | sshbuf_reset(fuzzed); | ||
209 | } | ||
210 | sshbuf_free(fuzzed); | ||
211 | fuzz_cleanup(fuzz); | ||
212 | TEST_DONE(); | ||
213 | |||
214 | TEST_START("fuzz DSA new-format private"); | ||
215 | buf = load_file("dsa_n"); | ||
216 | fuzz = fuzz_begin(FUZZ_BASE64, sshbuf_mutable_ptr(buf), | ||
217 | sshbuf_len(buf)); | ||
218 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", "key", | ||
219 | &k1, NULL), 0); | ||
220 | sshkey_free(k1); | ||
221 | sshbuf_free(buf); | ||
222 | ASSERT_PTR_NE(fuzzed = sshbuf_new(), NULL); | ||
223 | TEST_ONERROR(onerror, fuzz); | ||
224 | for(; !fuzz_done(fuzz); fuzz_next(fuzz)) { | ||
225 | r = sshbuf_put(fuzzed, fuzz_ptr(fuzz), fuzz_len(fuzz)); | ||
226 | ASSERT_INT_EQ(r, 0); | ||
227 | if (sshkey_parse_private_fileblob(fuzzed, "", "key", | ||
228 | &k1, NULL) == 0) | ||
229 | sshkey_free(k1); | ||
230 | sshbuf_reset(fuzzed); | ||
231 | } | ||
232 | sshbuf_free(fuzzed); | ||
233 | fuzz_cleanup(fuzz); | ||
234 | TEST_DONE(); | ||
235 | |||
236 | #ifdef OPENSSL_HAS_ECC | ||
237 | TEST_START("fuzz ECDSA private"); | ||
238 | buf = load_file("ecdsa_1"); | ||
239 | fuzz = fuzz_begin(FUZZ_BASE64, sshbuf_mutable_ptr(buf), | ||
240 | sshbuf_len(buf)); | ||
241 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", "key", | ||
242 | &k1, NULL), 0); | ||
243 | sshkey_free(k1); | ||
244 | sshbuf_free(buf); | ||
245 | ASSERT_PTR_NE(fuzzed = sshbuf_new(), NULL); | ||
246 | TEST_ONERROR(onerror, fuzz); | ||
247 | for(; !fuzz_done(fuzz); fuzz_next(fuzz)) { | ||
248 | r = sshbuf_put(fuzzed, fuzz_ptr(fuzz), fuzz_len(fuzz)); | ||
249 | ASSERT_INT_EQ(r, 0); | ||
250 | if (sshkey_parse_private_fileblob(fuzzed, "", "key", | ||
251 | &k1, NULL) == 0) | ||
252 | sshkey_free(k1); | ||
253 | sshbuf_reset(fuzzed); | ||
254 | } | ||
255 | sshbuf_free(fuzzed); | ||
256 | fuzz_cleanup(fuzz); | ||
257 | TEST_DONE(); | ||
258 | |||
259 | TEST_START("fuzz ECDSA new-format private"); | ||
260 | buf = load_file("ecdsa_n"); | ||
261 | fuzz = fuzz_begin(FUZZ_BASE64, sshbuf_mutable_ptr(buf), | ||
262 | sshbuf_len(buf)); | ||
263 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", "key", | ||
264 | &k1, NULL), 0); | ||
265 | sshkey_free(k1); | ||
266 | sshbuf_free(buf); | ||
267 | ASSERT_PTR_NE(fuzzed = sshbuf_new(), NULL); | ||
268 | TEST_ONERROR(onerror, fuzz); | ||
269 | for(; !fuzz_done(fuzz); fuzz_next(fuzz)) { | ||
270 | r = sshbuf_put(fuzzed, fuzz_ptr(fuzz), fuzz_len(fuzz)); | ||
271 | ASSERT_INT_EQ(r, 0); | ||
272 | if (sshkey_parse_private_fileblob(fuzzed, "", "key", | ||
273 | &k1, NULL) == 0) | ||
274 | sshkey_free(k1); | ||
275 | sshbuf_reset(fuzzed); | ||
276 | } | ||
277 | sshbuf_free(fuzzed); | ||
278 | fuzz_cleanup(fuzz); | ||
279 | TEST_DONE(); | ||
280 | #endif | ||
281 | |||
282 | TEST_START("fuzz Ed25519 private"); | ||
283 | buf = load_file("ed25519_1"); | ||
284 | fuzz = fuzz_begin(FUZZ_BASE64, sshbuf_mutable_ptr(buf), | ||
285 | sshbuf_len(buf)); | ||
286 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", "key", | ||
287 | &k1, NULL), 0); | ||
288 | sshkey_free(k1); | ||
289 | sshbuf_free(buf); | ||
290 | ASSERT_PTR_NE(fuzzed = sshbuf_new(), NULL); | ||
291 | TEST_ONERROR(onerror, fuzz); | ||
292 | for(; !fuzz_done(fuzz); fuzz_next(fuzz)) { | ||
293 | r = sshbuf_put(fuzzed, fuzz_ptr(fuzz), fuzz_len(fuzz)); | ||
294 | ASSERT_INT_EQ(r, 0); | ||
295 | if (sshkey_parse_private_fileblob(fuzzed, "", "key", | ||
296 | &k1, NULL) == 0) | ||
297 | sshkey_free(k1); | ||
298 | sshbuf_reset(fuzzed); | ||
299 | } | ||
300 | sshbuf_free(fuzzed); | ||
301 | fuzz_cleanup(fuzz); | ||
302 | TEST_DONE(); | ||
303 | |||
304 | TEST_START("fuzz RSA public"); | ||
305 | buf = load_file("rsa_1"); | ||
306 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", "key", | ||
307 | &k1, NULL), 0); | ||
308 | sshbuf_free(buf); | ||
309 | public_fuzz(k1); | ||
310 | sshkey_free(k1); | ||
311 | TEST_DONE(); | ||
312 | |||
313 | TEST_START("fuzz RSA cert"); | ||
314 | ASSERT_INT_EQ(sshkey_load_cert(test_data_file("rsa_1"), &k1), 0); | ||
315 | public_fuzz(k1); | ||
316 | sshkey_free(k1); | ||
317 | TEST_DONE(); | ||
318 | |||
319 | TEST_START("fuzz DSA public"); | ||
320 | buf = load_file("dsa_1"); | ||
321 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", "key", | ||
322 | &k1, NULL), 0); | ||
323 | sshbuf_free(buf); | ||
324 | public_fuzz(k1); | ||
325 | sshkey_free(k1); | ||
326 | TEST_DONE(); | ||
327 | |||
328 | TEST_START("fuzz DSA cert"); | ||
329 | ASSERT_INT_EQ(sshkey_load_cert(test_data_file("dsa_1"), &k1), 0); | ||
330 | public_fuzz(k1); | ||
331 | sshkey_free(k1); | ||
332 | TEST_DONE(); | ||
333 | |||
334 | #ifdef OPENSSL_HAS_ECC | ||
335 | TEST_START("fuzz ECDSA public"); | ||
336 | buf = load_file("ecdsa_1"); | ||
337 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", "key", | ||
338 | &k1, NULL), 0); | ||
339 | sshbuf_free(buf); | ||
340 | public_fuzz(k1); | ||
341 | sshkey_free(k1); | ||
342 | TEST_DONE(); | ||
343 | |||
344 | TEST_START("fuzz ECDSA cert"); | ||
345 | ASSERT_INT_EQ(sshkey_load_cert(test_data_file("ecdsa_1"), &k1), 0); | ||
346 | public_fuzz(k1); | ||
347 | sshkey_free(k1); | ||
348 | TEST_DONE(); | ||
349 | #endif | ||
350 | |||
351 | TEST_START("fuzz Ed25519 public"); | ||
352 | buf = load_file("ed25519_1"); | ||
353 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", "key", | ||
354 | &k1, NULL), 0); | ||
355 | sshbuf_free(buf); | ||
356 | public_fuzz(k1); | ||
357 | sshkey_free(k1); | ||
358 | TEST_DONE(); | ||
359 | |||
360 | TEST_START("fuzz Ed25519 cert"); | ||
361 | ASSERT_INT_EQ(sshkey_load_cert(test_data_file("ed25519_1"), &k1), 0); | ||
362 | public_fuzz(k1); | ||
363 | sshkey_free(k1); | ||
364 | TEST_DONE(); | ||
365 | |||
366 | TEST_START("fuzz RSA sig"); | ||
367 | buf = load_file("rsa_1"); | ||
368 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", "key", | ||
369 | &k1, NULL), 0); | ||
370 | sshbuf_free(buf); | ||
371 | sig_fuzz(k1); | ||
372 | sshkey_free(k1); | ||
373 | TEST_DONE(); | ||
374 | |||
375 | TEST_START("fuzz DSA sig"); | ||
376 | buf = load_file("dsa_1"); | ||
377 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", "key", | ||
378 | &k1, NULL), 0); | ||
379 | sshbuf_free(buf); | ||
380 | sig_fuzz(k1); | ||
381 | sshkey_free(k1); | ||
382 | TEST_DONE(); | ||
383 | |||
384 | #ifdef OPENSSL_HAS_ECC | ||
385 | TEST_START("fuzz ECDSA sig"); | ||
386 | buf = load_file("ecdsa_1"); | ||
387 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", "key", | ||
388 | &k1, NULL), 0); | ||
389 | sshbuf_free(buf); | ||
390 | sig_fuzz(k1); | ||
391 | sshkey_free(k1); | ||
392 | TEST_DONE(); | ||
393 | #endif | ||
394 | |||
395 | TEST_START("fuzz Ed25519 sig"); | ||
396 | buf = load_file("ed25519_1"); | ||
397 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", "key", | ||
398 | &k1, NULL), 0); | ||
399 | sshbuf_free(buf); | ||
400 | sig_fuzz(k1); | ||
401 | sshkey_free(k1); | ||
402 | TEST_DONE(); | ||
403 | |||
404 | /* XXX fuzz decoded new-format blobs too */ | ||
405 | |||
406 | } | ||
diff --git a/regress/unittests/sshkey/test_sshkey.c b/regress/unittests/sshkey/test_sshkey.c new file mode 100644 index 000000000..ef0c67956 --- /dev/null +++ b/regress/unittests/sshkey/test_sshkey.c | |||
@@ -0,0 +1,357 @@ | |||
1 | /* $OpenBSD: test_sshkey.c,v 1.1 2014/06/24 01:14:18 djm Exp $ */ | ||
2 | /* | ||
3 | * Regress test for sshkey.h key management API | ||
4 | * | ||
5 | * Placed in the public domain | ||
6 | */ | ||
7 | |||
8 | #include "includes.h" | ||
9 | |||
10 | #include <sys/types.h> | ||
11 | #include <sys/param.h> | ||
12 | #include <stdio.h> | ||
13 | #ifdef HAVE_STDINT_H | ||
14 | #include <stdint.h> | ||
15 | #endif | ||
16 | #include <stdlib.h> | ||
17 | #include <string.h> | ||
18 | |||
19 | #include <openssl/bn.h> | ||
20 | #include <openssl/rsa.h> | ||
21 | #include <openssl/dsa.h> | ||
22 | #ifdef OPENSSL_HAS_NISTP256 | ||
23 | # include <openssl/ec.h> | ||
24 | #endif | ||
25 | |||
26 | #include "../test_helper/test_helper.h" | ||
27 | |||
28 | #include "ssherr.h" | ||
29 | #include "sshbuf.h" | ||
30 | #define SSHBUF_INTERNAL 1 /* access internals for testing */ | ||
31 | #include "sshkey.h" | ||
32 | |||
33 | #include "authfile.h" | ||
34 | #include "common.h" | ||
35 | #include "ssh2.h" | ||
36 | |||
37 | void sshkey_tests(void); | ||
38 | |||
39 | static void | ||
40 | build_cert(struct sshbuf *b, const struct sshkey *k, const char *type, | ||
41 | const struct sshkey *sign_key, const struct sshkey *ca_key) | ||
42 | { | ||
43 | struct sshbuf *ca_buf, *pk, *principals, *critopts, *exts; | ||
44 | u_char *sigblob; | ||
45 | size_t siglen; | ||
46 | |||
47 | ca_buf = sshbuf_new(); | ||
48 | ASSERT_INT_EQ(sshkey_to_blob_buf(ca_key, ca_buf), 0); | ||
49 | |||
50 | /* | ||
51 | * Get the public key serialisation by rendering the key and skipping | ||
52 | * the type string. This is a bit of a hack :/ | ||
53 | */ | ||
54 | pk = sshbuf_new(); | ||
55 | ASSERT_INT_EQ(sshkey_plain_to_blob_buf(k, pk), 0); | ||
56 | ASSERT_INT_EQ(sshbuf_skip_string(pk), 0); | ||
57 | |||
58 | principals = sshbuf_new(); | ||
59 | ASSERT_INT_EQ(sshbuf_put_cstring(principals, "gsamsa"), 0); | ||
60 | ASSERT_INT_EQ(sshbuf_put_cstring(principals, "gregor"), 0); | ||
61 | |||
62 | critopts = sshbuf_new(); | ||
63 | /* XXX fill this in */ | ||
64 | |||
65 | exts = sshbuf_new(); | ||
66 | /* XXX fill this in */ | ||
67 | |||
68 | ASSERT_INT_EQ(sshbuf_put_cstring(b, type), 0); | ||
69 | ASSERT_INT_EQ(sshbuf_put_cstring(b, "noncenoncenonce!"), 0); /* nonce */ | ||
70 | ASSERT_INT_EQ(sshbuf_putb(b, pk), 0); /* public key serialisation */ | ||
71 | ASSERT_INT_EQ(sshbuf_put_u64(b, 1234), 0); /* serial */ | ||
72 | ASSERT_INT_EQ(sshbuf_put_u32(b, SSH2_CERT_TYPE_USER), 0); /* type */ | ||
73 | ASSERT_INT_EQ(sshbuf_put_cstring(b, "gregor"), 0); /* key ID */ | ||
74 | ASSERT_INT_EQ(sshbuf_put_stringb(b, principals), 0); /* principals */ | ||
75 | ASSERT_INT_EQ(sshbuf_put_u64(b, 0), 0); /* start */ | ||
76 | ASSERT_INT_EQ(sshbuf_put_u64(b, 0xffffffffffffffffULL), 0); /* end */ | ||
77 | ASSERT_INT_EQ(sshbuf_put_stringb(b, critopts), 0); /* options */ | ||
78 | ASSERT_INT_EQ(sshbuf_put_stringb(b, exts), 0); /* extensions */ | ||
79 | ASSERT_INT_EQ(sshbuf_put_string(b, NULL, 0), 0); /* reserved */ | ||
80 | ASSERT_INT_EQ(sshbuf_put_stringb(b, ca_buf), 0); /* signature key */ | ||
81 | ASSERT_INT_EQ(sshkey_sign(sign_key, &sigblob, &siglen, | ||
82 | sshbuf_ptr(b), sshbuf_len(b), 0), 0); | ||
83 | ASSERT_INT_EQ(sshbuf_put_string(b, sigblob, siglen), 0); /* signature */ | ||
84 | |||
85 | free(sigblob); | ||
86 | sshbuf_free(ca_buf); | ||
87 | sshbuf_free(exts); | ||
88 | sshbuf_free(critopts); | ||
89 | sshbuf_free(principals); | ||
90 | sshbuf_free(pk); | ||
91 | } | ||
92 | |||
93 | void | ||
94 | sshkey_tests(void) | ||
95 | { | ||
96 | struct sshkey *k1, *k2, *k3, *k4, *kr, *kd, *ke, *kf; | ||
97 | struct sshbuf *b; | ||
98 | |||
99 | TEST_START("new invalid"); | ||
100 | k1 = sshkey_new(-42); | ||
101 | ASSERT_PTR_EQ(k1, NULL); | ||
102 | TEST_DONE(); | ||
103 | |||
104 | TEST_START("new/free KEY_UNSPEC"); | ||
105 | k1 = sshkey_new(KEY_UNSPEC); | ||
106 | ASSERT_PTR_NE(k1, NULL); | ||
107 | sshkey_free(k1); | ||
108 | TEST_DONE(); | ||
109 | |||
110 | TEST_START("new/free KEY_RSA1"); | ||
111 | k1 = sshkey_new(KEY_RSA1); | ||
112 | ASSERT_PTR_NE(k1, NULL); | ||
113 | ASSERT_PTR_NE(k1->rsa, NULL); | ||
114 | ASSERT_PTR_NE(k1->rsa->n, NULL); | ||
115 | ASSERT_PTR_NE(k1->rsa->e, NULL); | ||
116 | ASSERT_PTR_EQ(k1->rsa->p, NULL); | ||
117 | sshkey_free(k1); | ||
118 | TEST_DONE(); | ||
119 | |||
120 | TEST_START("new/free KEY_RSA"); | ||
121 | k1 = sshkey_new(KEY_RSA); | ||
122 | ASSERT_PTR_NE(k1, NULL); | ||
123 | ASSERT_PTR_NE(k1->rsa, NULL); | ||
124 | ASSERT_PTR_NE(k1->rsa->n, NULL); | ||
125 | ASSERT_PTR_NE(k1->rsa->e, NULL); | ||
126 | ASSERT_PTR_EQ(k1->rsa->p, NULL); | ||
127 | sshkey_free(k1); | ||
128 | TEST_DONE(); | ||
129 | |||
130 | TEST_START("new/free KEY_DSA"); | ||
131 | k1 = sshkey_new(KEY_DSA); | ||
132 | ASSERT_PTR_NE(k1, NULL); | ||
133 | ASSERT_PTR_NE(k1->dsa, NULL); | ||
134 | ASSERT_PTR_NE(k1->dsa->g, NULL); | ||
135 | ASSERT_PTR_EQ(k1->dsa->priv_key, NULL); | ||
136 | sshkey_free(k1); | ||
137 | TEST_DONE(); | ||
138 | |||
139 | TEST_START("new/free KEY_ECDSA"); | ||
140 | k1 = sshkey_new(KEY_ECDSA); | ||
141 | ASSERT_PTR_NE(k1, NULL); | ||
142 | ASSERT_PTR_EQ(k1->ecdsa, NULL); /* Can't allocate without NID */ | ||
143 | sshkey_free(k1); | ||
144 | TEST_DONE(); | ||
145 | |||
146 | TEST_START("new/free KEY_ED25519"); | ||
147 | k1 = sshkey_new(KEY_ED25519); | ||
148 | ASSERT_PTR_NE(k1, NULL); | ||
149 | /* These should be blank until key loaded or generated */ | ||
150 | ASSERT_PTR_EQ(k1->ed25519_sk, NULL); | ||
151 | ASSERT_PTR_EQ(k1->ed25519_pk, NULL); | ||
152 | sshkey_free(k1); | ||
153 | TEST_DONE(); | ||
154 | |||
155 | TEST_START("new_private KEY_RSA"); | ||
156 | k1 = sshkey_new_private(KEY_RSA); | ||
157 | ASSERT_PTR_NE(k1, NULL); | ||
158 | ASSERT_PTR_NE(k1->rsa, NULL); | ||
159 | ASSERT_PTR_NE(k1->rsa->n, NULL); | ||
160 | ASSERT_PTR_NE(k1->rsa->e, NULL); | ||
161 | ASSERT_PTR_NE(k1->rsa->p, NULL); | ||
162 | ASSERT_INT_EQ(sshkey_add_private(k1), 0); | ||
163 | sshkey_free(k1); | ||
164 | TEST_DONE(); | ||
165 | |||
166 | TEST_START("new_private KEY_DSA"); | ||
167 | k1 = sshkey_new_private(KEY_DSA); | ||
168 | ASSERT_PTR_NE(k1, NULL); | ||
169 | ASSERT_PTR_NE(k1->dsa, NULL); | ||
170 | ASSERT_PTR_NE(k1->dsa->g, NULL); | ||
171 | ASSERT_PTR_NE(k1->dsa->priv_key, NULL); | ||
172 | ASSERT_INT_EQ(sshkey_add_private(k1), 0); | ||
173 | sshkey_free(k1); | ||
174 | TEST_DONE(); | ||
175 | |||
176 | TEST_START("generate KEY_RSA too small modulus"); | ||
177 | ASSERT_INT_EQ(sshkey_generate(KEY_RSA, 128, &k1), | ||
178 | SSH_ERR_INVALID_ARGUMENT); | ||
179 | ASSERT_PTR_EQ(k1, NULL); | ||
180 | TEST_DONE(); | ||
181 | |||
182 | TEST_START("generate KEY_RSA too large modulus"); | ||
183 | ASSERT_INT_EQ(sshkey_generate(KEY_RSA, 1 << 20, &k1), | ||
184 | SSH_ERR_INVALID_ARGUMENT); | ||
185 | ASSERT_PTR_EQ(k1, NULL); | ||
186 | TEST_DONE(); | ||
187 | |||
188 | TEST_START("generate KEY_DSA wrong bits"); | ||
189 | ASSERT_INT_EQ(sshkey_generate(KEY_DSA, 2048, &k1), | ||
190 | SSH_ERR_INVALID_ARGUMENT); | ||
191 | ASSERT_PTR_EQ(k1, NULL); | ||
192 | sshkey_free(k1); | ||
193 | TEST_DONE(); | ||
194 | |||
195 | TEST_START("generate KEY_ECDSA wrong bits"); | ||
196 | ASSERT_INT_EQ(sshkey_generate(KEY_ECDSA, 42, &k1), | ||
197 | SSH_ERR_INVALID_ARGUMENT); | ||
198 | ASSERT_PTR_EQ(k1, NULL); | ||
199 | sshkey_free(k1); | ||
200 | TEST_DONE(); | ||
201 | |||
202 | TEST_START("generate KEY_RSA"); | ||
203 | ASSERT_INT_EQ(sshkey_generate(KEY_RSA, 768, &kr), 0); | ||
204 | ASSERT_PTR_NE(kr, NULL); | ||
205 | ASSERT_PTR_NE(kr->rsa, NULL); | ||
206 | ASSERT_PTR_NE(kr->rsa->n, NULL); | ||
207 | ASSERT_PTR_NE(kr->rsa->e, NULL); | ||
208 | ASSERT_PTR_NE(kr->rsa->p, NULL); | ||
209 | ASSERT_INT_EQ(BN_num_bits(kr->rsa->n), 768); | ||
210 | TEST_DONE(); | ||
211 | |||
212 | TEST_START("generate KEY_DSA"); | ||
213 | ASSERT_INT_EQ(sshkey_generate(KEY_DSA, 1024, &kd), 0); | ||
214 | ASSERT_PTR_NE(kd, NULL); | ||
215 | ASSERT_PTR_NE(kd->dsa, NULL); | ||
216 | ASSERT_PTR_NE(kd->dsa->g, NULL); | ||
217 | ASSERT_PTR_NE(kd->dsa->priv_key, NULL); | ||
218 | TEST_DONE(); | ||
219 | |||
220 | #ifdef OPENSSL_HAS_ECC | ||
221 | TEST_START("generate KEY_ECDSA"); | ||
222 | ASSERT_INT_EQ(sshkey_generate(KEY_ECDSA, 256, &ke), 0); | ||
223 | ASSERT_PTR_NE(ke, NULL); | ||
224 | ASSERT_PTR_NE(ke->ecdsa, NULL); | ||
225 | ASSERT_PTR_NE(EC_KEY_get0_public_key(ke->ecdsa), NULL); | ||
226 | ASSERT_PTR_NE(EC_KEY_get0_private_key(ke->ecdsa), NULL); | ||
227 | TEST_DONE(); | ||
228 | #endif | ||
229 | |||
230 | TEST_START("generate KEY_ED25519"); | ||
231 | ASSERT_INT_EQ(sshkey_generate(KEY_ED25519, 256, &kf), 0); | ||
232 | ASSERT_PTR_NE(kf, NULL); | ||
233 | ASSERT_INT_EQ(kf->type, KEY_ED25519); | ||
234 | ASSERT_PTR_NE(kf->ed25519_pk, NULL); | ||
235 | ASSERT_PTR_NE(kf->ed25519_sk, NULL); | ||
236 | TEST_DONE(); | ||
237 | |||
238 | TEST_START("demote KEY_RSA"); | ||
239 | ASSERT_INT_EQ(sshkey_demote(kr, &k1), 0); | ||
240 | ASSERT_PTR_NE(k1, NULL); | ||
241 | ASSERT_PTR_NE(kr, k1); | ||
242 | ASSERT_INT_EQ(k1->type, KEY_RSA); | ||
243 | ASSERT_PTR_NE(k1->rsa, NULL); | ||
244 | ASSERT_PTR_NE(k1->rsa->n, NULL); | ||
245 | ASSERT_PTR_NE(k1->rsa->e, NULL); | ||
246 | ASSERT_PTR_EQ(k1->rsa->p, NULL); | ||
247 | TEST_DONE(); | ||
248 | |||
249 | TEST_START("equal KEY_RSA/demoted KEY_RSA"); | ||
250 | ASSERT_INT_EQ(sshkey_equal(kr, k1), 1); | ||
251 | sshkey_free(k1); | ||
252 | TEST_DONE(); | ||
253 | |||
254 | TEST_START("demote KEY_DSA"); | ||
255 | ASSERT_INT_EQ(sshkey_demote(kd, &k1), 0); | ||
256 | ASSERT_PTR_NE(k1, NULL); | ||
257 | ASSERT_PTR_NE(kd, k1); | ||
258 | ASSERT_INT_EQ(k1->type, KEY_DSA); | ||
259 | ASSERT_PTR_NE(k1->dsa, NULL); | ||
260 | ASSERT_PTR_NE(k1->dsa->g, NULL); | ||
261 | ASSERT_PTR_EQ(k1->dsa->priv_key, NULL); | ||
262 | TEST_DONE(); | ||
263 | |||
264 | TEST_START("equal KEY_DSA/demoted KEY_DSA"); | ||
265 | ASSERT_INT_EQ(sshkey_equal(kd, k1), 1); | ||
266 | sshkey_free(k1); | ||
267 | TEST_DONE(); | ||
268 | |||
269 | #ifdef OPENSSL_HAS_ECC | ||
270 | TEST_START("demote KEY_ECDSA"); | ||
271 | ASSERT_INT_EQ(sshkey_demote(ke, &k1), 0); | ||
272 | ASSERT_PTR_NE(k1, NULL); | ||
273 | ASSERT_PTR_NE(ke, k1); | ||
274 | ASSERT_INT_EQ(k1->type, KEY_ECDSA); | ||
275 | ASSERT_PTR_NE(k1->ecdsa, NULL); | ||
276 | ASSERT_INT_EQ(k1->ecdsa_nid, ke->ecdsa_nid); | ||
277 | ASSERT_PTR_NE(EC_KEY_get0_public_key(ke->ecdsa), NULL); | ||
278 | ASSERT_PTR_EQ(EC_KEY_get0_private_key(k1->ecdsa), NULL); | ||
279 | TEST_DONE(); | ||
280 | |||
281 | TEST_START("equal KEY_ECDSA/demoted KEY_ECDSA"); | ||
282 | ASSERT_INT_EQ(sshkey_equal(ke, k1), 1); | ||
283 | sshkey_free(k1); | ||
284 | TEST_DONE(); | ||
285 | #endif | ||
286 | |||
287 | TEST_START("demote KEY_ED25519"); | ||
288 | ASSERT_INT_EQ(sshkey_demote(kf, &k1), 0); | ||
289 | ASSERT_PTR_NE(k1, NULL); | ||
290 | ASSERT_PTR_NE(kf, k1); | ||
291 | ASSERT_INT_EQ(k1->type, KEY_ED25519); | ||
292 | ASSERT_PTR_NE(k1->ed25519_pk, NULL); | ||
293 | ASSERT_PTR_EQ(k1->ed25519_sk, NULL); | ||
294 | TEST_DONE(); | ||
295 | |||
296 | TEST_START("equal KEY_ED25519/demoted KEY_ED25519"); | ||
297 | ASSERT_INT_EQ(sshkey_equal(kf, k1), 1); | ||
298 | sshkey_free(k1); | ||
299 | TEST_DONE(); | ||
300 | |||
301 | TEST_START("equal mismatched key types"); | ||
302 | ASSERT_INT_EQ(sshkey_equal(kd, kr), 0); | ||
303 | #ifdef OPENSSL_HAS_ECC | ||
304 | ASSERT_INT_EQ(sshkey_equal(kd, ke), 0); | ||
305 | ASSERT_INT_EQ(sshkey_equal(kr, ke), 0); | ||
306 | ASSERT_INT_EQ(sshkey_equal(ke, kf), 0); | ||
307 | #endif | ||
308 | ASSERT_INT_EQ(sshkey_equal(kd, kf), 0); | ||
309 | TEST_DONE(); | ||
310 | |||
311 | TEST_START("equal different keys"); | ||
312 | ASSERT_INT_EQ(sshkey_generate(KEY_RSA, 768, &k1), 0); | ||
313 | ASSERT_INT_EQ(sshkey_equal(kr, k1), 0); | ||
314 | sshkey_free(k1); | ||
315 | ASSERT_INT_EQ(sshkey_generate(KEY_DSA, 1024, &k1), 0); | ||
316 | ASSERT_INT_EQ(sshkey_equal(kd, k1), 0); | ||
317 | sshkey_free(k1); | ||
318 | #ifdef OPENSSL_HAS_ECC | ||
319 | ASSERT_INT_EQ(sshkey_generate(KEY_ECDSA, 256, &k1), 0); | ||
320 | ASSERT_INT_EQ(sshkey_equal(ke, k1), 0); | ||
321 | sshkey_free(k1); | ||
322 | #endif | ||
323 | ASSERT_INT_EQ(sshkey_generate(KEY_ED25519, 256, &k1), 0); | ||
324 | ASSERT_INT_EQ(sshkey_equal(kf, k1), 0); | ||
325 | sshkey_free(k1); | ||
326 | TEST_DONE(); | ||
327 | |||
328 | sshkey_free(kr); | ||
329 | sshkey_free(kd); | ||
330 | #ifdef OPENSSL_HAS_ECC | ||
331 | sshkey_free(ke); | ||
332 | #endif | ||
333 | sshkey_free(kf); | ||
334 | |||
335 | /* XXX certify test */ | ||
336 | /* XXX sign test */ | ||
337 | /* XXX verify test */ | ||
338 | |||
339 | TEST_START("nested certificate"); | ||
340 | ASSERT_INT_EQ(sshkey_load_cert(test_data_file("rsa_1"), &k1), 0); | ||
341 | ASSERT_INT_EQ(sshkey_load_public(test_data_file("rsa_1.pub"), &k2, | ||
342 | NULL), 0); | ||
343 | b = load_file("rsa_2"); | ||
344 | ASSERT_INT_EQ(sshkey_parse_private_fileblob(b, "", "rsa_1", | ||
345 | &k3, NULL), 0); | ||
346 | sshbuf_reset(b); | ||
347 | build_cert(b, k2, "ssh-rsa-cert-v01@openssh.com", k3, k1); | ||
348 | ASSERT_INT_EQ(sshkey_from_blob(sshbuf_ptr(b), sshbuf_len(b), &k4), | ||
349 | SSH_ERR_KEY_CERT_INVALID_SIGN_KEY); | ||
350 | ASSERT_PTR_EQ(k4, NULL); | ||
351 | sshbuf_free(b); | ||
352 | sshkey_free(k1); | ||
353 | sshkey_free(k2); | ||
354 | sshkey_free(k3); | ||
355 | TEST_DONE(); | ||
356 | |||
357 | } | ||
diff --git a/regress/unittests/sshkey/testdata/dsa_1 b/regress/unittests/sshkey/testdata/dsa_1 new file mode 100644 index 000000000..34346869f --- /dev/null +++ b/regress/unittests/sshkey/testdata/dsa_1 | |||
@@ -0,0 +1,12 @@ | |||
1 | -----BEGIN DSA PRIVATE KEY----- | ||
2 | MIIBuwIBAAKBgQCxBNwH8TmLXqiZa0b9pxC6W+zS4Voqp8S+QwecYpNPTmhjaUYI | ||
3 | E/aJWAzFVtdbysLM89ukvw/z8qBkbMSefdypKmjUtgv51ZD4nfV4Wxb+G+1QExHr | ||
4 | M+kowOOL3XbcsdbPLUt8vxDJbBlQRch4zyai7CWjQR3JFXpR8sevUFJxSQIVAIdE | ||
5 | oncp2DEY2U/ZZnIyGCwApCzfAoGARW+eewZTv1Eosxv3ANKx372pf5+fQKwnWizI | ||
6 | j5z/GY3w3xobRCP9FiL4K3Nip2FvHLTGpRrlfm19RWYAg77VsNgztC4V9C8QrKWc | ||
7 | WJdkUkoQpZ3VoO25rO13hmIelkal3omKCF4ZE/edeF3d2B8DlzYs0aBcjTCMDrub | ||
8 | /CJILcYCgYEAgJt9jefGQi4Sl5F8h3jYo52LygE8sNYyurElMKVmyhFSKJ1Ifi9j | ||
9 | 4hNp2jZzu7jpZWhYndUoPaG6gbRB7fL3p5knlRo3P2Dznd6u6NAdhrADWW+JX9n1 | ||
10 | /EMKUv0h8rRFI/3b9RY1HVVzBQH7V3sNJ6iekH8JqOy1liCMaMylw4gCFBl7Lc6V | ||
11 | hmTiTuhLXjoRdCZS/p/m | ||
12 | -----END DSA PRIVATE KEY----- | ||
diff --git a/regress/unittests/sshkey/testdata/dsa_1-cert.fp b/regress/unittests/sshkey/testdata/dsa_1-cert.fp new file mode 100644 index 000000000..56ee1f89b --- /dev/null +++ b/regress/unittests/sshkey/testdata/dsa_1-cert.fp | |||
@@ -0,0 +1 @@ | |||
5a:4a:41:8c:4e:fa:4c:52:19:f9:39:49:31:fb:fd:74 | |||
diff --git a/regress/unittests/sshkey/testdata/dsa_1-cert.pub b/regress/unittests/sshkey/testdata/dsa_1-cert.pub new file mode 100644 index 000000000..023edf136 --- /dev/null +++ b/regress/unittests/sshkey/testdata/dsa_1-cert.pub | |||
@@ -0,0 +1 @@ | |||
ssh-dss-cert-v01@openssh.com AAAAHHNzaC1kc3MtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgj8zueN51MSQ7jW3fFwqyJWA3DycAAavQ8WgMHqcUG7YAAACBALEE3AfxOYteqJlrRv2nELpb7NLhWiqnxL5DB5xik09OaGNpRggT9olYDMVW11vKwszz26S/D/PyoGRsxJ593KkqaNS2C/nVkPid9XhbFv4b7VATEesz6SjA44vddtyx1s8tS3y/EMlsGVBFyHjPJqLsJaNBHckVelHyx69QUnFJAAAAFQCHRKJ3KdgxGNlP2WZyMhgsAKQs3wAAAIBFb557BlO/USizG/cA0rHfval/n59ArCdaLMiPnP8ZjfDfGhtEI/0WIvgrc2KnYW8ctMalGuV+bX1FZgCDvtWw2DO0LhX0LxCspZxYl2RSShClndWg7bms7XeGYh6WRqXeiYoIXhkT9514Xd3YHwOXNizRoFyNMIwOu5v8IkgtxgAAAIEAgJt9jefGQi4Sl5F8h3jYo52LygE8sNYyurElMKVmyhFSKJ1Ifi9j4hNp2jZzu7jpZWhYndUoPaG6gbRB7fL3p5knlRo3P2Dznd6u6NAdhrADWW+JX9n1/EMKUv0h8rRFI/3b9RY1HVVzBQH7V3sNJ6iekH8JqOy1liCMaMylw4gAAAAAAAAABgAAAAIAAAAGanVsaXVzAAAAEgAAAAVob3N0MQAAAAVob3N0MgAAAAA2i4NgAAAAAE0d4eAAAAAAAAAAAAAAAAAAAAAzAAAAC3NzaC1lZDI1NTE5AAAAILk95V5J3LKVx8bcLSB4073R7d0aAvR8gJrPvnV0D3MQAAAAUwAAAAtzc2gtZWQyNTUxOQAAAEA6qftqozw0ah9PG9obAg8iOPwQv6AsT9t/1G69eArSd9Am85OKIhAvYguI1Xtr9rw78X/Xk+6HtyAOF3QemaQD dsa_1.pub | |||
diff --git a/regress/unittests/sshkey/testdata/dsa_1.fp b/regress/unittests/sshkey/testdata/dsa_1.fp new file mode 100644 index 000000000..56ee1f89b --- /dev/null +++ b/regress/unittests/sshkey/testdata/dsa_1.fp | |||
@@ -0,0 +1 @@ | |||
5a:4a:41:8c:4e:fa:4c:52:19:f9:39:49:31:fb:fd:74 | |||
diff --git a/regress/unittests/sshkey/testdata/dsa_1.fp.bb b/regress/unittests/sshkey/testdata/dsa_1.fp.bb new file mode 100644 index 000000000..07dd9b418 --- /dev/null +++ b/regress/unittests/sshkey/testdata/dsa_1.fp.bb | |||
@@ -0,0 +1 @@ | |||
xosat-baneh-gocad-relek-kepur-mibip-motog-bykyb-hisug-mysus-tuxix | |||
diff --git a/regress/unittests/sshkey/testdata/dsa_1.param.g b/regress/unittests/sshkey/testdata/dsa_1.param.g new file mode 100644 index 000000000..4b09f6d18 --- /dev/null +++ b/regress/unittests/sshkey/testdata/dsa_1.param.g | |||
@@ -0,0 +1 @@ | |||
456f9e7b0653bf5128b31bf700d2b1dfbda97f9f9f40ac275a2cc88f9cff198df0df1a1b4423fd1622f82b7362a7616f1cb4c6a51ae57e6d7d45660083bed5b0d833b42e15f42f10aca59c589764524a10a59dd5a0edb9aced7786621e9646a5de898a085e1913f79d785dddd81f0397362cd1a05c8d308c0ebb9bfc22482dc6 | |||
diff --git a/regress/unittests/sshkey/testdata/dsa_1.param.priv b/regress/unittests/sshkey/testdata/dsa_1.param.priv new file mode 100644 index 000000000..2dd737cbe --- /dev/null +++ b/regress/unittests/sshkey/testdata/dsa_1.param.priv | |||
@@ -0,0 +1 @@ | |||
197b2dce958664e24ee84b5e3a11742652fe9fe6 | |||
diff --git a/regress/unittests/sshkey/testdata/dsa_1.param.pub b/regress/unittests/sshkey/testdata/dsa_1.param.pub new file mode 100644 index 000000000..b23d7207f --- /dev/null +++ b/regress/unittests/sshkey/testdata/dsa_1.param.pub | |||
@@ -0,0 +1 @@ | |||
00809b7d8de7c6422e1297917c8778d8a39d8bca013cb0d632bab12530a566ca1152289d487e2f63e21369da3673bbb8e96568589dd5283da1ba81b441edf2f7a79927951a373f60f39ddeaee8d01d86b003596f895fd9f5fc430a52fd21f2b44523fddbf516351d55730501fb577b0d27a89e907f09a8ecb596208c68cca5c388 | |||
diff --git a/regress/unittests/sshkey/testdata/dsa_1.pub b/regress/unittests/sshkey/testdata/dsa_1.pub new file mode 100644 index 000000000..89681970c --- /dev/null +++ b/regress/unittests/sshkey/testdata/dsa_1.pub | |||
@@ -0,0 +1 @@ | |||
ssh-dss AAAAB3NzaC1kc3MAAACBALEE3AfxOYteqJlrRv2nELpb7NLhWiqnxL5DB5xik09OaGNpRggT9olYDMVW11vKwszz26S/D/PyoGRsxJ593KkqaNS2C/nVkPid9XhbFv4b7VATEesz6SjA44vddtyx1s8tS3y/EMlsGVBFyHjPJqLsJaNBHckVelHyx69QUnFJAAAAFQCHRKJ3KdgxGNlP2WZyMhgsAKQs3wAAAIBFb557BlO/USizG/cA0rHfval/n59ArCdaLMiPnP8ZjfDfGhtEI/0WIvgrc2KnYW8ctMalGuV+bX1FZgCDvtWw2DO0LhX0LxCspZxYl2RSShClndWg7bms7XeGYh6WRqXeiYoIXhkT9514Xd3YHwOXNizRoFyNMIwOu5v8IkgtxgAAAIEAgJt9jefGQi4Sl5F8h3jYo52LygE8sNYyurElMKVmyhFSKJ1Ifi9j4hNp2jZzu7jpZWhYndUoPaG6gbRB7fL3p5knlRo3P2Dznd6u6NAdhrADWW+JX9n1/EMKUv0h8rRFI/3b9RY1HVVzBQH7V3sNJ6iekH8JqOy1liCMaMylw4g= DSA test key #1 | |||
diff --git a/regress/unittests/sshkey/testdata/dsa_1_pw b/regress/unittests/sshkey/testdata/dsa_1_pw new file mode 100644 index 000000000..1402153a0 --- /dev/null +++ b/regress/unittests/sshkey/testdata/dsa_1_pw | |||
@@ -0,0 +1,15 @@ | |||
1 | -----BEGIN DSA PRIVATE KEY----- | ||
2 | Proc-Type: 4,ENCRYPTED | ||
3 | DEK-Info: AES-128-CBC,9E668E24E7B9D658E3E7D0446B32B376 | ||
4 | |||
5 | hDjDLbfCAQutblxLuyNzSLxISSgXTgyzq8St9GE0lUtEc7i0xGNWwoWpFSbtD9y1 | ||
6 | yTG5UkhATQt56SY1ABfXZ21wieYuEEQeSJi0gwUQNNt2SwwITx4EdzDedWiHjikt | ||
7 | jbzH3v33agp/odw2X9wY6zu75y9CeW9o7SszRl286DliWIHJmhMlbb8r7jRqu62H | ||
8 | s5YYxD0xS1ipWauxklmIXMWNZHcARo8ZiJOuNdLshrSrl8DUW9P6F89FvxclQzKr | ||
9 | 44u3OBm7KbgPvPURDFLgNP6uCGBjzHvhHTpzVBxmQzCl3aGgsTKXiwJ1eupNjntB | ||
10 | ji0EnbznvoxR6qhXxw/WQ+MnWlWqTXka/2qaB6m3oJv+Zn7cPCJ5kvHnhr2JmNMl | ||
11 | igTh4Ov4LZLyNgO0Lbec4KyxW9QInRV5CY4Pu5lhqHteiPmOIGMWFtuh8Bb8Kg2q | ||
12 | VvXnPo5I3FjqV7UhDduO1Wn558sBZWQPqRbHVPN6wXJuM3HGkBl+aNjn0qddv9tr | ||
13 | VFJd/xdly2Ne81g3CB8jysE+3WEOrV9kdybocp/EhSOzP4i6pjWlyWdR5+CgbvRm | ||
14 | TUIeIaQbmPIB5251o5YK+Q== | ||
15 | -----END DSA PRIVATE KEY----- | ||
diff --git a/regress/unittests/sshkey/testdata/dsa_2 b/regress/unittests/sshkey/testdata/dsa_2 new file mode 100644 index 000000000..b189dc821 --- /dev/null +++ b/regress/unittests/sshkey/testdata/dsa_2 | |||
@@ -0,0 +1,12 @@ | |||
1 | -----BEGIN DSA PRIVATE KEY----- | ||
2 | MIIBuwIBAAKBgQDoMxCTyBnLPSO7CRU3RyfJLANLKBZ3/LdcsyNaARctaRA5gzRb | ||
3 | XdTFFU+rWKfxv+otm0KyCOepLtWy8tjKRYb7Ni46USlGwtM0Adx/3vR4iWNfipDP | ||
4 | K2V4O97JyMe3wsbF7siC01U4b8Ki+J44iFG9nuRnOTHqUWI615mraQRwlQIVAMsX | ||
5 | nsPGH8QrU11F1ScAIfZC165dAoGACCXyOHFkxABpJDtJs6AE7Hl3XjI4dnlim/XH | ||
6 | Y60W6gcO7gHSE2r2ljCubJqoUXmxd5mLKgnu91jIG/4URwDM4V7pb2k99sXpAi8I | ||
7 | L52eQl88C0bRD9+lEJfR4PMT39EccDRPB4+E055RoYQZ/McIyad8sF3Qwt084Eq+ | ||
8 | IkUt2coCgYEAxZRpCY82sM9Mu4B0EcH6O8seRqIRScmelljhUtKxuvf2PChwIWkR | ||
9 | HK9lORHBE3iKyurC5Muf3abuHKwMFjrOjHKOTqXBRrDZ7RgLQA0aUAQD3lWc9OTP | ||
10 | NShjphpq5xr0HZB31eJg3/Mo6KxYlRpzMXbTyenZP0XLICSSAywvTDoCFG5whl2k | ||
11 | Y2FLGfi9V6ylUVH6jKgE | ||
12 | -----END DSA PRIVATE KEY----- | ||
diff --git a/regress/unittests/sshkey/testdata/dsa_2.fp b/regress/unittests/sshkey/testdata/dsa_2.fp new file mode 100644 index 000000000..ba9de82a8 --- /dev/null +++ b/regress/unittests/sshkey/testdata/dsa_2.fp | |||
@@ -0,0 +1 @@ | |||
72:5f:50:6b:e5:64:c5:62:21:92:3f:8b:10:9b:9f:1a | |||
diff --git a/regress/unittests/sshkey/testdata/dsa_2.fp.bb b/regress/unittests/sshkey/testdata/dsa_2.fp.bb new file mode 100644 index 000000000..37a5221a7 --- /dev/null +++ b/regress/unittests/sshkey/testdata/dsa_2.fp.bb | |||
@@ -0,0 +1 @@ | |||
xesoh-mebaf-feced-lenuz-sicam-pevok-bosak-nogaz-ligen-fekef-fixex | |||
diff --git a/regress/unittests/sshkey/testdata/dsa_2.pub b/regress/unittests/sshkey/testdata/dsa_2.pub new file mode 100644 index 000000000..6ed2736b1 --- /dev/null +++ b/regress/unittests/sshkey/testdata/dsa_2.pub | |||
@@ -0,0 +1 @@ | |||
ssh-dss AAAAB3NzaC1kc3MAAACBAOgzEJPIGcs9I7sJFTdHJ8ksA0soFnf8t1yzI1oBFy1pEDmDNFtd1MUVT6tYp/G/6i2bQrII56ku1bLy2MpFhvs2LjpRKUbC0zQB3H/e9HiJY1+KkM8rZXg73snIx7fCxsXuyILTVThvwqL4njiIUb2e5Gc5MepRYjrXmatpBHCVAAAAFQDLF57Dxh/EK1NdRdUnACH2QteuXQAAAIAIJfI4cWTEAGkkO0mzoATseXdeMjh2eWKb9cdjrRbqBw7uAdITavaWMK5smqhRebF3mYsqCe73WMgb/hRHAMzhXulvaT32xekCLwgvnZ5CXzwLRtEP36UQl9Hg8xPf0RxwNE8Hj4TTnlGhhBn8xwjJp3ywXdDC3TzgSr4iRS3ZygAAAIEAxZRpCY82sM9Mu4B0EcH6O8seRqIRScmelljhUtKxuvf2PChwIWkRHK9lORHBE3iKyurC5Muf3abuHKwMFjrOjHKOTqXBRrDZ7RgLQA0aUAQD3lWc9OTPNShjphpq5xr0HZB31eJg3/Mo6KxYlRpzMXbTyenZP0XLICSSAywvTDo= DSA test key #2 | |||
diff --git a/regress/unittests/sshkey/testdata/dsa_n b/regress/unittests/sshkey/testdata/dsa_n new file mode 100644 index 000000000..34346869f --- /dev/null +++ b/regress/unittests/sshkey/testdata/dsa_n | |||
@@ -0,0 +1,12 @@ | |||
1 | -----BEGIN DSA PRIVATE KEY----- | ||
2 | MIIBuwIBAAKBgQCxBNwH8TmLXqiZa0b9pxC6W+zS4Voqp8S+QwecYpNPTmhjaUYI | ||
3 | E/aJWAzFVtdbysLM89ukvw/z8qBkbMSefdypKmjUtgv51ZD4nfV4Wxb+G+1QExHr | ||
4 | M+kowOOL3XbcsdbPLUt8vxDJbBlQRch4zyai7CWjQR3JFXpR8sevUFJxSQIVAIdE | ||
5 | oncp2DEY2U/ZZnIyGCwApCzfAoGARW+eewZTv1Eosxv3ANKx372pf5+fQKwnWizI | ||
6 | j5z/GY3w3xobRCP9FiL4K3Nip2FvHLTGpRrlfm19RWYAg77VsNgztC4V9C8QrKWc | ||
7 | WJdkUkoQpZ3VoO25rO13hmIelkal3omKCF4ZE/edeF3d2B8DlzYs0aBcjTCMDrub | ||
8 | /CJILcYCgYEAgJt9jefGQi4Sl5F8h3jYo52LygE8sNYyurElMKVmyhFSKJ1Ifi9j | ||
9 | 4hNp2jZzu7jpZWhYndUoPaG6gbRB7fL3p5knlRo3P2Dznd6u6NAdhrADWW+JX9n1 | ||
10 | /EMKUv0h8rRFI/3b9RY1HVVzBQH7V3sNJ6iekH8JqOy1liCMaMylw4gCFBl7Lc6V | ||
11 | hmTiTuhLXjoRdCZS/p/m | ||
12 | -----END DSA PRIVATE KEY----- | ||
diff --git a/regress/unittests/sshkey/testdata/dsa_n_pw b/regress/unittests/sshkey/testdata/dsa_n_pw new file mode 100644 index 000000000..42f70dd23 --- /dev/null +++ b/regress/unittests/sshkey/testdata/dsa_n_pw | |||
@@ -0,0 +1,22 @@ | |||
1 | -----BEGIN OPENSSH PRIVATE KEY----- | ||
2 | b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jYmMAAAAGYmNyeXB0AAAAGAAAABD5nB+Nkw | ||
3 | LNoPtAG7C3IdXmAAAAEAAAAAEAAAGyAAAAB3NzaC1kc3MAAACBALEE3AfxOYteqJlrRv2n | ||
4 | ELpb7NLhWiqnxL5DB5xik09OaGNpRggT9olYDMVW11vKwszz26S/D/PyoGRsxJ593KkqaN | ||
5 | S2C/nVkPid9XhbFv4b7VATEesz6SjA44vddtyx1s8tS3y/EMlsGVBFyHjPJqLsJaNBHckV | ||
6 | elHyx69QUnFJAAAAFQCHRKJ3KdgxGNlP2WZyMhgsAKQs3wAAAIBFb557BlO/USizG/cA0r | ||
7 | Hfval/n59ArCdaLMiPnP8ZjfDfGhtEI/0WIvgrc2KnYW8ctMalGuV+bX1FZgCDvtWw2DO0 | ||
8 | LhX0LxCspZxYl2RSShClndWg7bms7XeGYh6WRqXeiYoIXhkT9514Xd3YHwOXNizRoFyNMI | ||
9 | wOu5v8IkgtxgAAAIEAgJt9jefGQi4Sl5F8h3jYo52LygE8sNYyurElMKVmyhFSKJ1Ifi9j | ||
10 | 4hNp2jZzu7jpZWhYndUoPaG6gbRB7fL3p5knlRo3P2Dznd6u6NAdhrADWW+JX9n1/EMKUv | ||
11 | 0h8rRFI/3b9RY1HVVzBQH7V3sNJ6iekH8JqOy1liCMaMylw4gAAAHw8P1DtkBulOGv85qf | ||
12 | P+md2+LL+NKufVzHl9k2UKQFjeqY6uqs4HSDqvhXe7oiXd5mz6I7orxjtKU9hGjNF4ABUD | ||
13 | OawVGe/GCRUQ4WgpAgDnqQLeFcdIwtMSIrRZU6xjs314EI7TM7IIiG26JEuXDfZI1e7C3y | ||
14 | Cc38ZsP3zmg/UjgcCQar5c4n++vhOmeO36+fcUyZ1QlR05SaEtFYJA+otP3RmKTiDwob8Q | ||
15 | zRMr8Y57i2NTTtFjkmnnnQCibP62yz7N22Dve7RTOH8jiaW7p02Vn/6WmCarevN1rxtLLR | ||
16 | lkuWtPoKY8z/Ktcev8YE9f2+9H2TfXDRKYqIEfxgZLCJ4yP2gxDe6zurabS0hAO1CP+ej5 | ||
17 | htdJM3/rTqHAIevXX5uhIDmMvRHnLGldaIX1xux8TIJvSfMkYNIwscIP4kx7BGMk04vXtW | ||
18 | 5DLm6IZhzw9T3hjr8R0kBugmT6/h9vD5iN1D+wiHIhHYzQKMU9nOeFNsMBFWgJjU0l8VlF | ||
19 | gEjEMgAEfwynnmIoKB1iA/0em1tdU3naS59DBK+buE0trxUpTAAB5z8yPhAm6DdqrPE8cA | ||
20 | N3HlMoWrbCuak2A0uyOlEJjPg4UJUnv12ve2c9pAMsAu/4CAszCEM0prR+qd/RA4nn4M5u | ||
21 | Xrny2wNtt/DybCkA== | ||
22 | -----END OPENSSH PRIVATE KEY----- | ||
diff --git a/regress/unittests/sshkey/testdata/ecdsa_1 b/regress/unittests/sshkey/testdata/ecdsa_1 new file mode 100644 index 000000000..aec73dd61 --- /dev/null +++ b/regress/unittests/sshkey/testdata/ecdsa_1 | |||
@@ -0,0 +1,5 @@ | |||
1 | -----BEGIN EC PRIVATE KEY----- | ||
2 | MHcCAQEEIFghsFR1K95tz8qOl3+tX6fv8a/O6AfNbxOSFZX3ihxooAoGCCqGSM49 | ||
3 | AwEHoUQDQgAEalpgP0BOePHtTw0Pus4tdhTb8P9yWUZluvLf1D8vrHImT+G4vr/W | ||
4 | xo5iXGKQVEifuUVyLkAW2kDrq8J/szeRiQ== | ||
5 | -----END EC PRIVATE KEY----- | ||
diff --git a/regress/unittests/sshkey/testdata/ecdsa_1-cert.fp b/regress/unittests/sshkey/testdata/ecdsa_1-cert.fp new file mode 100644 index 000000000..a56dbc8d0 --- /dev/null +++ b/regress/unittests/sshkey/testdata/ecdsa_1-cert.fp | |||
@@ -0,0 +1 @@ | |||
f7:be:4c:02:65:ed:4c:11:af:ab:a8:dd:0a:92:e7:44 | |||
diff --git a/regress/unittests/sshkey/testdata/ecdsa_1-cert.pub b/regress/unittests/sshkey/testdata/ecdsa_1-cert.pub new file mode 100644 index 000000000..29b06a4dd --- /dev/null +++ b/regress/unittests/sshkey/testdata/ecdsa_1-cert.pub | |||
@@ -0,0 +1 @@ | |||
ecdsa-sha2-nistp256-cert-v01@openssh.com AAAAKGVjZHNhLXNoYTItbmlzdHAyNTYtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgjpoHehzmM54xz776HOiTOLPhkOwSWyXOMYeqDhDEcLgAAAAIbmlzdHAyNTYAAABBBGpaYD9ATnjx7U8ND7rOLXYU2/D/cllGZbry39Q/L6xyJk/huL6/1saOYlxikFRIn7lFci5AFtpA66vCf7M3kYkAAAAAAAAABwAAAAIAAAAGanVsaXVzAAAAEgAAAAVob3N0MQAAAAVob3N0MgAAAAA2i4NgAAAAAE0d4eAAAAAAAAAAAAAAAAAAAABoAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGpaYD9ATnjx7U8ND7rOLXYU2/D/cllGZbry39Q/L6xyJk/huL6/1saOYlxikFRIn7lFci5AFtpA66vCf7M3kYkAAABjAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAABIAAAAIFZM1PXlXf0a3VuGs7MVdWSealDXprT1nN5hQTg+m+EYAAAAIGN1yNXWEY5V315NhOD3mBuh/xCpfDn5rZjF4YntA7du ecdsa_1.pub | |||
diff --git a/regress/unittests/sshkey/testdata/ecdsa_1.fp b/regress/unittests/sshkey/testdata/ecdsa_1.fp new file mode 100644 index 000000000..a56dbc8d0 --- /dev/null +++ b/regress/unittests/sshkey/testdata/ecdsa_1.fp | |||
@@ -0,0 +1 @@ | |||
f7:be:4c:02:65:ed:4c:11:af:ab:a8:dd:0a:92:e7:44 | |||
diff --git a/regress/unittests/sshkey/testdata/ecdsa_1.fp.bb b/regress/unittests/sshkey/testdata/ecdsa_1.fp.bb new file mode 100644 index 000000000..f01a5dd44 --- /dev/null +++ b/regress/unittests/sshkey/testdata/ecdsa_1.fp.bb | |||
@@ -0,0 +1 @@ | |||
xotah-hecal-zibyb-nadug-romuc-hator-venum-hobip-ruluh-ripus-naxix | |||
diff --git a/regress/unittests/sshkey/testdata/ecdsa_1.param.curve b/regress/unittests/sshkey/testdata/ecdsa_1.param.curve new file mode 100644 index 000000000..fa0400467 --- /dev/null +++ b/regress/unittests/sshkey/testdata/ecdsa_1.param.curve | |||
@@ -0,0 +1 @@ | |||
prime256v1 | |||
diff --git a/regress/unittests/sshkey/testdata/ecdsa_1.param.priv b/regress/unittests/sshkey/testdata/ecdsa_1.param.priv new file mode 100644 index 000000000..3475f1fe9 --- /dev/null +++ b/regress/unittests/sshkey/testdata/ecdsa_1.param.priv | |||
@@ -0,0 +1 @@ | |||
5821b054752bde6dcfca8e977fad5fa7eff1afcee807cd6f13921595f78a1c68 | |||
diff --git a/regress/unittests/sshkey/testdata/ecdsa_1.param.pub b/regress/unittests/sshkey/testdata/ecdsa_1.param.pub new file mode 100644 index 000000000..11847a394 --- /dev/null +++ b/regress/unittests/sshkey/testdata/ecdsa_1.param.pub | |||
@@ -0,0 +1 @@ | |||
046a5a603f404e78f1ed4f0d0fbace2d7614dbf0ff72594665baf2dfd43f2fac72264fe1b8bebfd6c68e625c629054489fb945722e4016da40ebabc27fb3379189 | |||
diff --git a/regress/unittests/sshkey/testdata/ecdsa_1.pub b/regress/unittests/sshkey/testdata/ecdsa_1.pub new file mode 100644 index 000000000..eca1620bc --- /dev/null +++ b/regress/unittests/sshkey/testdata/ecdsa_1.pub | |||
@@ -0,0 +1 @@ | |||
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGpaYD9ATnjx7U8ND7rOLXYU2/D/cllGZbry39Q/L6xyJk/huL6/1saOYlxikFRIn7lFci5AFtpA66vCf7M3kYk= ECDSA test key #1 | |||
diff --git a/regress/unittests/sshkey/testdata/ecdsa_1_pw b/regress/unittests/sshkey/testdata/ecdsa_1_pw new file mode 100644 index 000000000..071154ab2 --- /dev/null +++ b/regress/unittests/sshkey/testdata/ecdsa_1_pw | |||
@@ -0,0 +1,8 @@ | |||
1 | -----BEGIN EC PRIVATE KEY----- | ||
2 | Proc-Type: 4,ENCRYPTED | ||
3 | DEK-Info: AES-128-CBC,74C8AEA5BFAFCC2B1C8B13DE671F5610 | ||
4 | |||
5 | vUsgOvCqezxPmcZcFqrSy9Y1MMlVguY0h9cfSPFC7gUrRr+45uCOYX5bOwEXecKn | ||
6 | /9uCXZtlBwwqDS9iK5IPoUrjEHvzI5rVbHWUxDrEOVbsfiDuCxrQM19It6QIqC1v | ||
7 | OSQEdXuBWR5WmhKNc3dqLbWsU8u2s60YwKQmZrj9nM4= | ||
8 | -----END EC PRIVATE KEY----- | ||
diff --git a/regress/unittests/sshkey/testdata/ecdsa_2 b/regress/unittests/sshkey/testdata/ecdsa_2 new file mode 100644 index 000000000..76ae07ad4 --- /dev/null +++ b/regress/unittests/sshkey/testdata/ecdsa_2 | |||
@@ -0,0 +1,7 @@ | |||
1 | -----BEGIN EC PRIVATE KEY----- | ||
2 | MIHcAgEBBEIBg4kVxUfoo/RE/78/QBRqG6PZuHZ82eLnhmZVzBa7XREUiYI/Jw7r | ||
3 | Qwp4FTBVfXL76Pt5AyBMf+52aVeOUlLRERSgBwYFK4EEACOhgYkDgYYABACNTJ5O | ||
4 | uNo5dNgIQRLHzKU91m7immKFiutJ6BlDbkRkKr+Envj13J6HOgYvOTm0n7SPlKHS | ||
5 | STZ4/T36d/rzQOAbIwEnbbwD9HMj6IzE4WH9lJzH7Zy7Tcyu6dOM8L7nOxCp3DUk | ||
6 | F3aAnPSFJhD7NN0jBWOFsD6uy1OmaTklPfRAnCt1MQ== | ||
7 | -----END EC PRIVATE KEY----- | ||
diff --git a/regress/unittests/sshkey/testdata/ecdsa_2.fp b/regress/unittests/sshkey/testdata/ecdsa_2.fp new file mode 100644 index 000000000..eb4bbdf03 --- /dev/null +++ b/regress/unittests/sshkey/testdata/ecdsa_2.fp | |||
@@ -0,0 +1 @@ | |||
51:bd:ff:2b:6d:26:9b:90:f9:e1:4a:ca:a0:29:8e:70 | |||
diff --git a/regress/unittests/sshkey/testdata/ecdsa_2.fp.bb b/regress/unittests/sshkey/testdata/ecdsa_2.fp.bb new file mode 100644 index 000000000..267bc63fd --- /dev/null +++ b/regress/unittests/sshkey/testdata/ecdsa_2.fp.bb | |||
@@ -0,0 +1 @@ | |||
xuzaz-zuzuk-virop-vypah-zumel-gylak-selih-fevad-varag-zynif-haxox | |||
diff --git a/regress/unittests/sshkey/testdata/ecdsa_2.param.curve b/regress/unittests/sshkey/testdata/ecdsa_2.param.curve new file mode 100644 index 000000000..617ea2fb8 --- /dev/null +++ b/regress/unittests/sshkey/testdata/ecdsa_2.param.curve | |||
@@ -0,0 +1 @@ | |||
secp521r1 | |||
diff --git a/regress/unittests/sshkey/testdata/ecdsa_2.param.priv b/regress/unittests/sshkey/testdata/ecdsa_2.param.priv new file mode 100644 index 000000000..537cdaac3 --- /dev/null +++ b/regress/unittests/sshkey/testdata/ecdsa_2.param.priv | |||
@@ -0,0 +1 @@ | |||
01838915c547e8a3f444ffbf3f40146a1ba3d9b8767cd9e2e7866655cc16bb5d111489823f270eeb430a781530557d72fbe8fb7903204c7fee7669578e5252d11114 | |||
diff --git a/regress/unittests/sshkey/testdata/ecdsa_2.param.pub b/regress/unittests/sshkey/testdata/ecdsa_2.param.pub new file mode 100644 index 000000000..3352ac769 --- /dev/null +++ b/regress/unittests/sshkey/testdata/ecdsa_2.param.pub | |||
@@ -0,0 +1 @@ | |||
04008d4c9e4eb8da3974d8084112c7cca53dd66ee29a62858aeb49e819436e44642abf849ef8f5dc9e873a062f3939b49fb48f94a1d2493678fd3dfa77faf340e01b2301276dbc03f47323e88cc4e161fd949cc7ed9cbb4dccaee9d38cf0bee73b10a9dc35241776809cf4852610fb34dd23056385b03eaecb53a66939253df4409c2b7531 | |||
diff --git a/regress/unittests/sshkey/testdata/ecdsa_2.pub b/regress/unittests/sshkey/testdata/ecdsa_2.pub new file mode 100644 index 000000000..34e1881dd --- /dev/null +++ b/regress/unittests/sshkey/testdata/ecdsa_2.pub | |||
@@ -0,0 +1 @@ | |||
ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBACNTJ5OuNo5dNgIQRLHzKU91m7immKFiutJ6BlDbkRkKr+Envj13J6HOgYvOTm0n7SPlKHSSTZ4/T36d/rzQOAbIwEnbbwD9HMj6IzE4WH9lJzH7Zy7Tcyu6dOM8L7nOxCp3DUkF3aAnPSFJhD7NN0jBWOFsD6uy1OmaTklPfRAnCt1MQ== ECDSA test key #2 | |||
diff --git a/regress/unittests/sshkey/testdata/ecdsa_n b/regress/unittests/sshkey/testdata/ecdsa_n new file mode 100644 index 000000000..aec73dd61 --- /dev/null +++ b/regress/unittests/sshkey/testdata/ecdsa_n | |||
@@ -0,0 +1,5 @@ | |||
1 | -----BEGIN EC PRIVATE KEY----- | ||
2 | MHcCAQEEIFghsFR1K95tz8qOl3+tX6fv8a/O6AfNbxOSFZX3ihxooAoGCCqGSM49 | ||
3 | AwEHoUQDQgAEalpgP0BOePHtTw0Pus4tdhTb8P9yWUZluvLf1D8vrHImT+G4vr/W | ||
4 | xo5iXGKQVEifuUVyLkAW2kDrq8J/szeRiQ== | ||
5 | -----END EC PRIVATE KEY----- | ||
diff --git a/regress/unittests/sshkey/testdata/ecdsa_n_pw b/regress/unittests/sshkey/testdata/ecdsa_n_pw new file mode 100644 index 000000000..75d585908 --- /dev/null +++ b/regress/unittests/sshkey/testdata/ecdsa_n_pw | |||
@@ -0,0 +1,9 @@ | |||
1 | -----BEGIN OPENSSH PRIVATE KEY----- | ||
2 | b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jYmMAAAAGYmNyeXB0AAAAGAAAABBXqI6Z6o | ||
3 | uRM+jAwdhnDoIMAAAAEAAAAAEAAABoAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlz | ||
4 | dHAyNTYAAABBBGpaYD9ATnjx7U8ND7rOLXYU2/D/cllGZbry39Q/L6xyJk/huL6/1saOYl | ||
5 | xikFRIn7lFci5AFtpA66vCf7M3kYkAAACwYMnoCTqvUTG0ktSSMNsOZLCdal5J4avEpM1L | ||
6 | sV9SL/RVcwo3ChprhwsnQsaAtMiJCRcHerKgD9qy1MNNaE5VNfVJ0Ih/7ut04cbFKed8p6 | ||
7 | 0V+w8WP7WvFffBPoHn+GGbQd1FDGzHhXUB61pH8Qzd1bI/sld/XEtMk7iYjNGQe9Rt0RaK | ||
8 | Wi8trwaA0Fb2w/EFnrdsFFxrIhQEqYBdEQJo782IqAsMG9OwUaM0vy+8bcI= | ||
9 | -----END OPENSSH PRIVATE KEY----- | ||
diff --git a/regress/unittests/sshkey/testdata/ed25519_1 b/regress/unittests/sshkey/testdata/ed25519_1 new file mode 100644 index 000000000..a537ae13d --- /dev/null +++ b/regress/unittests/sshkey/testdata/ed25519_1 | |||
@@ -0,0 +1,7 @@ | |||
1 | -----BEGIN OPENSSH PRIVATE KEY----- | ||
2 | b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW | ||
3 | QyNTUxOQAAACC5PeVeSdyylcfG3C0geNO90e3dGgL0fICaz751dA9zEAAAAJglsAcYJbAH | ||
4 | GAAAAAtzc2gtZWQyNTUxOQAAACC5PeVeSdyylcfG3C0geNO90e3dGgL0fICaz751dA9zEA | ||
5 | AAAED6HJ8Bh8tdQvhMd5o8IxtIwBv8/FV48FpBFWAbYdsIsLk95V5J3LKVx8bcLSB4073R | ||
6 | 7d0aAvR8gJrPvnV0D3MQAAAAE0VEMjU1MTkgdGVzdCBrZXkgIzEBAg== | ||
7 | -----END OPENSSH PRIVATE KEY----- | ||
diff --git a/regress/unittests/sshkey/testdata/ed25519_1-cert.fp b/regress/unittests/sshkey/testdata/ed25519_1-cert.fp new file mode 100644 index 000000000..e6d23d0b8 --- /dev/null +++ b/regress/unittests/sshkey/testdata/ed25519_1-cert.fp | |||
@@ -0,0 +1 @@ | |||
19:08:8e:7e:4d:e5:de:86:2a:09:47:65:eb:0a:51:2f | |||
diff --git a/regress/unittests/sshkey/testdata/ed25519_1-cert.pub b/regress/unittests/sshkey/testdata/ed25519_1-cert.pub new file mode 100644 index 000000000..ad0b9a888 --- /dev/null +++ b/regress/unittests/sshkey/testdata/ed25519_1-cert.pub | |||
@@ -0,0 +1 @@ | |||
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIHmdL66MkkOvncpc0W4MdvlJZMfQthHiOUv+XKm7gvzOAAAAILk95V5J3LKVx8bcLSB4073R7d0aAvR8gJrPvnV0D3MQAAAAAAAAAAgAAAACAAAABmp1bGl1cwAAABIAAAAFaG9zdDEAAAAFaG9zdDIAAAAANouDYAAAAABNHeHgAAAAAAAAAAAAAAAAAAAAMwAAAAtzc2gtZWQyNTUxOQAAACC5PeVeSdyylcfG3C0geNO90e3dGgL0fICaz751dA9zEAAAAFMAAAALc3NoLWVkMjU1MTkAAABAsUStKm1z3Rtvwy3eXE1DrgVp6kix2iEQXfB66IHX2UpAj5yl0eQGXWTSEDIxHDIb0SJvUH43OWX0PrEeAs0mAA== ed25519_1.pub | |||
diff --git a/regress/unittests/sshkey/testdata/ed25519_1.fp b/regress/unittests/sshkey/testdata/ed25519_1.fp new file mode 100644 index 000000000..e6d23d0b8 --- /dev/null +++ b/regress/unittests/sshkey/testdata/ed25519_1.fp | |||
@@ -0,0 +1 @@ | |||
19:08:8e:7e:4d:e5:de:86:2a:09:47:65:eb:0a:51:2f | |||
diff --git a/regress/unittests/sshkey/testdata/ed25519_1.fp.bb b/regress/unittests/sshkey/testdata/ed25519_1.fp.bb new file mode 100644 index 000000000..591a711b4 --- /dev/null +++ b/regress/unittests/sshkey/testdata/ed25519_1.fp.bb | |||
@@ -0,0 +1 @@ | |||
xofip-nuhoh-botam-cypeg-panig-tunef-bimav-numeb-nikic-gocyf-paxax | |||
diff --git a/regress/unittests/sshkey/testdata/ed25519_1.pub b/regress/unittests/sshkey/testdata/ed25519_1.pub new file mode 100644 index 000000000..633e05077 --- /dev/null +++ b/regress/unittests/sshkey/testdata/ed25519_1.pub | |||
@@ -0,0 +1 @@ | |||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILk95V5J3LKVx8bcLSB4073R7d0aAvR8gJrPvnV0D3MQ ED25519 test key #1 | |||
diff --git a/regress/unittests/sshkey/testdata/ed25519_1_pw b/regress/unittests/sshkey/testdata/ed25519_1_pw new file mode 100644 index 000000000..9fc635208 --- /dev/null +++ b/regress/unittests/sshkey/testdata/ed25519_1_pw | |||
@@ -0,0 +1,8 @@ | |||
1 | -----BEGIN OPENSSH PRIVATE KEY----- | ||
2 | b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jYmMAAAAGYmNyeXB0AAAAGAAAABAlT1eewp | ||
3 | 9gl0gue+sSrBWKAAAAEAAAAAEAAAAzAAAAC3NzaC1lZDI1NTE5AAAAILk95V5J3LKVx8bc | ||
4 | LSB4073R7d0aAvR8gJrPvnV0D3MQAAAAoMrL9ixIQHoJ86DcKMGt26+bCeaoyGjW5hha2Y | ||
5 | IxAZ+rRvNjUuv3MGvbUxtUpPZkTP/vk2fVSCuCD9St5Lbt/LKdIk2MfWIFbjZ6iEfdzxz0 | ||
6 | DHmsSDMps8dbePqqIPULR8av447jEzQEkUc8GSR6WqFSJOjJ8OvrJat1KcEK7V2tjZnLS1 | ||
7 | GoLMqVAtCVhuXwUkeJiRQE/JRl172hxB+LAVw= | ||
8 | -----END OPENSSH PRIVATE KEY----- | ||
diff --git a/regress/unittests/sshkey/testdata/ed25519_2 b/regress/unittests/sshkey/testdata/ed25519_2 new file mode 100644 index 000000000..a6e5f0040 --- /dev/null +++ b/regress/unittests/sshkey/testdata/ed25519_2 | |||
@@ -0,0 +1,7 @@ | |||
1 | -----BEGIN OPENSSH PRIVATE KEY----- | ||
2 | b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW | ||
3 | QyNTUxOQAAACBXUfO5Kid+jhRnyVt+1r9wj2FN/mZ6RfgGdySeYoq4WAAAAJjGeKsZxnir | ||
4 | GQAAAAtzc2gtZWQyNTUxOQAAACBXUfO5Kid+jhRnyVt+1r9wj2FN/mZ6RfgGdySeYoq4WA | ||
5 | AAAEB+gn4gGClQl2WMeOkikY+w0A0kSw1KH4Oyami7hlypsFdR87kqJ36OFGfJW37Wv3CP | ||
6 | YU3+ZnpF+AZ3JJ5iirhYAAAAE0VEMjU1MTkgdGVzdCBrZXkgIzEBAg== | ||
7 | -----END OPENSSH PRIVATE KEY----- | ||
diff --git a/regress/unittests/sshkey/testdata/ed25519_2.fp b/regress/unittests/sshkey/testdata/ed25519_2.fp new file mode 100644 index 000000000..02c684f36 --- /dev/null +++ b/regress/unittests/sshkey/testdata/ed25519_2.fp | |||
@@ -0,0 +1 @@ | |||
5c:c9:ae:a3:0c:aa:28:29:b8:fc:7c:64:ba:6e:e9:c9 | |||
diff --git a/regress/unittests/sshkey/testdata/ed25519_2.fp.bb b/regress/unittests/sshkey/testdata/ed25519_2.fp.bb new file mode 100644 index 000000000..ebe782e2c --- /dev/null +++ b/regress/unittests/sshkey/testdata/ed25519_2.fp.bb | |||
@@ -0,0 +1 @@ | |||
xenoz-tovup-zecyt-hohar-motam-sugid-fecyz-tutyk-gosom-ginar-kixux | |||
diff --git a/regress/unittests/sshkey/testdata/ed25519_2.pub b/regress/unittests/sshkey/testdata/ed25519_2.pub new file mode 100644 index 000000000..37b93352a --- /dev/null +++ b/regress/unittests/sshkey/testdata/ed25519_2.pub | |||
@@ -0,0 +1 @@ | |||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFdR87kqJ36OFGfJW37Wv3CPYU3+ZnpF+AZ3JJ5iirhY ED25519 test key #1 | |||
diff --git a/regress/unittests/sshkey/testdata/pw b/regress/unittests/sshkey/testdata/pw new file mode 100644 index 000000000..8a1dff98a --- /dev/null +++ b/regress/unittests/sshkey/testdata/pw | |||
@@ -0,0 +1 @@ | |||
mekmitasdigoat | |||
diff --git a/regress/unittests/sshkey/testdata/rsa1_1 b/regress/unittests/sshkey/testdata/rsa1_1 new file mode 100644 index 000000000..d22014e88 --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa1_1 | |||
Binary files differ | |||
diff --git a/regress/unittests/sshkey/testdata/rsa1_1.fp b/regress/unittests/sshkey/testdata/rsa1_1.fp new file mode 100644 index 000000000..782ece0db --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa1_1.fp | |||
@@ -0,0 +1 @@ | |||
a8:82:9b:98:c5:e6:19:d6:83:39:9f:4d:3a:8f:7c:80 | |||
diff --git a/regress/unittests/sshkey/testdata/rsa1_1.fp.bb b/regress/unittests/sshkey/testdata/rsa1_1.fp.bb new file mode 100644 index 000000000..caaf9511a --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa1_1.fp.bb | |||
@@ -0,0 +1 @@ | |||
xukib-cymuf-mylib-kecih-rogyb-sorid-belys-kytem-dinin-cicil-kyxex | |||
diff --git a/regress/unittests/sshkey/testdata/rsa1_1.param.n b/regress/unittests/sshkey/testdata/rsa1_1.param.n new file mode 100644 index 000000000..4ceb37362 --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa1_1.param.n | |||
@@ -0,0 +1 @@ | |||
00cf68059e5c7743318d740d3ebb55eb577891c9c3098817703f4c3157285055c2daa50102509ebdcade324e541c965e2931fd3459052fe65d013722da805d7ec8ef5b97cc006789d0566c5578b23e7aaa5be2b055d85798030cdead2eb2cc4eb3 | |||
diff --git a/regress/unittests/sshkey/testdata/rsa1_1.pub b/regress/unittests/sshkey/testdata/rsa1_1.pub new file mode 100644 index 000000000..56cf30d30 --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa1_1.pub | |||
@@ -0,0 +1 @@ | |||
768 65537 1257820658919101781627826212425999371251377782154008557690434337796299274692579921603319269571889066123773172648045269780061837011867522525764583065919572648969392756890567918758763032103894830246827894023662422727333291801518558899 RSA1 test key #1 | |||
diff --git a/regress/unittests/sshkey/testdata/rsa1_1_pw b/regress/unittests/sshkey/testdata/rsa1_1_pw new file mode 100644 index 000000000..3113dbc0f --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa1_1_pw | |||
Binary files differ | |||
diff --git a/regress/unittests/sshkey/testdata/rsa1_2 b/regress/unittests/sshkey/testdata/rsa1_2 new file mode 100644 index 000000000..e75e665ff --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa1_2 | |||
Binary files differ | |||
diff --git a/regress/unittests/sshkey/testdata/rsa1_2.fp b/regress/unittests/sshkey/testdata/rsa1_2.fp new file mode 100644 index 000000000..c3325371d --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa1_2.fp | |||
@@ -0,0 +1 @@ | |||
c0:83:1c:97:5f:32:77:7e:e4:e3:e9:29:b9:eb:76:9c | |||
diff --git a/regress/unittests/sshkey/testdata/rsa1_2.fp.bb b/regress/unittests/sshkey/testdata/rsa1_2.fp.bb new file mode 100644 index 000000000..cd8037140 --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa1_2.fp.bb | |||
@@ -0,0 +1 @@ | |||
xifad-vevot-sozyl-fapeb-meryf-kylut-cydiv-firik-gavyb-lanad-kaxox | |||
diff --git a/regress/unittests/sshkey/testdata/rsa1_2.param.n b/regress/unittests/sshkey/testdata/rsa1_2.param.n new file mode 100644 index 000000000..f8143a4b9 --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa1_2.param.n | |||
@@ -0,0 +1 @@ | |||
00b08a9fa386aceaab2ec3e9cdc7e6cb4eac9e98620279eed6762e1f513739a417ac8a86231fad3b8727a9de994973a7aae674a132547341984ade91aa1c22f01d2f0204ea7fa121969c367a5d04bda384066cf94e0b56d1efc47f50ca28e90603547df41c0676550d82d369f699b457d4f0f077999d9e76ab679fbf4206d418dbabed1823f14e4ddf3aac987686e6b006f8a23ea6af13b4c0e5b1fb5b1eb4db2f47b229422c450574cae9c64db5dcfce050836b6bdfa8fb541b4d426444a5ea20ad51a25d3048414ced2e199da2997968273e8beb10f3a351e98a57b00dadfa8f00a39bb55be94dae898fda6021d728f32b2ec93edd16e51073be3ac7511e5085 | |||
diff --git a/regress/unittests/sshkey/testdata/rsa1_2.pub b/regress/unittests/sshkey/testdata/rsa1_2.pub new file mode 100644 index 000000000..de1afbb8b --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa1_2.pub | |||
@@ -0,0 +1 @@ | |||
2048 65537 22286299513474010485021611215236051675183880694440075228245854420062562171290421803318459093678819161498086077099067169041536315773126601869537036602014639497662916952995546870691495931205282427606841521014293638607226118353743812583642616889028731910222603216563207637006843580936568089467160095319593442255227365472917576488012409542775346105980501967996562422764758836868135158147777193940857952623773420292946843206784104932927528915610322518810753953608862466374219925252817405397507396462117715293725218947744085154122395590957537510003558169729949140038634486299736757269280065662263306737701939154762092925061 RSA1 test key #2 | |||
diff --git a/regress/unittests/sshkey/testdata/rsa_1 b/regress/unittests/sshkey/testdata/rsa_1 new file mode 100644 index 000000000..09e79a72e --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa_1 | |||
@@ -0,0 +1,12 @@ | |||
1 | -----BEGIN RSA PRIVATE KEY----- | ||
2 | MIIBywIBAAJhAM/6MDmVVm/uNQmZpOcthoAAgMDUg7G4H6ZLLyPEhboKaBBHvIdw | ||
3 | ZdDmB+0LDf3D1aWXyUd2/pCkCysiBzqd/523zAzjY7HayqL6A940AxKBBbWLn+X6 | ||
4 | i2yJR7dTOYkk6QIDAQABAmAgKanBjfWzE5yCIo+c7K5rJyjCKVtAZaAHYIMmveKM | ||
5 | VcWoFt/x9hDY0GoTX21HfDxLX8oDxnsmhsOrnvSmgUChFwkm45eSETqeVDWwIVFA | ||
6 | FGL1s38xQsciWZWBFNppAIECMQD7nslReAxwz/Ad++ACXswfJg1l2wUQ1gJA3zh3 | ||
7 | jln6a4s3aV1zxbKlIn8iqBv0BZkCMQDTmO4WqyNnin73XCZs0DWu7GsfcuaH8QnD | ||
8 | wqPjJgrclTZXedxHkeqO2oyZW4mLC9ECMBb/blsZ49kzyDiVWuYcj/+Q1MyodhAR | ||
9 | 32bagCi9RBAVYEYSRU5dlXRucLxULSnikQIxAJ5teY5Vcru6kZfJUifUuO0QrKAu | ||
10 | WnbcPVBqMmUHfchsm/RhFFIt6W4uKmlEhTYrkQIxAMAStb7QCU3yU6ZkN7uL22Zs | ||
11 | 498i4jY6y+VEXv+L9O09VdlEnXhbUisOhy1bhyS3yg== | ||
12 | -----END RSA PRIVATE KEY----- | ||
diff --git a/regress/unittests/sshkey/testdata/rsa_1-cert.fp b/regress/unittests/sshkey/testdata/rsa_1-cert.fp new file mode 100644 index 000000000..bf9c2e362 --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa_1-cert.fp | |||
@@ -0,0 +1 @@ | |||
be:27:4c:16:27:f5:04:03:62:a8:b7:91:df:a5:b1:3b | |||
diff --git a/regress/unittests/sshkey/testdata/rsa_1-cert.pub b/regress/unittests/sshkey/testdata/rsa_1-cert.pub new file mode 100644 index 000000000..51b1ce0dd --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa_1-cert.pub | |||
@@ -0,0 +1 @@ | |||
ssh-rsa-cert-v01@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAg1i9Ueveqg9sFSGsEYmsQqlI+dpC3nqhucPfwBVo3DtcAAAADAQABAAAAYQDP+jA5lVZv7jUJmaTnLYaAAIDA1IOxuB+mSy8jxIW6CmgQR7yHcGXQ5gftCw39w9Wll8lHdv6QpAsrIgc6nf+dt8wM42Ox2sqi+gPeNAMSgQW1i5/l+otsiUe3UzmJJOkAAAAAAAAABQAAAAIAAAAGanVsaXVzAAAAEgAAAAVob3N0MQAAAAVob3N0MgAAAAA2i4NgAAAAAE0d4eAAAAAAAAAAAAAAAAAAAAAzAAAAC3NzaC1lZDI1NTE5AAAAILk95V5J3LKVx8bcLSB4073R7d0aAvR8gJrPvnV0D3MQAAAAUwAAAAtzc2gtZWQyNTUxOQAAAED0TLf2Mv2F9TBt1Skf/1vviUgt7bt9xvL5HqugnVDfKaEg+RNKgfa5Rtpteb39EODkH8v4FJPWlmNG0F9w0cYF rsa_1.pub | |||
diff --git a/regress/unittests/sshkey/testdata/rsa_1.fp b/regress/unittests/sshkey/testdata/rsa_1.fp new file mode 100644 index 000000000..bf9c2e362 --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa_1.fp | |||
@@ -0,0 +1 @@ | |||
be:27:4c:16:27:f5:04:03:62:a8:b7:91:df:a5:b1:3b | |||
diff --git a/regress/unittests/sshkey/testdata/rsa_1.fp.bb b/regress/unittests/sshkey/testdata/rsa_1.fp.bb new file mode 100644 index 000000000..448133bad --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa_1.fp.bb | |||
@@ -0,0 +1 @@ | |||
xetif-zuvul-nylyc-vykor-lumac-gyhyv-bacih-cimyk-sycen-gikym-pixax | |||
diff --git a/regress/unittests/sshkey/testdata/rsa_1.param.n b/regress/unittests/sshkey/testdata/rsa_1.param.n new file mode 100644 index 000000000..2ffc2ba7e --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa_1.param.n | |||
@@ -0,0 +1 @@ | |||
00cffa303995566fee350999a4e72d86800080c0d483b1b81fa64b2f23c485ba0a681047bc877065d0e607ed0b0dfdc3d5a597c94776fe90a40b2b22073a9dff9db7cc0ce363b1dacaa2fa03de3403128105b58b9fe5fa8b6c8947b753398924e9 | |||
diff --git a/regress/unittests/sshkey/testdata/rsa_1.param.p b/regress/unittests/sshkey/testdata/rsa_1.param.p new file mode 100644 index 000000000..4fcf148c3 --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa_1.param.p | |||
@@ -0,0 +1 @@ | |||
00fb9ec951780c70cff01dfbe0025ecc1f260d65db0510d60240df38778e59fa6b8b37695d73c5b2a5227f22a81bf40599 | |||
diff --git a/regress/unittests/sshkey/testdata/rsa_1.param.q b/regress/unittests/sshkey/testdata/rsa_1.param.q new file mode 100644 index 000000000..3473f5144 --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa_1.param.q | |||
@@ -0,0 +1 @@ | |||
00d398ee16ab23678a7ef75c266cd035aeec6b1f72e687f109c3c2a3e3260adc95365779dc4791ea8eda8c995b898b0bd1 | |||
diff --git a/regress/unittests/sshkey/testdata/rsa_1.pub b/regress/unittests/sshkey/testdata/rsa_1.pub new file mode 100644 index 000000000..889fdae86 --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa_1.pub | |||
@@ -0,0 +1 @@ | |||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAYQDP+jA5lVZv7jUJmaTnLYaAAIDA1IOxuB+mSy8jxIW6CmgQR7yHcGXQ5gftCw39w9Wll8lHdv6QpAsrIgc6nf+dt8wM42Ox2sqi+gPeNAMSgQW1i5/l+otsiUe3UzmJJOk= RSA test key #1 | |||
diff --git a/regress/unittests/sshkey/testdata/rsa_1_pw b/regress/unittests/sshkey/testdata/rsa_1_pw new file mode 100644 index 000000000..71637a59b --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa_1_pw | |||
@@ -0,0 +1,15 @@ | |||
1 | -----BEGIN RSA PRIVATE KEY----- | ||
2 | Proc-Type: 4,ENCRYPTED | ||
3 | DEK-Info: AES-128-CBC,1E851A01F12A49FDC256E7A665C61D4B | ||
4 | |||
5 | +sfWU7kg3idmHL6vShby5LXnfF4bZDPhJjv89uldae7qPEgEW8qS8o0Ssokxf7Au | ||
6 | /vTQnbSB+gy/qZaUOykOzqiV1YL7UfkbOkM2QYnzzrVeGzI5RZ0G9iH8HBn2owQ+ | ||
7 | Ejf1UKDUVZEea5X0IwQRfE0zaZqFS4tyEex0iKz8dI4FvyabKLZsCs1DBGO7A3ml | ||
8 | LgP947mh10yKWTP2fbq8LOhDUEWCXrh2NzuH6Rl5nNyC4MNQEkLzK1wL7J/WCNaL | ||
9 | sciYmuqEQRDikDDQQFZw2wjBD638fhK+IhuN3VGegiXFnu5C+p9kzUvqVk4X9g2r | ||
10 | BMmlP0pceFv/fEwtNNaeI2Tt7mIsWsZTmCqdzOUAYqGIiNjzykWw64nMO3TpVpbA | ||
11 | i4854RhblbeiyjENbMVPU6BAk4fx7OJvDElLxwN43CS3U0MldbI7A4uG3B3RTSCj | ||
12 | 1rGxRNAHWC3q3zzrn6gLwrUVje4iTedaKItLIHQeo1A091Tr8AqQdZi/Ck2Ju0Hl | ||
13 | 4Qdwzjw1Y5n1Akm+EWh31ydxtUQ0YBOz/W6DKwTNA1D8oH9bZBG4f0pnvVhtttAO | ||
14 | WKj+DUqMa+f3OOmQ9UXlitk2pEgjeMngTgfQnhZiCts= | ||
15 | -----END RSA PRIVATE KEY----- | ||
diff --git a/regress/unittests/sshkey/testdata/rsa_2 b/regress/unittests/sshkey/testdata/rsa_2 new file mode 100644 index 000000000..058cf777a --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa_2 | |||
@@ -0,0 +1,27 @@ | |||
1 | -----BEGIN RSA PRIVATE KEY----- | ||
2 | MIIEowIBAAKCAQEAlDS/ygeFfsR/mhZK/XMHU/gzRogPuMQIYUd17WDjMprA6dQb | ||
3 | ckTDrNm/mrf09I6YAhjgooEL16oWM1z6cesDE0KwaJsy6uTmXFMLO+Ha4mtFHhmu | ||
4 | tiyJcQ9MKKr0vC64384WQZygZk0OlVz7x9WSPiGXzal5MzsX4TYq5B05o2Cb+epA | ||
5 | FxK0c8cdYZD0Sy57gWRpRA3yJq4zh/hks98jzn0XA3HAJA39MKhUG5tf5e6z5BeP | ||
6 | Yi5FvdnDQ9WcasRiEvkmHbg59pbgg/Lbsl6OgZQruS8hKiJ3YBARt2euCCeg7qAF | ||
7 | KbXRR9TMwfphH3Ai4Oi/w6HPRAhdrwooA/gKkQIDAQABAoIBAH22OLB/rMaYmrvz | ||
8 | COzvM1oQgD3lj6Bj98+8M9WEh3MXPWeaGSXWGjx1/0aXn1oJ0fqFa5Wr7IWkqmwr | ||
9 | A+y5McSWntg8PPZt7tCFSFQlAetonhooIsA4CuUx2qHsUOeGoh6EyvAgkRX1atdb | ||
10 | Jd6d1AyLph43EK1aBKltrvgLqiZfs7mcuwyvKtN9ktdKY2FDhn6DHpm9pE9MEHJV | ||
11 | Xv1isNc6a0qNoRlKqxrSZHNEN4fbjLw31wBySzmmnIog5wVEwaHeASwLJT6TmuIZ | ||
12 | eZxnd7/jMwRZWH8ZIGKvkTMp4fYzK9QkehO7A2HFD3FPDBVrkSJjqRdkujF8vu1C | ||
13 | 0RwrD1kCgYEAxFXUoE1ero6vp9akvR/mw94kYjXE/YOz1yi0KTkZUs6gURc8Kzsm | ||
14 | MzlEZ31rnngE4jQHYAvuPEfiqcnUgylW3QuevMgo2hCLYO7aG5C0fk8TeOiuvnrF | ||
15 | YPO8rSJWk/BgdrPtzu45P7jmWsjkHn+y+t8cKvq1sZY40sn2YgIhYK8CgYEAwT6j | ||
16 | 5tReI6sxpHltPUbvOdpD04eL6ggBAKwzb5aBoa/Dj+sU1zg5uyY8diggQEEznlBW | ||
17 | iWTQmmmfy1ef9i6YAwNuZveKOrVwNMcdubQJ2X26XoFrmA59PjsbLtr1bdUb02gz | ||
18 | 6P5x6pcw5qzEq0mddgvHiU3RhL24xdc1LW8nmL8CgYEAmgaT1macPuklmNBlURGz | ||
19 | 4jll5b41GoW2EreWDzkCStpbHwLRa0DuCQWGSoI0aY/SlPsoRgtWDOiAQ59ZHsTR | ||
20 | pnw1PfjxQ5HzJkp7xWBSmTzEE/jHDhwWuKa+gD0OGuVbaARkLhDpzLnrzZEIlXyt | ||
21 | Fu7tlDI3VGh7j7Jtnhn5wXUCgYBKmPbGfcaVeFmih2lfFUn2CEbUmmetgUd5zf/R | ||
22 | HMWP9/zDStlxt3e5winm5tiEVWcqvxKY2T0Zzppr8biDXTs7NpDg2MAYp7/X7+GO | ||
23 | tWxz8/AE2WsCeN1qL4Dv1oCV1IV4V6pqUAcDqzeqZJlLEhDh5+wwGcU+u8pfPRN/ | ||
24 | JYCgmwKBgDa+kXPqzcc6vzD9cwEEk4ftn9/Vk2yBx0XOu8RdEkRhXj1QXGJckCqh | ||
25 | FkXzVbuurFhsBt+H0B4arw+51T9fVCZqfcaU34u+Qa/FQvTod4OJUSRxYUaDqygs | ||
26 | VTyuP+zGZlIw7JWktxjVazENsM/ef5wBH0Nf839OZbPVDLfn7K0j | ||
27 | -----END RSA PRIVATE KEY----- | ||
diff --git a/regress/unittests/sshkey/testdata/rsa_2.fp b/regress/unittests/sshkey/testdata/rsa_2.fp new file mode 100644 index 000000000..53939f413 --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa_2.fp | |||
@@ -0,0 +1 @@ | |||
fb:8f:7b:26:3d:42:40:ef:ed:f1:ed:ee:66:9e:ba:b0 | |||
diff --git a/regress/unittests/sshkey/testdata/rsa_2.fp.bb b/regress/unittests/sshkey/testdata/rsa_2.fp.bb new file mode 100644 index 000000000..e90a3571a --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa_2.fp.bb | |||
@@ -0,0 +1 @@ | |||
xepev-gupub-vuvyg-femiv-gonat-defiv-hirak-betub-pahut-veryd-hexix | |||
diff --git a/regress/unittests/sshkey/testdata/rsa_2.param.n b/regress/unittests/sshkey/testdata/rsa_2.param.n new file mode 100644 index 000000000..389de4226 --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa_2.param.n | |||
@@ -0,0 +1 @@ | |||
009434bfca07857ec47f9a164afd730753f83346880fb8c408614775ed60e3329ac0e9d41b7244c3acd9bf9ab7f4f48e980218e0a2810bd7aa16335cfa71eb031342b0689b32eae4e65c530b3be1dae26b451e19aeb62c89710f4c28aaf4bc2eb8dfce16419ca0664d0e955cfbc7d5923e2197cda979333b17e1362ae41d39a3609bf9ea401712b473c71d6190f44b2e7b816469440df226ae3387f864b3df23ce7d170371c0240dfd30a8541b9b5fe5eeb3e4178f622e45bdd9c343d59c6ac46212f9261db839f696e083f2dbb25e8e81942bb92f212a2277601011b767ae0827a0eea00529b5d147d4ccc1fa611f7022e0e8bfc3a1cf44085daf0a2803f80a91 | |||
diff --git a/regress/unittests/sshkey/testdata/rsa_2.param.p b/regress/unittests/sshkey/testdata/rsa_2.param.p new file mode 100644 index 000000000..c3c9a130a --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa_2.param.p | |||
@@ -0,0 +1 @@ | |||
00c455d4a04d5eae8eafa7d6a4bd1fe6c3de246235c4fd83b3d728b429391952cea051173c2b3b26333944677d6b9e7804e23407600bee3c47e2a9c9d4832956dd0b9ebcc828da108b60eeda1b90b47e4f1378e8aebe7ac560f3bcad225693f06076b3edceee393fb8e65ac8e41e7fb2fadf1c2afab5b19638d2c9f662022160af | |||
diff --git a/regress/unittests/sshkey/testdata/rsa_2.param.q b/regress/unittests/sshkey/testdata/rsa_2.param.q new file mode 100644 index 000000000..728c474b0 --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa_2.param.q | |||
@@ -0,0 +1 @@ | |||
00c13ea3e6d45e23ab31a4796d3d46ef39da43d3878bea080100ac336f9681a1afc38feb14d73839bb263c7628204041339e50568964d09a699fcb579ff62e9803036e66f78a3ab57034c71db9b409d97dba5e816b980e7d3e3b1b2edaf56dd51bd36833e8fe71ea9730e6acc4ab499d760bc7894dd184bdb8c5d7352d6f2798bf | |||
diff --git a/regress/unittests/sshkey/testdata/rsa_2.pub b/regress/unittests/sshkey/testdata/rsa_2.pub new file mode 100644 index 000000000..ed9f78cad --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa_2.pub | |||
@@ -0,0 +1 @@ | |||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCUNL/KB4V+xH+aFkr9cwdT+DNGiA+4xAhhR3XtYOMymsDp1BtyRMOs2b+at/T0jpgCGOCigQvXqhYzXPpx6wMTQrBomzLq5OZcUws74dria0UeGa62LIlxD0woqvS8LrjfzhZBnKBmTQ6VXPvH1ZI+IZfNqXkzOxfhNirkHTmjYJv56kAXErRzxx1hkPRLLnuBZGlEDfImrjOH+GSz3yPOfRcDccAkDf0wqFQbm1/l7rPkF49iLkW92cND1ZxqxGIS+SYduDn2luCD8tuyXo6BlCu5LyEqIndgEBG3Z64IJ6DuoAUptdFH1MzB+mEfcCLg6L/Doc9ECF2vCigD+AqR RSA test key #2 | |||
diff --git a/regress/unittests/sshkey/testdata/rsa_n b/regress/unittests/sshkey/testdata/rsa_n new file mode 100644 index 000000000..09e79a72e --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa_n | |||
@@ -0,0 +1,12 @@ | |||
1 | -----BEGIN RSA PRIVATE KEY----- | ||
2 | MIIBywIBAAJhAM/6MDmVVm/uNQmZpOcthoAAgMDUg7G4H6ZLLyPEhboKaBBHvIdw | ||
3 | ZdDmB+0LDf3D1aWXyUd2/pCkCysiBzqd/523zAzjY7HayqL6A940AxKBBbWLn+X6 | ||
4 | i2yJR7dTOYkk6QIDAQABAmAgKanBjfWzE5yCIo+c7K5rJyjCKVtAZaAHYIMmveKM | ||
5 | VcWoFt/x9hDY0GoTX21HfDxLX8oDxnsmhsOrnvSmgUChFwkm45eSETqeVDWwIVFA | ||
6 | FGL1s38xQsciWZWBFNppAIECMQD7nslReAxwz/Ad++ACXswfJg1l2wUQ1gJA3zh3 | ||
7 | jln6a4s3aV1zxbKlIn8iqBv0BZkCMQDTmO4WqyNnin73XCZs0DWu7GsfcuaH8QnD | ||
8 | wqPjJgrclTZXedxHkeqO2oyZW4mLC9ECMBb/blsZ49kzyDiVWuYcj/+Q1MyodhAR | ||
9 | 32bagCi9RBAVYEYSRU5dlXRucLxULSnikQIxAJ5teY5Vcru6kZfJUifUuO0QrKAu | ||
10 | WnbcPVBqMmUHfchsm/RhFFIt6W4uKmlEhTYrkQIxAMAStb7QCU3yU6ZkN7uL22Zs | ||
11 | 498i4jY6y+VEXv+L9O09VdlEnXhbUisOhy1bhyS3yg== | ||
12 | -----END RSA PRIVATE KEY----- | ||
diff --git a/regress/unittests/sshkey/testdata/rsa_n_pw b/regress/unittests/sshkey/testdata/rsa_n_pw new file mode 100644 index 000000000..0166fd5f1 --- /dev/null +++ b/regress/unittests/sshkey/testdata/rsa_n_pw | |||
@@ -0,0 +1,14 @@ | |||
1 | -----BEGIN OPENSSH PRIVATE KEY----- | ||
2 | b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jYmMAAAAGYmNyeXB0AAAAGAAAABClELgtaZ | ||
3 | qAmMwESpqXDN0uAAAAEAAAAAEAAAB3AAAAB3NzaC1yc2EAAAADAQABAAAAYQDP+jA5lVZv | ||
4 | 7jUJmaTnLYaAAIDA1IOxuB+mSy8jxIW6CmgQR7yHcGXQ5gftCw39w9Wll8lHdv6QpAsrIg | ||
5 | c6nf+dt8wM42Ox2sqi+gPeNAMSgQW1i5/l+otsiUe3UzmJJOkAAAGgwJpHy/nshQa9+Jbw | ||
6 | yomvgNMYvuuoD7Ll7iCY/RFFGXivTkki27C9q0qx3afauSLQQWFanGhjeJn7JPy98lMcVl | ||
7 | qnn5XOE5+xxZqA8ONOBD8eH0KBcTH17DH1A1z94p5zZ1VJKIWsBZ0krxgHIXcdv9ucAckj | ||
8 | N0vAEBm+0wsfy2TTOtuqXvcj65wFwknpyy/SSvU0QTr99FiYe9PIhIslBHO6wlqxfKj+Tm | ||
9 | E/nCb75dAVu6gTtS2P0pdOqV/V7VHX5C0z3BROqpKDJJcVeoc7vRkEl+MWfvvQrG66IPEW | ||
10 | luohFXPDPDrxu1zDduyRsmNwpBHChi2rFhxtsjxNK0svMwESeCCKAWmPxnzLJfvMbTCv00 | ||
11 | SpaCr7WhtzsGt73axqSkeOdynp5NNrN7MEdwruMZFirF4BcI2z2H9ugpS+qbLPuE2H5vln | ||
12 | h7NSwBUNwmZ+4TC8MXFH9KIpRg8dNhf66OU610LYiN4+ZfOYCmfQfgQuBGhMTYFMY6O4SB | ||
13 | NCdIavvWY6rDSBq7QC1f4rHpwiXxpkiE43Rd8fM32TaPlBPtA= | ||
14 | -----END OPENSSH PRIVATE KEY----- | ||
diff --git a/regress/unittests/sshkey/tests.c b/regress/unittests/sshkey/tests.c new file mode 100644 index 000000000..13f265cdb --- /dev/null +++ b/regress/unittests/sshkey/tests.c | |||
@@ -0,0 +1,27 @@ | |||
1 | /* $OpenBSD: tests.c,v 1.1 2014/06/24 01:14:18 djm Exp $ */ | ||
2 | /* | ||
3 | * Regress test for sshbuf.h buffer API | ||
4 | * | ||
5 | * Placed in the public domain | ||
6 | */ | ||
7 | |||
8 | #include "includes.h" | ||
9 | |||
10 | #include <openssl/evp.h> | ||
11 | |||
12 | #include "../test_helper/test_helper.h" | ||
13 | |||
14 | void sshkey_tests(void); | ||
15 | void sshkey_file_tests(void); | ||
16 | void sshkey_fuzz_tests(void); | ||
17 | |||
18 | void | ||
19 | tests(void) | ||
20 | { | ||
21 | OpenSSL_add_all_algorithms(); | ||
22 | ERR_load_CRYPTO_strings(); | ||
23 | |||
24 | sshkey_tests(); | ||
25 | sshkey_file_tests(); | ||
26 | sshkey_fuzz_tests(); | ||
27 | } | ||