From cd1b111fe6b4294829bbdf8bcd5a937e8d370659 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Fri, 4 Nov 2022 18:21:34 +0000 Subject: [PATCH] digests: Add convenience function to fetch a digest Signed-off-by: Michael Tremer --- src/libpakfire/digest.c | 39 +++++++++++++++++++++++++ src/libpakfire/include/pakfire/digest.h | 3 ++ 2 files changed, 42 insertions(+) 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); -- 2.39.5