62 #include "../../internal.h"
63 #include "../digest/md32_common.h"
79 md4->h[0] = 0x67452301UL;
80 md4->h[1] = 0xefcdab89UL;
81 md4->h[2] = 0x98badcfeUL;
82 md4->h[3] = 0x10325476UL;
112 #define F(b, c, d) ((((c) ^ (d)) & (b)) ^ (d))
113 #define G(b, c, d) (((b) & (c)) | ((b) & (d)) | ((c) & (d)))
114 #define H(b, c, d) ((b) ^ (c) ^ (d))
116 #define R0(a, b, c, d, k, s, t) \
118 (a) += ((k) + (t) + F((b), (c), (d))); \
119 (a) = CRYPTO_rotl_u32(a, s); \
122 #define R1(a, b, c, d, k, s, t) \
124 (a) += ((k) + (t) + G((b), (c), (d))); \
125 (a) = CRYPTO_rotl_u32(a, s); \
128 #define R2(a, b, c, d, k, s, t) \
130 (a) += ((k) + (t) + H((b), (c), (d))); \
131 (a) = CRYPTO_rotl_u32(a, s); \
136 uint32_t X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15;
149 R0(
A, B,
C, D, X0, 3, 0);
152 R0(D,
A, B,
C, X1, 7, 0);
155 R0(
C, D,
A, B, X2, 11, 0);
158 R0(B,
C, D,
A, X3, 19, 0);
161 R0(
A, B,
C, D, X4, 3, 0);
164 R0(D,
A, B,
C, X5, 7, 0);
167 R0(
C, D,
A, B, X6, 11, 0);
170 R0(B,
C, D,
A, X7, 19, 0);
173 R0(
A, B,
C, D, X8, 3, 0);
176 R0(D,
A, B,
C, X9, 7, 0);
179 R0(
C, D,
A, B, X10, 11, 0);
182 R0(B,
C, D,
A, X11, 19, 0);
185 R0(
A, B,
C, D, X12, 3, 0);
188 R0(D,
A, B,
C, X13, 7, 0);
191 R0(
C, D,
A, B, X14, 11, 0);
192 R0(B,
C, D,
A, X15, 19, 0);
194 R1(
A, B,
C, D, X0, 3, 0x5A827999L);
195 R1(D,
A, B,
C, X4, 5, 0x5A827999L);
196 R1(
C, D,
A, B, X8, 9, 0x5A827999L);
197 R1(B,
C, D,
A, X12, 13, 0x5A827999L);
198 R1(
A, B,
C, D, X1, 3, 0x5A827999L);
199 R1(D,
A, B,
C, X5, 5, 0x5A827999L);
200 R1(
C, D,
A, B, X9, 9, 0x5A827999L);
201 R1(B,
C, D,
A, X13, 13, 0x5A827999L);
202 R1(
A, B,
C, D, X2, 3, 0x5A827999L);
203 R1(D,
A, B,
C, X6, 5, 0x5A827999L);
204 R1(
C, D,
A, B, X10, 9, 0x5A827999L);
205 R1(B,
C, D,
A, X14, 13, 0x5A827999L);
206 R1(
A, B,
C, D, X3, 3, 0x5A827999L);
207 R1(D,
A, B,
C, X7, 5, 0x5A827999L);
208 R1(
C, D,
A, B, X11, 9, 0x5A827999L);
209 R1(B,
C, D,
A, X15, 13, 0x5A827999L);
211 R2(
A, B,
C, D, X0, 3, 0x6ED9EBA1L);
212 R2(D,
A, B,
C, X8, 9, 0x6ED9EBA1L);
213 R2(
C, D,
A, B, X4, 11, 0x6ED9EBA1L);
214 R2(B,
C, D,
A, X12, 15, 0x6ED9EBA1L);
215 R2(
A, B,
C, D, X2, 3, 0x6ED9EBA1L);
216 R2(D,
A, B,
C, X10, 9, 0x6ED9EBA1L);
217 R2(
C, D,
A, B, X6, 11, 0x6ED9EBA1L);
218 R2(B,
C, D,
A, X14, 15, 0x6ED9EBA1L);
219 R2(
A, B,
C, D, X1, 3, 0x6ED9EBA1L);
220 R2(D,
A, B,
C, X9, 9, 0x6ED9EBA1L);
221 R2(
C, D,
A, B, X5, 11, 0x6ED9EBA1L);
222 R2(B,
C, D,
A, X13, 15, 0x6ED9EBA1L);
223 R2(
A, B,
C, D, X3, 3, 0x6ED9EBA1L);
224 R2(D,
A, B,
C, X11, 9, 0x6ED9EBA1L);
225 R2(
C, D,
A, B, X7, 11, 0x6ED9EBA1L);
226 R2(B,
C, D,
A, X15, 15, 0x6ED9EBA1L);