aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnderson Toshiyuki Sasaki <ansasaki@redhat.com>2019-07-29 13:27:09 +0200
committerAndreas Schneider <asn@cryptomilk.org>2019-07-29 19:14:24 +0200
commitc03c9b88d12c32bf9f718a627591b0206406824b (patch)
treeffafedbe75172749671340bb0a720cad2716a158
parent88d777e6782330be8d6916f672ae106a5bd32b10 (diff)
downloadlibssh-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>
-rw-r--r--tests/unittests/torture_pki_dsa.c34
-rw-r--r--tests/unittests/torture_pki_ecdsa.c41
-rw-r--r--tests/unittests/torture_pki_rsa.c41
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),