summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2015-12-30 10:30:48 -0700
committermo khan <mo@mokhan.ca>2015-12-30 10:30:48 -0700
commit2c3d7921d1b14e220bce11159909ecfd599d4d82 (patch)
treef447e9404393586f408f1d6653debf4573d9c37f
parent86e344bd8fc3701df6d3d9788315159d93e4f777 (diff)
read 512 chunks of file.
-rw-r--r--md5.c44
1 files changed, 21 insertions, 23 deletions
diff --git a/md5.c b/md5.c
index ed5e1fa..8fe9630 100644
--- a/md5.c
+++ b/md5.c
@@ -10,35 +10,33 @@
#else
# include <openssl/md5.h>
#endif
+#define CHUNK 512
int main(int argc, const char *argv[])
{
- const char *filename = argv[1];
- int length = 4;
- MD5_CTX c;
- unsigned char digest[16];
- char *md5 = (char*)malloc(33);
- char *str = "blah";
+ MD5_CTX context;
+ unsigned char digest[16];
+ char *md5 = (char*)malloc(33);
+ const char *filename = argv[1];
+ FILE *file = fopen(filename, "r");
+ char buffer[CHUNK];
+ size_t nread;
- MD5_Init(&c);
+ if (file) {
+ MD5_Init(&context);
- while (length > 0) {
- if (length > 512) {
- MD5_Update(&c, str, 512);
- } else {
- MD5_Update(&c, str, length);
- }
- length -= 512;
- str += 512;
- }
+ while( (nread = fread(buffer, 1, sizeof(buffer), file)) > 0) {
+ MD5_Update(&context, buffer, nread);
+ }
- MD5_Final(digest, &c);
+ MD5_Final(digest, &context);
+ for (int i = 0; i < 16; ++i) {
+ sprintf(&md5[i*2], "%02x", (unsigned int)digest[i]);
+ }
- for (int i = 0; i < 16; ++i) {
- snprintf(&(md5[i*2]), 16*2, "%02x", (unsigned int)digest[i]);
- }
-
- printf("%s (%s) = %s\n", "MD5", filename, md5);
- return 0;
+ printf("%s (%s) = %s\n", "MD5", filename, md5);
+ return 0;
+ }
+ return 1;
}