# define ROL64(a,x) ((a<<x)|(a>>(64-x)))
/* v---- Number of rounds. SHA3 has 24 here. */
- for(i=0; i<6; i+=4){
+ for(i=0; i<6; i++){
c0 = a00^a10^a20^a30^a40;
c1 = a01^a11^a21^a31^a41;
c2 = a02^a12^a22^a32^a42;
a02 = b2 ^((~b3)& b4 );
a13 = b3 ^((~b4)& b0 );
a24 = b4 ^((~b0)& b1 );
-
- c0 = a00^a20^a40^a10^a30;
- c1 = a11^a31^a01^a21^a41;
- c2 = a22^a42^a12^a32^a02;
- c3 = a33^a03^a23^a43^a13;
- c4 = a44^a14^a34^a04^a24;
- d0 = c4^ROL64(c1, 1);
- d1 = c0^ROL64(c2, 1);
- d2 = c1^ROL64(c3, 1);
- d3 = c2^ROL64(c4, 1);
- d4 = c3^ROL64(c0, 1);
-
- b0 = (a00^d0);
- b1 = ROL64((a31^d1), 44);
- b2 = ROL64((a12^d2), 43);
- b3 = ROL64((a43^d3), 21);
- b4 = ROL64((a24^d4), 14);
- a00 = b0 ^((~b1)& b2 );
- a00 ^= RC[i+1];
- a31 = b1 ^((~b2)& b3 );
- a12 = b2 ^((~b3)& b4 );
- a43 = b3 ^((~b4)& b0 );
- a24 = b4 ^((~b0)& b1 );
-
- b2 = ROL64((a40^d0), 3);
- b3 = ROL64((a21^d1), 45);
- b4 = ROL64((a02^d2), 61);
- b0 = ROL64((a33^d3), 28);
- b1 = ROL64((a14^d4), 20);
- a40 = b0 ^((~b1)& b2 );
- a21 = b1 ^((~b2)& b3 );
- a02 = b2 ^((~b3)& b4 );
- a33 = b3 ^((~b4)& b0 );
- a14 = b4 ^((~b0)& b1 );
-
- b4 = ROL64((a30^d0), 18);
- b0 = ROL64((a11^d1), 1);
- b1 = ROL64((a42^d2), 6);
- b2 = ROL64((a23^d3), 25);
- b3 = ROL64((a04^d4), 8);
- a30 = b0 ^((~b1)& b2 );
- a11 = b1 ^((~b2)& b3 );
- a42 = b2 ^((~b3)& b4 );
- a23 = b3 ^((~b4)& b0 );
- a04 = b4 ^((~b0)& b1 );
-
- b1 = ROL64((a20^d0), 36);
- b2 = ROL64((a01^d1), 10);
- b3 = ROL64((a32^d2), 15);
- b4 = ROL64((a13^d3), 56);
- b0 = ROL64((a44^d4), 27);
- a20 = b0 ^((~b1)& b2 );
- a01 = b1 ^((~b2)& b3 );
- a32 = b2 ^((~b3)& b4 );
- a13 = b3 ^((~b4)& b0 );
- a44 = b4 ^((~b0)& b1 );
-
- b3 = ROL64((a10^d0), 41);
- b4 = ROL64((a41^d1), 2);
- b0 = ROL64((a22^d2), 62);
- b1 = ROL64((a03^d3), 55);
- b2 = ROL64((a34^d4), 39);
- a10 = b0 ^((~b1)& b2 );
- a41 = b1 ^((~b2)& b3 );
- a22 = b2 ^((~b3)& b4 );
- a03 = b3 ^((~b4)& b0 );
- a34 = b4 ^((~b0)& b1 );
-
- c0 = a00^a40^a30^a20^a10;
- c1 = a31^a21^a11^a01^a41;
- c2 = a12^a02^a42^a32^a22;
- c3 = a43^a33^a23^a13^a03;
- c4 = a24^a14^a04^a44^a34;
- d0 = c4^ROL64(c1, 1);
- d1 = c0^ROL64(c2, 1);
- d2 = c1^ROL64(c3, 1);
- d3 = c2^ROL64(c4, 1);
- d4 = c3^ROL64(c0, 1);
-
- b0 = (a00^d0);
- b1 = ROL64((a21^d1), 44);
- b2 = ROL64((a42^d2), 43);
- b3 = ROL64((a13^d3), 21);
- b4 = ROL64((a34^d4), 14);
- a00 = b0 ^((~b1)& b2 );
- a00 ^= RC[i+2];
- a21 = b1 ^((~b2)& b3 );
- a42 = b2 ^((~b3)& b4 );
- a13 = b3 ^((~b4)& b0 );
- a34 = b4 ^((~b0)& b1 );
-
- b2 = ROL64((a30^d0), 3);
- b3 = ROL64((a01^d1), 45);
- b4 = ROL64((a22^d2), 61);
- b0 = ROL64((a43^d3), 28);
- b1 = ROL64((a14^d4), 20);
- a30 = b0 ^((~b1)& b2 );
- a01 = b1 ^((~b2)& b3 );
- a22 = b2 ^((~b3)& b4 );
- a43 = b3 ^((~b4)& b0 );
- a14 = b4 ^((~b0)& b1 );
-
- b4 = ROL64((a10^d0), 18);
- b0 = ROL64((a31^d1), 1);
- b1 = ROL64((a02^d2), 6);
- b2 = ROL64((a23^d3), 25);
- b3 = ROL64((a44^d4), 8);
- a10 = b0 ^((~b1)& b2 );
- a31 = b1 ^((~b2)& b3 );
- a02 = b2 ^((~b3)& b4 );
- a23 = b3 ^((~b4)& b0 );
- a44 = b4 ^((~b0)& b1 );
-
- b1 = ROL64((a40^d0), 36);
- b2 = ROL64((a11^d1), 10);
- b3 = ROL64((a32^d2), 15);
- b4 = ROL64((a03^d3), 56);
- b0 = ROL64((a24^d4), 27);
- a40 = b0 ^((~b1)& b2 );
- a11 = b1 ^((~b2)& b3 );
- a32 = b2 ^((~b3)& b4 );
- a03 = b3 ^((~b4)& b0 );
- a24 = b4 ^((~b0)& b1 );
-
- b3 = ROL64((a20^d0), 41);
- b4 = ROL64((a41^d1), 2);
- b0 = ROL64((a12^d2), 62);
- b1 = ROL64((a33^d3), 55);
- b2 = ROL64((a04^d4), 39);
- a20 = b0 ^((~b1)& b2 );
- a41 = b1 ^((~b2)& b3 );
- a12 = b2 ^((~b3)& b4 );
- a33 = b3 ^((~b4)& b0 );
- a04 = b4 ^((~b0)& b1 );
-
- c0 = a00^a30^a10^a40^a20;
- c1 = a21^a01^a31^a11^a41;
- c2 = a42^a22^a02^a32^a12;
- c3 = a13^a43^a23^a03^a33;
- c4 = a34^a14^a44^a24^a04;
- d0 = c4^ROL64(c1, 1);
- d1 = c0^ROL64(c2, 1);
- d2 = c1^ROL64(c3, 1);
- d3 = c2^ROL64(c4, 1);
- d4 = c3^ROL64(c0, 1);
-
- b0 = (a00^d0);
- b1 = ROL64((a01^d1), 44);
- b2 = ROL64((a02^d2), 43);
- b3 = ROL64((a03^d3), 21);
- b4 = ROL64((a04^d4), 14);
- a00 = b0 ^((~b1)& b2 );
- a00 ^= RC[i+3];
- a01 = b1 ^((~b2)& b3 );
- a02 = b2 ^((~b3)& b4 );
- a03 = b3 ^((~b4)& b0 );
- a04 = b4 ^((~b0)& b1 );
-
- b2 = ROL64((a10^d0), 3);
- b3 = ROL64((a11^d1), 45);
- b4 = ROL64((a12^d2), 61);
- b0 = ROL64((a13^d3), 28);
- b1 = ROL64((a14^d4), 20);
- a10 = b0 ^((~b1)& b2 );
- a11 = b1 ^((~b2)& b3 );
- a12 = b2 ^((~b3)& b4 );
- a13 = b3 ^((~b4)& b0 );
- a14 = b4 ^((~b0)& b1 );
-
- b4 = ROL64((a20^d0), 18);
- b0 = ROL64((a21^d1), 1);
- b1 = ROL64((a22^d2), 6);
- b2 = ROL64((a23^d3), 25);
- b3 = ROL64((a24^d4), 8);
- a20 = b0 ^((~b1)& b2 );
- a21 = b1 ^((~b2)& b3 );
- a22 = b2 ^((~b3)& b4 );
- a23 = b3 ^((~b4)& b0 );
- a24 = b4 ^((~b0)& b1 );
-
- b1 = ROL64((a30^d0), 36);
- b2 = ROL64((a31^d1), 10);
- b3 = ROL64((a32^d2), 15);
- b4 = ROL64((a33^d3), 56);
- b0 = ROL64((a34^d4), 27);
- a30 = b0 ^((~b1)& b2 );
- a31 = b1 ^((~b2)& b3 );
- a32 = b2 ^((~b3)& b4 );
- a33 = b3 ^((~b4)& b0 );
- a34 = b4 ^((~b0)& b1 );
-
- b3 = ROL64((a40^d0), 41);
- b4 = ROL64((a41^d1), 2);
- b0 = ROL64((a42^d2), 62);
- b1 = ROL64((a43^d3), 55);
- b2 = ROL64((a44^d4), 39);
- a40 = b0 ^((~b1)& b2 );
- a41 = b1 ^((~b2)& b3 );
- a42 = b2 ^((~b3)& b4 );
- a43 = b3 ^((~b4)& b0 );
- a44 = b4 ^((~b0)& b1 );
}
}