From 82081465bfa0e5bd05cd63b29fd247b038cf05a9 Mon Sep 17 00:00:00 2001 From: christos Date: Tue, 13 Feb 2018 22:35:47 +0000 Subject: [PATCH] Provide SHAR384 flavors: The OpenSSL SHA512_Final implementation is re-used to implement SHA384_Final, but does the right thing by checking the internally kept digest size. The NetBSD libc implementation provides two entry points that write a different size digest, so if we use the SHA512_Final from here we end up overwriting memory. --- .../external/bsd/openssl/dist/crypto/evp/m_sha1.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/crypto/external/bsd/openssl/dist/crypto/evp/m_sha1.c b/crypto/external/bsd/openssl/dist/crypto/evp/m_sha1.c index 8f30077a4aa3..5e733dd70553 100644 --- a/crypto/external/bsd/openssl/dist/crypto/evp/m_sha1.c +++ b/crypto/external/bsd/openssl/dist/crypto/evp/m_sha1.c @@ -178,6 +178,16 @@ static int init384(EVP_MD_CTX *ctx) return SHA384_Init(EVP_MD_CTX_md_data(ctx)); } +static int update384(EVP_MD_CTX *ctx, const void *data, size_t count) +{ + return SHA384_Update(EVP_MD_CTX_md_data(ctx), data, count); +} + +static int final384(EVP_MD_CTX *ctx, unsigned char *md) +{ + return SHA384_Final(md, EVP_MD_CTX_md_data(ctx)); +} + static int init512(EVP_MD_CTX *ctx) { return SHA512_Init(EVP_MD_CTX_md_data(ctx)); @@ -200,8 +210,8 @@ static const EVP_MD sha384_md = { SHA384_DIGEST_LENGTH, EVP_MD_FLAG_DIGALGID_ABSENT, init384, - update512, - final512, + update384, + final384, NULL, NULL, SHA512_CBLOCK,