diff options
author | djm@openbsd.org <djm@openbsd.org> | 2019-11-29 00:11:21 +0000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2019-11-29 11:17:39 +1100 |
commit | 7404b81f25a4a7847380c0f0cf7f1bea5f0a5cd3 (patch) | |
tree | 16f7be2097be01c679494731ac3694ac9a42d87e | |
parent | d39a865b7af93a7a9b5a64cf7cf0ef4396c80ba3 (diff) | |
download | openssh-git-7404b81f25a4a7847380c0f0cf7f1bea5f0a5cd3.tar.gz |
upstream: perform hashing directly in crypto_hash_sha512() using
libcrypto or libc SHA512 functions rather than calling ssh_digest_memory();
avoids many dependencies on ssh code that complicate standalone use of
ed25519, as we want to do in sk-dummy.so
OpenBSD-Commit-ID: 5a3c37593d3ba7add037b587cec44aaea088496d
-rw-r--r-- | hash.c | 30 |
1 files changed, 22 insertions, 8 deletions
@@ -1,6 +1,6 @@ /* $OpenBSD: hash.c,v 1.4 2017/12/14 21:07:39 naddy Exp $ */ -/* $OpenBSD: hash.c,v 1.5 2018/01/13 00:24:09 naddy Exp $ */ +/* $OpenBSD: hash.c,v 1.6 2019/11/29 00:11:21 djm Exp $ */ /* * Public domain. Author: Christian Weisgerber <naddy@openbsd.org> * API compatible reimplementation of function from nacl @@ -10,18 +10,32 @@ #include <stdarg.h> -#include "digest.h" -#include "log.h" -#include "ssherr.h" +#ifdef WITH_OPENSSL +#include <openssl/evp.h> int crypto_hash_sha512(unsigned char *out, const unsigned char *in, unsigned long long inlen) { - int r; - if ((r = ssh_digest_memory(SSH_DIGEST_SHA512, in, inlen, out, - crypto_hash_sha512_BYTES)) != 0) - fatal("%s: %s", __func__, ssh_err(r)); + if (!EVP_Digest(in, inlen, out, NULL, EVP_sha512(), NULL)) + return -1; return 0; } + +#else +#include <sha2.h> + +int +crypto_hash_sha512(unsigned char *out, const unsigned char *in, + unsigned long long inlen) +{ + + SHA2_CTX ctx; + + SHA512Init(&ctx); + SHA512Update(&ctx, in, inlen); + SHA512Final(out, &ctx); + return 0; +} +#endif /* WITH_OPENSSL */ |