]> git.ipfire.org Git - pakfire.git/commitdiff
digest: Create helper functions to avoid too much code duplication
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 26 Aug 2022 07:40:12 +0000 (07:40 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 26 Aug 2022 07:40:12 +0000 (07:40 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/digest.c

index 9cdba02d1aca5e99818c9be4ae52640242774ff4..362355f231f6c06644af1cf70ba973b6e20247a5 100644 (file)
@@ -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;