blob: 7cc58d23963803421d8b4c4871197074cc7cd150 [file] [log] [blame]
--- /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;
+}