23 #define PUT_64BIT_LE(cp, value) do { \ 24 (cp)[7] = (uint8_t)((value) >> 56); \ 25 (cp)[6] = (uint8_t)((value) >> 48); \ 26 (cp)[5] = (uint8_t)((value) >> 40); \ 27 (cp)[4] = (uint8_t)((value) >> 32); \ 28 (cp)[3] = (uint8_t)((value) >> 24); \ 29 (cp)[2] = (uint8_t)((value) >> 16); \ 30 (cp)[1] = (uint8_t)((value) >> 8); \ 31 (cp)[0] = (uint8_t)((value)); } while (0) 33 #define PUT_32BIT_LE(cp, value) do { \ 34 (cp)[3] = (uint8_t)((value) >> 24); \ 35 (cp)[2] = (uint8_t)((value) >> 16); \ 36 (cp)[1] = (uint8_t)((value) >> 8); \ 37 (cp)[0] = (uint8_t)((value)); } while (0) 40 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
41 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
42 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
56 ctx->
state[0] = 0x67452301;
57 ctx->
state[1] = 0xefcdab89;
58 ctx->
state[2] = 0x98badcfe;
59 ctx->
state[3] = 0x10325476;
79 ctx->
count += (uint64_t)len << 3;
85 memcpy(ctx->
buffer + have, input, need);
103 memcpy(ctx->
buffer + have, input, len);
143 for (i = 0; i < 4; i++)
146 memset(ctx, 0,
sizeof(*ctx));
153 #define F1(x, y, z) (z ^ (x & (y ^ z))) 154 #define F2(x, y, z) F1(z, x, y) 155 #define F3(x, y, z) (x ^ y ^ z) 156 #define F4(x, y, z) (y ^ (x | ~z)) 159 #define MD5STEP(f, w, x, y, z, data, s) \ 160 ( w += f(x, y, z) + data, w = w<<s | w>>(32-s), w += x ) 170 uint32_t a, b, c, d, in[MD5_BLOCK_SIZE / 4];
172 #if _MHD_BYTE_ORDER == _MHD_LITTLE_ENDIAN 173 memcpy(in, block,
sizeof(in));
175 for (a = 0; a < MD5_BLOCK_SIZE / 4; a++)
178 (uint32_t)(block[a * 4 + 0]) |
179 (uint32_t)(block[a * 4 + 1]) << 8 |
180 (uint32_t)(block[a * 4 + 2]) << 16 |
181 (uint32_t)(block[a * 4 + 3]) << 24);
190 MD5STEP(
F1, a, b, c, d, in[0] + 0xd76aa478, 7);
191 MD5STEP(
F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
192 MD5STEP(
F1, c, d, a, b, in[2] + 0x242070db, 17);
193 MD5STEP(
F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
194 MD5STEP(
F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
195 MD5STEP(
F1, d, a, b, c, in[5] + 0x4787c62a, 12);
196 MD5STEP(
F1, c, d, a, b, in[6] + 0xa8304613, 17);
197 MD5STEP(
F1, b, c, d, a, in[7] + 0xfd469501, 22);
198 MD5STEP(
F1, a, b, c, d, in[8] + 0x698098d8, 7);
199 MD5STEP(
F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
200 MD5STEP(
F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
201 MD5STEP(
F1, b, c, d, a, in[11] + 0x895cd7be, 22);
202 MD5STEP(
F1, a, b, c, d, in[12] + 0x6b901122, 7);
203 MD5STEP(
F1, d, a, b, c, in[13] + 0xfd987193, 12);
204 MD5STEP(
F1, c, d, a, b, in[14] + 0xa679438e, 17);
205 MD5STEP(
F1, b, c, d, a, in[15] + 0x49b40821, 22);
207 MD5STEP(
F2, a, b, c, d, in[1] + 0xf61e2562, 5);
208 MD5STEP(
F2, d, a, b, c, in[6] + 0xc040b340, 9);
209 MD5STEP(
F2, c, d, a, b, in[11] + 0x265e5a51, 14);
210 MD5STEP(
F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
211 MD5STEP(
F2, a, b, c, d, in[5] + 0xd62f105d, 5);
212 MD5STEP(
F2, d, a, b, c, in[10] + 0x02441453, 9);
213 MD5STEP(
F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
214 MD5STEP(
F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
215 MD5STEP(
F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
216 MD5STEP(
F2, d, a, b, c, in[14] + 0xc33707d6, 9);
217 MD5STEP(
F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
218 MD5STEP(
F2, b, c, d, a, in[8] + 0x455a14ed, 20);
219 MD5STEP(
F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
220 MD5STEP(
F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
221 MD5STEP(
F2, c, d, a, b, in[7] + 0x676f02d9, 14);
222 MD5STEP(
F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
224 MD5STEP(
F3, a, b, c, d, in[5] + 0xfffa3942, 4);
225 MD5STEP(
F3, d, a, b, c, in[8] + 0x8771f681, 11);
226 MD5STEP(
F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
227 MD5STEP(
F3, b, c, d, a, in[14] + 0xfde5380c, 23);
228 MD5STEP(
F3, a, b, c, d, in[1] + 0xa4beea44, 4);
229 MD5STEP(
F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
230 MD5STEP(
F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
231 MD5STEP(
F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
232 MD5STEP(
F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
233 MD5STEP(
F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
234 MD5STEP(
F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
235 MD5STEP(
F3, b, c, d, a, in[6] + 0x04881d05, 23);
236 MD5STEP(
F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
237 MD5STEP(
F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
238 MD5STEP(
F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
239 MD5STEP(
F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
241 MD5STEP(
F4, a, b, c, d, in[0] + 0xf4292244, 6);
242 MD5STEP(
F4, d, a, b, c, in[7] + 0x432aff97, 10);
243 MD5STEP(
F4, c, d, a, b, in[14] + 0xab9423a7, 15);
244 MD5STEP(
F4, b, c, d, a, in[5] + 0xfc93a039, 21);
245 MD5STEP(
F4, a, b, c, d, in[12] + 0x655b59c3, 6);
246 MD5STEP(
F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
247 MD5STEP(
F4, c, d, a, b, in[10] + 0xffeff47d, 15);
248 MD5STEP(
F4, b, c, d, a, in[1] + 0x85845dd1, 21);
249 MD5STEP(
F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
250 MD5STEP(
F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
251 MD5STEP(
F4, c, d, a, b, in[6] + 0xa3014314, 15);
252 MD5STEP(
F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
253 MD5STEP(
F4, a, b, c, d, in[4] + 0xf7537e82, 6);
254 MD5STEP(
F4, d, a, b, c, in[11] + 0xbd3af235, 10);
255 MD5STEP(
F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
256 MD5STEP(
F4, b, c, d, a, in[9] + 0xeb86d391, 21);
enum MHD_CONNECTION_STATE state
static uint8_t PADDING[MD5_BLOCK_SIZE]
uint8_t buffer[MD5_BLOCK_SIZE]
macro definitions for host byte order
void MD5Update(struct MD5Context *ctx, const unsigned char *input, size_t len)
#define MD5STEP(f, w, x, y, z, data, s)
void MD5Transform(uint32_t state[4], const uint8_t block[MD5_BLOCK_SIZE])
void MD5Final(unsigned char digest[MD5_DIGEST_SIZE], struct MD5Context *ctx)
#define PUT_64BIT_LE(cp, value)
void MD5Init(struct MD5Context *ctx)
#define PUT_32BIT_LE(cp, value)
void MD5Pad(struct MD5Context *ctx)