From e159900f2e07966113a0a5aa66d5fdaea73d2af6 Mon Sep 17 00:00:00 2001 From: Nathan Fisher Date: Wed, 9 Aug 2023 15:28:02 -0400 Subject: [PATCH] Add tests for checksum creation --- include/haggis.h | 2 +- src/haggis.c | 71 +++++++++++++++++++++++++++++++++++++++--- test/Makefile | 8 +++-- test/check_header.c | 13 ++++++++ test/haggis_private.h | 2 +- test/init_file | Bin 0 -> 27960 bytes test/init_file_md5.c | 14 +++++++++ test/init_file_sha1.c | 15 +++++++++ test/store_header.c | 13 ++++++++ 9 files changed, 130 insertions(+), 8 deletions(-) create mode 100644 test/check_header.c create mode 100755 test/init_file create mode 100644 test/init_file_md5.c create mode 100644 test/init_file_sha1.c create mode 100644 test/store_header.c diff --git a/include/haggis.h b/include/haggis.h index 4b1f602..761da60 100644 --- a/include/haggis.h +++ b/include/haggis.h @@ -116,7 +116,7 @@ typedef struct { } haggis_node; void haggis_node_deinit(haggis_node *node); -haggis_node* haggis_create_node(char *file, haggis_hardlink_list *list); +haggis_node* haggis_create_node(char *file, haggis_algorithm a, haggis_hardlink_list *list); int haggis_extract_node(FILE *stram, haggis_node *node); int haggis_load_node(FILE *stream, haggis_node *node); int haggis_store_node(FILE *stream, haggis_node *node); diff --git a/src/haggis.c b/src/haggis.c index e5aed3d..f504135 100644 --- a/src/haggis.c +++ b/src/haggis.c @@ -31,6 +31,7 @@ */ #include // PATH_MAX +#include #include // uint_t #if defined(__FreeBSD__) || defined(__DragonFly__) @@ -72,7 +73,7 @@ int haggis_check_header(FILE *stream) { return 1; if (memcmp(buf, header, 7)) return 2; - return 1; + return 0; } void haggis_device_init(dev_t rdev, haggis_device *dev) { @@ -158,6 +159,15 @@ int haggis_load_cksum(FILE *stream, haggis_checksum *cksum) { return 0; } +void init_md5(haggis_file *f) { + MD5_CTX ctx; + + f->cksum.tag = md5; + MD5Init(&ctx); + MD5Update(&ctx, f->data, (size_t)f->len.val); + MD5Final(f->cksum.sum.md5, &ctx); +} + int validate_md5(haggis_file *file) { MD5_CTX ctx; u8 digest[16]; @@ -171,6 +181,15 @@ int validate_md5(haggis_file *file) { } #if defined(__FreeBSD__) || defined(__DragonFly__) +void init_sha1(haggis_file *f) { + SHA1_CTX ctx; + + f->cksum.tag = sha1; + SHA1_Init(&ctx); + SHA1_Update(&ctx, f->data, (size_t)f->len.val); + SHA1_Final(f->cksum.sum.sha1, &ctx); +} + int validate_sha1(haggis_file *file) { SHA1_CTX ctx; u8 digest[20]; @@ -183,6 +202,15 @@ int validate_sha1(haggis_file *file) { return 0; } #elif defined(__linux__) || defined(__NetBSD__) || defined(__OpenBSD__) +void init_sha1(haggis_file *f) { + SHA1_CTX ctx; + + f->cksum.tag = sha1; + SHA1_Init(&ctx); + SHA1_Update(&ctx, f->data, (size_t)f->len.val); + SHA1_Final(f->cksum.sum.sha1, &ctx); +} + int validate_sha1(haggis_file *file) { SHA1_CTX ctx; u8 digest[20]; @@ -197,6 +225,15 @@ int validate_sha1(haggis_file *file) { #endif /* if defined (__FreeBSD__) */ #if defined(__FreeBSD__) || defined(__DragonFly) || defined(__NetBSD__) +void init_sha256(haggis_file *f) { + SHA256_CTX ctx; + + f->cksum.tag = sha256; + SHA256_Init(&ctx); + SHA256_Update(&ctx, f->data, (size_t)f->len.val); + SHA256_Final(f->cksum.sum.sha256, &ctx); +} + int validate_sha256(haggis_file *file) { SHA256_CTX ctx; u8 digest[32]; @@ -209,6 +246,15 @@ int validate_sha256(haggis_file *file) { return 0; } #elif defined(__linux__) || defined(__OpenBSD__) +void init_sha256(haggis_file *f) { + SHA2_CTX ctx; + + f->cksum.tag = sha256; + SHA256_Init(&ctx); + SHA256_Update(&ctx, f->data, (size_t)f->len.val); + SHA256_Final(f->cksum.sum.sha256, &ctx); +} + int validate_sha256(haggis_file *file) { SHA2_CTX ctx; u8 digest[32]; @@ -222,6 +268,22 @@ int validate_sha256(haggis_file *file) { } #endif /* if defined (__FreeBSD__) */ +void haggis_init_cksum(haggis_file *f, haggis_algorithm a) { + switch (a) { + case md5: + init_md5(f); + break; + case sha1: + init_sha1(f); + break; + case sha256: + init_sha256(f); + break; + case skip: + break; + } +} + int haggis_validate_cksum(haggis_file *file) { switch (file->cksum.tag) { case md5: @@ -236,7 +298,7 @@ int haggis_validate_cksum(haggis_file *file) { return 0; } -int haggis_file_init(char *path, haggis_file *hf) { +int haggis_file_init(char *path, haggis_file *hf, haggis_algorithm a) { FILE *f; long len; @@ -260,6 +322,7 @@ int haggis_file_init(char *path, haggis_file *hf) { return 1; } fclose(f); + haggis_init_cksum(hf, a); return 0; } @@ -455,7 +518,7 @@ void haggis_node_deinit(haggis_node *node) { free(node); } -haggis_node* haggis_create_node(char *file, haggis_hardlink_list *list) { +haggis_node* haggis_create_node(char *file, haggis_algorithm a, haggis_hardlink_list *list) { struct stat *st = NULL; u16 mode; char *target; @@ -500,7 +563,7 @@ haggis_node* haggis_create_node(char *file, haggis_hardlink_list *list) { return node; } } - res = haggis_file_init(file, &node->filetype.f_type.file); + res = haggis_file_init(file, &node->filetype.f_type.file, a); if (res != 0) { haggis_node_deinit(node); return NULL; diff --git a/test/Makefile b/test/Makefile index 3ea394d..58a4f98 100644 --- a/test/Makefile +++ b/test/Makefile @@ -34,6 +34,8 @@ CFLAGS += -I../include LIBS += ../libhaggis.a LIBS += -lmd +tests += store_header +tests += check_header tests += store_device tests += load_device tests += store_md5 @@ -42,13 +44,15 @@ tests += store_sha1 tests += load_sha1 tests += store_sha256 tests += load_sha256 +tests += init_file_md5 +tests += init_file_sha1 total != echo $(tests) | wc -w | awk '{ print $$1 }' .PHONY: test test: $(tests) - @printf "\n\tRunning %i tests\n\n" $(total) + @echo -e "\n\t\e[0;33mRunning $(total) tests\e[0m\n" @idx=1 ; success=0 ; fail=0; for t in $(tests) ; \ - do printf "[%i/$(total)] \%-25s" $${idx} $${t} ; \ + do printf "[%02i/$(total)] \%-25s" $${idx} $${t} ; \ idx=$$(expr $${idx} + 1) ; \ ./$${t} ; \ if [ $$? -eq 0 ] ; \ diff --git a/test/check_header.c b/test/check_header.c new file mode 100644 index 0000000..53af19e --- /dev/null +++ b/test/check_header.c @@ -0,0 +1,13 @@ +#include "haggis_private.h" +#include + +int main() { + FILE *f; + int ret; + + f = fopen("output/header", "r"); + ret = haggis_check_header(f); + fclose(f); + return ret; +} + diff --git a/test/haggis_private.h b/test/haggis_private.h index f6aa430..03aff19 100644 --- a/test/haggis_private.h +++ b/test/haggis_private.h @@ -50,7 +50,7 @@ int validate_md5(haggis_file *file); int validate_sha1(haggis_file *file); int validate_sha256(haggis_file *file); int haggis_validate_cksum(haggis_file *file); -int haggis_file_init(char *path, haggis_file *hf); +int haggis_file_init(char *path, haggis_file *hf, haggis_algorithm a); int haggis_store_file(FILE *stream, haggis_file *file); int haggis_load_file(FILE *stream, haggis_file *f); void haggis_filename_init(char *target, haggis_filename *fname); diff --git a/test/init_file b/test/init_file new file mode 100755 index 0000000000000000000000000000000000000000..2139d4b1f1b813afde494fc1b16ecf0e4335dcc4 GIT binary patch literal 27960 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 LH}B0US^j?jt8{X) literal 0 HcmV?d00001 diff --git a/test/init_file_md5.c b/test/init_file_md5.c new file mode 100644 index 0000000..2f7b273 --- /dev/null +++ b/test/init_file_md5.c @@ -0,0 +1,14 @@ +#include "haggis_private.h" +#include +#include +#include + +int main() { + haggis_file hf; + char *f = "check_header.c"; + const u8 buf[16] = { 127, 161, 170, 134, 33, 218, 100, 29, 250, 255, 15, 125, 109, 5, 216, 9 }; + + assert(haggis_file_init(f, &hf, md5) == 0); + assert(hf.cksum.tag == md5); + assert(memcmp(buf, hf.cksum.sum.md5, 16) == 0); +} diff --git a/test/init_file_sha1.c b/test/init_file_sha1.c new file mode 100644 index 0000000..fca9667 --- /dev/null +++ b/test/init_file_sha1.c @@ -0,0 +1,15 @@ +#include "haggis_private.h" +#include +#include +#include + +int main() { + haggis_file hf; + char *f = "check_header.c"; + const u8 buf[20] = { 175, 45, 7, 226, 140, 184, 187, 69, 59, 208, 246, 108, 187, 249, 63, 111, 56, 65, 1, 58 }; + + assert(haggis_file_init(f, &hf, sha1) == 0); + assert(hf.cksum.tag == sha1); + assert(memcmp(buf, hf.cksum.sum.sha1, 20) == 0); +} + diff --git a/test/store_header.c b/test/store_header.c new file mode 100644 index 0000000..580a8c1 --- /dev/null +++ b/test/store_header.c @@ -0,0 +1,13 @@ +#include "haggis_private.h" +#include + +int main() { + FILE *f; + int ret; + + f = fopen("output/header", "w"); + ret = haggis_store_header(f); + fclose(f); + return ret; +} +