#define rotl(x,y) rotate(x,y) #define Ch(x,y,z) bitselect(z,y,x) #define Maj(x,y,z) Ch((x^z),y,z) #define EndianSwap(n) (rotl(n & ES[0], 24U)|rotl(n & ES[1], 8U)) #define Tr2(x) (rotl(x, 30U) ^ rotl(x, 19U) ^ rotl(x, 10U)) #define Tr1(x) (rotl(x, 26U) ^ rotl(x, 21U) ^ rotl(x, 7U)) #define Wr2(x) (rotl(x, 25U) ^ rotl(x, 14U) ^ (x>>3U)) #define Wr1(x) (rotl(x, 15U) ^ rotl(x, 13U) ^ (x>>10U)) #define RND(a, b, c, d, e, f, g, h, k) \ h += Tr1(e); \ h += Ch(e, f, g); \ h += k; \ d += h; \ h += Tr2(a); \ h += Maj(a, b, c); x = W[ 3].z //x2 = W[ 0].y // + W[ 2].y + Wr2(W[ 0].y W[ 0].x += (rotl(x, 15U) ^ rotl(x, 13U) ^ (x>>10U)) + W[ 2].y + (rotl(W[ 0].y, 25U) ^ rotl(W[ 0].y, 14U) ^ (W[ 0].y>>3U)) h += (rotl(e, 26U) ^ rotl(e, 21U) ^ rotl(e, 7U)) h += bitselect(g,f,e) h += W[0].x+ K[15]; d += h; h += (rotl(a, 30U) ^ rotl(a, 19U) ^ rotl(a, 10U)) h += bitselect(c,b,(a^c)) (rotl(x, 15U) ^ rotl(x, 13U) ^ (x>>10U)) + (rotl(y, 25U) ^ rotl(y, 14U) ^ (y>>3U)) W[ 0].x += Wr1(W[ 3].z) + W[ 2].y + Wr2(W[ 0].y); RND(A,B,C,D,E,F,G,H, W[0].x+ K[15]); W[ 0].y += Wr1(W[ 3].w) + W[ 2].z + Wr2(W[ 0].z); RND(H,A,B,C,D,E,F,G, W[0].y+ K[16]); W[ 0].z += Wr1(W[ 0].x) + W[ 2].w + Wr2(W[ 0].w); RND(G,H,A,B,C,D,E,F, W[0].z+ K[17]); W[ 0].w += Wr1(W[ 0].y) + W[ 3].x + Wr2(W[ 1].x); RND(F,G,H,A,B,C,D,E, W[0].w+ K[18]); W[ 1].x += Wr1(W[ 0].z) + W[ 3].y + Wr2(W[ 1].y); RND(E,F,G,H,A,B,C,D, W[1].x+ K[19]); W[ 1].y += Wr1(W[ 0].w) + W[ 3].z + Wr2(W[ 1].z); RND(D,E,F,G,H,A,B,C, W[1].y+ K[20]); W[ 1].z += Wr1(W[ 1].x) + W[ 3].w + Wr2(W[ 1].w); RND(C,D,E,F,G,H,A,B, W[1].z+ K[21]); W[ 1].w += Wr1(W[ 1].y) + W[ 0].x + Wr2(W[ 2].x); RND(B,C,D,E,F,G,H,A, W[1].w+ K[22]);