!+ ! MD5.R32 ! ! Definitions for the MD5 message digest algorithm. ! 07-JUN-1997 mdm !- LIBRARY 'FIELDS'; !+ ! Context structure !- _DEF (CTX) CTX_X_STATE = _BYTES (16), _OVERLAY (CTX_X_STATE) CTX_L_STATE1 = _LONG, CTX_L_STATE2 = _LONG, CTX_L_STATE3 = _LONG, CTX_L_STATE4 = _LONG, _ENDOVERLAY CTX_Q_COUNT = _QUAD, _OVERLAY (CTX_Q_COUNT) CTX_L_COUNT1 = _LONG, CTX_L_COUNT2 = _LONG, _ENDOVERLAY CTX_X_BUFFER = _BYTES (64) _ENDDEF (CTX); LITERAL S11 = 7, S12 = 12, S13 = 17, S14 = 22, S21 = 5, S22 = 9, S23 = 14, S24 = 20, S31 = 4, S32 = 11, S33 = 16, S34 = 23, S41 = 6, S42 = 10, S43 = 15, S44 = 21; MACRO F (x, y, z) = ((x AND y) OR ((NOT x) AND z))%, G (x, y, z) = ((x AND z) OR (y AND (NOT z)))%, H (x, y, z) = (x XOR y XOR z)%, I (x, y, z) = (y XOR (x OR (NOT z)))%, FF (a, b, c, d, x, s, ac) = BEGIN BUILTIN ROT; a = .a + F (b, c, d) + x + ac; a = ROT (.a, s); a = .a + b; END%, GG (a, b, c, d, x, s, ac) = BEGIN BUILTIN ROT; a = .a + G (b, c, d) + x + ac; a = ROT (.a, s); a = .a + b; END%, HH (a, b, c, d, x, s, ac) = BEGIN BUILTIN ROT; a = .a + H (b, c, d) + x + ac; a = ROT (.a, s); a = .a + b; END%, II (a, b, c, d, x, s, ac) = BEGIN BUILTIN ROT; a = .a + I (b, c, d) + x + ac; a = ROT (.a, s); a = .a + b; END%;