| 39 | } |
| 40 | |
| 41 | void md5_process( struct md5_context *ctx, uint8 data[64] ) |
| 42 | { |
| 43 | uint32 A, B, C, D, X[16]; |
| 44 | |
| 45 | GET_UINT32( X[0], data, 0 ); |
| 46 | GET_UINT32( X[1], data, 4 ); |
| 47 | GET_UINT32( X[2], data, 8 ); |
| 48 | GET_UINT32( X[3], data, 12 ); |
| 49 | GET_UINT32( X[4], data, 16 ); |
| 50 | GET_UINT32( X[5], data, 20 ); |
| 51 | GET_UINT32( X[6], data, 24 ); |
| 52 | GET_UINT32( X[7], data, 28 ); |
| 53 | GET_UINT32( X[8], data, 32 ); |
| 54 | GET_UINT32( X[9], data, 36 ); |
| 55 | GET_UINT32( X[10], data, 40 ); |
| 56 | GET_UINT32( X[11], data, 44 ); |
| 57 | GET_UINT32( X[12], data, 48 ); |
| 58 | GET_UINT32( X[13], data, 52 ); |
| 59 | GET_UINT32( X[14], data, 56 ); |
| 60 | GET_UINT32( X[15], data, 60 ); |
| 61 | |
| 62 | #define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n))) |
| 63 | |
| 64 | #define P(a,b,c,d,k,s,t) \ |
| 65 | { \ |
| 66 | a += F(b,c,d) + X[k] + t; a = S(a,s) + b; \ |
| 67 | } |
| 68 | |
| 69 | A = ctx->state[0]; |
| 70 | B = ctx->state[1]; |
| 71 | C = ctx->state[2]; |
| 72 | D = ctx->state[3]; |
| 73 | |
| 74 | #define F(x,y,z) (z ^ (x & (y ^ z))) |
| 75 | |
| 76 | P( A, B, C, D, 0, 7, 0xD76AA478 ); |
| 77 | P( D, A, B, C, 1, 12, 0xE8C7B756 ); |
| 78 | P( C, D, A, B, 2, 17, 0x242070DB ); |
| 79 | P( B, C, D, A, 3, 22, 0xC1BDCEEE ); |
| 80 | P( A, B, C, D, 4, 7, 0xF57C0FAF ); |
| 81 | P( D, A, B, C, 5, 12, 0x4787C62A ); |
| 82 | P( C, D, A, B, 6, 17, 0xA8304613 ); |
| 83 | P( B, C, D, A, 7, 22, 0xFD469501 ); |
| 84 | P( A, B, C, D, 8, 7, 0x698098D8 ); |
| 85 | P( D, A, B, C, 9, 12, 0x8B44F7AF ); |
| 86 | P( C, D, A, B, 10, 17, 0xFFFF5BB1 ); |
| 87 | P( B, C, D, A, 11, 22, 0x895CD7BE ); |
| 88 | P( A, B, C, D, 12, 7, 0x6B901122 ); |
| 89 | P( D, A, B, C, 13, 12, 0xFD987193 ); |
| 90 | P( C, D, A, B, 14, 17, 0xA679438E ); |
| 91 | P( B, C, D, A, 15, 22, 0x49B40821 ); |
| 92 | |
| 93 | #undef F |
| 94 | |
| 95 | #define F(x,y,z) (y ^ (z & (x ^ y))) |
| 96 | |
| 97 | P( A, B, C, D, 1, 5, 0xF61E2562 ); |
| 98 | P( D, A, B, C, 6, 9, 0xC040B340 ); |