From: Matt Caswell Date: Tue, 20 Feb 2018 14:53:06 +0000 (+0000) Subject: Fix some undefined behaviour in the Curve448 code X-Git-Tag: OpenSSL_1_1_1-pre2~48 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=7876dbffcee9a53ac8a75e90c0443c1193edb580;p=oweals%2Fopenssl.git Fix some undefined behaviour in the Curve448 code We can't add NULL data into a hash Reviewed-by: Rich Salz (Merged from https://github.com/openssl/openssl/pull/5418) --- diff --git a/crypto/ec/curve448/eddsa.c b/crypto/ec/curve448/eddsa.c index 7175715703..d31887638c 100644 --- a/crypto/ec/curve448/eddsa.c +++ b/crypto/ec/curve448/eddsa.c @@ -63,7 +63,8 @@ static c448_error_t hash_init_with_dom(EVP_MD_CTX *hashctx, uint8_t prehashed, if (!EVP_DigestInit_ex(hashctx, EVP_shake256(), NULL) || !EVP_DigestUpdate(hashctx, dom_s, strlen(dom_s)) || !EVP_DigestUpdate(hashctx, dom, sizeof(dom)) - || !EVP_DigestUpdate(hashctx, context, context_len)) + || (context_len > 0 + && !EVP_DigestUpdate(hashctx, context, context_len))) return C448_FAILURE; return C448_SUCCESS; @@ -160,7 +161,8 @@ c448_error_t c448_ed448_sign( || !EVP_DigestUpdate(hashctx, expanded + EDDSA_448_PRIVATE_BYTES, EDDSA_448_PRIVATE_BYTES) - || !EVP_DigestUpdate(hashctx, message, message_len)) { + || (message_len > 0 + && !EVP_DigestUpdate(hashctx, message, message_len))) { OPENSSL_cleanse(expanded, sizeof(expanded)); goto err; } @@ -200,7 +202,8 @@ c448_error_t c448_ed448_sign( if (!hash_init_with_dom(hashctx, prehashed, 0, context, context_len) || !EVP_DigestUpdate(hashctx, nonce_point, sizeof(nonce_point)) || !EVP_DigestUpdate(hashctx, pubkey, EDDSA_448_PUBLIC_BYTES) - || !EVP_DigestUpdate(hashctx, message, message_len) + || (message_len > 0 + && !EVP_DigestUpdate(hashctx, message, message_len)) || !EVP_DigestFinalXOF(hashctx, challenge, sizeof(challenge))) goto err;