annotate src/md5-util.c @ 1388:2496a345c452

Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
author zas_
date Fri, 06 Mar 2009 22:34:38 +0000
parents c9949c19a6d0
children 51d70f62338c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2 * This code implements the MD5 message-digest algorithm.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
3 * The algorithm is due to Ron Rivest. This code was
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
4 * written by Colin Plumb in 1993, no copyright is claimed.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
5 * This code is in the public domain; do with it what you wish.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
6 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
7 * Equivalent code is available from RSA Data Security, Inc.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
8 * This code has been tested against that, and is equivalent,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
9 * except that you don't need to include two pages of legalese
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
10 * with every copy.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
11 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
12 * To compute the message digest of a chunk of bytes, declare an
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
13 * MD5Context structure, pass it to md5_init, call md5_update as
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
14 * needed on buffers full of bytes, and then call md5_Final, which
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
15 * will fill a supplied 16-byte array with the digest.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
16 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
17
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
18 /* parts of this file are :
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
19 * Written March 1993 by Branko Lankester
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
20 * Modified June 1993 by Colin Plumb for altered md5.c.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
21 * Modified October 1995 by Erik Troan for RPM
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
22 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
23
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
24 /*
196
f6e307c7bad6 rename GQview -> Geeqie over the code
nadvornik
parents: 64
diff changeset
25 * Pulled from evolution for use in Geeqie, their version is nicely glib'ed
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
26 * GNOME CVS HEAD evolution/e-util/md5-utils.[ch] September 8, 2004
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
27 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
28
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
29
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
30 #include <stdio.h>
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
31 #include <string.h>
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
32 #include "md5-util.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
33
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
34 #include "ui_fileops.h" /* for utf-8 filename conversion */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
35
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
36
1346
c9949c19a6d0 No space between function name and first parenthesis, it eases greping (see CODING).
zas_
parents: 1055
diff changeset
37 static void md5_transform(guint32 buf[4], const guint32 in[16]);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
38
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
39 static gint _ie = 0x44332211;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
40 static union _endian { gint i; gchar b[4]; } *_endian = (union _endian *)&_ie;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
41 #define IS_BIG_ENDIAN() (_endian->b[0] == '\x44')
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
42 #define IS_LITTLE_ENDIAN() (_endian->b[0] == '\x11')
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
43
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
44
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
45 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
46 * Note: this code is harmless on little-endian machines.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
47 */
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
48 static void
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
49 _byte_reverse(guchar *buf, guint32 longs)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
50 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
51 guint32 t;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
52 do {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
53 t = (guint32) ((guint32) buf[3] << 8 | buf[2]) << 16 |
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
54 ((guint32) buf[1] << 8 | buf[0]);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
55 *(guint32 *) buf = t;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
56 buf += 4;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
57 } while (--longs);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
58 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
59
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
60 /**
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
61 * md5_init: Initialise an md5 context object
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
62 * @ctx: md5 context
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
63 *
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
64 * Initialise an md5 buffer.
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
65 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
66 **/
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
67 void
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
68 md5_init(MD5Context *ctx)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
69 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
70 ctx->buf[0] = 0x67452301;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
71 ctx->buf[1] = 0xefcdab89;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
72 ctx->buf[2] = 0x98badcfe;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
73 ctx->buf[3] = 0x10325476;
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
74
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
75 ctx->bits[0] = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
76 ctx->bits[1] = 0;
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
77
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
78 if (IS_BIG_ENDIAN())
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
79 ctx->doByteReverse = 1;
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
80 else
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
81 ctx->doByteReverse = 0;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
82 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
83
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
84
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
85
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
86 /**
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
87 * md5_update: add a buffer to md5 hash computation
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
88 * @ctx: context object used for md5 computaion
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
89 * @buf: buffer to add
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
90 * @len: buffer length
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
91 *
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
92 * Update context to reflect the concatenation of another buffer full
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
93 * of bytes. Use this to progressively construct an md5 hash.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
94 **/
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
95 void
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
96 md5_update(MD5Context *ctx, const guchar *buf, guint32 len)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
97 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
98 guint32 t;
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
99
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
100 /* Update bitcount */
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
101
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
102 t = ctx->bits[0];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
103 if ((ctx->bits[0] = t + ((guint32) len << 3)) < t)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
104 ctx->bits[1]++; /* Carry from low to high */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
105 ctx->bits[1] += len >> 29;
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
106
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
107 t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
108
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
109 /* Handle any leading odd-sized chunks */
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
110
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
111 if (t) {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
112 guchar *p = (guchar *) ctx->in + t;
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
113
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
114 t = 64 - t;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
115 if (len < t) {
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
116 memcpy(p, buf, len);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
117 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
118 }
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
119 memcpy(p, buf, t);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
120 if (ctx->doByteReverse)
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
121 _byte_reverse(ctx->in, 16);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
122 md5_transform(ctx->buf, (guint32 *) ctx->in);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
123 buf += t;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
124 len -= t;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
125 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
126 /* Process data in 64-byte chunks */
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
127
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
128 while (len >= 64) {
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
129 memcpy(ctx->in, buf, 64);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
130 if (ctx->doByteReverse)
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
131 _byte_reverse(ctx->in, 16);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
132 md5_transform(ctx->buf, (guint32 *) ctx->in);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
133 buf += 64;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
134 len -= 64;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
135 }
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
136
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
137 /* Handle any remaining bytes of data. */
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
138
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
139 memcpy(ctx->in, buf, len);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
140 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
141
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
142
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
143 /*
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
144 * Final wrapup - pad to 64-byte boundary with the bit pattern
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
145 * 1 0* (64-bit count of bits processed, MSB-first)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
146 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
147 /**
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
148 * md5_final: copy the final md5 hash to a bufer
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
149 * @digest: 16 bytes buffer
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
150 * @ctx: context containing the calculated md5
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
151 *
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
152 * copy the final md5 hash to a bufer
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
153 **/
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
154 void
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
155 md5_final(MD5Context *ctx, guchar digest[16])
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
156 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
157 guint32 count;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
158 guchar *p;
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
159
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
160 /* Compute number of bytes mod 64 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
161 count = (ctx->bits[0] >> 3) & 0x3F;
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
162
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
163 /* Set the first char of padding to 0x80. This is safe since there is
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
164 always at least one byte free */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
165 p = ctx->in + count;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
166 *p++ = 0x80;
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
167
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
168 /* Bytes of padding needed to make 64 bytes */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
169 count = 64 - 1 - count;
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
170
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
171 /* Pad out to 56 mod 64 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
172 if (count < 8) {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
173 /* Two lots of padding: Pad the first block to 64 bytes */
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
174 memset(p, 0, count);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
175 if (ctx->doByteReverse)
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
176 _byte_reverse(ctx->in, 16);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
177 md5_transform(ctx->buf, (guint32 *) ctx->in);
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
178
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
179 /* Now fill the next block with 56 bytes */
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
180 memset(ctx->in, 0, 56);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
181 } else {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
182 /* Pad block to 56 bytes */
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
183 memset(p, 0, count - 8);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
184 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
185 if (ctx->doByteReverse)
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
186 _byte_reverse(ctx->in, 14);
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
187
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
188 /* Append length in bits and transform */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
189 ((guint32 *) ctx->in)[14] = ctx->bits[0];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
190 ((guint32 *) ctx->in)[15] = ctx->bits[1];
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
191
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
192 md5_transform(ctx->buf, (guint32 *) ctx->in);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
193 if (ctx->doByteReverse)
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
194 _byte_reverse((guchar *) ctx->buf, 4);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
195 memcpy(digest, ctx->buf, 16);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
196 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
197
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
198
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
199
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
200
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
201 /* The four core functions - F1 is optimized somewhat */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
202
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
203 /* #define F1(x, y, z) (x & y | ~x & z) */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
204 #define F1(x, y, z) (z ^ (x & (y ^ z)))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
205 #define F2(x, y, z) F1(z, x, y)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
206 #define F3(x, y, z) (x ^ y ^ z)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
207 #define F4(x, y, z) (y ^ (x | ~z))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
208
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
209 /* This is the central step in the MD5 algorithm. */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
210 #define MD5STEP(f, w, x, y, z, data, s) \
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
211 ( w += f(x, y, z) + data, w = w<<s | w>>(32-s), w += x )
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
212
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
213 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
214 * The core of the MD5 algorithm, this alters an existing MD5 hash to
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
215 * reflect the addition of 16 longwords of new data. md5_Update blocks
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
216 * the data and converts bytes into longwords for this routine.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
217 */
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
218 static void
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
219 md5_transform(guint32 buf[4], const guint32 in[16])
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
220 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
221 register guint32 a, b, c, d;
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
222
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
223 a = buf[0];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
224 b = buf[1];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
225 c = buf[2];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
226 d = buf[3];
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
227
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
228 MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
229 MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
230 MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
231 MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
232 MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
233 MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
234 MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
235 MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
236 MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
237 MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
238 MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
239 MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
240 MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
241 MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
242 MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
243 MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
244
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
245 MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
246 MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
247 MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
248 MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
249 MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
250 MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
251 MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
252 MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
253 MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
254 MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
255 MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
256 MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
257 MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
258 MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
259 MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
260 MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
261
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
262 MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
263 MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
264 MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
265 MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
266 MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
267 MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
268 MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
269 MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
270 MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
271 MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
272 MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
273 MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
274 MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
275 MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
276 MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
277 MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
278
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
279 MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
280 MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
281 MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
282 MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
283 MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
284 MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
285 MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
286 MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
287 MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
288 MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
289 MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
290 MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
291 MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
292 MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
293 MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
294 MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
295
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
296 buf[0] += a;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
297 buf[1] += b;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
298 buf[2] += c;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
299 buf[3] += d;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
300 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
301
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
302
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
303
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
304
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
305 /**
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
306 * md5_get_digest: get the md5 hash of a buffer
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
307 * @buffer: byte buffer
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
308 * @buffer_size: buffer size (in bytes)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
309 * @digest: 16 bytes buffer receiving the hash code.
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
310 *
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
311 * Get the md5 hash of a buffer. The result is put in
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
312 * the 16 bytes buffer @digest .
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
313 **/
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
314 void
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
315 md5_get_digest(const guchar *buffer, gint buffer_size, guchar digest[16])
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
316 {
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
317 MD5Context ctx;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
318
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
319 md5_init(&ctx);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
320 md5_update(&ctx, buffer, buffer_size);
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
321 md5_final(&ctx, digest);
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
322
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
323 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
324
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
325 /* modified for GQView, starting here */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
326
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
327 /**
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
328 * md5_get_digest_from_file: get the md5 hash of a file
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
329 * @filename: file name
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
330 * @digest: 16 bytes buffer receiving the hash code.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
331 * @return: TRUE on success
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
332 *
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
333 * Get the md5 hash of a file. The result is put in
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
334 * the 16 bytes buffer @digest .
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
335 **/
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
336 gboolean md5_get_digest_from_file(const gchar *path, guchar digest[16])
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
337 {
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
338 MD5Context ctx;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
339 guchar tmp_buf[1024];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
340 gint nb_bytes_read;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
341 FILE *fp;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
342 gint success;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
343
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
344 fp = fopen(path, "r");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
345 if (!fp) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
346
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
347 md5_init(&ctx);
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
348
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
349 while ((nb_bytes_read = fread(tmp_buf, sizeof (guchar), sizeof(tmp_buf), fp)) > 0)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
350 {
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
351 md5_update(&ctx, tmp_buf, nb_bytes_read);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
352 }
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 435
diff changeset
353
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
354 success = (ferror(fp) == 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
355 fclose(fp);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
356 if (!success) return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
357
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
358 md5_final(&ctx, digest);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
359 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
360 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
361
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
362 /* does filename utf8 to filesystem encoding first */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
363 gboolean md5_get_digest_from_file_utf8(const gchar *path, guchar digest[16])
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
364 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
365 gboolean success;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
366 gchar *pathl;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
367
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
368 pathl = path_from_utf8(path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
369 success = md5_get_digest_from_file(pathl, digest);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
370 g_free(pathl);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
371
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
372 return success;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
373 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
374
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
375 /* these to and from text string converters were borrowed from
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
376 * the libgnomeui library, where they are name thumb_digest_to/from_ascii
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
377 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
378 * this version of the from text util does buffer length checking,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
379 * and assumes a NULL terminated string.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
380 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
381
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
382 gchar *md5_digest_to_text(guchar digest[16])
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
383 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
384 static gchar hex_digits[] = "0123456789abcdef";
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
385 gchar *result;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
386 gint i;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
387
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
388 result = g_malloc(33);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
389 for (i = 0; i < 16; i++)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
390 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
391 result[2*i] = hex_digits[digest[i] >> 4];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
392 result[2*i+1] = hex_digits[digest[i] & 0xf];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
393 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
394 result[32] = '\0';
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
395
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
396 return result;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
397 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
398
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
399 gboolean md5_digest_from_text(const gchar *text, guchar digest[16])
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
400 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
401 gint i;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
402
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
403 for (i = 0; i < 16; i++)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
404 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
405 if (text[2*i] == '\0' || text[2*i+1] == '\0') return FALSE;
512
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
406 digest[i] = g_ascii_xdigit_value(text[2*i]) << 4 |
f9bf33be53ff Remove whitespace between function name and first parenthesis for the sake of consistency.
zas_
parents: 446
diff changeset
407 g_ascii_xdigit_value(text[2*i + 1]);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
408 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
409
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
410 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
411 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
412
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
413 gchar *md5_text_from_file_utf8(const gchar *path, const gchar *error_text)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
414 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
415 guchar digest[16];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
416
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
417 if (!md5_get_digest_from_file_utf8(path, digest)) return g_strdup(error_text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
418
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
419 return md5_digest_to_text(digest);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
420 }
1055
1646720364cf Adding a vim modeline to all files - patch by Klaus Ethgen
nadvornik
parents: 512
diff changeset
421 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */