From: Michael Tremer Date: Fri, 26 Aug 2022 07:40:12 +0000 (+0000) Subject: digest: Create helper functions to avoid too much code duplication X-Git-Tag: 0.9.28~364 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7cf2b6a7e59957574f61b5fd0a9ecd8098572aee;p=pakfire.git digest: Create helper functions to avoid too much code duplication Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/digest.c b/src/libpakfire/digest.c index 9cdba02d1..362355f23 100644 --- a/src/libpakfire/digest.c +++ b/src/libpakfire/digest.c @@ -123,6 +123,44 @@ ERROR: return NULL; } +static int __pakfire_digest_update(struct pakfire* pakfire, EVP_MD_CTX* ctx, + const char* buffer, const size_t length) { + int r; + + // Nothing to do if digest not initialized + if (!ctx) + return 0; + + // Update digest + r = EVP_DigestUpdate(ctx, buffer, length); + if (r != 1) { + ERROR(pakfire, "EVP_Digest_Update() failed: %s\n", + ERR_error_string(ERR_get_error(), NULL)); + return 1; + } + + return 0; +} + +static int __pakfire_digest_finalize(struct pakfire* pakfire, + EVP_MD_CTX* ctx, unsigned char* digest) { + int r; + + // Nothing to do if digest not initialized + if (!ctx) + return 0; + + // Finalize digest + r = EVP_DigestFinal_ex(ctx, digest, NULL); + if (r != 1) { + ERROR(pakfire, "EVP_DigestFinal_ex() failed: %s\n", + ERR_error_string(ERR_get_error(), NULL)); + return 1; + } + + return 0; +} + int pakfire_digests_compute_from_file(struct pakfire* pakfire, struct pakfire_digests* digests, const int types, FILE* f) { EVP_MD_CTX* blake2b512_ctx = NULL; @@ -171,93 +209,45 @@ int pakfire_digests_compute_from_file(struct pakfire* pakfire, } // BLAKE2B512 - if (blake2b512_ctx) { - r = EVP_DigestUpdate(blake2b512_ctx, buffer, bytes_read); - if (r != 1) { - ERROR(pakfire, "EVP_Digest_Update() failed: %s\n", - ERR_error_string(ERR_get_error(), NULL)); - r = 1; - goto ERROR; - } - } + r = __pakfire_digest_update(pakfire, blake2b512_ctx, buffer, bytes_read); + if (r) + goto ERROR; // BLAKE2S256 - if (blake2s256_ctx) { - r = EVP_DigestUpdate(blake2s256_ctx, buffer, bytes_read); - if (r != 1) { - ERROR(pakfire, "EVP_Digest_Update() failed: %s\n", - ERR_error_string(ERR_get_error(), NULL)); - r = 1; - goto ERROR; - } - } + r = __pakfire_digest_update(pakfire, blake2s256_ctx, buffer, bytes_read); + if (r) + goto ERROR; // SHA-512 - if (sha512_ctx) { - r = EVP_DigestUpdate(sha512_ctx, buffer, bytes_read); - if (r != 1) { - ERROR(pakfire, "EVP_Digest_Update() failed: %s\n", - ERR_error_string(ERR_get_error(), NULL)); - r = 1; - goto ERROR; - } - } + r = __pakfire_digest_update(pakfire, sha512_ctx, buffer, bytes_read); + if (r) + goto ERROR; // SHA-256 - if (sha256_ctx) { - r = EVP_DigestUpdate(sha256_ctx, buffer, bytes_read); - if (r != 1) { - ERROR(pakfire, "EVP_Digest_Update() failed: %s\n", - ERR_error_string(ERR_get_error(), NULL)); - r = 1; - goto ERROR; - } - } + r = __pakfire_digest_update(pakfire, sha256_ctx, buffer, bytes_read); + if (r) + goto ERROR; } // Finalize BLAKE2b512 - if (blake2b512_ctx) { - r = EVP_DigestFinal_ex(blake2b512_ctx, digests->blake2b512, NULL); - if (r != 1) { - ERROR(pakfire, "EVP_DigestFinal_ex() failed: %s\n", - ERR_error_string(ERR_get_error(), NULL)); - r = 1; - goto ERROR; - } - } + r = __pakfire_digest_finalize(pakfire, blake2b512_ctx, digests->blake2b512); + if (r) + goto ERROR; // Finalize BLAKE2s256 - if (blake2s256_ctx) { - r = EVP_DigestFinal_ex(blake2s256_ctx, digests->blake2s256, NULL); - if (r != 1) { - ERROR(pakfire, "EVP_DigestFinal_ex() failed: %s\n", - ERR_error_string(ERR_get_error(), NULL)); - r = 1; - goto ERROR; - } - } + r = __pakfire_digest_finalize(pakfire, blake2s256_ctx, digests->blake2s256); + if (r) + goto ERROR; // Finalize SHA-512 - if (sha512_ctx) { - r = EVP_DigestFinal_ex(sha512_ctx, digests->sha512, NULL); - if (r != 1) { - ERROR(pakfire, "EVP_DigestFinal_ex() failed: %s\n", - ERR_error_string(ERR_get_error(), NULL)); - r = 1; - goto ERROR; - } - } + r = __pakfire_digest_finalize(pakfire, sha512_ctx, digests->sha512); + if (r) + goto ERROR; // Finalize SHA-256 - if (sha256_ctx) { - r = EVP_DigestFinal_ex(sha256_ctx, digests->sha256, NULL); - if (r != 1) { - ERROR(pakfire, "EVP_DigestFinal_ex() failed: %s\n", - ERR_error_string(ERR_get_error(), NULL)); - r = 1; - goto ERROR; - } - } + r = __pakfire_digest_finalize(pakfire, sha256_ctx, digests->sha256); + if (r) + goto ERROR; // Done! r = 0;