From df0de0d979581ae689ca2d112c39f39c4a527b33 Mon Sep 17 00:00:00 2001 From: Stephen Heumann Date: Sun, 19 Nov 2017 22:43:31 -0600 Subject: [PATCH] Use a common template for all the file checksum programs. --- Makefile | 6 ++--- cksumcommon.h | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++ md5sum.c | 39 ++----------------------------- sha1sum.c | 39 ++----------------------------- sha256sum.c | 39 ++----------------------------- 5 files changed, 73 insertions(+), 114 deletions(-) create mode 100644 cksumcommon.h diff --git a/Makefile b/Makefile index 39025d7..ba53ab6 100644 --- a/Makefile +++ b/Makefile @@ -51,17 +51,17 @@ aestest.a: aestest.c aes.h aescrypt.a: aescrypt.c aes.h $(CC) $(CFLAGS) -c $< -sha1sum.a: sha1sum.c sha1.h +sha1sum.a: sha1sum.c sha1.h cksumcommon.h $(CC) $(CFLAGS) -c $< sha1test.a: sha1test.c sha1.h $(CC) $(CFLAGS) -c $< -sha256sum.a: sha256sum.c sha256.h +sha256sum.a: sha256sum.c sha256.h cksumcommon.h $(CC) $(CFLAGS) -c $< sha256test.a: sha256test.c sha256.h $(CC) $(CFLAGS) -c $< -md5sum.a: md5sum.c md5.h +md5sum.a: md5sum.c md5.h cksumcommon.h $(CC) $(CFLAGS) -c $< md5test.a: md5test.c md5.h $(CC) $(CFLAGS) -c $< diff --git a/cksumcommon.h b/cksumcommon.h new file mode 100644 index 0000000..ad8f7b3 --- /dev/null +++ b/cksumcommon.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2017 Stephen Heumann + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This file is a template for computing file checksums with the various + * different hash functions from lib65816hash. This should be #included + * from another file after HASH_FUNCTION is defined to the name of the + * hash function to use and the corresponding header is included. + */ + +#include +#include +#include + +#define join(a,b) a##b +#define concat(a,b) join(a,b) + +unsigned char buf[0x8000ul]; + +int main(int argc, char **argv) { + struct concat(HASH_FUNCTION,_context) ctx; + FILE *file; + size_t count; + int i; + + srand(time(NULL)); + + if (argc != 2) + return EXIT_FAILURE; + + file = fopen(argv[1], "rb"); + if (file == NULL) + return EXIT_FAILURE; + + concat(HASH_FUNCTION,_init)(&ctx); + do { + count = (rand() & 0x7FFF) + 1; + count = fread(buf, 1, count, file); + concat(HASH_FUNCTION,_update)(&ctx, buf, count); + } while (count != 0); + + fclose(file); + concat(HASH_FUNCTION,_finalize)(&ctx); + + for (i = 0; i < sizeof(ctx.hash); i++) { + printf("%02x", ctx.hash[i]); + } + printf("\n"); + + return 0; +} diff --git a/md5sum.c b/md5sum.c index 6d3f1d5..19e10a4 100644 --- a/md5sum.c +++ b/md5sum.c @@ -14,42 +14,7 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include -#include -#include #include "md5.h" +#define HASH_FUNCTION md5 +#include "cksumcommon.h" -unsigned char buf[0x8000ul]; - -int main(int argc, char **argv) { - struct md5_context ctx; - FILE *file; - size_t count; - int i; - - srand(time(NULL)); - - if (argc != 2) - return EXIT_FAILURE; - - file = fopen(argv[1], "rb"); - if (file == NULL) - return EXIT_FAILURE; - - md5_init(&ctx); - do { - count = (rand() & 0x7FFF) + 1; - count = fread(buf, 1, count, file); - md5_update(&ctx, buf, count); - } while (count != 0); - - fclose(file); - md5_finalize(&ctx); - - for (i = 0; i < 16; i++) { - printf("%02x", ctx.hash[i]); - } - printf("\n"); - - return 0; -} diff --git a/sha1sum.c b/sha1sum.c index fea2c04..ec15371 100644 --- a/sha1sum.c +++ b/sha1sum.c @@ -14,42 +14,7 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include -#include -#include #include "sha1.h" +#define HASH_FUNCTION sha1 +#include "cksumcommon.h" -unsigned char buf[0x8000ul]; - -int main(int argc, char **argv) { - struct sha1_context ctx; - FILE *file; - size_t count; - int i; - - srand(time(NULL)); - - if (argc != 2) - return EXIT_FAILURE; - - file = fopen(argv[1], "rb"); - if (file == NULL) - return EXIT_FAILURE; - - sha1_init(&ctx); - do { - count = (rand() & 0x7FFF) + 1; - count = fread(buf, 1, count, file); - sha1_update(&ctx, buf, count); - } while (count != 0); - - fclose(file); - sha1_finalize(&ctx); - - for (i = 0; i < 20; i++) { - printf("%02x", ctx.hash[i]); - } - printf("\n"); - - return 0; -} diff --git a/sha256sum.c b/sha256sum.c index dbe87c2..661f9f4 100644 --- a/sha256sum.c +++ b/sha256sum.c @@ -14,42 +14,7 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include -#include -#include #include "sha256.h" +#define HASH_FUNCTION sha256 +#include "cksumcommon.h" -unsigned char buf[0x8000ul]; - -int main(int argc, char **argv) { - struct sha256_context ctx; - FILE *file; - size_t count; - int i; - - srand(time(NULL)); - - if (argc != 2) - return EXIT_FAILURE; - - file = fopen(argv[1], "rb"); - if (file == NULL) - return EXIT_FAILURE; - - sha256_init(&ctx); - do { - count = (rand() & 0x7FFF) + 1; - count = fread(buf, 1, count, file); - sha256_update(&ctx, buf, count); - } while (count != 0); - - fclose(file); - sha256_finalize(&ctx); - - for (i = 0; i < 32; i++) { - printf("%02x", ctx.hash[i]); - } - printf("\n"); - - return 0; -}