diff --git a/include/libssh/libssh.h b/include/libssh/libssh.h index 34531777..45e11127 100644 --- a/include/libssh/libssh.h +++ b/include/libssh/libssh.h @@ -422,6 +422,8 @@ LIBSSH_API void ssh_key_free (ssh_key key); LIBSSH_API enum ssh_keytypes_e ssh_key_type(ssh_key key); LIBSSH_API const char *ssh_key_type_to_char(enum ssh_keytypes_e type); LIBSSH_API enum ssh_keytypes_e ssh_key_type_from_name(const char *name); +LIBSSH_API int ssh_key_is_public(ssh_key k); + LIBSSH_API int ssh_pki_import_privkey_base64(ssh_key key, ssh_session session, const char *b64_key, const char *passphrase); LIBSSH_API int ssh_userauth_pki_pubkey(ssh_session session, const char *username, diff --git a/include/libssh/pki.h b/include/libssh/pki.h index 06c933cc..d51a3582 100644 --- a/include/libssh/pki.h +++ b/include/libssh/pki.h @@ -39,7 +39,6 @@ struct ssh_key_struct { #endif }; -#define ssh_key_is_public(k) (k && k->flags & SSH_KEY_FLAG_PUBLIC) #define ssh_key_is_private(k) (k && k->flags & SSH_KEY_FLAG_PRIVATE) void ssh_key_clean (ssh_key key); diff --git a/src/pki.c b/src/pki.c index fe3b13b5..52672dbb 100644 --- a/src/pki.c +++ b/src/pki.c @@ -150,6 +150,21 @@ enum ssh_keytypes_e ssh_key_type_from_name(const char *name) { return SSH_KEYTYPE_UNKNOWN; } +/** + * @brief Check if the key has/is a public key. + * + * @param[in] k The key to check. + * + * @return 1 if it is a public key, 0 if not. + */ +int ssh_key_is_public(ssh_key k) { + if (k == NULL) { + return 0; + } + + return (k->flags & SSH_KEY_FLAG_PUBLIC); +} + /** * @brief import a key from a file * @param[out] key the ssh_key to update