Thanks Tom,
I thought I'd fix all the warnings and wait for people to complain. I
agree with what you say and I've attached a fixed patch for just MD4 and
MD5, any idea on how to stop the $ symbols being generated by rmic? They
are on private fields so altering the names shouldn't matter.
Ian
Tom Tromey wrote:
Ian> + private static int rotate(int x, int y) {
Ian> + return (x << y) | (x >>> -y);
Ian> + }
Coding style... open brace goes on its own line.
Tom
Index: gnu/java/security/hash/MD4.java
===================================================================
RCS file: /sources/classpath/classpath/gnu/java/security/hash/MD4.java,v
retrieving revision 1.1
diff -u -r1.1 MD4.java
--- gnu/java/security/hash/MD4.java 26 Jan 2006 02:25:10 -0000 1.1
+++ gnu/java/security/hash/MD4.java 13 Apr 2006 18:59:37 -0000
@@ -222,107 +222,116 @@
dd = d;
aa += ((bb & cc) | ((~bb) & dd)) + X0;
- aa = aa << 3 | aa >>> -3;
+ aa = rotate(aa, 3);
dd += ((aa & bb) | ((~aa) & cc)) + X1;
- dd = dd << 7 | dd >>> -7;
+ dd = rotate(dd, 7);
cc += ((dd & aa) | ((~dd) & bb)) + X2;
- cc = cc << 11 | cc >>> -11;
+ cc = rotate(cc, 11);
bb += ((cc & dd) | ((~cc) & aa)) + X3;
- bb = bb << 19 | bb >>> -19;
+ bb = rotate(bb, 19);
aa += ((bb & cc) | ((~bb) & dd)) + X4;
- aa = aa << 3 | aa >>> -3;
+ aa = rotate(aa, 3);
dd += ((aa & bb) | ((~aa) & cc)) + X5;
- dd = dd << 7 | dd >>> -7;
+ dd = rotate(dd, 7);
cc += ((dd & aa) | ((~dd) & bb)) + X6;
- cc = cc << 11 | cc >>> -11;
+ cc = rotate(cc, 11);
bb += ((cc & dd) | ((~cc) & aa)) + X7;
- bb = bb << 19 | bb >>> -19;
+ bb = rotate(bb, 19);
aa += ((bb & cc) | ((~bb) & dd)) + X8;
- aa = aa << 3 | aa >>> -3;
+ aa = rotate(aa, 3);
dd += ((aa & bb) | ((~aa) & cc)) + X9;
- dd = dd << 7 | dd >>> -7;
+ dd = rotate(dd, 7);
cc += ((dd & aa) | ((~dd) & bb)) + X10;
- cc = cc << 11 | cc >>> -11;
+ cc = rotate(cc, 11);
bb += ((cc & dd) | ((~cc) & aa)) + X11;
- bb = bb << 19 | bb >>> -19;
+ bb = rotate(bb, 19);
aa += ((bb & cc) | ((~bb) & dd)) + X12;
- aa = aa << 3 | aa >>> -3;
+ aa = rotate(aa, 3);
dd += ((aa & bb) | ((~aa) & cc)) + X13;
- dd = dd << 7 | dd >>> -7;
+ dd = rotate(dd, 7);
cc += ((dd & aa) | ((~dd) & bb)) + X14;
- cc = cc << 11 | cc >>> -11;
+ cc = rotate(cc, 11);
bb += ((cc & dd) | ((~cc) & aa)) + X15;
- bb = bb << 19 | bb >>> -19;
+ bb = rotate(bb, 19);
aa += ((bb & (cc | dd)) | (cc & dd)) + X0 + 0x5a827999;
- aa = aa << 3 | aa >>> -3;
+ aa = rotate(aa, 3);
dd += ((aa & (bb | cc)) | (bb & cc)) + X4 + 0x5a827999;
- dd = dd << 5 | dd >>> -5;
+ dd = rotate(dd, 5);
cc += ((dd & (aa | bb)) | (aa & bb)) + X8 + 0x5a827999;
- cc = cc << 9 | cc >>> -9;
+ cc = rotate(cc, 9);
bb += ((cc & (dd | aa)) | (dd & aa)) + X12 + 0x5a827999;
- bb = bb << 13 | bb >>> -13;
+ bb = rotate(bb, 13);
aa += ((bb & (cc | dd)) | (cc & dd)) + X1 + 0x5a827999;
- aa = aa << 3 | aa >>> -3;
+ aa = rotate(aa, 3);
dd += ((aa & (bb | cc)) | (bb & cc)) + X5 + 0x5a827999;
- dd = dd << 5 | dd >>> -5;
+ dd = rotate(dd, 5);
cc += ((dd & (aa | bb)) | (aa & bb)) + X9 + 0x5a827999;
- cc = cc << 9 | cc >>> -9;
+ cc = rotate(cc, 9);
bb += ((cc & (dd | aa)) | (dd & aa)) + X13 + 0x5a827999;
- bb = bb << 13 | bb >>> -13;
+ bb = rotate(bb, 13);
aa += ((bb & (cc | dd)) | (cc & dd)) + X2 + 0x5a827999;
- aa = aa << 3 | aa >>> -3;
+ aa = rotate(aa, 3);
dd += ((aa & (bb | cc)) | (bb & cc)) + X6 + 0x5a827999;
- dd = dd << 5 | dd >>> -5;
+ dd = rotate(dd, 5);
cc += ((dd & (aa | bb)) | (aa & bb)) + X10 + 0x5a827999;
- cc = cc << 9 | cc >>> -9;
+ cc = rotate(cc, 9);
bb += ((cc & (dd | aa)) | (dd & aa)) + X14 + 0x5a827999;
- bb = bb << 13 | bb >>> -13;
+ bb = rotate(bb, 13);
aa += ((bb & (cc | dd)) | (cc & dd)) + X3 + 0x5a827999;
- aa = aa << 3 | aa >>> -3;
+ aa = rotate(aa, 3);
dd += ((aa & (bb | cc)) | (bb & cc)) + X7 + 0x5a827999;
- dd = dd << 5 | dd >>> -5;
+ dd = rotate(dd, 5);
cc += ((dd & (aa | bb)) | (aa & bb)) + X11 + 0x5a827999;
- cc = cc << 9 | cc >>> -9;
+ cc = rotate(cc, 9);
bb += ((cc & (dd | aa)) | (dd & aa)) + X15 + 0x5a827999;
- bb = bb << 13 | bb >>> -13;
+ bb = rotate(bb, 13);
aa += (bb ^ cc ^ dd) + X0 + 0x6ed9eba1;
- aa = aa << 3 | aa >>> -3;
+ aa = rotate(aa, 3);
dd += (aa ^ bb ^ cc) + X8 + 0x6ed9eba1;
- dd = dd << 9 | dd >>> -9;
+ dd = rotate(dd, 9);
cc += (dd ^ aa ^ bb) + X4 + 0x6ed9eba1;
- cc = cc << 11 | cc >>> -11;
+ cc = rotate(cc, 11);
bb += (cc ^ dd ^ aa) + X12 + 0x6ed9eba1;
- bb = bb << 15 | bb >>> -15;
+ bb = rotate(bb, 15);
aa += (bb ^ cc ^ dd) + X2 + 0x6ed9eba1;
- aa = aa << 3 | aa >>> -3;
+ aa = rotate(aa, 3);
dd += (aa ^ bb ^ cc) + X10 + 0x6ed9eba1;
- dd = dd << 9 | dd >>> -9;
+ dd = rotate(dd, 9);
cc += (dd ^ aa ^ bb) + X6 + 0x6ed9eba1;
- cc = cc << 11 | cc >>> -11;
+ cc = rotate(cc, 11);
bb += (cc ^ dd ^ aa) + X14 + 0x6ed9eba1;
- bb = bb << 15 | bb >>> -15;
+ bb = rotate(bb, 15);
aa += (bb ^ cc ^ dd) + X1 + 0x6ed9eba1;
- aa = aa << 3 | aa >>> -3;
+ aa = rotate(aa, 3);
dd += (aa ^ bb ^ cc) + X9 + 0x6ed9eba1;
- dd = dd << 9 | dd >>> -9;
+ dd = rotate(dd, 9);
cc += (dd ^ aa ^ bb) + X5 + 0x6ed9eba1;
- cc = cc << 11 | cc >>> -11;
+ cc = rotate(cc, 11);
bb += (cc ^ dd ^ aa) + X13 + 0x6ed9eba1;
- bb = bb << 15 | bb >>> -15;
+ bb = rotate(bb, 15);
aa += (bb ^ cc ^ dd) + X3 + 0x6ed9eba1;
- aa = aa << 3 | aa >>> -3;
+ aa = rotate(aa, 3);
dd += (aa ^ bb ^ cc) + X11 + 0x6ed9eba1;
- dd = dd << 9 | dd >>> -9;
+ dd = rotate(dd, 9);
cc += (dd ^ aa ^ bb) + X7 + 0x6ed9eba1;
- cc = cc << 11 | cc >>> -11;
+ cc = rotate(cc, 11);
bb += (cc ^ dd ^ aa) + X15 + 0x6ed9eba1;
- bb = bb << 15 | bb >>> -15;
+ bb = rotate(bb, 15);
a += aa;
b += bb;
c += cc;
d += dd;
}
+ /**
+ * Rotate an integer
+ * @param x value to rotate
+ * @param y amount to rotate by
+ */
+ private static int rotate(int x, int y)
+ {
+ return (x << y) | (x >>> -y);
+ }
}
Index: gnu/java/security/hash/MD5.java
===================================================================
RCS file: /sources/classpath/classpath/gnu/java/security/hash/MD5.java,v
retrieving revision 1.1
diff -u -r1.1 MD5.java
--- gnu/java/security/hash/MD5.java 26 Jan 2006 02:25:10 -0000 1.1
+++ gnu/java/security/hash/MD5.java 13 Apr 2006 18:59:37 -0000
@@ -156,151 +156,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 + rotate(A, 7);
D += ((A & B) | (~A & C)) + X1 + 0xE8C7B756;
- D = A + (D << 12 | D >>> -12);
+ D = A + rotate(D, 12);
C += ((D & A) | (~D & B)) + X2 + 0x242070DB;
- C = D + (C << 17 | C >>> -17);
+ C = D + rotate(C, 17);
B += ((C & D) | (~C & A)) + X3 + 0xC1BDCEEE;
- B = C + (B << 22 | B >>> -22);
+ B = C + rotate(B, 22);
A += ((B & C) | (~B & D)) + X4 + 0xF57C0FAF;
- A = B + (A << 7 | A >>> -7);
+ A = B + rotate(A, 7);
D += ((A & B) | (~A & C)) + X5 + 0x4787C62A;
- D = A + (D << 12 | D >>> -12);
+ D = A + rotate(D, 12);
C += ((D & A) | (~D & B)) + X6 + 0xA8304613;
- C = D + (C << 17 | C >>> -17);
+ C = D + rotate(C, 17);
B += ((C & D) | (~C & A)) + X7 + 0xFD469501;
- B = C + (B << 22 | B >>> -22);
+ B = C + rotate(B, 22);
A += ((B & C) | (~B & D)) + X8 + 0x698098D8;
- A = B + (A << 7 | A >>> -7);
+ A = B + rotate(A, 7);
D += ((A & B) | (~A & C)) + X9 + 0x8B44F7AF;
- D = A + (D << 12 | D >>> -12);
+ D = A + rotate(D, 12);
C += ((D & A) | (~D & B)) + X10 + 0xFFFF5BB1;
- C = D + (C << 17 | C >>> -17);
+ C = D + rotate(C, 17);
B += ((C & D) | (~C & A)) + X11 + 0x895CD7BE;
- B = C + (B << 22 | B >>> -22);
+ B = C + rotate(B, 22);
A += ((B & C) | (~B & D)) + X12 + 0x6B901122;
- A = B + (A << 7 | A >>> -7);
+ A = B + rotate(A, 7);
D += ((A & B) | (~A & C)) + X13 + 0xFD987193;
- D = A + (D << 12 | D >>> -12);
+ D = A + rotate(D, 12);
C += ((D & A) | (~D & B)) + X14 + 0xA679438E;
- C = D + (C << 17 | C >>> -17);
+ C = D + rotate(C, 17);
B += ((C & D) | (~C & A)) + X15 + 0x49B40821;
- B = C + (B << 22 | B >>> -22);
+ B = C + rotate(B, 22);
// round 2
A += ((B & D) | (C & ~D)) + X1 + 0xF61E2562;
- A = B + (A << 5 | A >>> -5);
+ A = B + rotate(A, 5);
D += ((A & C) | (B & ~C)) + X6 + 0xC040B340;
- D = A + (D << 9 | D >>> -9);
+ D = A + rotate(D, 9);
C += ((D & B) | (A & ~B)) + X11 + 0x265E5A51;
- C = D + (C << 14 | C >>> -14);
+ C = D + rotate(C, 14);
B += ((C & A) | (D & ~A)) + X0 + 0xE9B6C7AA;
- B = C + (B << 20 | B >>> -20);
+ B = C + rotate(B, 20);
A += ((B & D) | (C & ~D)) + X5 + 0xD62F105D;
- A = B + (A << 5 | A >>> -5);
+ A = B + rotate(A, 5);
D += ((A & C) | (B & ~C)) + X10 + 0x02441453;
- D = A + (D << 9 | D >>> -9);
+ D = A + rotate(D, 9);
C += ((D & B) | (A & ~B)) + X15 + 0xD8A1E681;
- C = D + (C << 14 | C >>> -14);
+ C = D + rotate(C, 14);
B += ((C & A) | (D & ~A)) + X4 + 0xE7D3FBC8;
- B = C + (B << 20 | B >>> -20);
+ B = C + rotate(B, 20);
A += ((B & D) | (C & ~D)) + X9 + 0x21E1CDE6;
- A = B + (A << 5 | A >>> -5);
+ A = B + rotate(A, 5);
D += ((A & C) | (B & ~C)) + X14 + 0xC33707D6;
- D = A + (D << 9 | D >>> -9);
+ D = A + rotate(D, 9);
C += ((D & B) | (A & ~B)) + X3 + 0xF4D50D87;
- C = D + (C << 14 | C >>> -14);
+ C = D + rotate(C, 14);
B += ((C & A) | (D & ~A)) + X8 + 0x455A14ED;
- B = C + (B << 20 | B >>> -20);
+ B = C + rotate(B, 20);
A += ((B & D) | (C & ~D)) + X13 + 0xA9E3E905;
- A = B + (A << 5 | A >>> -5);
+ A = B + rotate(A, 5);
D += ((A & C) | (B & ~C)) + X2 + 0xFCEFA3F8;
- D = A + (D << 9 | D >>> -9);
+ D = A + rotate(D, 9);
C += ((D & B) | (A & ~B)) + X7 + 0x676F02D9;
- C = D + (C << 14 | C >>> -14);
+ C = D + rotate(C, 14);
B += ((C & A) | (D & ~A)) + X12 + 0x8D2A4C8A;
- B = C + (B << 20 | B >>> -20);
+ B = C + rotate(B, 20);
// round 3
A += (B ^ C ^ D) + X5 + 0xFFFA3942;
- A = B + (A << 4 | A >>> -4);
+ A = B + rotate(A, 4);
D += (A ^ B ^ C) + X8 + 0x8771F681;
- D = A + (D << 11 | D >>> -11);
+ D = A + rotate(D, 11);
C += (D ^ A ^ B) + X11 + 0x6D9D6122;
- C = D + (C << 16 | C >>> -16);
+ C = D + rotate(C, 16);
B += (C ^ D ^ A) + X14 + 0xFDE5380C;
- B = C + (B << 23 | B >>> -23);
+ B = C + rotate(B, 23);
A += (B ^ C ^ D) + X1 + 0xA4BEEA44;
- A = B + (A << 4 | A >>> -4);
+ A = B + rotate(A, 4);
D += (A ^ B ^ C) + X4 + 0x4BDECFA9;
- D = A + (D << 11 | D >>> -11);
+ D = A + rotate(D, 11);
C += (D ^ A ^ B) + X7 + 0xF6BB4B60;
- C = D + (C << 16 | C >>> -16);
+ C = D + rotate(C, 16);
B += (C ^ D ^ A) + X10 + 0xBEBFBC70;
- B = C + (B << 23 | B >>> -23);
+ B = C + rotate(B, 23);
A += (B ^ C ^ D) + X13 + 0x289B7EC6;
- A = B + (A << 4 | A >>> -4);
+ A = B + rotate(A, 4);
D += (A ^ B ^ C) + X0 + 0xEAA127FA;
- D = A + (D << 11 | D >>> -11);
+ D = A + rotate(D, 11);
C += (D ^ A ^ B) + X3 + 0xD4EF3085;
- C = D + (C << 16 | C >>> -16);
+ C = D + rotate(C, 16);
B += (C ^ D ^ A) + X6 + 0x04881D05;
- B = C + (B << 23 | B >>> -23);
+ B = C + rotate(B, 23);
A += (B ^ C ^ D) + X9 + 0xD9D4D039;
- A = B + (A << 4 | A >>> -4);
+ A = B + rotate(A, 4);
D += (A ^ B ^ C) + X12 + 0xE6DB99E5;
- D = A + (D << 11 | D >>> -11);
+ D = A + rotate(D, 11);
C += (D ^ A ^ B) + X15 + 0x1FA27CF8;
- C = D + (C << 16 | C >>> -16);
+ C = D + rotate(C, 16);
B += (C ^ D ^ A) + X2 + 0xC4AC5665;
- B = C + (B << 23 | B >>> -23);
+ B = C + rotate(B, 23);
// round 4
A += (C ^ (B | ~D)) + X0 + 0xF4292244;
- A = B + (A << 6 | A >>> -6);
+ A = B + rotate(A, 6);
D += (B ^ (A | ~C)) + X7 + 0x432AFF97;
- D = A + (D << 10 | D >>> -10);
+ D = A + rotate(D, 10);
C += (A ^ (D | ~B)) + X14 + 0xAB9423A7;
- C = D + (C << 15 | C >>> -15);
+ C = D + rotate(C, 15);
B += (D ^ (C | ~A)) + X5 + 0xFC93A039;
- B = C + (B << 21 | B >>> -21);
+ B = C + rotate(B, 21);
A += (C ^ (B | ~D)) + X12 + 0x655B59C3;
- A = B + (A << 6 | A >>> -6);
+ A = B + rotate(A, 6);
D += (B ^ (A | ~C)) + X3 + 0x8F0CCC92;
- D = A + (D << 10 | D >>> -10);
+ D = A + rotate(D, 10);
C += (A ^ (D | ~B)) + X10 + 0xFFEFF47D;
- C = D + (C << 15 | C >>> -15);
+ C = D + rotate(C, 15);
B += (D ^ (C | ~A)) + X1 + 0x85845dd1;
- B = C + (B << 21 | B >>> -21);
+ B = C + rotate(B, 21);
A += (C ^ (B | ~D)) + X8 + 0x6FA87E4F;
- A = B + (A << 6 | A >>> -6);
+ A = B + rotate(A, 6);
D += (B ^ (A | ~C)) + X15 + 0xFE2CE6E0;
- D = A + (D << 10 | D >>> -10);
+ D = A + rotate(D, 10);
C += (A ^ (D | ~B)) + X6 + 0xA3014314;
- C = D + (C << 15 | C >>> -15);
+ C = D + rotate(C, 15);
B += (D ^ (C | ~A)) + X13 + 0x4E0811A1;
- B = C + (B << 21 | B >>> -21);
+ B = C + rotate(B, 21);
A += (C ^ (B | ~D)) + X4 + 0xF7537E82;
- A = B + (A << 6 | A >>> -6);
+ A = B + rotate(A, 6);
D += (B ^ (A | ~C)) + X11 + 0xBD3AF235;
- D = A + (D << 10 | D >>> -10);
+ D = A + rotate(D, 10);
C += (A ^ (D | ~B)) + X2 + 0x2AD7D2BB;
- C = D + (C << 15 | C >>> -15);
+ C = D + rotate(C, 15);
B += (D ^ (C | ~A)) + X9 + 0xEB86D391;
- B = C + (B << 21 | B >>> -21);
+ B = C + rotate(B, 21);
h0 += A;
h1 += B;
@@ -362,4 +362,14 @@
}
return valid.booleanValue();
}
+
+ /**
+ * Rotate an integer
+ * @param x value to rotate
+ * @param y amount to rotate by
+ */
+ private static int rotate(int x, int y)
+ {
+ return (x << y) | (x >>> -y);
+ }
}