| procedure md5_II(var a: longword; const b, c, d, x, s, ac: longword); begin a := a + md5_I(b, c, d) + x + ac; a := RotateLeft(a, s); a := a + b; end; begin { MD5 } x := ConvToWord(sMessage); a := cAA; b := cBB; c := cCC; d := cDD;
k := 0; repeat AA := a; BB := b; CC := c; DD := d; md5_FF(a, b, c, d, x[k + 0], S11, $D76AA478); md5_FF(d, a, b, c, x[k + 1], S12, $E8C7B756); md5_FF(c, d, a, b, x[k + 2], S13, $242070DB); md5_FF(b, c, d, a, x[k + 3], S14, $C1BDCEEE); md5_FF(a, b, c, d, x[k + 4], S11, $F57C0FAF); md5_FF(d, a, b, c, x[k + 5], S12, $4787C62A); md5_FF(c, d, a, b, x[k + 6], S13, $A8304613); md5_FF(b, c, d, a, x[k + 7], S14, $FD469501); md5_FF(a, b, c, d, x[k + 8], S11, $698098D8); md5_FF(d, a, b, c, x[k + 9], S12, $8B44F7AF); md5_FF(c, d, a, b, x[k + 10], S13, $FFFF5BB1); md5_FF(b, c, d, a, x[k + 11], S14, $895CD7BE); md5_FF(a, b, c, d, x[k + 12], S11, $6B901122); md5_FF(d, a, b, c, x[k + 13], S12, $FD987193); md5_FF(c, d, a, b, x[k + 14], S13, $A679438E); md5_FF(b, c, d, a, x[k + 15], S14, $49B40821); md5_GG(a, b, c, d, x[k + 1], S21, $F61E2562); md5_GG(d, a, b, c, x[k + 6], S22, $C040B340); md5_GG(c, d, a, b, x[k + 11], S23, $265E5A51); md5_GG(b, c, d, a, x[k + 0], S24, $E9B6C7AA); md5_GG(a, b, c, d, x[k + 5], S21, $D62F105D); md5_GG(d, a, b, c, x[k + 10], S22, $2441453); md5_GG(c, d, a, b, x[k + 15], S23, $D8A1E681); md5_GG(b, c, d, a, x[k + 4], S24, $E7D3FBC8); md5_GG(a, b, c, d, x[k + 9], S21, $21E1CDE6); md5_GG(d, a, b, c, x[k + 14], S22, $C33707D6); md5_GG(c, d, a, b, x[k + 3], S23, $F4D50D87); md5_GG(b, c, d, a, x[k + 8], S24, $455A14ED); md5_GG(a, b, c, d, x[k + 13], S21, $A9E3E905); md5_GG(d, a, b, c, x[k + 2], S22, $FCEFA3F8); md5_GG(c, d, a, b, x[k + 7], S23, $676F02D9); md5_GG(b, c, d, a, x[k + 12], S24, $8D2A4C8A); |