diff options
-rw-r--r-- | include/libssh/libssh.h | 3 | ||||
-rw-r--r-- | src/dh.c | 23 |
2 files changed, 25 insertions, 1 deletions
diff --git a/include/libssh/libssh.h b/include/libssh/libssh.h index 37214898..320dc032 100644 --- a/include/libssh/libssh.h +++ b/include/libssh/libssh.h @@ -444,7 +444,8 @@ LIBSSH_API int ssh_get_publickey(ssh_session session, ssh_key *key); enum ssh_publickey_hash_type { SSH_PUBLICKEY_HASH_SHA1, - SSH_PUBLICKEY_HASH_MD5 + SSH_PUBLICKEY_HASH_MD5, + SSH_PUBLICKEY_HASH_SHA256 }; LIBSSH_API int ssh_get_publickey_hash(const ssh_key key, enum ssh_publickey_hash_type type, @@ -1039,6 +1039,29 @@ int ssh_get_publickey_hash(const ssh_key key, *hlen = SHA_DIGEST_LEN; } break; + case SSH_PUBLICKEY_HASH_SHA256: + { + SHA256CTX ctx; + + h = malloc(SHA256_DIGEST_LEN); + if (h == NULL) { + rc = -1; + goto out; + } + + ctx = sha256_init(); + if (ctx == NULL) { + free(h); + rc = -1; + goto out; + } + + sha256_update(ctx, ssh_string_data(blob), ssh_string_len(blob)); + sha256_final(h, ctx); + + *hlen = SHA256_DIGEST_LEN; + } + break; case SSH_PUBLICKEY_HASH_MD5: { MD5CTX ctx; |