| --- /dev/null |
| +++ b/tests/test_public_key_auth_succeeds_with_correct_ed25519_key.c |
| @@ -0,0 +1,37 @@ |
| +#include "session_fixture.h" |
| + |
| +#include <libssh2.h> |
| + |
| +#include <stdio.h> |
| + |
| +static const char *USERNAME = "libssh2"; /* configured in Dockerfile */ |
| +static const char *KEY_FILE_PRIVATE = "key_ed25519"; |
| +static const char *KEY_FILE_PUBLIC = "key_ed25519.pub"; /* configured in Dockerfile */ |
| + |
| +int test(LIBSSH2_SESSION *session) |
| +{ |
| + int rc; |
| + const char *userauth_list = NULL; |
| + |
| + userauth_list = libssh2_userauth_list(session, USERNAME, strlen(USERNAME)); |
| + if(userauth_list == NULL) { |
| + print_last_session_error("libssh2_userauth_list"); |
| + return 1; |
| + } |
| + |
| + if(strstr(userauth_list, "publickey") == NULL) { |
| + fprintf(stderr, "'publickey' was expected in userauth list: %s\n", |
| + userauth_list); |
| + return 1; |
| + } |
| + |
| + rc = libssh2_userauth_publickey_fromfile_ex( |
| + session, USERNAME, strlen(USERNAME), KEY_FILE_PUBLIC, KEY_FILE_PRIVATE, |
| + NULL); |
| + if(rc != 0) { |
| + print_last_session_error("libssh2_userauth_publickey_fromfile_ex"); |
| + return 1; |
| + } |
| + |
| + return 0; |
| +} |
| --- /dev/null |
| +++ b/tests/test_public_key_auth_succeeds_with_correct_encrypted_ed25519_key.c |
| @@ -0,0 +1,38 @@ |
| +#include "session_fixture.h" |
| + |
| +#include <libssh2.h> |
| + |
| +#include <stdio.h> |
| + |
| +static const char *USERNAME = "libssh2"; /* configured in Dockerfile */ |
| +static const char *PASSWORD = "libssh2"; |
| +static const char *KEY_FILE_PRIVATE = "key_ed25519_encrypted"; |
| +static const char *KEY_FILE_PUBLIC = "key_ed25519_encrypted.pub"; /* configured in Dockerfile */ |
| + |
| +int test(LIBSSH2_SESSION *session) |
| +{ |
| + int rc; |
| + const char *userauth_list = NULL; |
| + |
| + userauth_list = libssh2_userauth_list(session, USERNAME, strlen(USERNAME)); |
| + if(userauth_list == NULL) { |
| + print_last_session_error("libssh2_userauth_list"); |
| + return 1; |
| + } |
| + |
| + if(strstr(userauth_list, "publickey") == NULL) { |
| + fprintf(stderr, "'publickey' was expected in userauth list: %s\n", |
| + userauth_list); |
| + return 1; |
| + } |
| + |
| + rc = libssh2_userauth_publickey_fromfile_ex( |
| + session, USERNAME, strlen(USERNAME), KEY_FILE_PUBLIC, KEY_FILE_PRIVATE, |
| + PASSWORD); |
| + if(rc != 0) { |
| + print_last_session_error("libssh2_userauth_publickey_fromfile_ex"); |
| + return 1; |
| + } |
| + |
| + return 0; |
| +} |
| --- /dev/null |
| +++ b/tests/test_public_key_auth_succeeds_with_correct_ed25519_key_from_mem.c |
| @@ -0,0 +1,97 @@ |
| +#include "session_fixture.h" |
| + |
| +#include <libssh2.h> |
| + |
| +#include <stdio.h> |
| +#include <stdlib.h> |
| + |
| +static const char *USERNAME = "libssh2"; /* configured in Dockerfile */ |
| +static const char *KEY_FILE_ED25519_PRIVATE = "key_ed25519"; |
| + |
| +int read_file(const char *path, char **buf, size_t *len); |
| + |
| +int test(LIBSSH2_SESSION *session) |
| +{ |
| + int rc; |
| + FILE *fp = NULL; |
| + char *buffer = NULL; |
| + size_t len = 0; |
| + const char *userauth_list = NULL; |
| + |
| + userauth_list = libssh2_userauth_list(session, USERNAME, strlen(USERNAME)); |
| + if(userauth_list == NULL) { |
| + print_last_session_error("libssh2_userauth_list"); |
| + return 1; |
| + } |
| + |
| + if(strstr(userauth_list, "publickey") == NULL) { |
| + fprintf(stderr, "'publickey' was expected in userauth list: %s\n", |
| + userauth_list); |
| + return 1; |
| + } |
| + |
| + if(read_file(KEY_FILE_ED25519_PRIVATE, &buffer, &len)) { |
| + fprintf(stderr, "Reading key file failed."); |
| + return 1; |
| + } |
| + |
| + rc = libssh2_userauth_publickey_frommemory(session, USERNAME, strlen(USERNAME), |
| + NULL, 0, buffer, len, NULL); |
| + |
| + free(buffer); |
| + |
| + if(rc != 0) { |
| + print_last_session_error("libssh2_userauth_publickey_fromfile_ex"); |
| + return 1; |
| + } |
| + |
| + return 0; |
| +} |
| + |
| +int read_file(const char *path, char **out_buffer, size_t *out_len) |
| +{ |
| + int rc; |
| + FILE *fp = NULL; |
| + char *buffer = NULL; |
| + size_t len = 0; |
| + |
| + if(out_buffer == NULL || out_len == NULL || path == NULL) { |
| + fprintf(stderr, "invalid params."); |
| + return 1; |
| + } |
| + |
| + *out_buffer = NULL; |
| + *out_len = 0; |
| + |
| + fp = fopen(path, "r"); |
| + |
| + if(!fp) { |
| + fprintf(stderr, "File could not be read."); |
| + return 1; |
| + } |
| + |
| + fseek(fp, 0L, SEEK_END); |
| + len = ftell(fp); |
| + rewind(fp); |
| + |
| + buffer = calloc(1, len + 1); |
| + if(!buffer) { |
| + fclose(fp); |
| + fprintf(stderr, "Could not alloc memory."); |
| + return 1; |
| + } |
| + |
| + if(1 != fread(buffer, len, 1, fp)) { |
| + fclose(fp); |
| + free(buffer); |
| + fprintf(stderr, "Could not read file into memory."); |
| + return 1; |
| + } |
| + |
| + fclose(fp); |
| + |
| + *out_buffer = buffer; |
| + *out_len = len; |
| + |
| + return 0; |
| +} |