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;
}
// 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;