📄 haval.java
字号:
t0 = FF_3(t0, t7, t6, t5, t4, t3, t2, t1, X[22], 0x603A180E); t7 = FF_3(t7, t6, t5, t4, t3, t2, t1, t0, X[29], 0x6C9E0E8B); t6 = FF_3(t6, t5, t4, t3, t2, t1, t0, t7, X[14], 0xB01E8A3E); t5 = FF_3(t5, t4, t3, t2, t1, t0, t7, t6, X[25], 0xD71577C1); t4 = FF_3(t4, t3, t2, t1, t0, t7, t6, t5, X[12], 0xBD314B27); t3 = FF_3(t3, t2, t1, t0, t7, t6, t5, t4, X[24], 0x78AF2FDA); t2 = FF_3(t2, t1, t0, t7, t6, t5, t4, t3, X[30], 0x55605C60); t1 = FF_3(t1, t0, t7, t6, t5, t4, t3, t2, X[16], 0xE65525F3); t0 = FF_3(t0, t7, t6, t5, t4, t3, t2, t1, X[26], 0xAA55AB94); t7 = FF_3(t7, t6, t5, t4, t3, t2, t1, t0, X[31], 0x57489862); t6 = FF_3(t6, t5, t4, t3, t2, t1, t0, t7, X[15], 0x63E81440); t5 = FF_3(t5, t4, t3, t2, t1, t0, t7, t6, X[ 7], 0x55CA396A); t4 = FF_3(t4, t3, t2, t1, t0, t7, t6, t5, X[ 3], 0x2AAB10B6); t3 = FF_3(t3, t2, t1, t0, t7, t6, t5, t4, X[ 1], 0xB4CC5C34); t2 = FF_3(t2, t1, t0, t7, t6, t5, t4, t3, X[ 0], 0x1141E8CE); t1 = FF_3(t1, t0, t7, t6, t5, t4, t3, t2, X[18], 0xA15486AF); t0 = FF_3(t0, t7, t6, t5, t4, t3, t2, t1, X[27], 0x7C72E993); t7 = FF_3(t7, t6, t5, t4, t3, t2, t1, t0, X[13], 0xB3EE1411); t6 = FF_3(t6, t5, t4, t3, t2, t1, t0, t7, X[ 6], 0x636FBC2A); t5 = FF_3(t5, t4, t3, t2, t1, t0, t7, t6, X[21], 0x2BA9C55D); t4 = FF_3(t4, t3, t2, t1, t0, t7, t6, t5, X[10], 0x741831F6); t3 = FF_3(t3, t2, t1, t0, t7, t6, t5, t4, X[23], 0xCE5C3E16); t2 = FF_3(t2, t1, t0, t7, t6, t5, t4, t3, X[11], 0x9B87931E); t1 = FF_3(t1, t0, t7, t6, t5, t4, t3, t2, X[ 5], 0xAFD6BA33); t0 = FF_3(t0, t7, t6, t5, t4, t3, t2, t1, X[ 2], 0x6C24CF5C); if (passes >= 4) { // Pass 4. executed only when passes = 4 or 5 t7 = FF_4(t7, t6, t5, t4, t3, t2, t1, t0, X[24], 0x7A325381); t6 = FF_4(t6, t5, t4, t3, t2, t1, t0, t7, X[ 4], 0x28958677); t5 = FF_4(t5, t4, t3, t2, t1, t0, t7, t6, X[ 0], 0x3B8F4898); t4 = FF_4(t4, t3, t2, t1, t0, t7, t6, t5, X[14], 0x6B4BB9AF); t3 = FF_4(t3, t2, t1, t0, t7, t6, t5, t4, X[ 2], 0xC4BFE81B); t2 = FF_4(t2, t1, t0, t7, t6, t5, t4, t3, X[ 7], 0x66282193); t1 = FF_4(t1, t0, t7, t6, t5, t4, t3, t2, X[28], 0x61D809CC); t0 = FF_4(t0, t7, t6, t5, t4, t3, t2, t1, X[23], 0xFB21A991); t7 = FF_4(t7, t6, t5, t4, t3, t2, t1, t0, X[26], 0x487CAC60); t6 = FF_4(t6, t5, t4, t3, t2, t1, t0, t7, X[ 6], 0x5DEC8032); t5 = FF_4(t5, t4, t3, t2, t1, t0, t7, t6, X[30], 0xEF845D5D); t4 = FF_4(t4, t3, t2, t1, t0, t7, t6, t5, X[20], 0xE98575B1); t3 = FF_4(t3, t2, t1, t0, t7, t6, t5, t4, X[18], 0xDC262302); t2 = FF_4(t2, t1, t0, t7, t6, t5, t4, t3, X[25], 0xEB651B88); t1 = FF_4(t1, t0, t7, t6, t5, t4, t3, t2, X[19], 0x23893E81); t0 = FF_4(t0, t7, t6, t5, t4, t3, t2, t1, X[ 3], 0xD396ACC5); t7 = FF_4(t7, t6, t5, t4, t3, t2, t1, t0, X[22], 0x0F6D6FF3); t6 = FF_4(t6, t5, t4, t3, t2, t1, t0, t7, X[11], 0x83F44239); t5 = FF_4(t5, t4, t3, t2, t1, t0, t7, t6, X[31], 0x2E0B4482); t4 = FF_4(t4, t3, t2, t1, t0, t7, t6, t5, X[21], 0xA4842004); t3 = FF_4(t3, t2, t1, t0, t7, t6, t5, t4, X[ 8], 0x69C8F04A); t2 = FF_4(t2, t1, t0, t7, t6, t5, t4, t3, X[27], 0x9E1F9B5E); t1 = FF_4(t1, t0, t7, t6, t5, t4, t3, t2, X[12], 0x21C66842); t0 = FF_4(t0, t7, t6, t5, t4, t3, t2, t1, X[ 9], 0xF6E96C9A); t7 = FF_4(t7, t6, t5, t4, t3, t2, t1, t0, X[ 1], 0x670C9C61); t6 = FF_4(t6, t5, t4, t3, t2, t1, t0, t7, X[29], 0xABD388F0); t5 = FF_4(t5, t4, t3, t2, t1, t0, t7, t6, X[ 5], 0x6A51A0D2); t4 = FF_4(t4, t3, t2, t1, t0, t7, t6, t5, X[15], 0xD8542F68); t3 = FF_4(t3, t2, t1, t0, t7, t6, t5, t4, X[17], 0x960FA728); t2 = FF_4(t2, t1, t0, t7, t6, t5, t4, t3, X[10], 0xAB5133A3); t1 = FF_4(t1, t0, t7, t6, t5, t4, t3, t2, X[16], 0x6EEF0B6C); t0 = FF_4(t0, t7, t6, t5, t4, t3, t2, t1, X[13], 0x137A3BE4); } if (passes == 5) { t7 = FF_5(t7, t6, t5, t4, t3, t2, t1, t0, X[27], 0xBA3BF050); t6 = FF_5(t6, t5, t4, t3, t2, t1, t0, t7, X[ 3], 0x7EFB2A98); t5 = FF_5(t5, t4, t3, t2, t1, t0, t7, t6, X[21], 0xA1F1651D); t4 = FF_5(t4, t3, t2, t1, t0, t7, t6, t5, X[26], 0x39AF0176); t3 = FF_5(t3, t2, t1, t0, t7, t6, t5, t4, X[17], 0x66CA593E); t2 = FF_5(t2, t1, t0, t7, t6, t5, t4, t3, X[11], 0x82430E88); t1 = FF_5(t1, t0, t7, t6, t5, t4, t3, t2, X[20], 0x8CEE8619); t0 = FF_5(t0, t7, t6, t5, t4, t3, t2, t1, X[29], 0x456F9FB4); t7 = FF_5(t7, t6, t5, t4, t3, t2, t1, t0, X[19], 0x7D84A5C3); t6 = FF_5(t6, t5, t4, t3, t2, t1, t0, t7, X[ 0], 0x3B8B5EBE); t5 = FF_5(t5, t4, t3, t2, t1, t0, t7, t6, X[12], 0xE06F75D8); t4 = FF_5(t4, t3, t2, t1, t0, t7, t6, t5, X[ 7], 0x85C12073); t3 = FF_5(t3, t2, t1, t0, t7, t6, t5, t4, X[13], 0x401A449F); t2 = FF_5(t2, t1, t0, t7, t6, t5, t4, t3, X[ 8], 0x56C16AA6); t1 = FF_5(t1, t0, t7, t6, t5, t4, t3, t2, X[31], 0x4ED3AA62); t0 = FF_5(t0, t7, t6, t5, t4, t3, t2, t1, X[10], 0x363F7706); t7 = FF_5(t7, t6, t5, t4, t3, t2, t1, t0, X[ 5], 0x1BFEDF72); t6 = FF_5(t6, t5, t4, t3, t2, t1, t0, t7, X[ 9], 0x429B023D); t5 = FF_5(t5, t4, t3, t2, t1, t0, t7, t6, X[14], 0x37D0D724); t4 = FF_5(t4, t3, t2, t1, t0, t7, t6, t5, X[30], 0xD00A1248); t3 = FF_5(t3, t2, t1, t0, t7, t6, t5, t4, X[18], 0xDB0FEAD3); t2 = FF_5(t2, t1, t0, t7, t6, t5, t4, t3, X[ 6], 0x49F1C09B); t1 = FF_5(t1, t0, t7, t6, t5, t4, t3, t2, X[28], 0x075372C9); t0 = FF_5(t0, t7, t6, t5, t4, t3, t2, t1, X[24], 0x80991B7B); t7 = FF_5(t7, t6, t5, t4, t3, t2, t1, t0, X[ 2], 0x25D479D8); t6 = FF_5(t6, t5, t4, t3, t2, t1, t0, t7, X[23], 0xF6E8DEF7); t5 = FF_5(t5, t4, t3, t2, t1, t0, t7, t6, X[16], 0xE3FE501A); t4 = FF_5(t4, t3, t2, t1, t0, t7, t6, t5, X[22], 0xB6794C3B); t3 = FF_5(t3, t2, t1, t0, t7, t6, t5, t4, X[ 4], 0x976CE0BD); t2 = FF_5(t2, t1, t0, t7, t6, t5, t4, t3, X[ 1], 0x04C006BA); t1 = FF_5(t1, t0, t7, t6, t5, t4, t3, t2, X[25], 0xC1A94FB6); t0 = FF_5(t0, t7, t6, t5, t4, t3, t2, t1, X[15], 0x409F60C4); } context[0] += t0; context[1] += t1; context[2] += t2; context[3] += t3; context[4] += t4; context[5] += t5; context[6] += t6; context[7] += t7; } /** Tailors the last output. */ private void tailorDigestBits () { int t; if (bitLength == 128) { t = (context[7] & 0x000000FF) | (context[6] & 0xFF000000) | (context[5] & 0x00FF0000) | (context[4] & 0x0000FF00); context[0] += t >>> 8 | t << 24; t = (context[7] & 0x0000FF00) | (context[6] & 0x000000FF) | (context[5] & 0xFF000000) | (context[4] & 0x00FF0000); context[1] += t >>> 16 | t << 16; t = (context[7] & 0x00FF0000) | (context[6] & 0x0000FF00) | (context[5] & 0x000000FF) | (context[4] & 0xFF000000); context[2] += t >>> 24 | t << 8; t = (context[7] & 0xFF000000) | (context[6] & 0x00FF0000) | (context[5] & 0x0000FF00) | (context[4] & 0x000000FF); context[3] += t; } else if (bitLength == 160) { t = (context[7] & 0x3F) | (context[6] & (0x7F << 25)) | (context[5] & (0x3F << 19)); context[0] += t >>> 19 | t << 13; t = (context[7] & (0x3F << 6)) | (context[6] & 0x3F) | (context[5] & (0x7F << 25)); context[1] += t >>> 25 | t << 7; t = (context[7] & (0x7F << 12)) | (context[6] & (0x3F << 6)) | (context[5] & 0x3F); context[2] += t; t = (context[7] & (0x3F << 19)) | (context[6] & (0x7F << 12)) | (context[5] & (0x3F << 6)); context[3] += (t >>> 6); t = (context[7] & (0x7F << 25)) | (context[6] & (0x3F << 19)) | (context[5] & (0x7F << 12)); context[4] += (t >>> 12); } else if (bitLength == 192) { t = (context[7] & 0x1F) | (context[6] & (0x3F << 26)); context[0] += t >>> 26 | t << 6; t = (context[7] & (0x1F << 5)) | (context[6] & 0x1F); context[1] += t; t = (context[7] & (0x3F << 10)) | (context[6] & (0x1F << 5)); context[2] += (t >>> 5); t = (context[7] & (0x1F << 16)) | (context[6] & (0x3F << 10)); context[3] += (t >>> 10); t = (context[7] & (0x1F << 21)) | (context[6] & (0x1F << 16)); context[4] += (t >>> 16); t = (context[7] & (0x3F << 26)) | (context[6] & (0x1F << 21)); context[5] += (t >>> 21); } else if (bitLength == 224) { context[0] += ((context[7] >>> 27) & 0x1F); context[1] += ((context[7] >>> 22) & 0x1F); context[2] += ((context[7] >>> 18) & 0x0F); context[3] += ((context[7] >>> 13) & 0x1F); context[4] += ((context[7] >>> 9) & 0x0F); context[5] += ((context[7] >>> 4) & 0x1F); context[6] += (context[7] & 0x0F); } } /* * Permutations phi_{i,j}, i=3,4,5, j=1,...,i. * * passes = 3: * 6 5 4 3 2 1 0 * | | | | | | | (replaced by) * phi_{3,1}: 1 0 3 5 6 2 4 * phi_{3,2}: 4 2 1 0 5 3 6 * phi_{3,3}: 6 1 2 3 4 5 0 * * passes = 4: * 6 5 4 3 2 1 0 * | | | | | | | (replaced by) * phi_{4,1}: 2 6 1 4 5 3 0 * phi_{4,2}: 3 5 2 0 1 6 4 * phi_{4,3}: 1 4 3 6 0 2 5 * phi_{4,4}: 6 4 0 5 2 1 3 * * passes = 5: * 6 5 4 3 2 1 0 * | | | | | | | (replaced by) * phi_{5,1}: 3 4 1 0 5 2 6 * phi_{5,2}: 6 2 1 0 3 4 5 * phi_{5,3}: 2 6 0 4 3 1 5 * phi_{5,4}: 1 5 3 2 0 4 6 * phi_{5,5}: 2 5 0 6 4 3 1 */ private int FF_1 (int x7, int x6, int x5, int x4, int x3, int x2, int x1, int x0, int w) { int t; switch (passes) { case 3: t = f_1(x1, x0, x3, x5, x6, x2, x4); break; case 4: t = f_1(x2, x6, x1, x4, x5, x3, x0); break; default: t = f_1(x3, x4, x1, x0, x5, x2, x6); } return (t >>> 7 | t << 25) + (x7 >>> 11 | x7 << 21) + w; } private int FF_2 (int x7, int x6, int x5, int x4, int x3, int x2, int x1, int x0, int w, int c) { int t; switch (passes) { case 3: t = f_2(x4, x2, x1, x0, x5, x3, x6); break; case 4: t = f_2(x3, x5, x2, x0, x1, x6, x4); break; default: t = f_2(x6, x2, x1, x0, x3, x4, x5); } return (t >>> 7 | t << 25) + (x7 >>> 11 | x7 << 21) + w + c; } private int FF_3 (int x7, int x6, int x5, int x4, int x3, int x2, int x1, int x0, int w, int c) { int t; switch (passes) { case 3: t = f_3(x6, x1, x2, x3, x4, x5, x0); break; case 4: t = f_3(x1, x4, x3, x6, x0, x2, x5); break; default: t = f_3(x2, x6, x0, x4, x3, x1, x5); } return (t >>> 7 | t << 25) + (x7 >>> 11 | x7 << 21) + w + c; } private int FF_4 (int x7, int x6, int x5, int x4, int x3, int x2, int x1, int x0, int w, int c) { int t; switch (passes) { case 4: t = f_4(x6, x4, x0, x5, x2, x1, x3); break; default: t = f_4(x1, x5, x3, x2, x0, x4, x6); } return (t >>> 7 | t << 25) + (x7 >>> 11 | x7 << 21) + w + c; } private int FF_5 (int x7, int x6, int x5, int x4, int x3, int x2, int x1, int x0, int w, int c) { int t = f_5(x2, x5, x0, x6, x4, x3, x1); return (t >>> 7 | t << 25) + (x7 >>> 11 | x7 << 21) + w + c; } private int f_1 (int x6, int x5, int x4, int x3, int x2, int x1, int x0) { return x1 & (x0 ^ x4) ^ x2 & x5 ^ x3 & x6 ^ x0; } private int f_2 (int x6, int x5, int x4, int x3, int x2, int x1, int x0) { return x2 & (x1 & ~x3 ^ x4 & x5 ^ x6 ^ x0) ^ x4 & (x1 ^ x5) ^ x3 & x5 ^ x0; } private int f_3 (int x6, int x5, int x4, int x3, int x2, int x1, int x0) { return x3 & (x1 & x2 ^ x6 ^ x0) ^ x1 & x4 ^ x2 & x5 ^ x0; } private int f_4 (int x6, int x5, int x4, int x3, int x2, int x1, int x0) { return x4 & (x5 & ~x2 ^ x3 & ~x6 ^ x1 ^ x6 ^ x0) ^ x3 & (x1 & x2 ^ x5 ^ x6) ^ x2 & x6 ^ x0; } private int f_5 (int x6, int x5, int x4, int x3, int x2, int x1, int x0) { return x0 & (x1 & x2 & x3 ^ ~x5) ^ x1 & x4 ^ x2 & x5 ^ x3 & x6; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -