6
#define LIBSSH_RSA_TESTKEY "libssh_testkey.id_rsa"
7
#define LIBSSH_DSA_TESTKEY "libssh_testkey.id_dsa"
8
#define LIBSSH_PASSPHRASE "libssh-rocks"
10
static void setup_rsa_key(void **state) {
14
unlink(LIBSSH_RSA_TESTKEY);
15
unlink(LIBSSH_RSA_TESTKEY ".pub");
17
rc = system("ssh-keygen -t rsa -q -N \"\" -f " LIBSSH_RSA_TESTKEY);
24
static void setup_dsa_key(void **state) {
28
unlink(LIBSSH_DSA_TESTKEY);
29
unlink(LIBSSH_DSA_TESTKEY ".pub");
31
rc = system("ssh-keygen -t dsa -q -N \"\" -f " LIBSSH_DSA_TESTKEY);
38
static void setup_both_keys(void **state) {
44
static void setup_both_keys_passphrase(void **state) {
48
rc = system("ssh-keygen -t rsa -N " LIBSSH_PASSPHRASE " -f " LIBSSH_RSA_TESTKEY);
51
rc = system("ssh-keygen -t dsa -N " LIBSSH_PASSPHRASE " -f " LIBSSH_DSA_TESTKEY);
57
static void teardown(void **state) {
58
unlink(LIBSSH_DSA_TESTKEY);
59
unlink(LIBSSH_DSA_TESTKEY ".pub");
61
unlink(LIBSSH_RSA_TESTKEY);
62
unlink(LIBSSH_RSA_TESTKEY ".pub");
67
static void torture_pubkey_from_file(void **state) {
68
ssh_session session = *state;
72
rc = ssh_try_publickey_from_file(session, LIBSSH_RSA_TESTKEY, &pubkey, &type);
76
ssh_string_free(pubkey);
78
/* test if it returns 1 if pubkey doesn't exist */
79
unlink(LIBSSH_RSA_TESTKEY ".pub");
81
rc = ssh_try_publickey_from_file(session, LIBSSH_RSA_TESTKEY, &pubkey, &type);
84
/* test if it returns -1 if privkey doesn't exist */
85
unlink(LIBSSH_RSA_TESTKEY);
87
rc = ssh_try_publickey_from_file(session, LIBSSH_RSA_TESTKEY, &pubkey, &type);
88
assert_true(rc == -1);
91
static int torture_read_one_line(const char *filename, char *buffer, size_t len) {
95
fp = fopen(filename, "r");
100
rc = fread(buffer, len, 1, fp);
101
if (rc != 0 || ferror(fp)) {
111
static void torture_pubkey_generate_from_privkey(void **state) {
112
ssh_session session = *state;
113
ssh_private_key privkey = NULL;
114
ssh_public_key pubkey = NULL;
115
ssh_string pubkey_orig = NULL;
116
ssh_string pubkey_new = NULL;
117
char pubkey_line_orig[512] = {0};
118
char pubkey_line_new[512] = {0};
123
/* read the publickey */
124
rc = ssh_try_publickey_from_file(session, LIBSSH_RSA_TESTKEY, &pubkey_orig,
126
assert_true(rc == 0);
127
assert_true(pubkey_orig != NULL);
129
rc = torture_read_one_line(LIBSSH_RSA_TESTKEY ".pub", pubkey_line_orig,
130
sizeof(pubkey_line_orig));
131
assert_true(rc == 0);
133
/* remove the public key, generate it from the private key and write it. */
134
unlink(LIBSSH_RSA_TESTKEY ".pub");
136
privkey = privatekey_from_file(session, LIBSSH_RSA_TESTKEY, 0, NULL);
137
assert_true(privkey != NULL);
139
pubkey = publickey_from_privatekey(privkey);
140
assert_true(pubkey != NULL);
141
type_new = privkey->type;
142
privatekey_free(privkey);
144
pubkey_new = publickey_to_string(pubkey);
145
publickey_free(pubkey);
147
assert_true(pubkey_new != NULL);
149
assert_true(ssh_string_len(pubkey_orig) == ssh_string_len(pubkey_new));
150
assert_memory_equal(ssh_string_data(pubkey_orig),
151
ssh_string_data(pubkey_new),
152
ssh_string_len(pubkey_orig));
154
rc = ssh_publickey_to_file(session, LIBSSH_RSA_TESTKEY ".pub", pubkey_new, type_new);
155
assert_true(rc == 0);
157
rc = torture_read_one_line(LIBSSH_RSA_TESTKEY ".pub", pubkey_line_new,
158
sizeof(pubkey_line_new));
159
assert_true(rc == 0);
161
assert_string_equal(pubkey_line_orig, pubkey_line_new);
163
ssh_string_free(pubkey_orig);
164
ssh_string_free(pubkey_new);
168
* @brief tests the privatekey_from_file function without passphrase
170
static void torture_privatekey_from_file(void **state) {
171
ssh_session session = *state;
172
ssh_private_key key = NULL;
174
key = privatekey_from_file(session, LIBSSH_RSA_TESTKEY, SSH_KEYTYPE_RSA, NULL);
175
assert_true(key != NULL);
177
privatekey_free(key);
181
key = privatekey_from_file(session, LIBSSH_DSA_TESTKEY, SSH_KEYTYPE_DSS, NULL);
182
assert_true(key != NULL);
184
privatekey_free(key);
188
/* Test the automatic type discovery */
189
key = privatekey_from_file(session, LIBSSH_RSA_TESTKEY, 0, NULL);
190
assert_true(key != NULL);
192
privatekey_free(key);
196
key = privatekey_from_file(session, LIBSSH_DSA_TESTKEY, 0, NULL);
197
assert_true(key != NULL);
199
privatekey_free(key);
205
* @brief tests the privatekey_from_file function with passphrase
207
static void torture_privatekey_from_file_passphrase(void **state) {
208
ssh_session session = *state;
209
ssh_private_key key = NULL;
211
key = privatekey_from_file(session, LIBSSH_RSA_TESTKEY, SSH_KEYTYPE_RSA, LIBSSH_PASSPHRASE);
212
assert_true(key != NULL);
214
privatekey_free(key);
218
key = privatekey_from_file(session, LIBSSH_DSA_TESTKEY, SSH_KEYTYPE_DSS, LIBSSH_PASSPHRASE);
219
assert_true(key != NULL);
221
privatekey_free(key);
225
/* Test the automatic type discovery */
226
key = privatekey_from_file(session, LIBSSH_RSA_TESTKEY, 0, LIBSSH_PASSPHRASE);
227
assert_true(key != NULL);
229
privatekey_free(key);
233
key = privatekey_from_file(session, LIBSSH_DSA_TESTKEY, 0, LIBSSH_PASSPHRASE);
234
assert_true(key != NULL);
236
privatekey_free(key);
241
int torture_run_tests(void) {
243
const UnitTest tests[] = {
244
unit_test_setup_teardown(torture_pubkey_from_file,
247
unit_test_setup_teardown(torture_pubkey_generate_from_privkey,
248
setup_rsa_key, teardown),
249
unit_test_setup_teardown(torture_privatekey_from_file,
252
unit_test_setup_teardown(torture_privatekey_from_file_passphrase,
253
setup_both_keys_passphrase, teardown),