diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2020-03-18 22:25:27 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2020-03-18 22:25:27 -0400 |
commit | ccaeb7092b5ad40b1b3833c987ba3ec4d47f0bb8 (patch) | |
tree | ae167772a9a2343aa77bf8944b56abe853f6a2ec /lib/checksum.c | |
parent | 3731bb4679ee8716d4f579d5744c36a2d1b4a257 (diff) | |
download | spmc-ccaeb7092b5ad40b1b3833c987ba3ec4d47f0bb8.tar.gz |
Refactor project: build/install libspm[_static.a].so to make unit testing possible
Diffstat (limited to 'lib/checksum.c')
-rw-r--r-- | lib/checksum.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/lib/checksum.c b/lib/checksum.c new file mode 100644 index 0000000..249d6cb --- /dev/null +++ b/lib/checksum.c @@ -0,0 +1,42 @@ +/** + * @file checksum.c + */ +#include "spm.h" +#include <openssl/sha.h> + +/** + * + * @param filename + * @return + */ +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_STRING_LENGTH, sizeof(char)); + if (!result) { + fclose(fp); + 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; +} |