]> git.ipfire.org Git - pakfire.git/commitdiff
digest: Show some useful debugging output on mismatch
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 24 Aug 2022 17:03:04 +0000 (17:03 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 24 Aug 2022 17:03:04 +0000 (17:03 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/digest.c

index 0e628f87f18bbb66a69ae36be061233c45f40d08..219006087d6daeed603fc256d06771163fb8def6 100644 (file)
@@ -28,6 +28,7 @@
 #include <pakfire/logging.h>
 #include <pakfire/pakfire.h>
 #include <pakfire/private.h>
+#include <pakfire/util.h>
 
 size_t pakfire_digest_length(const enum pakfire_digest_types digest) {
        switch (digest) {
@@ -190,6 +191,24 @@ ERROR:
        return r;
 }
 
+static void pakfire_digests_compare_mismatch(struct pakfire* pakfire, const char* what,
+               const unsigned char* digest1, const unsigned char* digest2, const size_t length) {
+       char* hexdigest1 = __pakfire_hexlify(digest1, length);
+       char* hexdigest2 = __pakfire_hexlify(digest2, length);
+
+       DEBUG(pakfire, "%s digest does not match:\n", what);
+
+       if (hexdigest1)
+               DEBUG(pakfire, "  Digest 1: %s\n", hexdigest1);
+       if (hexdigest2)
+               DEBUG(pakfire, "  Digest 2: %s\n", hexdigest2);
+
+       if (hexdigest1)
+               free(hexdigest1);
+       if (hexdigest2)
+               free(hexdigest2);
+}
+
 int pakfire_digests_compare(struct pakfire* pakfire, const struct pakfire_digests* digests1,
                const struct pakfire_digests* digests2, const int types) {
        int r;
@@ -204,7 +223,8 @@ int pakfire_digests_compare(struct pakfire* pakfire, const struct pakfire_digest
        if (types & PAKFIRE_DIGEST_SHA512) {
                r = CRYPTO_memcmp(digests1->sha512, digests2->sha512, sizeof(digests1->sha512));
                if (r) {
-                       DEBUG(pakfire, "SHA-512 digest does not match\n");
+                       pakfire_digests_compare_mismatch(pakfire, "SHA-512",
+                               digests1->sha512, digests2->sha512, sizeof(digests1->sha512));
                        return 1;
                }
        }
@@ -213,7 +233,8 @@ int pakfire_digests_compare(struct pakfire* pakfire, const struct pakfire_digest
        if (types & PAKFIRE_DIGEST_SHA256) {
                r = CRYPTO_memcmp(digests1->sha256, digests2->sha256, sizeof(digests1->sha256));
                if (r) {
-                       DEBUG(pakfire, "SHA-256 digest does not match\n");
+                       pakfire_digests_compare_mismatch(pakfire, "SHA-256",
+                               digests1->sha256, digests2->sha256, sizeof(digests1->sha256));
                        return 1;
                }
        }