diff --git a/include/libssh/pki.h b/include/libssh/pki.h index 2015f5d5..463f614f 100644 --- a/include/libssh/pki.h +++ b/include/libssh/pki.h @@ -22,6 +22,11 @@ #ifndef PKI_H_ #define PKI_H_ +#define RSA_HEADER_BEGIN "-----BEGIN RSA PRIVATE KEY-----" +#define RSA_HEADER_END "-----END RSA PRIVATE KEY-----" +#define DSA_HEADER_BEGIN "-----BEGIN DSA PRIVATE KEY-----" +#define DSA_HEADER_END "-----END DSA PRIVATE KEY-----" + #define SSH_KEY_FLAG_EMPTY 0 #define SSH_KEY_FLAG_PUBLIC 1 #define SSH_KEY_FLAG_PRIVATE 2 @@ -52,5 +57,6 @@ ssh_string ssh_pki_do_sign(ssh_session session, ssh_buffer sigbuf, /* temporary functions, to be removed after migration to ssh_key */ ssh_public_key ssh_pki_convert_key_to_publickey(ssh_key key); +enum ssh_keytypes_e pki_privatekey_type_from_string(const char *privkey); #endif /* PKI_H_ */ diff --git a/src/pki.c b/src/pki.c index fd30ee4f..c3947ae5 100644 --- a/src/pki.c +++ b/src/pki.c @@ -37,6 +37,18 @@ #include "libssh/keys.h" #include "libssh/buffer.h" +enum ssh_keytypes_e pki_privatekey_type_from_string(const char *privkey) { + if (strncmp(privkey, DSA_HEADER_BEGIN, strlen(DSA_HEADER_BEGIN)) == 0) { + return SSH_KEYTYPE_DSS; + } + + if (strncmp(privkey, RSA_HEADER_BEGIN, strlen(RSA_HEADER_BEGIN)) == 0) { + return SSH_KEYTYPE_RSA; + } + + return SSH_KEYTYPE_UNKNOWN; +} + /** * @brief creates a new empty SSH key * @returns an empty ssh_key handle, or NULL on error.