5 #define GET_UINT32(n, b, i) n = b[i] + (b[i+1]<<8) + (b[i+2]<<16) + (b[i+3]<<24)
6 #define PUT_UINT32(n, b, i) do { b[i] = n; b[i+1] = n >> 8; b[i+2] = n >> 16; b[i+3] = n >> 24; } while(0)
12 ctx->
state[0] = 0x67452301;
13 ctx->
state[1] = 0xEFCDAB89;
14 ctx->
state[2] = 0x98BADCFE;
15 ctx->
state[3] = 0x10325476;
38 #define S(x, n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))
40 #define P(a, b, c, d, k, s, t) \
42 a += F(b,c,d) + X[k] + t; a = S(a,s) + b; \
50 #define F(x, y, z) (z ^ (x & (y ^ z)))
52 P(A, B, C, D, 0, 7, 0xD76AA478);
53 P(D, A, B, C, 1, 12, 0xE8C7B756);
54 P(C, D, A, B, 2, 17, 0x242070DB);
55 P(B, C, D, A, 3, 22, 0xC1BDCEEE);
56 P(A, B, C, D, 4, 7, 0xF57C0FAF);
57 P(D, A, B, C, 5, 12, 0x4787C62A);
58 P(C, D, A, B, 6, 17, 0xA8304613);
59 P(B, C, D, A, 7, 22, 0xFD469501);
60 P(A, B, C, D, 8, 7, 0x698098D8);
61 P(D, A, B, C, 9, 12, 0x8B44F7AF);
62 P(C, D, A, B, 10, 17, 0xFFFF5BB1);
63 P(B, C, D, A, 11, 22, 0x895CD7BE);
64 P(A, B, C, D, 12, 7, 0x6B901122);
65 P(D, A, B, C, 13, 12, 0xFD987193);
66 P(C, D, A, B, 14, 17, 0xA679438E);
67 P(B, C, D, A, 15, 22, 0x49B40821);
71 #define F(x, y, z) (y ^ (z & (x ^ y)))
73 P(A, B, C, D, 1, 5, 0xF61E2562);
74 P(D, A, B, C, 6, 9, 0xC040B340);
75 P(C, D, A, B, 11, 14, 0x265E5A51);
76 P(B, C, D, A, 0, 20, 0xE9B6C7AA);
77 P(A, B, C, D, 5, 5, 0xD62F105D);
78 P(D, A, B, C, 10, 9, 0x02441453);
79 P(C, D, A, B, 15, 14, 0xD8A1E681);
80 P(B, C, D, A, 4, 20, 0xE7D3FBC8);
81 P(A, B, C, D, 9, 5, 0x21E1CDE6);
82 P(D, A, B, C, 14, 9, 0xC33707D6);
83 P(C, D, A, B, 3, 14, 0xF4D50D87);
84 P(B, C, D, A, 8, 20, 0x455A14ED);
85 P(A, B, C, D, 13, 5, 0xA9E3E905);
86 P(D, A, B, C, 2, 9, 0xFCEFA3F8);
87 P(C, D, A, B, 7, 14, 0x676F02D9);
88 P(B, C, D, A, 12, 20, 0x8D2A4C8A);
92 #define F(x, y, z) (x ^ y ^ z)
94 P(A, B, C, D, 5, 4, 0xFFFA3942);
95 P(D, A, B, C, 8, 11, 0x8771F681);
96 P(C, D, A, B, 11, 16, 0x6D9D6122);
97 P(B, C, D, A, 14, 23, 0xFDE5380C);
98 P(A, B, C, D, 1, 4, 0xA4BEEA44);
99 P(D, A, B, C, 4, 11, 0x4BDECFA9);
100 P(C, D, A, B, 7, 16, 0xF6BB4B60);
101 P(B, C, D, A, 10, 23, 0xBEBFBC70);
102 P(A, B, C, D, 13, 4, 0x289B7EC6);
103 P(D, A, B, C, 0, 11, 0xEAA127FA);
104 P(C, D, A, B, 3, 16, 0xD4EF3085);
105 P(B, C, D, A, 6, 23, 0x04881D05);
106 P(A, B, C, D, 9, 4, 0xD9D4D039);
107 P(D, A, B, C, 12, 11, 0xE6DB99E5);
108 P(C, D, A, B, 15, 16, 0x1FA27CF8);
109 P(B, C, D, A, 2, 23, 0xC4AC5665);
113 #define F(x, y, z) (y ^ (x | ~z))
115 P(A, B, C, D, 0, 6, 0xF4292244);
116 P(D, A, B, C, 7, 10, 0x432AFF97);
117 P(C, D, A, B, 14, 15, 0xAB9423A7);
118 P(B, C, D, A, 5, 21, 0xFC93A039);
119 P(A, B, C, D, 12, 6, 0x655B59C3);
120 P(D, A, B, C, 3, 10, 0x8F0CCC92);
121 P(C, D, A, B, 10, 15, 0xFFEFF47D);
122 P(B, C, D, A, 1, 21, 0x85845DD1);
123 P(A, B, C, D, 8, 6, 0x6FA87E4F);
124 P(D, A, B, C, 15, 10, 0xFE2CE6E0);
125 P(C, D, A, B, 6, 15, 0xA3014314);
126 P(B, C, D, A, 13, 21, 0x4E0811A1);
127 P(A, B, C, D, 4, 6, 0xF7537E82);
128 P(D, A, B, C, 11, 10, 0xBD3AF235);
129 P(C, D, A, B, 2, 15, 0x2AD7D2BB);
130 P(B, C, D, A, 9, 21, 0xEB86D391);
146 left = ctx->
total[0] & 0x3F;
150 ctx->
total[0] &= 0xFFFFFFFF;
152 if (ctx->
total[0] < length)
155 if (left && length >= fill) {
156 memcpy((
void *)(ctx->
buffer + left), (
const void *)input, fill);
163 while (length >= 64) {
170 memcpy((
void *)(ctx->
buffer + left), (
const void *)input, length);
175 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
176 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
177 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
178 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
186 high = (ctx->
total[0] >> 29) | (ctx->
total[1] << 3);
187 low = (ctx->
total[0] << 3);
192 last = ctx->
total[0] & 0x3F;
193 padn = (last < 56) ? (56 - last) : (120 - last);
void md5_starts(md5_context *ctx)
#define PUT_UINT32(n, b, i)
void md5_finish(md5_context *ctx, uint8_t digest[16])
const uint8_t md5_padding[64]
void fill(NodeValuesT &to_fill, const common::Table< Real > &data_array, const RowT &element_row, const Uint start=0)
Fill STL-vector like per-node data storage.
#define P(a, b, c, d, k, s, t)
void md5_update(md5_context *ctx, const uint8_t *input, uint32_t length)
#define GET_UINT32(n, b, i)
void md5_process(md5_context *ctx, const uint8_t data[64])