The attached patches fix MD4 and MD5 hash functions. It seems these
are just conversion mistakes:
http://cvs.savannah.gnu.org/viewcvs/gnu-crypto/source/gnu/crypto/hash/MD4.java?root=gnu-crypto&r1=1.4&r2=1.5&diff_format=u
http://cvs.savannah.gnu.org/viewcvs/gnu-crypto/source/gnu/crypto/hash/MD5.java?root=gnu-crypto&r1=1.5&r2=1.6&diff_format=u
FYI,
Jung-uk Kim
--- gnu/java/security/hash/MD4.java.orig Sun Jun 18 02:59:24 2006
+++ gnu/java/security/hash/MD4.java Fri Jan 5 19:17:32 2007
@@ -231,103 +231,103 @@
dd = d;
aa += ((bb & cc) | ((~bb) & dd)) + X0;
- aa = aa << 3 | aa >>> -3;
+ aa = aa << 3 | aa >>> (32 - 3);
dd += ((aa & bb) | ((~aa) & cc)) + X1;
- dd = dd << 7 | dd >>> -7;
+ dd = dd << 7 | dd >>> (32 - 7);
cc += ((dd & aa) | ((~dd) & bb)) + X2;
- cc = cc << 11 | cc >>> -11;
+ cc = cc << 11 | cc >>> (32 - 11);
bb += ((cc & dd) | ((~cc) & aa)) + X3;
- bb = bb << 19 | bb >>> -19;
+ bb = bb << 19 | bb >>> (32 - 19);
aa += ((bb & cc) | ((~bb) & dd)) + X4;
- aa = aa << 3 | aa >>> -3;
+ aa = aa << 3 | aa >>> (32 - 3);
dd += ((aa & bb) | ((~aa) & cc)) + X5;
- dd = dd << 7 | dd >>> -7;
+ dd = dd << 7 | dd >>> (32 - 7);
cc += ((dd & aa) | ((~dd) & bb)) + X6;
- cc = cc << 11 | cc >>> -11;
+ cc = cc << 11 | cc >>> (32 - 11);
bb += ((cc & dd) | ((~cc) & aa)) + X7;
- bb = bb << 19 | bb >>> -19;
+ bb = bb << 19 | bb >>> (32 - 19);
aa += ((bb & cc) | ((~bb) & dd)) + X8;
- aa = aa << 3 | aa >>> -3;
+ aa = aa << 3 | aa >>> (32 - 3);
dd += ((aa & bb) | ((~aa) & cc)) + X9;
- dd = dd << 7 | dd >>> -7;
+ dd = dd << 7 | dd >>> (32 - 7);
cc += ((dd & aa) | ((~dd) & bb)) + X10;
- cc = cc << 11 | cc >>> -11;
+ cc = cc << 11 | cc >>> (32 - 11);
bb += ((cc & dd) | ((~cc) & aa)) + X11;
- bb = bb << 19 | bb >>> -19;
+ bb = bb << 19 | bb >>> (32 - 19);
aa += ((bb & cc) | ((~bb) & dd)) + X12;
- aa = aa << 3 | aa >>> -3;
+ aa = aa << 3 | aa >>> (32 - 3);
dd += ((aa & bb) | ((~aa) & cc)) + X13;
- dd = dd << 7 | dd >>> -7;
+ dd = dd << 7 | dd >>> (32 - 7);
cc += ((dd & aa) | ((~dd) & bb)) + X14;
- cc = cc << 11 | cc >>> -11;
+ cc = cc << 11 | cc >>> (32 - 11);
bb += ((cc & dd) | ((~cc) & aa)) + X15;
- bb = bb << 19 | bb >>> -19;
+ bb = bb << 19 | bb >>> (32 - 19);
aa += ((bb & (cc | dd)) | (cc & dd)) + X0 + 0x5a827999;
- aa = aa << 3 | aa >>> -3;
+ aa = aa << 3 | aa >>> (32 - 3);
dd += ((aa & (bb | cc)) | (bb & cc)) + X4 + 0x5a827999;
- dd = dd << 5 | dd >>> -5;
+ dd = dd << 5 | dd >>> (32 - 5);
cc += ((dd & (aa | bb)) | (aa & bb)) + X8 + 0x5a827999;
- cc = cc << 9 | cc >>> -9;
+ cc = cc << 9 | cc >>> (32 - 9);
bb += ((cc & (dd | aa)) | (dd & aa)) + X12 + 0x5a827999;
- bb = bb << 13 | bb >>> -13;
+ bb = bb << 13 | bb >>> (32 - 13);
aa += ((bb & (cc | dd)) | (cc & dd)) + X1 + 0x5a827999;
- aa = aa << 3 | aa >>> -3;
+ aa = aa << 3 | aa >>> (32 - 3);
dd += ((aa & (bb | cc)) | (bb & cc)) + X5 + 0x5a827999;
- dd = dd << 5 | dd >>> -5;
+ dd = dd << 5 | dd >>> (32 - 5);
cc += ((dd & (aa | bb)) | (aa & bb)) + X9 + 0x5a827999;
- cc = cc << 9 | cc >>> -9;
+ cc = cc << 9 | cc >>> (32 - 9);
bb += ((cc & (dd | aa)) | (dd & aa)) + X13 + 0x5a827999;
- bb = bb << 13 | bb >>> -13;
+ bb = bb << 13 | bb >>> (32 - 13);
aa += ((bb & (cc | dd)) | (cc & dd)) + X2 + 0x5a827999;
- aa = aa << 3 | aa >>> -3;
+ aa = aa << 3 | aa >>> (32 - 3);
dd += ((aa & (bb | cc)) | (bb & cc)) + X6 + 0x5a827999;
- dd = dd << 5 | dd >>> -5;
+ dd = dd << 5 | dd >>> (32 - 5);
cc += ((dd & (aa | bb)) | (aa & bb)) + X10 + 0x5a827999;
- cc = cc << 9 | cc >>> -9;
+ cc = cc << 9 | cc >>> (32 - 9);
bb += ((cc & (dd | aa)) | (dd & aa)) + X14 + 0x5a827999;
- bb = bb << 13 | bb >>> -13;
+ bb = bb << 13 | bb >>> (32 - 13);
aa += ((bb & (cc | dd)) | (cc & dd)) + X3 + 0x5a827999;
- aa = aa << 3 | aa >>> -3;
+ aa = aa << 3 | aa >>> (32 - 3);
dd += ((aa & (bb | cc)) | (bb & cc)) + X7 + 0x5a827999;
- dd = dd << 5 | dd >>> -5;
+ dd = dd << 5 | dd >>> (32 - 5);
cc += ((dd & (aa | bb)) | (aa & bb)) + X11 + 0x5a827999;
- cc = cc << 9 | cc >>> -9;
+ cc = cc << 9 | cc >>> (32 - 9);
bb += ((cc & (dd | aa)) | (dd & aa)) + X15 + 0x5a827999;
- bb = bb << 13 | bb >>> -13;
+ bb = bb << 13 | bb >>> (32 - 13);
aa += (bb ^ cc ^ dd) + X0 + 0x6ed9eba1;
- aa = aa << 3 | aa >>> -3;
+ aa = aa << 3 | aa >>> (32 - 3);
dd += (aa ^ bb ^ cc) + X8 + 0x6ed9eba1;
- dd = dd << 9 | dd >>> -9;
+ dd = dd << 9 | dd >>> (32 - 9);
cc += (dd ^ aa ^ bb) + X4 + 0x6ed9eba1;
- cc = cc << 11 | cc >>> -11;
+ cc = cc << 11 | cc >>> (32 - 11);
bb += (cc ^ dd ^ aa) + X12 + 0x6ed9eba1;
- bb = bb << 15 | bb >>> -15;
+ bb = bb << 15 | bb >>> (32 - 15);
aa += (bb ^ cc ^ dd) + X2 + 0x6ed9eba1;
- aa = aa << 3 | aa >>> -3;
+ aa = aa << 3 | aa >>> (32 - 3);
dd += (aa ^ bb ^ cc) + X10 + 0x6ed9eba1;
- dd = dd << 9 | dd >>> -9;
+ dd = dd << 9 | dd >>> (32 - 9);
cc += (dd ^ aa ^ bb) + X6 + 0x6ed9eba1;
- cc = cc << 11 | cc >>> -11;
+ cc = cc << 11 | cc >>> (32 - 11);
bb += (cc ^ dd ^ aa) + X14 + 0x6ed9eba1;
- bb = bb << 15 | bb >>> -15;
+ bb = bb << 15 | bb >>> (32 - 15);
aa += (bb ^ cc ^ dd) + X1 + 0x6ed9eba1;
- aa = aa << 3 | aa >>> -3;
+ aa = aa << 3 | aa >>> (32 - 3);
dd += (aa ^ bb ^ cc) + X9 + 0x6ed9eba1;
- dd = dd << 9 | dd >>> -9;
+ dd = dd << 9 | dd >>> (32 - 9);
cc += (dd ^ aa ^ bb) + X5 + 0x6ed9eba1;
- cc = cc << 11 | cc >>> -11;
+ cc = cc << 11 | cc >>> (32 - 11);
bb += (cc ^ dd ^ aa) + X13 + 0x6ed9eba1;
- bb = bb << 15 | bb >>> -15;
+ bb = bb << 15 | bb >>> (32 - 15);
aa += (bb ^ cc ^ dd) + X3 + 0x6ed9eba1;
- aa = aa << 3 | aa >>> -3;
+ aa = aa << 3 | aa >>> (32 - 3);
dd += (aa ^ bb ^ cc) + X11 + 0x6ed9eba1;
- dd = dd << 9 | dd >>> -9;
+ dd = dd << 9 | dd >>> (32 - 9);
cc += (dd ^ aa ^ bb) + X7 + 0x6ed9eba1;
- cc = cc << 11 | cc >>> -11;
+ cc = cc << 11 | cc >>> (32 - 11);
bb += (cc ^ dd ^ aa) + X15 + 0x6ed9eba1;
- bb = bb << 15 | bb >>> -15;
+ bb = bb << 15 | bb >>> (32 - 15);
a += aa;
b += bb;
--- gnu/java/security/hash/MD5.java.orig Sun Jun 18 02:59:24 2006
+++ gnu/java/security/hash/MD5.java Fri Jan 5 19:10:56 2007
@@ -169,151 +169,151 @@
// hex constants are from md5.c in FSF Gnu Privacy Guard 0.9.2
// round 1
A += ((B & C) | (~B & D)) + X0 + 0xD76AA478;
- A = B + (A << 7 | A >>> -7);
+ A = B + (A << 7 | A >>> (32 - 7));
D += ((A & B) | (~A & C)) + X1 + 0xE8C7B756;
- D = A + (D << 12 | D >>> -12);
+ D = A + (D << 12 | D >>> (32 - 12));
C += ((D & A) | (~D & B)) + X2 + 0x242070DB;
- C = D + (C << 17 | C >>> -17);
+ C = D + (C << 17 | C >>> (32 - 17));
B += ((C & D) | (~C & A)) + X3 + 0xC1BDCEEE;
- B = C + (B << 22 | B >>> -22);
+ B = C + (B << 22 | B >>> (32 - 22));
A += ((B & C) | (~B & D)) + X4 + 0xF57C0FAF;
- A = B + (A << 7 | A >>> -7);
+ A = B + (A << 7 | A >>> (32 - 7));
D += ((A & B) | (~A & C)) + X5 + 0x4787C62A;
- D = A + (D << 12 | D >>> -12);
+ D = A + (D << 12 | D >>> (32 - 12));
C += ((D & A) | (~D & B)) + X6 + 0xA8304613;
- C = D + (C << 17 | C >>> -17);
+ C = D + (C << 17 | C >>> (32 - 17));
B += ((C & D) | (~C & A)) + X7 + 0xFD469501;
- B = C + (B << 22 | B >>> -22);
+ B = C + (B << 22 | B >>> (32 - 22));
A += ((B & C) | (~B & D)) + X8 + 0x698098D8;
- A = B + (A << 7 | A >>> -7);
+ A = B + (A << 7 | A >>> (32 - 7));
D += ((A & B) | (~A & C)) + X9 + 0x8B44F7AF;
- D = A + (D << 12 | D >>> -12);
+ D = A + (D << 12 | D >>> (32 - 12));
C += ((D & A) | (~D & B)) + X10 + 0xFFFF5BB1;
- C = D + (C << 17 | C >>> -17);
+ C = D + (C << 17 | C >>> (32 - 17));
B += ((C & D) | (~C & A)) + X11 + 0x895CD7BE;
- B = C + (B << 22 | B >>> -22);
+ B = C + (B << 22 | B >>> (32 - 22));
A += ((B & C) | (~B & D)) + X12 + 0x6B901122;
- A = B + (A << 7 | A >>> -7);
+ A = B + (A << 7 | A >>> (32 - 7));
D += ((A & B) | (~A & C)) + X13 + 0xFD987193;
- D = A + (D << 12 | D >>> -12);
+ D = A + (D << 12 | D >>> (32 - 12));
C += ((D & A) | (~D & B)) + X14 + 0xA679438E;
- C = D + (C << 17 | C >>> -17);
+ C = D + (C << 17 | C >>> (32 - 17));
B += ((C & D) | (~C & A)) + X15 + 0x49B40821;
- B = C + (B << 22 | B >>> -22);
+ B = C + (B << 22 | B >>> (32 - 22));
// round 2
A += ((B & D) | (C & ~D)) + X1 + 0xF61E2562;
- A = B + (A << 5 | A >>> -5);
+ A = B + (A << 5 | A >>> (32 - 5));
D += ((A & C) | (B & ~C)) + X6 + 0xC040B340;
- D = A + (D << 9 | D >>> -9);
+ D = A + (D << 9 | D >>> (32 - 9));
C += ((D & B) | (A & ~B)) + X11 + 0x265E5A51;
- C = D + (C << 14 | C >>> -14);
+ C = D + (C << 14 | C >>> (32 - 14));
B += ((C & A) | (D & ~A)) + X0 + 0xE9B6C7AA;
- B = C + (B << 20 | B >>> -20);
+ B = C + (B << 20 | B >>> (32 - 20));
A += ((B & D) | (C & ~D)) + X5 + 0xD62F105D;
- A = B + (A << 5 | A >>> -5);
+ A = B + (A << 5 | A >>> (32 - 5));
D += ((A & C) | (B & ~C)) + X10 + 0x02441453;
- D = A + (D << 9 | D >>> -9);
+ D = A + (D << 9 | D >>> (32 - 9));
C += ((D & B) | (A & ~B)) + X15 + 0xD8A1E681;
- C = D + (C << 14 | C >>> -14);
+ C = D + (C << 14 | C >>> (32 - 14));
B += ((C & A) | (D & ~A)) + X4 + 0xE7D3FBC8;
- B = C + (B << 20 | B >>> -20);
+ B = C + (B << 20 | B >>> (32 - 20));
A += ((B & D) | (C & ~D)) + X9 + 0x21E1CDE6;
- A = B + (A << 5 | A >>> -5);
+ A = B + (A << 5 | A >>> (32 - 5));
D += ((A & C) | (B & ~C)) + X14 + 0xC33707D6;
- D = A + (D << 9 | D >>> -9);
+ D = A + (D << 9 | D >>> (32 - 9));
C += ((D & B) | (A & ~B)) + X3 + 0xF4D50D87;
- C = D + (C << 14 | C >>> -14);
+ C = D + (C << 14 | C >>> (32 - 14));
B += ((C & A) | (D & ~A)) + X8 + 0x455A14ED;
- B = C + (B << 20 | B >>> -20);
+ B = C + (B << 20 | B >>> (32 - 20));
A += ((B & D) | (C & ~D)) + X13 + 0xA9E3E905;
- A = B + (A << 5 | A >>> -5);
+ A = B + (A << 5 | A >>> (32 - 5));
D += ((A & C) | (B & ~C)) + X2 + 0xFCEFA3F8;
- D = A + (D << 9 | D >>> -9);
+ D = A + (D << 9 | D >>> (32 - 9));
C += ((D & B) | (A & ~B)) + X7 + 0x676F02D9;
- C = D + (C << 14 | C >>> -14);
+ C = D + (C << 14 | C >>> (32 - 14));
B += ((C & A) | (D & ~A)) + X12 + 0x8D2A4C8A;
- B = C + (B << 20 | B >>> -20);
+ B = C + (B << 20 | B >>> (32 - 20));
// round 3
A += (B ^ C ^ D) + X5 + 0xFFFA3942;
- A = B + (A << 4 | A >>> -4);
+ A = B + (A << 4 | A >>> (32 - 4));
D += (A ^ B ^ C) + X8 + 0x8771F681;
- D = A + (D << 11 | D >>> -11);
+ D = A + (D << 11 | D >>> (32 - 11));
C += (D ^ A ^ B) + X11 + 0x6D9D6122;
- C = D + (C << 16 | C >>> -16);
+ C = D + (C << 16 | C >>> (32 - 16));
B += (C ^ D ^ A) + X14 + 0xFDE5380C;
- B = C + (B << 23 | B >>> -23);
+ B = C + (B << 23 | B >>> (32 - 23));
A += (B ^ C ^ D) + X1 + 0xA4BEEA44;
- A = B + (A << 4 | A >>> -4);
+ A = B + (A << 4 | A >>> (32 - 4));
D += (A ^ B ^ C) + X4 + 0x4BDECFA9;
- D = A + (D << 11 | D >>> -11);
+ D = A + (D << 11 | D >>> (32 - 11));
C += (D ^ A ^ B) + X7 + 0xF6BB4B60;
- C = D + (C << 16 | C >>> -16);
+ C = D + (C << 16 | C >>> (32 - 16));
B += (C ^ D ^ A) + X10 + 0xBEBFBC70;
- B = C + (B << 23 | B >>> -23);
+ B = C + (B << 23 | B >>> (32 - 23));
A += (B ^ C ^ D) + X13 + 0x289B7EC6;
- A = B + (A << 4 | A >>> -4);
+ A = B + (A << 4 | A >>> (32 - 4));
D += (A ^ B ^ C) + X0 + 0xEAA127FA;
- D = A + (D << 11 | D >>> -11);
+ D = A + (D << 11 | D >>> (32 - 11));
C += (D ^ A ^ B) + X3 + 0xD4EF3085;
- C = D + (C << 16 | C >>> -16);
+ C = D + (C << 16 | C >>> (32 - 16));
B += (C ^ D ^ A) + X6 + 0x04881D05;
- B = C + (B << 23 | B >>> -23);
+ B = C + (B << 23 | B >>> (32 - 23));
A += (B ^ C ^ D) + X9 + 0xD9D4D039;
- A = B + (A << 4 | A >>> -4);
+ A = B + (A << 4 | A >>> (32 - 4));
D += (A ^ B ^ C) + X12 + 0xE6DB99E5;
- D = A + (D << 11 | D >>> -11);
+ D = A + (D << 11 | D >>> (32 - 11));
C += (D ^ A ^ B) + X15 + 0x1FA27CF8;
- C = D + (C << 16 | C >>> -16);
+ C = D + (C << 16 | C >>> (32 - 16));
B += (C ^ D ^ A) + X2 + 0xC4AC5665;
- B = C + (B << 23 | B >>> -23);
+ B = C + (B << 23 | B >>> (32 - 23));
// round 4
A += (C ^ (B | ~D)) + X0 + 0xF4292244;
- A = B + (A << 6 | A >>> -6);
+ A = B + (A << 6 | A >>> (32 - 6));
D += (B ^ (A | ~C)) + X7 + 0x432AFF97;
- D = A + (D << 10 | D >>> -10);
+ D = A + (D << 10 | D >>> (32 - 10));
C += (A ^ (D | ~B)) + X14 + 0xAB9423A7;
- C = D + (C << 15 | C >>> -15);
+ C = D + (C << 15 | C >>> (32 - 15));
B += (D ^ (C | ~A)) + X5 + 0xFC93A039;
- B = C + (B << 21 | B >>> -21);
+ B = C + (B << 21 | B >>> (32 - 21));
A += (C ^ (B | ~D)) + X12 + 0x655B59C3;
- A = B + (A << 6 | A >>> -6);
+ A = B + (A << 6 | A >>> (32 - 6));
D += (B ^ (A | ~C)) + X3 + 0x8F0CCC92;
- D = A + (D << 10 | D >>> -10);
+ D = A + (D << 10 | D >>> (32 - 10));
C += (A ^ (D | ~B)) + X10 + 0xFFEFF47D;
- C = D + (C << 15 | C >>> -15);
+ C = D + (C << 15 | C >>> (32 - 15));
B += (D ^ (C | ~A)) + X1 + 0x85845dd1;
- B = C + (B << 21 | B >>> -21);
+ B = C + (B << 21 | B >>> (32 - 21));
A += (C ^ (B | ~D)) + X8 + 0x6FA87E4F;
- A = B + (A << 6 | A >>> -6);
+ A = B + (A << 6 | A >>> (32 - 6));
D += (B ^ (A | ~C)) + X15 + 0xFE2CE6E0;
- D = A + (D << 10 | D >>> -10);
+ D = A + (D << 10 | D >>> (32 - 10));
C += (A ^ (D | ~B)) + X6 + 0xA3014314;
- C = D + (C << 15 | C >>> -15);
+ C = D + (C << 15 | C >>> (32 - 15));
B += (D ^ (C | ~A)) + X13 + 0x4E0811A1;
- B = C + (B << 21 | B >>> -21);
+ B = C + (B << 21 | B >>> (32 - 21));
A += (C ^ (B | ~D)) + X4 + 0xF7537E82;
- A = B + (A << 6 | A >>> -6);
+ A = B + (A << 6 | A >>> (32 - 6));
D += (B ^ (A | ~C)) + X11 + 0xBD3AF235;
- D = A + (D << 10 | D >>> -10);
+ D = A + (D << 10 | D >>> (32 - 10));
C += (A ^ (D | ~B)) + X2 + 0x2AD7D2BB;
- C = D + (C << 15 | C >>> -15);
+ C = D + (C << 15 | C >>> (32 - 15));
B += (D ^ (C | ~A)) + X9 + 0xEB86D391;
- B = C + (B << 21 | B >>> -21);
+ B = C + (B << 21 | B >>> (32 - 21));
h0 += A;
h1 += B;