From 6f56223533f144ce150699c19a567579d50065c2 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Fri, 20 Dec 2019 15:58:09 -0500 Subject: Add MD5 and SHA256 funtions --- src/checksum.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/checksum.c (limited to 'src') diff --git a/src/checksum.c b/src/checksum.c new file mode 100644 index 0000000..a26a415 --- /dev/null +++ b/src/checksum.c @@ -0,0 +1,68 @@ +// +// Created by jhunk on 12/20/19. +// +#include "spm.h" +#include +#include + +char *md5sum(const char *filename) { + size_t bytes = 0; + unsigned char digest[MD5_DIGEST_LENGTH]; + char buf[BUFSIZ]; + MD5_CTX context; + MD5_Init(&context); + FILE *fp = fopen(filename, "r"); + if (!fp) { + perror(filename); + return NULL; + } + char *result = calloc((MD5_DIGEST_LENGTH * 2) + 1, sizeof(char)); + if (!result) { + perror("MD5 result"); + return NULL; + } + + while ((bytes = fread(buf, sizeof(char), BUFSIZ, fp)) != 0) { + MD5_Update(&context, buf, bytes); + } + fclose(fp); + + MD5_Final(digest, &context); + char *rtmp = result; + for (int i = 0; i < MD5_DIGEST_LENGTH; i++) { + snprintf(&rtmp[i * 2], 3, "%02x", digest[i]); + } + + return result; +} + +char *sha256sum(const char *filename) { + size_t bytes = 0; + unsigned char digest[SHA256_DIGEST_LENGTH]; + char buf[BUFSIZ]; + SHA256_CTX context; + SHA256_Init(&context); + FILE *fp = fopen(filename, "r"); + if (!fp) { + perror(filename); + return NULL; + } + char *result = calloc((SHA256_DIGEST_LENGTH * 2) + 1, sizeof(char)); + if (!result) { + perror("SHA256 result"); + return NULL; + } + + while ((bytes = fread(buf, sizeof(char), BUFSIZ, fp)) != 0) { + SHA256_Update(&context, buf, bytes); + } + fclose(fp); + + SHA256_Final(digest, &context); + char *rtmp = result; + for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) { + snprintf(&rtmp[i * 2], 3, "%02x", digest[i]); + } + + return result; +} \ No newline at end of file -- cgit