X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fopenssl%2Fdigest.c;h=c303785dfd712047fe81316a105d67b10d018d73;hb=b1c29464b68d756035acc4b4d1681f05d8831eaf;hp=8d97e3bf9ed345c53e5db8dc7949297e06920c65;hpb=ee34ac3d6125b7d1f41afa82c7e30f0a7205546c;p=tinc diff --git a/src/openssl/digest.c b/src/openssl/digest.c index 8d97e3bf..c303785d 100644 --- a/src/openssl/digest.c +++ b/src/openssl/digest.c @@ -93,14 +93,19 @@ bool digest_create(digest_t *digest, const void *indata, size_t inlen, void *out return false; } } else { - EVP_MD_CTX ctx; + EVP_MD_CTX *ctx = EVP_MD_CTX_create(); + if(!ctx) + abort(); - if(!EVP_DigestInit(&ctx, digest->digest) - || !EVP_DigestUpdate(&ctx, indata, inlen) - || !EVP_DigestFinal(&ctx, tmpdata, NULL)) { + if(!EVP_DigestInit(ctx, digest->digest) + || !EVP_DigestUpdate(ctx, indata, inlen) + || !EVP_DigestFinal(ctx, tmpdata, NULL)) { logger(DEBUG_ALWAYS, LOG_DEBUG, "Error creating digest: %s", ERR_error_string(ERR_get_error(), NULL)); + EVP_MD_CTX_destroy(ctx); return false; } + + EVP_MD_CTX_destroy(ctx); } memcpy(outdata, tmpdata, digest->maclength); @@ -115,17 +120,26 @@ bool digest_verify(digest_t *digest, const void *indata, size_t inlen, const voi } int digest_get_nid(const digest_t *digest) { - return digest->digest ? digest->digest->type : 0; + if(!digest || !digest->digest) + return 0; + + return EVP_MD_type(digest->digest); } size_t digest_keylength(const digest_t *digest) { - return digest->digest->md_size; + if(!digest || !digest->digest) + return 0; + + return EVP_MD_size(digest->digest); } size_t digest_length(const digest_t *digest) { + if(!digest) + return 0; + return digest->maclength; } bool digest_active(const digest_t *digest) { - return digest && digest->digest && digest->digest->type != 0; + return digest && digest->digest && EVP_MD_type(digest->digest) != 0; }