X-Git-Url: https://www.tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fopenssl%2Fdigest.c;h=0e600b9d07d31a0e83bfcecab08809442fbd467d;hb=52f64cdf954a525bf7de1c5f9d3be60dfbe220b5;hp=9406701b8c3b5a7f224ad149ba5fcf4819db92b7;hpb=9b9230a0a79c670b86f54fadd2807b864ff9d91f;p=tinc diff --git a/src/openssl/digest.c b/src/openssl/digest.c index 9406701b..0e600b9d 100644 --- a/src/openssl/digest.c +++ b/src/openssl/digest.c @@ -29,7 +29,7 @@ #include "../logger.h" static digest_t *digest_open(const EVP_MD *evp_md, int maclength) { - digest_t *digest = xmalloc_and_zero(sizeof *digest); + digest_t *digest = xzalloc(sizeof *digest); digest->digest = evp_md; int digestlen = EVP_MD_size(digest->digest); @@ -88,7 +88,10 @@ bool digest_create(digest_t *digest, const void *indata, size_t inlen, void *out unsigned char tmpdata[len]; if(digest->key) { - HMAC(digest->digest, digest->key, digest->keylength, indata, inlen, tmpdata, NULL); + if(!HMAC(digest->digest, digest->key, digest->keylength, indata, inlen, tmpdata, NULL)) { + logger(DEBUG_ALWAYS, LOG_DEBUG, "Error creating digest: %s", ERR_error_string(ERR_get_error(), NULL)); + return false; + } } else { EVP_MD_CTX ctx; @@ -112,14 +115,23 @@ 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 digest->digest->type; } size_t digest_keylength(const digest_t *digest) { + if(!digest || !digest->digest) + return 0; + return digest->digest->md_size; } size_t digest_length(const digest_t *digest) { + if(!digest) + return 0; + return digest->maclength; }