diff options
author | Anderson Toshiyuki Sasaki <ansasaki@redhat.com> | 2019-07-29 13:27:09 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2019-07-29 19:14:24 +0200 |
commit | c03c9b88d12c32bf9f718a627591b0206406824b (patch) | |
tree | ffafedbe75172749671340bb0a720cad2716a158 /tests/unittests | |
parent | 88d777e6782330be8d6916f672ae106a5bd32b10 (diff) | |
download | libssh-c03c9b88d12c32bf9f718a627591b0206406824b.tar.gz libssh-c03c9b88d12c32bf9f718a627591b0206406824b.tar.xz libssh-c03c9b88d12c32bf9f718a627591b0206406824b.zip |
tests: Try PEM files with leading white spaces
This adds a reproducer for T123.
Signed-off-by: Anderson Toshiyuki Sasaki <ansasaki@redhat.com>
Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
Diffstat (limited to 'tests/unittests')
-rw-r--r-- | tests/unittests/torture_pki_dsa.c | 34 | ||||
-rw-r--r-- | tests/unittests/torture_pki_ecdsa.c | 41 | ||||
-rw-r--r-- | tests/unittests/torture_pki_rsa.c | 41 |
3 files changed, 116 insertions, 0 deletions
diff --git a/tests/unittests/torture_pki_dsa.c b/tests/unittests/torture_pki_dsa.c index bb86c513..08e6235c 100644 --- a/tests/unittests/torture_pki_dsa.c +++ b/tests/unittests/torture_pki_dsa.c @@ -199,6 +199,37 @@ static void torture_pki_dsa_import_privkey_base64_comment(void **state) SSH_KEY_FREE(key); } +static void torture_pki_dsa_import_privkey_base64_whitespace(void **state) +{ + int rc, file_str_len; + ssh_key key = NULL; + const char *passphrase = torture_get_testkey_passphrase(); + const char *whitespace_str = " \n\t\t\t\t\t\n\n\n\n\n"; + const char *key_str = NULL; + char *file_str = NULL; + + (void) state; /* unused */ + + key_str = torture_get_testkey(SSH_KEYTYPE_DSS, 0); + assert_non_null(key_str); + + file_str_len = strlen(whitespace_str) + strlen(key_str) + 1; + file_str = malloc(file_str_len); + assert_non_null(file_str); + rc = snprintf(file_str, file_str_len, "%s%s", whitespace_str, key_str); + assert_int_equal(rc, file_str_len - 1); + + rc = ssh_pki_import_privkey_base64(file_str, + passphrase, + NULL, + NULL, + &key); + assert_true(rc == 0); + + free(file_str); + SSH_KEY_FREE(key); +} + static int test_sign_verify_data(ssh_key key, enum ssh_digest_e hash_type, const unsigned char *input, @@ -867,6 +898,9 @@ int torture_run_tests(void) cmocka_unit_test_setup_teardown(torture_pki_dsa_import_privkey_base64_comment, setup_dsa_key, teardown), + cmocka_unit_test_setup_teardown(torture_pki_dsa_import_privkey_base64_whitespace, + setup_dsa_key, + teardown), cmocka_unit_test_setup_teardown(torture_pki_dsa_import_privkey_base64, setup_openssh_dsa_key, teardown), diff --git a/tests/unittests/torture_pki_ecdsa.c b/tests/unittests/torture_pki_ecdsa.c index 13b2a895..161fe713 100644 --- a/tests/unittests/torture_pki_ecdsa.c +++ b/tests/unittests/torture_pki_ecdsa.c @@ -272,6 +272,38 @@ static void torture_pki_ecdsa_import_privkey_base64_comment(void **state) SSH_KEY_FREE(key); } +static void torture_pki_ecdsa_import_privkey_base64_whitespace(void **state) +{ + int rc, file_str_len; + const char *whitespace_str = " \n\t\t\t\t\t\n\n\n\n\n"; + char *key_str = NULL, *file_str = NULL; + ssh_key key = NULL; + const char *passphrase = torture_get_testkey_passphrase(); + + (void) state; /* unused */ + + key_str = torture_pki_read_file(LIBSSH_ECDSA_TESTKEY); + assert_non_null(key_str); + + file_str_len = strlen(whitespace_str) + strlen(key_str) + 1; + file_str = malloc(file_str_len); + assert_non_null(file_str); + rc = snprintf(file_str, file_str_len, "%s%s", whitespace_str, key_str); + assert_int_equal(rc, file_str_len - 1); + + rc = ssh_pki_import_privkey_base64(file_str, passphrase, NULL, NULL, &key); + assert_true(rc == 0); + assert_non_null(key); + + rc = ssh_key_is_private(key); + assert_true(rc == 1); + + free(key_str); + free(file_str); + SSH_KEY_FREE(key); +} + + static void torture_pki_ecdsa_publickey_from_privatekey(void **state) { int rc; @@ -944,6 +976,15 @@ int torture_run_tests(void) { cmocka_unit_test_setup_teardown(torture_pki_ecdsa_import_privkey_base64_comment, setup_ecdsa_key_521, teardown), + cmocka_unit_test_setup_teardown(torture_pki_ecdsa_import_privkey_base64_whitespace, + setup_ecdsa_key_521, + teardown), + cmocka_unit_test_setup_teardown(torture_pki_ecdsa_import_privkey_base64_whitespace, + setup_ecdsa_key_521, + teardown), + cmocka_unit_test_setup_teardown(torture_pki_ecdsa_import_privkey_base64_whitespace, + setup_ecdsa_key_521, + teardown), cmocka_unit_test_setup_teardown(torture_pki_ecdsa_import_privkey_base64, setup_openssh_ecdsa_key_256, teardown), diff --git a/tests/unittests/torture_pki_rsa.c b/tests/unittests/torture_pki_rsa.c index c3305241..d3a02a11 100644 --- a/tests/unittests/torture_pki_rsa.c +++ b/tests/unittests/torture_pki_rsa.c @@ -251,6 +251,44 @@ static void torture_pki_rsa_import_privkey_base64_comment(void **state) SSH_KEY_FREE(key); } +static void torture_pki_rsa_import_privkey_base64_whitespace(void **state) +{ + int rc, file_str_len; + const char *whitespace_str = " \n\t\t\t\t\t\n\n\n\n\n"; + char *key_str = NULL, *file_str = NULL; + ssh_key key = NULL; + const char *passphrase = torture_get_testkey_passphrase(); + enum ssh_keytypes_e type; + + (void) state; /* unused */ + + key_str = torture_pki_read_file(LIBSSH_RSA_TESTKEY); + assert_non_null(key_str); + + file_str_len = strlen(whitespace_str) + strlen(key_str) + 1; + file_str = malloc(file_str_len); + assert_non_null(file_str); + rc = snprintf(file_str, file_str_len, "%s%s", whitespace_str, key_str); + assert_int_equal(rc, file_str_len - 1); + + rc = ssh_pki_import_privkey_base64(file_str, passphrase, NULL, NULL, &key); + assert_true(rc == 0); + assert_non_null(key); + + type = ssh_key_type(key); + assert_true(type == SSH_KEYTYPE_RSA); + + rc = ssh_key_is_private(key); + assert_true(rc == 1); + + rc = ssh_key_is_public(key); + assert_true(rc == 1); + + free(key_str); + free(file_str); + SSH_KEY_FREE(key); +} + static void torture_pki_rsa_publickey_from_privatekey(void **state) { int rc; @@ -920,6 +958,9 @@ int torture_run_tests(void) { cmocka_unit_test_setup_teardown(torture_pki_rsa_import_privkey_base64_comment, setup_rsa_key, teardown), + cmocka_unit_test_setup_teardown(torture_pki_rsa_import_privkey_base64_whitespace, + setup_rsa_key, + teardown), cmocka_unit_test_setup_teardown(torture_pki_rsa_import_privkey_base64, setup_openssh_rsa_key, teardown), |