]> git.ipfire.org Git - pakfire.git/commitdiff
digests: Add convenience function to fetch a digest
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 4 Nov 2022 18:21:34 +0000 (18:21 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 4 Nov 2022 18:21:34 +0000 (18:21 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/digest.c
src/libpakfire/include/pakfire/digest.h

index 5f406203315c2fd6009471796db8d4ead2bbd07f..3cd5717ead9e4cee816bfd3ee930547c15171415 100644 (file)
@@ -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.
 */
index e69a8044d7c7bac8e8c2f26cb535bc44feb7fcb7..85e942451897375412c28c22fcb09c3be5929585 100644 (file)
@@ -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);