free(hexdigest);
}
- // XXX check if digest matches
+ // Check if digests match
+ if (transfer->evp) {
+ r = CRYPTO_memcmp(transfer->computed_digest, transfer->expected_digest,
+ transfer->computed_digest_length);
+
+ // If they don't match, log an error and try again
+ if (r) {
+ char* computed_hexdigest = __pakfire_hexlify(transfer->computed_digest,
+ transfer->computed_digest_length);
+ char* expected_hexdigest = __pakfire_hexlify(transfer->expected_digest,
+ transfer->expected_digest_length);
+
+ ERROR(downloader->pakfire, "Download checksum didn't match:\n Expected: %s\n Computed: %s\n",
+ expected_hexdigest, computed_hexdigest);
+
+ free(computed_hexdigest);
+ free(expected_hexdigest);
+
+ return pakfire_transfer_fail(downloader, transfer, 0);
+ }
+ }
switch (protocol) {
case CURLPROTO_FILE: