Commit 443a51bd authored by George Hotz's avatar George Hotz

unpack the ROTL64, getting dumb now

parent 23a572b6
......@@ -9,10 +9,6 @@ library Lib_Keccak256 {
uint64[25] A;
}
function ROTL64(uint64 qword, uint64 n) internal pure returns (uint64) {
return ((qword) << (n) ^ ((qword) >> (64 - (n))));
}
function get_round_constant(uint round) internal pure returns (uint64) {
uint64 result = 0;
uint8 roundInfo = uint8(0x7421587966164852535d4f3f26350c0e5579211f705e1a01 >> (round*8));
......@@ -32,36 +28,36 @@ library Lib_Keccak256 {
uint64 C2 = c.A[2] ^ c.A[7] ^ c.A[12] ^ c.A[17] ^ c.A[22];
uint64 C3 = c.A[3] ^ c.A[8] ^ c.A[13] ^ c.A[18] ^ c.A[23];
uint64 C4 = c.A[4] ^ c.A[9] ^ c.A[14] ^ c.A[19] ^ c.A[24];
uint64 D0 = ROTL64(C1, 1) ^ C4;
uint64 D1 = ROTL64(C2, 1) ^ C0;
uint64 D2 = ROTL64(C3, 1) ^ C1;
uint64 D3 = ROTL64(C4, 1) ^ C2;
uint64 D4 = ROTL64(C0, 1) ^ C3;
uint64 D0 = (C1 << 1) ^ (C1 >> 63) ^ C4;
uint64 D1 = (C2 << 1) ^ (C2 >> 63) ^ C0;
uint64 D2 = (C3 << 1) ^ (C3 >> 63) ^ C1;
uint64 D3 = (C4 << 1) ^ (C4 >> 63) ^ C2;
uint64 D4 = (C0 << 1) ^ (C0 >> 63) ^ C3;
c.A[0] ^= D0;
uint64 A1 = ROTL64(c.A[1] ^ D1, 1);
c.A[1] = ROTL64(c.A[6] ^ D1, 44);
c.A[6] = ROTL64(c.A[9] ^ D4, 20);
c.A[9] = ROTL64(c.A[22] ^ D2, 61);
c.A[22] = ROTL64(c.A[14] ^ D4, 39);
c.A[14] = ROTL64(c.A[20] ^ D0, 18);
c.A[20] = ROTL64(c.A[2] ^ D2, 62);
c.A[2] = ROTL64(c.A[12] ^ D2, 43);
c.A[12] = ROTL64(c.A[13] ^ D3, 25);
c.A[13] = ROTL64(c.A[19] ^ D4, 8);
c.A[19] = ROTL64(c.A[23] ^ D3, 56);
c.A[23] = ROTL64(c.A[15] ^ D0, 41);
c.A[15] = ROTL64(c.A[4] ^ D4, 27);
c.A[4] = ROTL64(c.A[24] ^ D4, 14);
c.A[24] = ROTL64(c.A[21] ^ D1, 2);
c.A[21] = ROTL64(c.A[8] ^ D3, 55);
c.A[8] = ROTL64(c.A[16] ^ D1, 45);
c.A[16] = ROTL64(c.A[5] ^ D0, 36);
c.A[5] = ROTL64(c.A[3] ^ D3, 28);
c.A[3] = ROTL64(c.A[18] ^ D3, 21);
c.A[18] = ROTL64(c.A[17] ^ D2, 15);
c.A[17] = ROTL64(c.A[11] ^ D1, 10);
c.A[11] = ROTL64(c.A[7] ^ D2, 6);
c.A[7] = ROTL64(c.A[10] ^ D0, 3);
uint64 A1 = ((c.A[1] ^ D1) << 1) ^ ((c.A[1] ^ D1) >> (64-1));
c.A[1] = ((c.A[6] ^ D1) << 44) ^ ((c.A[6] ^ D1) >> (64-44));
c.A[6] = ((c.A[9] ^ D4) << 20) ^ ((c.A[9] ^ D4) >> (64-20));
c.A[9] = ((c.A[22] ^ D2) << 61) ^ ((c.A[22] ^ D2) >> (64-61));
c.A[22] = ((c.A[14] ^ D4) << 39) ^ ((c.A[14] ^ D4) >> (64-39));
c.A[14] = ((c.A[20] ^ D0) << 18) ^ ((c.A[20] ^ D0) >> (64-18));
c.A[20] = ((c.A[2] ^ D2) << 62) ^ ((c.A[2] ^ D2) >> (64-62));
c.A[2] = ((c.A[12] ^ D2) << 43) ^ ((c.A[12] ^ D2) >> (64-43));
c.A[12] = ((c.A[13] ^ D3) << 25) ^ ((c.A[13] ^ D3) >> (64-25));
c.A[13] = ((c.A[19] ^ D4) << 8) ^ ((c.A[19] ^ D4) >> (64-8));
c.A[19] = ((c.A[23] ^ D3) << 56) ^ ((c.A[23] ^ D3) >> (64-56));
c.A[23] = ((c.A[15] ^ D0) << 41) ^ ((c.A[15] ^ D0) >> (64-41));
c.A[15] = ((c.A[4] ^ D4) << 27) ^ ((c.A[4] ^ D4) >> (64-27));
c.A[4] = ((c.A[24] ^ D4) << 14) ^ ((c.A[24] ^ D4) >> (64-14));
c.A[24] = ((c.A[21] ^ D1) << 2) ^ ((c.A[21] ^ D1) >> (64-2));
c.A[21] = ((c.A[8] ^ D3) << 55) ^ ((c.A[8] ^ D3) >> (64-55));
c.A[8] = ((c.A[16] ^ D1) << 45) ^ ((c.A[16] ^ D1) >> (64-45));
c.A[16] = ((c.A[5] ^ D0) << 36) ^ ((c.A[5] ^ D0) >> (64-36));
c.A[5] = ((c.A[3] ^ D3) << 28) ^ ((c.A[3] ^ D3) >> (64-28));
c.A[3] = ((c.A[18] ^ D3) << 21) ^ ((c.A[18] ^ D3) >> (64-21));
c.A[18] = ((c.A[17] ^ D2) << 15) ^ ((c.A[17] ^ D2) >> (64-15));
c.A[17] = ((c.A[11] ^ D1) << 10) ^ ((c.A[11] ^ D1) >> (64-10));
c.A[11] = ((c.A[7] ^ D2) << 6) ^ ((c.A[7] ^ D2) >> (64-6));
c.A[7] = ((c.A[10] ^ D0) << 3) ^ ((c.A[10] ^ D0) >> (64-3));
c.A[10] = A1;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment