md5, sha256: just deinit with a NULL digest

This commit is contained in:
Viktor Szakats 2026-06-30 01:55:53 +02:00
parent 836d17e85e
commit 3c6d596905
No known key found for this signature in database
3 changed files with 49 additions and 24 deletions

View file

@ -53,7 +53,7 @@ static int my_md4_init(my_md4_ctx *ctx)
if(!*ctx)
return 0;
if(!EVP_DigestInit_ex(*ctx, EVP_md4(), NULL))
if(!EVP_DigestInit_ex(*ctx, EVP_md4(), NULL)) {
EVP_MD_CTX_free(*ctx);
return 0;
}

View file

@ -65,10 +65,11 @@ static void my_md5_update(void *ctx,
static void my_md5_final(unsigned char *digest, void *ctx)
{
if(digest)
#if NETTLE_VERSION_MAJOR >= 4
md5_digest(ctx, digest);
md5_digest(ctx, digest);
#else
md5_digest(ctx, MD5_DIGEST_LEN, digest);
md5_digest(ctx, MD5_DIGEST_LEN, digest);
#endif
}
@ -102,7 +103,8 @@ static void my_md5_update(void *in,
static void my_md5_final(unsigned char *digest, void *in)
{
EVP_MD_CTX **ctx = (EVP_MD_CTX **)in;
(void)EVP_DigestFinal_ex(*ctx, digest, NULL);
if(digest)
(void)EVP_DigestFinal_ex(*ctx, digest, NULL);
EVP_MD_CTX_free(*ctx);
*ctx = NULL;
}
@ -127,7 +129,8 @@ static void my_md5_update(void *ctx,
static void my_md5_final(unsigned char *digest, void *ctx)
{
(void)wc_Md5Final(ctx, digest);
if(digest)
(void)wc_Md5Final(ctx, digest);
}
#elif defined(USE_MBEDTLS) && \
@ -153,8 +156,10 @@ static void my_md5_update(void *ctx,
static void my_md5_final(unsigned char *digest, void *ctx)
{
size_t actual_length;
(void)psa_hash_finish(ctx, digest, MD5_DIGEST_LEN, &actual_length);
if(digest) {
size_t actual_length;
(void)psa_hash_finish(ctx, digest, MD5_DIGEST_LEN, &actual_length);
}
}
#elif (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && \
@ -191,7 +196,8 @@ static void my_md5_update(void *ctx,
static void my_md5_final(unsigned char *digest, void *ctx)
{
CC_MD5_Final(digest, ctx);
if(digest)
CC_MD5_Final(digest, ctx);
}
#elif defined(USE_WIN32_CRYPTO)
@ -229,12 +235,17 @@ static void my_md5_update(void *in,
static void my_md5_final(unsigned char *digest, void *in)
{
my_md5_ctx *ctx = (my_md5_ctx *)in;
unsigned long length = 0;
CryptGetHashParam(ctx->hHash, HP_HASHVAL, NULL, &length, 0);
if(length == MD5_DIGEST_LEN)
CryptGetHashParam(ctx->hHash, HP_HASHVAL, digest, &length, 0);
if(digest) {
unsigned long length = 0;
CryptGetHashParam(ctx->hHash, HP_HASHVAL, NULL, &length, 0);
if(length == MD5_DIGEST_LEN)
CryptGetHashParam(ctx->hHash, HP_HASHVAL, digest, &length, 0);
}
if(ctx->hHash)
CryptDestroyHash(ctx->hHash);
if(ctx->hCryptProv)
CryptReleaseContext(ctx->hCryptProv, 0);
}
@ -485,6 +496,9 @@ static void my_md5_final(unsigned char *digest, void *in)
unsigned int used, available;
my_md5_ctx *ctx = (my_md5_ctx *)in;
if(!digest)
return;
used = ctx->lo & 0x3f;
ctx->buffer[used++] = 0x80;

View file

@ -81,7 +81,8 @@ static void my_sha256_update(void *in,
static void my_sha256_final(unsigned char *digest, void *in)
{
EVP_MD_CTX **ctx = (EVP_MD_CTX **)in;
(void)EVP_DigestFinal_ex(*ctx, digest, NULL);
if(digest)
(void)EVP_DigestFinal_ex(*ctx, digest, NULL);
EVP_MD_CTX_free(*ctx);
*ctx = NULL;
}
@ -108,7 +109,8 @@ static void my_sha256_update(void *in,
static void my_sha256_final(unsigned char *digest, void *in)
{
(void)wc_Sha256Final(in, digest);
if(digest)
(void)wc_Sha256Final(in, digest);
}
#elif defined(USE_GNUTLS)
@ -132,10 +134,11 @@ static void my_sha256_update(void *ctx,
static void my_sha256_final(unsigned char *digest, void *ctx)
{
if(digest)
#if NETTLE_VERSION_MAJOR >= 4
sha256_digest(ctx, digest);
sha256_digest(ctx, digest);
#else
sha256_digest(ctx, SHA256_DIGEST_SIZE, digest);
sha256_digest(ctx, SHA256_DIGEST_SIZE, digest);
#endif
}
@ -163,9 +166,11 @@ static void my_sha256_update(void *ctx,
static void my_sha256_final(unsigned char *digest, void *ctx)
{
size_t actual_length;
(void)psa_hash_finish(ctx, digest, CURL_SHA256_DIGEST_LENGTH,
&actual_length);
if(digest) {
size_t actual_length;
(void)psa_hash_finish(ctx, digest, CURL_SHA256_DIGEST_LENGTH,
&actual_length);
}
}
#elif (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && \
@ -191,7 +196,8 @@ static void my_sha256_update(void *ctx,
static void my_sha256_final(unsigned char *digest, void *ctx)
{
(void)CC_SHA256_Final(digest, ctx);
if(digest)
(void)CC_SHA256_Final(digest, ctx);
}
#elif defined(USE_WIN32_CRYPTO)
@ -230,11 +236,13 @@ static void my_sha256_update(void *in,
static void my_sha256_final(unsigned char *digest, void *in)
{
my_sha256_ctx *ctx = (my_sha256_ctx *)in;
unsigned long length = 0;
CryptGetHashParam(ctx->hHash, HP_HASHVAL, NULL, &length, 0);
if(length == CURL_SHA256_DIGEST_LENGTH)
CryptGetHashParam(ctx->hHash, HP_HASHVAL, digest, &length, 0);
if(digest) {
unsigned long length = 0;
CryptGetHashParam(ctx->hHash, HP_HASHVAL, NULL, &length, 0);
if(length == CURL_SHA256_DIGEST_LENGTH)
CryptGetHashParam(ctx->hHash, HP_HASHVAL, digest, &length, 0);
}
if(ctx->hHash)
CryptDestroyHash(ctx->hHash);
@ -430,6 +438,9 @@ static void my_sha256_final(unsigned char *out, void *ctx)
struct sha256_state *md = ctx;
int i;
if(!out)
return;
if(md->curlen >= sizeof(md->buf))
return;