2008-05-23 [paul] 3.4.0cvs65
authorPaul Mangan <paul@claws-mail.org>
Fri, 23 May 2008 13:33:40 +0000 (13:33 +0000)
committerPaul Mangan <paul@claws-mail.org>
Fri, 23 May 2008 13:33:40 +0000 (13:33 +0000)
* src/common/md5.c
* src/common/md5.h
add the possibility to check md5 on binary files,
thanks to Colin

ChangeLog
PATCHSETS
configure.ac
src/common/md5.c
src/common/md5.h

index f171c93..d00c532 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-05-23 [paul]      3.4.0cvs65
+
+       * src/common/md5.c
+       * src/common/md5.h
+               add the possibility to check md5 on binary files,
+               thanks to Colin
+
 2008-05-23 [colin]     3.4.0cvs64
 
        * src/mainwindow.c
index dc656c9..c8f7b16 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.155.2.85 -r 1.155.2.86 src/Makefile.am;  cvs diff -u -r 1.30.2.50 -r 1.30.2.51 src/prefs_toolbar.c;  cvs diff -u -r 1.25.2.55 -r 1.25.2.56 src/stock_pixmap.c;  cvs diff -u -r 1.18.2.34 -r 1.18.2.35 src/stock_pixmap.h;  cvs diff -u -r 1.43.2.99 -r 1.43.2.100 src/toolbar.c;  diff -u /dev/null src/pixmaps/delete_btn.xpm;  cvs diff -u -r 1.1.2.1 -r 1.1.2.2 src/pixmaps/insert_file.xpm;  diff -u /dev/null src/pixmaps/mail_reply_to_list.xpm;  ) > 3.4.0cvs62.patchset
 ( cvs diff -u -r 1.1.4.51 -r 1.1.4.52 src/prefs_filtering_action.c;  cvs diff -u -r 1.1.2.13 -r 1.1.2.14 src/gtk/combobox.c;  cvs diff -u -r 1.1.2.11 -r 1.1.2.12 src/gtk/combobox.h;  ) > 3.4.0cvs63.patchset
 ( cvs diff -u -r 1.274.2.243 -r 1.274.2.244 src/mainwindow.c;  cvs diff -u -r 1.395.2.368 -r 1.395.2.369 src/summaryview.c;  ) > 3.4.0cvs64.patchset
+( cvs diff -u -r 1.2.2.4 -r 1.2.2.5 src/common/md5.c;  cvs diff -u -r 1.1.4.3 -r 1.1.4.4 src/common/md5.h;  ) > 3.4.0cvs65.patchset
index 6feda51..17b94dc 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=4
 MICRO_VERSION=0
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=64
+EXTRA_VERSION=65
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index 7930ba0..1c50302 100644 (file)
 #include <stdlib.h>
 #include <string.h>
 #include <assert.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
 
 #include "md5.h"
+#include "utils.h"
 
 /****************
  * Rotate a 32 bit integer by n bytes
@@ -328,20 +332,59 @@ md5_final(unsigned char *digest, MD5_CONTEXT *ctx)
  * string S.  hextdigest but be buffer of at lease 33 bytes!
  */
 void
-md5_hex_digest(char *hexdigest, const unsigned char *s)
+md5_hex_digest_binary(char *hexdigest, const unsigned char *s, size_t len)
 {
        int i;
        MD5_CONTEXT context;
        unsigned char digest[16];
 
        md5_init(&context);
-       md5_update(&context, s, strlen(s));
+       md5_update(&context, s, len);
        md5_final(digest, &context);
 
        for (i = 0; i < 16; i++)
                sprintf(hexdigest + 2 * i, "%02x", digest[i]);
 }
 
+int 
+md5_hex_digest_file(char *hexdigest, const unsigned char *file)
+{
+       int READ_BLOCK_SIZE=4096;
+       int len;
+       char *buf = malloc(READ_BLOCK_SIZE); /* alloc the first block */
+       char *lastp = buf; /* point to the start of the buffer */
+       size_t total = 0; /* total length read */
+       int num_alloc = 1; /* number of blocks allocated */
+       int fd = open(file, O_RDONLY);
+
+       if (fd == -1) {
+               FILE_OP_ERROR(file, "open");
+               return -1;
+       }
+       
+       while ((len = read(fd, lastp, READ_BLOCK_SIZE)) > 0) { /* read one block (which is allocated) */
+               total += len; /* update the total length */
+               num_alloc++; /* increase number of allocs */
+               buf = realloc(buf, READ_BLOCK_SIZE*num_alloc); /* allocate one more block for next read */
+               lastp = buf+total; /* point to the end of read stuff to buf */
+       }
+
+       close(fd);
+       md5_hex_digest_binary(hexdigest, buf, total);
+       free(buf);
+       // printf("%s  %s\n", hexdigest, file);
+       return 0;
+}
+
+/*
+ * Creates a MD5 digest in hex fomrat (lowercase letters) from the
+ * string S.  hextdigest but be buffer of at lease 33 bytes!
+ */
+void
+md5_hex_digest(char *hexdigest, const unsigned char *s)
+{
+       md5_hex_digest_binary(hexdigest, s, strlen(s));
+}
 
 /*
 ** Function: md5_hmac
index e7ef456..1413c01 100644 (file)
@@ -32,7 +32,8 @@ typedef struct {  /* Hmm, should be private */
 } MD5_CONTEXT;
 
 void md5_hex_digest(char *hexdigest, const unsigned char *s);
-
+void md5_hex_digest_binary(char *hexdigest, const unsigned char *s, size_t len);
+int md5_hex_digest_file(char *hexdigest, const unsigned char *file);
 void md5_hex_hmac(char *hexdigest,
                   const unsigned char* text, int text_len,
                   const unsigned char* key, int key_len);