From: Michael Tremer Date: Wed, 24 Aug 2022 16:16:11 +0000 (+0000) Subject: digest: Add function to check whether a digest is set X-Git-Tag: 0.9.28~372 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8c36f159ed44f060cca5238accbc07a80ef7c369;p=pakfire.git digest: Add function to check whether a digest is set Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/digest.c b/src/libpakfire/digest.c index de99f6db6..0e628f87f 100644 --- a/src/libpakfire/digest.c +++ b/src/libpakfire/digest.c @@ -44,6 +44,18 @@ size_t pakfire_digest_length(const enum pakfire_digest_types digest) { return 0; } +/* + Returns one if the digest is not all zeros. +*/ +int __pakfire_digest_set(const unsigned char* digest, const size_t length) { + for (unsigned int i = 0; i < length; i++) { + if (digest[i]) + return 1; + } + + return 0; +} + static int pakfire_digests_check_length(struct pakfire* pakfire, const enum pakfire_digest_types type, const size_t length) { const size_t l = pakfire_digest_length(type); diff --git a/src/libpakfire/file.c b/src/libpakfire/file.c index eafa22c24..6a5410de9 100644 --- a/src/libpakfire/file.c +++ b/src/libpakfire/file.c @@ -85,20 +85,6 @@ struct pakfire_file { //int is_datafile; }; -/* - Returns one if the digest is not all zeros. -*/ -#define pakfire_file_has_digest(digest) __pakfire_file_has_digest(digest, sizeof(digest)) - -static int __pakfire_file_has_digest(const unsigned char* digest, const size_t length) { - for (unsigned int i = 0; i < length; i++) { - if (digest[i]) - return 1; - } - - return 0; -} - static int pakfire_file_from_archive_entry(struct pakfire_file* file, struct archive_entry* entry) { const char* attr = NULL; const void* value = NULL; @@ -288,12 +274,12 @@ struct archive_entry* pakfire_file_archive_entry(struct pakfire_file* file) { // Copy digests // SHA-512 - if (pakfire_file_has_digest(file->digests.sha512)) + if (pakfire_digest_set(file->digests.sha512)) archive_entry_xattr_add_entry(entry, "PAKFIRE.digests.sha512", file->digests.sha512, sizeof(file->digests.sha512)); // SHA-256 - if (pakfire_file_has_digest(file->digests.sha256)) + if (pakfire_digest_set(file->digests.sha256)) archive_entry_xattr_add_entry(entry, "PAKFIRE.digests.sha256", file->digests.sha256, sizeof(file->digests.sha256)); @@ -473,7 +459,7 @@ PAKFIRE_EXPORT const unsigned char* pakfire_file_get_digest( switch (type) { case PAKFIRE_DIGEST_SHA512: - if (!pakfire_file_has_digest(file->digests.sha512)) + if (!pakfire_digest_set(file->digests.sha512)) return NULL; if (length) @@ -482,7 +468,7 @@ PAKFIRE_EXPORT const unsigned char* pakfire_file_get_digest( return file->digests.sha512; case PAKFIRE_DIGEST_SHA256: - if (!pakfire_file_has_digest(file->digests.sha256)) + if (!pakfire_digest_set(file->digests.sha256)) return NULL; if (length) @@ -749,10 +735,10 @@ static int pakfire_file_verify_payload(struct pakfire_file* file, const struct s } // Check if this file has any digests at all - if (pakfire_file_has_digest(file->digests.sha512)) + if (pakfire_digest_set(file->digests.sha512)) digest_types |= PAKFIRE_DIGEST_SHA512; - if (pakfire_file_has_digest(file->digests.sha256)) + if (pakfire_digest_set(file->digests.sha256)) digest_types |= PAKFIRE_DIGEST_SHA256; if (!digest_types) { diff --git a/src/libpakfire/include/pakfire/digest.h b/src/libpakfire/include/pakfire/digest.h index 63fcfa8d8..2af445154 100644 --- a/src/libpakfire/include/pakfire/digest.h +++ b/src/libpakfire/include/pakfire/digest.h @@ -50,6 +50,9 @@ struct pakfire_digests { size_t pakfire_digest_length(const enum pakfire_digest_types digest); +#define pakfire_digest_set(digest) __pakfire_digest_set(digest, sizeof(digest)) +int __pakfire_digest_set(const unsigned char* digest, const size_t length); + int pakfire_digests_compute_from_file(struct pakfire* pakfire, struct pakfire_digests* digests, int flags, FILE* f);