From: Michael Tremer Date: Fri, 4 Nov 2022 18:21:34 +0000 (+0000) Subject: digests: Add convenience function to fetch a digest X-Git-Tag: 0.9.28~120 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cd1b111fe6b4294829bbdf8bcd5a937e8d370659;p=pakfire.git digests: Add convenience function to fetch a digest Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/digest.c b/src/libpakfire/digest.c index 5f4062033..3cd5717ea 100644 --- a/src/libpakfire/digest.c +++ b/src/libpakfire/digest.c @@ -101,6 +101,45 @@ size_t pakfire_digest_length(const enum pakfire_digest_types digest) { return 0; } +const unsigned char* pakfire_digest_get(struct pakfire_digests* digests, + const enum pakfire_digest_types type, size_t* length) { + // Set length + if (length) + *length = pakfire_digest_length(type); + + // Return a pointer to the digest (if set) + switch (type) { + case PAKFIRE_DIGEST_SHA3_512: + if (pakfire_digest_set(digests->sha3_512)) + return digests->sha3_512; + + case PAKFIRE_DIGEST_SHA3_256: + if (pakfire_digest_set(digests->sha3_256)) + return digests->sha3_256; + + case PAKFIRE_DIGEST_BLAKE2B512: + if (pakfire_digest_set(digests->blake2b512)) + return digests->blake2b512; + + case PAKFIRE_DIGEST_BLAKE2S256: + if (pakfire_digest_set(digests->blake2s256)) + return digests->blake2s256; + + case PAKFIRE_DIGEST_SHA2_512: + if (pakfire_digest_set(digests->sha2_512)) + return digests->sha2_512; + + case PAKFIRE_DIGEST_SHA2_256: + if (pakfire_digest_set(digests->sha2_256)) + return digests->sha2_256; + + case PAKFIRE_DIGEST_UNDEFINED: + break; + } + + return NULL; +} + /* Returns one if the digest is not all zeros. */ diff --git a/src/libpakfire/include/pakfire/digest.h b/src/libpakfire/include/pakfire/digest.h index e69a8044d..85e942451 100644 --- a/src/libpakfire/include/pakfire/digest.h +++ b/src/libpakfire/include/pakfire/digest.h @@ -90,6 +90,9 @@ struct pakfire_digests { size_t pakfire_digest_length(const enum pakfire_digest_types digest); +const unsigned char* pakfire_digest_get(struct pakfire_digests* digests, + const enum pakfire_digest_types type, size_t* length); + #define pakfire_digest_set(digest) __pakfire_digest_set(digest, sizeof(digest)) int __pakfire_digest_set(const unsigned char* digest, const size_t length);