#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) {
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;
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;
}
}
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;
}
}