Mercurial > geeqie
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 |
rev | line source |
---|---|
9 | 1 /* |
2 * This code implements the MD5 message-digest algorithm. | |
3 * The algorithm is due to Ron Rivest. This code was | |
4 * written by Colin Plumb in 1993, no copyright is claimed. | |
5 * This code is in the public domain; do with it what you wish. | |
6 * | |
7 * Equivalent code is available from RSA Data Security, Inc. | |
8 * This code has been tested against that, and is equivalent, | |
9 * except that you don't need to include two pages of legalese | |
10 * with every copy. | |
11 * | |
12 * To compute the message digest of a chunk of bytes, declare an | |
13 * MD5Context structure, pass it to md5_init, call md5_update as | |
14 * needed on buffers full of bytes, and then call md5_Final, which | |
15 * will fill a supplied 16-byte array with the digest. | |
16 */ | |
17 | |
18 /* parts of this file are : | |
19 * Written March 1993 by Branko Lankester | |
20 * Modified June 1993 by Colin Plumb for altered md5.c. | |
21 * Modified October 1995 by Erik Troan for RPM | |
22 */ | |
23 | |
24 /* | |
196 | 25 * Pulled from evolution for use in Geeqie, their version is nicely glib'ed |
9 | 26 * GNOME CVS HEAD evolution/e-util/md5-utils.[ch] September 8, 2004 |
27 */ | |
28 | |
29 | |
30 #include <stdio.h> | |
31 #include <string.h> | |
32 #include "md5-util.h" | |
33 | |
34 #include "ui_fileops.h" /* for utf-8 filename conversion */ | |
35 | |
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 | 38 |
39 static gint _ie = 0x44332211; | |
40 static union _endian { gint i; gchar b[4]; } *_endian = (union _endian *)&_ie; | |
41 #define IS_BIG_ENDIAN() (_endian->b[0] == '\x44') | |
42 #define IS_LITTLE_ENDIAN() (_endian->b[0] == '\x11') | |
43 | |
44 | |
45 /* | |
46 * Note: this code is harmless on little-endian machines. | |
47 */ | |
442 | 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 | 50 { |
51 guint32 t; | |
52 do { | |
53 t = (guint32) ((guint32) buf[3] << 8 | buf[2]) << 16 | | |
54 ((guint32) buf[1] << 8 | buf[0]); | |
55 *(guint32 *) buf = t; | |
56 buf += 4; | |
57 } while (--longs); | |
58 } | |
59 | |
60 /** | |
61 * md5_init: Initialise an md5 context object | |
442 | 62 * @ctx: md5 context |
63 * | |
64 * Initialise an md5 buffer. | |
9 | 65 * |
66 **/ | |
442 | 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 | 69 { |
70 ctx->buf[0] = 0x67452301; | |
71 ctx->buf[1] = 0xefcdab89; | |
72 ctx->buf[2] = 0x98badcfe; | |
73 ctx->buf[3] = 0x10325476; | |
442 | 74 |
9 | 75 ctx->bits[0] = 0; |
76 ctx->bits[1] = 0; | |
442 | 77 |
78 if (IS_BIG_ENDIAN()) | |
79 ctx->doByteReverse = 1; | |
80 else | |
81 ctx->doByteReverse = 0; | |
9 | 82 } |
83 | |
84 | |
85 | |
86 /** | |
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 | 89 * @buf: buffer to add |
90 * @len: buffer length | |
442 | 91 * |
9 | 92 * Update context to reflect the concatenation of another buffer full |
93 * of bytes. Use this to progressively construct an md5 hash. | |
94 **/ | |
442 | 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 | 97 { |
98 guint32 t; | |
442 | 99 |
9 | 100 /* Update bitcount */ |
442 | 101 |
9 | 102 t = ctx->bits[0]; |
103 if ((ctx->bits[0] = t + ((guint32) len << 3)) < t) | |
104 ctx->bits[1]++; /* Carry from low to high */ | |
105 ctx->bits[1] += len >> 29; | |
442 | 106 |
9 | 107 t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */ |
442 | 108 |
9 | 109 /* Handle any leading odd-sized chunks */ |
442 | 110 |
9 | 111 if (t) { |
112 guchar *p = (guchar *) ctx->in + t; | |
442 | 113 |
9 | 114 t = 64 - t; |
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 | 117 return; |
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 | 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 | 123 buf += t; |
124 len -= t; | |
125 } | |
126 /* Process data in 64-byte chunks */ | |
442 | 127 |
9 | 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 | 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 | 133 buf += 64; |
134 len -= 64; | |
135 } | |
442 | 136 |
9 | 137 /* Handle any remaining bytes of data. */ |
442 | 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 | 140 } |
141 | |
142 | |
143 /* | |
442 | 144 * Final wrapup - pad to 64-byte boundary with the bit pattern |
9 | 145 * 1 0* (64-bit count of bits processed, MSB-first) |
146 */ | |
147 /** | |
148 * md5_final: copy the final md5 hash to a bufer | |
149 * @digest: 16 bytes buffer | |
150 * @ctx: context containing the calculated md5 | |
442 | 151 * |
9 | 152 * copy the final md5 hash to a bufer |
153 **/ | |
442 | 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 | 156 { |
157 guint32 count; | |
158 guchar *p; | |
442 | 159 |
9 | 160 /* Compute number of bytes mod 64 */ |
161 count = (ctx->bits[0] >> 3) & 0x3F; | |
442 | 162 |
9 | 163 /* Set the first char of padding to 0x80. This is safe since there is |
164 always at least one byte free */ | |
165 p = ctx->in + count; | |
166 *p++ = 0x80; | |
442 | 167 |
9 | 168 /* Bytes of padding needed to make 64 bytes */ |
169 count = 64 - 1 - count; | |
442 | 170 |
9 | 171 /* Pad out to 56 mod 64 */ |
172 if (count < 8) { | |
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 | 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 | 178 |
9 | 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 | 181 } else { |
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 | 184 } |
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 | 187 |
9 | 188 /* Append length in bits and transform */ |
189 ((guint32 *) ctx->in)[14] = ctx->bits[0]; | |
190 ((guint32 *) ctx->in)[15] = ctx->bits[1]; | |
442 | 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 | 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 | 196 } |
197 | |
198 | |
199 | |
200 | |
201 /* The four core functions - F1 is optimized somewhat */ | |
202 | |
203 /* #define F1(x, y, z) (x & y | ~x & z) */ | |
204 #define F1(x, y, z) (z ^ (x & (y ^ z))) | |
205 #define F2(x, y, z) F1(z, x, y) | |
206 #define F3(x, y, z) (x ^ y ^ z) | |
207 #define F4(x, y, z) (y ^ (x | ~z)) | |
208 | |
209 /* This is the central step in the MD5 algorithm. */ | |
210 #define MD5STEP(f, w, x, y, z, data, s) \ | |
211 ( w += f(x, y, z) + data, w = w<<s | w>>(32-s), w += x ) | |
212 | |
213 /* | |
214 * The core of the MD5 algorithm, this alters an existing MD5 hash to | |
215 * reflect the addition of 16 longwords of new data. md5_Update blocks | |
216 * the data and converts bytes into longwords for this routine. | |
217 */ | |
442 | 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 | 220 { |
221 register guint32 a, b, c, d; | |
442 | 222 |
9 | 223 a = buf[0]; |
224 b = buf[1]; | |
225 c = buf[2]; | |
226 d = buf[3]; | |
442 | 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 | 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 | 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 | 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 | 295 |
9 | 296 buf[0] += a; |
297 buf[1] += b; | |
298 buf[2] += c; | |
299 buf[3] += d; | |
300 } | |
301 | |
302 | |
303 | |
304 | |
305 /** | |
306 * md5_get_digest: get the md5 hash of a buffer | |
307 * @buffer: byte buffer | |
308 * @buffer_size: buffer size (in bytes) | |
309 * @digest: 16 bytes buffer receiving the hash code. | |
442 | 310 * |
311 * Get the md5 hash of a buffer. The result is put in | |
9 | 312 * the 16 bytes buffer @digest . |
313 **/ | |
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 | 316 { |
9 | 317 MD5Context ctx; |
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 | 322 |
9 | 323 } |
324 | |
325 /* modified for GQView, starting here */ | |
326 | |
327 /** | |
328 * md5_get_digest_from_file: get the md5 hash of a file | |
329 * @filename: file name | |
330 * @digest: 16 bytes buffer receiving the hash code. | |
331 * @return: TRUE on success | |
442 | 332 * |
333 * Get the md5 hash of a file. The result is put in | |
9 | 334 * the 16 bytes buffer @digest . |
335 **/ | |
336 gboolean md5_get_digest_from_file(const gchar *path, guchar digest[16]) | |
442 | 337 { |
9 | 338 MD5Context ctx; |
339 guchar tmp_buf[1024]; | |
340 gint nb_bytes_read; | |
341 FILE *fp; | |
342 gint success; | |
343 | |
344 fp = fopen(path, "r"); | |
345 if (!fp) return FALSE; | |
346 | |
347 md5_init(&ctx); | |
442 | 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 | 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 | 352 } |
442 | 353 |
9 | 354 success = (ferror(fp) == 0); |
355 fclose(fp); | |
356 if (!success) return FALSE; | |
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 | 359 return TRUE; |
360 } | |
361 | |
362 /* does filename utf8 to filesystem encoding first */ | |
363 gboolean md5_get_digest_from_file_utf8(const gchar *path, guchar digest[16]) | |
364 { | |
365 gboolean success; | |
366 gchar *pathl; | |
367 | |
368 pathl = path_from_utf8(path); | |
369 success = md5_get_digest_from_file(pathl, digest); | |
370 g_free(pathl); | |
371 | |
372 return success; | |
373 } | |
374 | |
375 /* these to and from text string converters were borrowed from | |
376 * the libgnomeui library, where they are name thumb_digest_to/from_ascii | |
377 * | |
378 * this version of the from text util does buffer length checking, | |
379 * and assumes a NULL terminated string. | |
380 */ | |
381 | |
382 gchar *md5_digest_to_text(guchar digest[16]) | |
383 { | |
384 static gchar hex_digits[] = "0123456789abcdef"; | |
385 gchar *result; | |
386 gint i; | |
387 | |
388 result = g_malloc(33); | |
389 for (i = 0; i < 16; i++) | |
390 { | |
391 result[2*i] = hex_digits[digest[i] >> 4]; | |
392 result[2*i+1] = hex_digits[digest[i] & 0xf]; | |
393 } | |
394 result[32] = '\0'; | |
395 | |
396 return result; | |
397 } | |
398 | |
399 gboolean md5_digest_from_text(const gchar *text, guchar digest[16]) | |
400 { | |
401 gint i; | |
402 | |
403 for (i = 0; i < 16; i++) | |
404 { | |
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 | 408 } |
409 | |
410 return TRUE; | |
411 } | |
412 | |
413 gchar *md5_text_from_file_utf8(const gchar *path, const gchar *error_text) | |
414 { | |
415 guchar digest[16]; | |
416 | |
417 if (!md5_get_digest_from_file_utf8(path, digest)) return g_strdup(error_text); | |
418 | |
419 return md5_digest_to_text(digest); | |
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: */ |