Mercurial > masqmail
annotate src/md5/md5c.c @ 203:45acc5727493
removed --with-glib-static configure option
linking glib statically is interesting if no other program uses it
on today's systems glib is widely used
if one cares on linking statically, he can link everything statically
the special case for glib will not get special care anymore
author | meillo@marmaro.de |
---|---|
date | Fri, 16 Jul 2010 14:48:17 +0200 |
parents | 26e34ae9a3e3 |
children |
rev | line source |
---|---|
0 | 1 /* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm |
2 */ | |
3 | |
4 /* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All | |
5 rights reserved. | |
6 | |
7 License to copy and use this software is granted provided that it | |
8 is identified as the "RSA Data Security, Inc. MD5 Message-Digest | |
9 Algorithm" in all material mentioning or referencing this software | |
10 or this function. | |
11 | |
12 License is also granted to make and use derivative works provided | |
13 that such works are identified as "derived from the RSA Data | |
14 Security, Inc. MD5 Message-Digest Algorithm" in all material | |
15 mentioning or referencing the derived work. | |
16 | |
17 RSA Data Security, Inc. makes no representations concerning either | |
18 the merchantability of this software or the suitability of this | |
19 software for any particular purpose. It is provided "as is" | |
20 without express or implied warranty of any kind. | |
21 | |
22 These notices must be retained in any copies of any part of this | |
23 documentation and/or software. | |
24 */ | |
25 | |
26 #include "global.h" | |
27 #include "md5.h" | |
28 | |
29 /* Constants for MD5Transform routine. | |
30 */ | |
31 #define S11 7 | |
32 #define S12 12 | |
33 #define S13 17 | |
34 #define S14 22 | |
35 #define S21 5 | |
36 #define S22 9 | |
37 #define S23 14 | |
38 #define S24 20 | |
39 #define S31 4 | |
40 #define S32 11 | |
41 #define S33 16 | |
42 #define S34 23 | |
43 #define S41 6 | |
44 #define S42 10 | |
45 #define S43 15 | |
46 #define S44 21 | |
47 | |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
48 static void MD5Transform PROTO_LIST((UINT4[4], unsigned char[64])); |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
49 static void Encode PROTO_LIST((unsigned char *, UINT4 *, unsigned int)); |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
50 static void Decode PROTO_LIST((UINT4 *, unsigned char *, unsigned int)); |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
51 static void MD5_memcpy PROTO_LIST((POINTER, POINTER, unsigned int)); |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
52 static void MD5_memset PROTO_LIST((POINTER, int, unsigned int)); |
0 | 53 |
54 static unsigned char PADDING[64] = { | |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
55 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
56 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
57 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 |
0 | 58 }; |
59 | |
60 /* F, G, H and I are basic MD5 functions. | |
61 */ | |
62 #define F(x, y, z) (((x) & (y)) | ((~x) & (z))) | |
63 #define G(x, y, z) (((x) & (z)) | ((y) & (~z))) | |
64 #define H(x, y, z) ((x) ^ (y) ^ (z)) | |
65 #define I(x, y, z) ((y) ^ ((x) | (~z))) | |
66 | |
67 /* ROTATE_LEFT rotates x left n bits. | |
68 */ | |
69 #define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) | |
70 | |
71 /* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. | |
72 Rotation is separate from addition to prevent recomputation. | |
73 */ | |
74 #define FF(a, b, c, d, x, s, ac) { \ | |
75 (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \ | |
76 (a) = ROTATE_LEFT ((a), (s)); \ | |
77 (a) += (b); \ | |
78 } | |
79 #define GG(a, b, c, d, x, s, ac) { \ | |
80 (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \ | |
81 (a) = ROTATE_LEFT ((a), (s)); \ | |
82 (a) += (b); \ | |
83 } | |
84 #define HH(a, b, c, d, x, s, ac) { \ | |
85 (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \ | |
86 (a) = ROTATE_LEFT ((a), (s)); \ | |
87 (a) += (b); \ | |
88 } | |
89 #define II(a, b, c, d, x, s, ac) { \ | |
90 (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \ | |
91 (a) = ROTATE_LEFT ((a), (s)); \ | |
92 (a) += (b); \ | |
93 } | |
94 | |
95 /* MD5 initialization. Begins an MD5 operation, writing a new context. | |
96 */ | |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
97 void |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
98 MD5Init(context) |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
99 MD5_CTX *context; /* context */ |
0 | 100 { |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
101 context->count[0] = context->count[1] = 0; |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
102 /* Load magic initialization constants. */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
103 context->state[0] = 0x67452301; |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
104 context->state[1] = 0xefcdab89; |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
105 context->state[2] = 0x98badcfe; |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
106 context->state[3] = 0x10325476; |
0 | 107 } |
108 | |
109 /* MD5 block update operation. Continues an MD5 message-digest | |
110 operation, processing another message block, and updating the | |
111 context. | |
112 */ | |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
113 void |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
114 MD5Update(context, input, inputLen) |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
115 MD5_CTX *context; /* context */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
116 unsigned char *input; /* input block */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
117 unsigned int inputLen; /* length of input block */ |
0 | 118 { |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
119 unsigned int i, index, partLen; |
0 | 120 |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
121 /* Compute number of bytes mod 64 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
122 index = (unsigned int) ((context->count[0] >> 3) & 0x3F); |
0 | 123 |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
124 /* Update number of bits */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
125 if ((context->count[0] += ((UINT4) inputLen << 3)) < ((UINT4) inputLen << 3)) |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
126 context->count[1]++; |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
127 context->count[1] += ((UINT4) inputLen >> 29); |
0 | 128 |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
129 partLen = 64 - index; |
0 | 130 |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
131 /* Transform as many times as possible. |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
132 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
133 if (inputLen >= partLen) { |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
134 MD5_memcpy((POINTER) & context->buffer[index], (POINTER) input, partLen); |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
135 MD5Transform(context->state, context->buffer); |
0 | 136 |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
137 for (i = partLen; i + 63 < inputLen; i += 64) |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
138 MD5Transform(context->state, &input[i]); |
0 | 139 |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
140 index = 0; |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
141 } else |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
142 i = 0; |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
143 |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
144 /* Buffer remaining input */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
145 MD5_memcpy((POINTER) & context->buffer[index], (POINTER) & input[i], inputLen - i); |
0 | 146 } |
147 | |
148 /* MD5 finalization. Ends an MD5 message-digest operation, writing the | |
149 the message digest and zeroizing the context. | |
150 */ | |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
151 void |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
152 MD5Final(digest, context) |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
153 unsigned char digest[16]; /* message digest */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
154 MD5_CTX *context; /* context */ |
0 | 155 { |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
156 unsigned char bits[8]; |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
157 unsigned int index, padLen; |
0 | 158 |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
159 /* Save number of bits */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
160 Encode(bits, context->count, 8); |
0 | 161 |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
162 /* Pad out to 56 mod 64. |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
163 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
164 index = (unsigned int) ((context->count[0] >> 3) & 0x3f); |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
165 padLen = (index < 56) ? (56 - index) : (120 - index); |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
166 MD5Update(context, PADDING, padLen); |
0 | 167 |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
168 /* Append length (before padding) */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
169 MD5Update(context, bits, 8); |
0 | 170 |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
171 /* Store state in digest */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
172 Encode(digest, context->state, 16); |
0 | 173 |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
174 /* Zeroize sensitive information. |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
175 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
176 MD5_memset((POINTER) context, 0, sizeof(*context)); |
0 | 177 } |
178 | |
179 /* MD5 basic transformation. Transforms state based on block. | |
180 */ | |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
181 static void |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
182 MD5Transform(state, block) |
0 | 183 UINT4 state[4]; |
184 unsigned char block[64]; | |
185 { | |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
186 UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16]; |
0 | 187 |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
188 Decode(x, block, 64); |
0 | 189 |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
190 /* Round 1 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
191 FF(a, b, c, d, x[0], S11, 0xd76aa478); /* 1 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
192 FF(d, a, b, c, x[1], S12, 0xe8c7b756); /* 2 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
193 FF(c, d, a, b, x[2], S13, 0x242070db); /* 3 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
194 FF(b, c, d, a, x[3], S14, 0xc1bdceee); /* 4 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
195 FF(a, b, c, d, x[4], S11, 0xf57c0faf); /* 5 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
196 FF(d, a, b, c, x[5], S12, 0x4787c62a); /* 6 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
197 FF(c, d, a, b, x[6], S13, 0xa8304613); /* 7 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
198 FF(b, c, d, a, x[7], S14, 0xfd469501); /* 8 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
199 FF(a, b, c, d, x[8], S11, 0x698098d8); /* 9 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
200 FF(d, a, b, c, x[9], S12, 0x8b44f7af); /* 10 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
201 FF(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
202 FF(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
203 FF(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
204 FF(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
205 FF(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
206 FF(b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ |
0 | 207 |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
208 /* Round 2 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
209 GG(a, b, c, d, x[1], S21, 0xf61e2562); /* 17 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
210 GG(d, a, b, c, x[6], S22, 0xc040b340); /* 18 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
211 GG(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
212 GG(b, c, d, a, x[0], S24, 0xe9b6c7aa); /* 20 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
213 GG(a, b, c, d, x[5], S21, 0xd62f105d); /* 21 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
214 GG(d, a, b, c, x[10], S22, 0x2441453); /* 22 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
215 GG(c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
216 GG(b, c, d, a, x[4], S24, 0xe7d3fbc8); /* 24 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
217 GG(a, b, c, d, x[9], S21, 0x21e1cde6); /* 25 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
218 GG(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
219 GG(c, d, a, b, x[3], S23, 0xf4d50d87); /* 27 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
220 GG(b, c, d, a, x[8], S24, 0x455a14ed); /* 28 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
221 GG(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
222 GG(d, a, b, c, x[2], S22, 0xfcefa3f8); /* 30 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
223 GG(c, d, a, b, x[7], S23, 0x676f02d9); /* 31 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
224 GG(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ |
0 | 225 |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
226 /* Round 3 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
227 HH(a, b, c, d, x[5], S31, 0xfffa3942); /* 33 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
228 HH(d, a, b, c, x[8], S32, 0x8771f681); /* 34 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
229 HH(c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
230 HH(b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
231 HH(a, b, c, d, x[1], S31, 0xa4beea44); /* 37 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
232 HH(d, a, b, c, x[4], S32, 0x4bdecfa9); /* 38 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
233 HH(c, d, a, b, x[7], S33, 0xf6bb4b60); /* 39 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
234 HH(b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
235 HH(a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
236 HH(d, a, b, c, x[0], S32, 0xeaa127fa); /* 42 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
237 HH(c, d, a, b, x[3], S33, 0xd4ef3085); /* 43 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
238 HH(b, c, d, a, x[6], S34, 0x4881d05); /* 44 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
239 HH(a, b, c, d, x[9], S31, 0xd9d4d039); /* 45 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
240 HH(d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
241 HH(c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
242 HH(b, c, d, a, x[2], S34, 0xc4ac5665); /* 48 */ |
0 | 243 |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
244 /* Round 4 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
245 II(a, b, c, d, x[0], S41, 0xf4292244); /* 49 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
246 II(d, a, b, c, x[7], S42, 0x432aff97); /* 50 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
247 II(c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
248 II(b, c, d, a, x[5], S44, 0xfc93a039); /* 52 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
249 II(a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
250 II(d, a, b, c, x[3], S42, 0x8f0ccc92); /* 54 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
251 II(c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
252 II(b, c, d, a, x[1], S44, 0x85845dd1); /* 56 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
253 II(a, b, c, d, x[8], S41, 0x6fa87e4f); /* 57 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
254 II(d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
255 II(c, d, a, b, x[6], S43, 0xa3014314); /* 59 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
256 II(b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
257 II(a, b, c, d, x[4], S41, 0xf7537e82); /* 61 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
258 II(d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
259 II(c, d, a, b, x[2], S43, 0x2ad7d2bb); /* 63 */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
260 II(b, c, d, a, x[9], S44, 0xeb86d391); /* 64 */ |
0 | 261 |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
262 state[0] += a; |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
263 state[1] += b; |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
264 state[2] += c; |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
265 state[3] += d; |
0 | 266 |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
267 /* Zeroize sensitive information. */ |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
268 MD5_memset((POINTER) x, 0, sizeof(x)); |
0 | 269 } |
270 | |
271 /* Encodes input (UINT4) into output (unsigned char). Assumes len is | |
272 a multiple of 4. | |
273 */ | |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
274 static void |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
275 Encode(output, input, len) |
0 | 276 unsigned char *output; |
277 UINT4 *input; | |
278 unsigned int len; | |
279 { | |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
280 unsigned int i, j; |
0 | 281 |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
282 for (i = 0, j = 0; j < len; i++, j += 4) { |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
283 output[j] = (unsigned char) (input[i] & 0xff); |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
284 output[j + 1] = (unsigned char) ((input[i] >> 8) & 0xff); |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
285 output[j + 2] = (unsigned char) ((input[i] >> 16) & 0xff); |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
286 output[j + 3] = (unsigned char) ((input[i] >> 24) & 0xff); |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
287 } |
0 | 288 } |
289 | |
290 /* Decodes input (unsigned char) into output (UINT4). Assumes len is | |
291 a multiple of 4. | |
292 */ | |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
293 static void |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
294 Decode(output, input, len) |
0 | 295 UINT4 *output; |
296 unsigned char *input; | |
297 unsigned int len; | |
298 { | |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
299 unsigned int i, j; |
0 | 300 |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
301 for (i = 0, j = 0; j < len; i++, j += 4) |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
302 output[i] = ((UINT4) input[j]) | (((UINT4) input[j + 1]) << 8) | (((UINT4) input[j + 2]) << 16) | (((UINT4) input[j + 3]) << 24); |
0 | 303 } |
304 | |
305 /* Note: Replace "for loop" with standard memcpy if possible. | |
306 */ | |
307 | |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
308 static void |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
309 MD5_memcpy(output, input, len) |
0 | 310 POINTER output; |
311 POINTER input; | |
312 unsigned int len; | |
313 { | |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
314 unsigned int i; |
0 | 315 |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
316 for (i = 0; i < len; i++) |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
317 output[i] = input[i]; |
0 | 318 } |
319 | |
320 /* Note: Replace "for loop" with standard memset if possible. | |
321 */ | |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
322 static void |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
323 MD5_memset(output, value, len) |
0 | 324 POINTER output; |
325 int value; | |
326 unsigned int len; | |
327 { | |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
328 unsigned int i; |
0 | 329 |
10
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
330 for (i = 0; i < len; i++) |
26e34ae9a3e3
changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents:
0
diff
changeset
|
331 ((char *) output)[i] = (char) value; |
0 | 332 } |