From a762f3555e016e3d5d76b1ba8158e5396490eb85 Mon Sep 17 00:00:00 2001 From: Nathan Fisher Date: Sat, 22 Jul 2023 23:34:32 -0400 Subject: [PATCH] Attempt to account for differences in libmd on different platforms --- src/haggis.c | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/src/haggis.c b/src/haggis.c index 87985a6..3ca20a0 100644 --- a/src/haggis.c +++ b/src/haggis.c @@ -30,9 +30,20 @@ * other than his own. */ -#include +#if defined (__FreeBSD__) || defined (__DragonFly__) +#include +#include +#include +#elif defined (__NetBSD__) || defined (__OpenBSD__) +#include #include #include +#elif defined (__linux__) +#include +#include +#endif /* if defined (__FreeBSD__) */ + +#include #include #include #include @@ -144,9 +155,21 @@ int validate_md5(struct haggis_file *file) { return 0; } +#if defined (__FreeBSD__) || defined (__DragonFly__) int validate_sha1(struct haggis_file *file) { SHA1_CTX ctx; - u8 digest[SHA1_DIGEST_LENGTH]; + u8 digest[20]; + SHA1_Init(&ctx); + SHA1_Update(&ctx, *file->data, (size_t)file->len.val); + SHA1_Final(digest, &ctx); + if (memcmp(file->cksum->sum->sha1, digest, sizeof(digest))) + return 2; + return 0; +} +#elif defined (__linux__) || defined (__NetBSD__) || defined (__OpenBSD__) +int validate_sha1(struct haggis_file *file) { + SHA1_CTX ctx; + u8 digest[20]; SHA1Init(&ctx); SHA1Update(&ctx, *file->data, (size_t)file->len.val); SHA1Final(digest, &ctx); @@ -154,7 +177,20 @@ int validate_sha1(struct haggis_file *file) { return 2; return 0; } +#endif /* if defined (__FreeBSD__) */ +#if defined (__FreeBSD__) || defined (__DragonFly) || defined (__NetBSD__) +int validate_sha256(struct haggis_file *file) { + SHA256_CTX ctx; + u8 digest[SHA256_DIGEST_LENGTH]; + SHA256_Init(&ctx); + SHA256_Update(&ctx, *file->data, (size_t)file->len.val); + SHA256_Final(digest, &ctx); + if (memcmp(file->cksum->sum->sha256, digest, sizeof(digest))) + return 2; + return 0; +} +#elif defined (__linux__) || defined (__OpenBSD__) int validate_sha256(struct haggis_file *file) { SHA2_CTX ctx; u8 digest[SHA256_DIGEST_LENGTH]; @@ -165,6 +201,7 @@ int validate_sha256(struct haggis_file *file) { return 2; return 0; } +#endif /* if defined (__FreeBSD__) */ int haggis_validate_cksum(struct haggis_file *file) { switch (file->cksum->tag) {