Mercurial > hg > ucis.core
view NaCl/crypto_hashblocks/sha512.cs @ 81:3352f89cf6f5
FBGUI ContainerControl fixes (client area, keyboard capture)
author | Ivo Smits <Ivo@UCIS.nl> |
---|---|
date | Sun, 23 Feb 2014 16:56:42 +0100 |
parents | b7d981ccd434 |
children |
line wrap: on
line source
???using System; namespace UCIS.NaCl.crypto_hashblocks { public static class sha512 { public const int STATEBYTES = 64; public const int BLOCKBYTES = 128; unsafe static UInt64 load_bigendian(Byte* x) { return (UInt64)(x[7]) | (((UInt64)(x[6])) << 8) | (((UInt64)(x[5])) << 16) | (((UInt64)(x[4])) << 24) | (((UInt64)(x[3])) << 32) | (((UInt64)(x[2])) << 40) | (((UInt64)(x[1])) << 48) | (((UInt64)(x[0])) << 56); } unsafe static void store_bigendian(Byte* x, UInt64 u) { x[7] = (Byte)u; u >>= 8; x[6] = (Byte)u; u >>= 8; x[5] = (Byte)u; u >>= 8; x[4] = (Byte)u; u >>= 8; x[3] = (Byte)u; u >>= 8; x[2] = (Byte)u; u >>= 8; x[1] = (Byte)u; u >>= 8; x[0] = (Byte)u; } private static int dummyvar = 0; private static void dummymethod() { dummyvar++; } public unsafe static void crypto_hashblocks(UInt64* state, Byte* inp, UInt64 inlen) { UInt64 a = state[0]; UInt64 b = state[1]; UInt64 c = state[2]; UInt64 d = state[3]; UInt64 e = state[4]; UInt64 f = state[5]; UInt64 g = state[6]; UInt64 h = state[7]; while (inlen >= 128) { UInt64 w0 = load_bigendian(inp + 0); UInt64 w1 = load_bigendian(inp + 8); UInt64 w2 = load_bigendian(inp + 16); UInt64 w3 = load_bigendian(inp + 24); UInt64 w4 = load_bigendian(inp + 32); UInt64 w5 = load_bigendian(inp + 40); UInt64 w6 = load_bigendian(inp + 48); UInt64 w7 = load_bigendian(inp + 56); UInt64 w8 = load_bigendian(inp + 64); UInt64 w9 = load_bigendian(inp + 72); UInt64 w10 = load_bigendian(inp + 80); UInt64 w11 = load_bigendian(inp + 88); UInt64 w12 = load_bigendian(inp + 96); UInt64 w13 = load_bigendian(inp + 104); UInt64 w14 = load_bigendian(inp + 112); UInt64 w15 = load_bigendian(inp + 120); UInt64 T1, T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x428a2f98d728ae22 + w0; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x7137449123ef65cd + w1; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xb5c0fbcfec4d3b2f + w2; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xe9b5dba58189dbbc + w3; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x3956c25bf348b538 + w4; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x59f111f1b605d019 + w5; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x923f82a4af194f9b + w6; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xab1c5ed5da6d8118 + w7; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xd807aa98a3030242 + w8; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x12835b0145706fbe + w9; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x243185be4ee4b28c + w10; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x550c7dc3d5ffb4e2 + w11; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x72be5d74f27b896f + w12; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x80deb1fe3b1696b1 + w13; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x9bdc06a725c71235 + w14; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xc19bf174cf692694 + w15; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; dummymethod(); //Workaround for Mono on OS X, breaks up the spans where registers are used w0 = ((((w14) >> (19)) | ((w14) << (64 - (19)))) ^ (((w14) >> (61)) | ((w14) << (64 - (61)))) ^ ((w14) >> (6))) + w9 + ((((w1) >> (1)) | ((w1) << (64 - (1)))) ^ (((w1) >> (8)) | ((w1) << (64 - (8)))) ^ ((w1) >> (7))) + w0; w1 = ((((w15) >> (19)) | ((w15) << (64 - (19)))) ^ (((w15) >> (61)) | ((w15) << (64 - (61)))) ^ ((w15) >> (6))) + w10 + ((((w2) >> (1)) | ((w2) << (64 - (1)))) ^ (((w2) >> (8)) | ((w2) << (64 - (8)))) ^ ((w2) >> (7))) + w1; w2 = ((((w0) >> (19)) | ((w0) << (64 - (19)))) ^ (((w0) >> (61)) | ((w0) << (64 - (61)))) ^ ((w0) >> (6))) + w11 + ((((w3) >> (1)) | ((w3) << (64 - (1)))) ^ (((w3) >> (8)) | ((w3) << (64 - (8)))) ^ ((w3) >> (7))) + w2; w3 = ((((w1) >> (19)) | ((w1) << (64 - (19)))) ^ (((w1) >> (61)) | ((w1) << (64 - (61)))) ^ ((w1) >> (6))) + w12 + ((((w4) >> (1)) | ((w4) << (64 - (1)))) ^ (((w4) >> (8)) | ((w4) << (64 - (8)))) ^ ((w4) >> (7))) + w3; w4 = ((((w2) >> (19)) | ((w2) << (64 - (19)))) ^ (((w2) >> (61)) | ((w2) << (64 - (61)))) ^ ((w2) >> (6))) + w13 + ((((w5) >> (1)) | ((w5) << (64 - (1)))) ^ (((w5) >> (8)) | ((w5) << (64 - (8)))) ^ ((w5) >> (7))) + w4; w5 = ((((w3) >> (19)) | ((w3) << (64 - (19)))) ^ (((w3) >> (61)) | ((w3) << (64 - (61)))) ^ ((w3) >> (6))) + w14 + ((((w6) >> (1)) | ((w6) << (64 - (1)))) ^ (((w6) >> (8)) | ((w6) << (64 - (8)))) ^ ((w6) >> (7))) + w5; w6 = ((((w4) >> (19)) | ((w4) << (64 - (19)))) ^ (((w4) >> (61)) | ((w4) << (64 - (61)))) ^ ((w4) >> (6))) + w15 + ((((w7) >> (1)) | ((w7) << (64 - (1)))) ^ (((w7) >> (8)) | ((w7) << (64 - (8)))) ^ ((w7) >> (7))) + w6; w7 = ((((w5) >> (19)) | ((w5) << (64 - (19)))) ^ (((w5) >> (61)) | ((w5) << (64 - (61)))) ^ ((w5) >> (6))) + w0 + ((((w8) >> (1)) | ((w8) << (64 - (1)))) ^ (((w8) >> (8)) | ((w8) << (64 - (8)))) ^ ((w8) >> (7))) + w7; w8 = ((((w6) >> (19)) | ((w6) << (64 - (19)))) ^ (((w6) >> (61)) | ((w6) << (64 - (61)))) ^ ((w6) >> (6))) + w1 + ((((w9) >> (1)) | ((w9) << (64 - (1)))) ^ (((w9) >> (8)) | ((w9) << (64 - (8)))) ^ ((w9) >> (7))) + w8; w9 = ((((w7) >> (19)) | ((w7) << (64 - (19)))) ^ (((w7) >> (61)) | ((w7) << (64 - (61)))) ^ ((w7) >> (6))) + w2 + ((((w10) >> (1)) | ((w10) << (64 - (1)))) ^ (((w10) >> (8)) | ((w10) << (64 - (8)))) ^ ((w10) >> (7))) + w9; w10 = ((((w8) >> (19)) | ((w8) << (64 - (19)))) ^ (((w8) >> (61)) | ((w8) << (64 - (61)))) ^ ((w8) >> (6))) + w3 + ((((w11) >> (1)) | ((w11) << (64 - (1)))) ^ (((w11) >> (8)) | ((w11) << (64 - (8)))) ^ ((w11) >> (7))) + w10; w11 = ((((w9) >> (19)) | ((w9) << (64 - (19)))) ^ (((w9) >> (61)) | ((w9) << (64 - (61)))) ^ ((w9) >> (6))) + w4 + ((((w12) >> (1)) | ((w12) << (64 - (1)))) ^ (((w12) >> (8)) | ((w12) << (64 - (8)))) ^ ((w12) >> (7))) + w11; w12 = ((((w10) >> (19)) | ((w10) << (64 - (19)))) ^ (((w10) >> (61)) | ((w10) << (64 - (61)))) ^ ((w10) >> (6))) + w5 + ((((w13) >> (1)) | ((w13) << (64 - (1)))) ^ (((w13) >> (8)) | ((w13) << (64 - (8)))) ^ ((w13) >> (7))) + w12; w13 = ((((w11) >> (19)) | ((w11) << (64 - (19)))) ^ (((w11) >> (61)) | ((w11) << (64 - (61)))) ^ ((w11) >> (6))) + w6 + ((((w14) >> (1)) | ((w14) << (64 - (1)))) ^ (((w14) >> (8)) | ((w14) << (64 - (8)))) ^ ((w14) >> (7))) + w13; w14 = ((((w12) >> (19)) | ((w12) << (64 - (19)))) ^ (((w12) >> (61)) | ((w12) << (64 - (61)))) ^ ((w12) >> (6))) + w7 + ((((w15) >> (1)) | ((w15) << (64 - (1)))) ^ (((w15) >> (8)) | ((w15) << (64 - (8)))) ^ ((w15) >> (7))) + w14; w15 = ((((w13) >> (19)) | ((w13) << (64 - (19)))) ^ (((w13) >> (61)) | ((w13) << (64 - (61)))) ^ ((w13) >> (6))) + w8 + ((((w0) >> (1)) | ((w0) << (64 - (1)))) ^ (((w0) >> (8)) | ((w0) << (64 - (8)))) ^ ((w0) >> (7))) + w15; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xe49b69c19ef14ad2 + w0; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xefbe4786384f25e3 + w1; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x0fc19dc68b8cd5b5 + w2; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x240ca1cc77ac9c65 + w3; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x2de92c6f592b0275 + w4; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x4a7484aa6ea6e483 + w5; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x5cb0a9dcbd41fbd4 + w6; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x76f988da831153b5 + w7; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x983e5152ee66dfab + w8; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xa831c66d2db43210 + w9; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xb00327c898fb213f + w10; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xbf597fc7beef0ee4 + w11; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xc6e00bf33da88fc2 + w12; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xd5a79147930aa725 + w13; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x06ca6351e003826f + w14; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x142929670a0e6e70 + w15; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; dummymethod(); w0 = ((((w14) >> (19)) | ((w14) << (64 - (19)))) ^ (((w14) >> (61)) | ((w14) << (64 - (61)))) ^ ((w14) >> (6))) + w9 + ((((w1) >> (1)) | ((w1) << (64 - (1)))) ^ (((w1) >> (8)) | ((w1) << (64 - (8)))) ^ ((w1) >> (7))) + w0; w1 = ((((w15) >> (19)) | ((w15) << (64 - (19)))) ^ (((w15) >> (61)) | ((w15) << (64 - (61)))) ^ ((w15) >> (6))) + w10 + ((((w2) >> (1)) | ((w2) << (64 - (1)))) ^ (((w2) >> (8)) | ((w2) << (64 - (8)))) ^ ((w2) >> (7))) + w1; w2 = ((((w0) >> (19)) | ((w0) << (64 - (19)))) ^ (((w0) >> (61)) | ((w0) << (64 - (61)))) ^ ((w0) >> (6))) + w11 + ((((w3) >> (1)) | ((w3) << (64 - (1)))) ^ (((w3) >> (8)) | ((w3) << (64 - (8)))) ^ ((w3) >> (7))) + w2; w3 = ((((w1) >> (19)) | ((w1) << (64 - (19)))) ^ (((w1) >> (61)) | ((w1) << (64 - (61)))) ^ ((w1) >> (6))) + w12 + ((((w4) >> (1)) | ((w4) << (64 - (1)))) ^ (((w4) >> (8)) | ((w4) << (64 - (8)))) ^ ((w4) >> (7))) + w3; w4 = ((((w2) >> (19)) | ((w2) << (64 - (19)))) ^ (((w2) >> (61)) | ((w2) << (64 - (61)))) ^ ((w2) >> (6))) + w13 + ((((w5) >> (1)) | ((w5) << (64 - (1)))) ^ (((w5) >> (8)) | ((w5) << (64 - (8)))) ^ ((w5) >> (7))) + w4; w5 = ((((w3) >> (19)) | ((w3) << (64 - (19)))) ^ (((w3) >> (61)) | ((w3) << (64 - (61)))) ^ ((w3) >> (6))) + w14 + ((((w6) >> (1)) | ((w6) << (64 - (1)))) ^ (((w6) >> (8)) | ((w6) << (64 - (8)))) ^ ((w6) >> (7))) + w5; w6 = ((((w4) >> (19)) | ((w4) << (64 - (19)))) ^ (((w4) >> (61)) | ((w4) << (64 - (61)))) ^ ((w4) >> (6))) + w15 + ((((w7) >> (1)) | ((w7) << (64 - (1)))) ^ (((w7) >> (8)) | ((w7) << (64 - (8)))) ^ ((w7) >> (7))) + w6; w7 = ((((w5) >> (19)) | ((w5) << (64 - (19)))) ^ (((w5) >> (61)) | ((w5) << (64 - (61)))) ^ ((w5) >> (6))) + w0 + ((((w8) >> (1)) | ((w8) << (64 - (1)))) ^ (((w8) >> (8)) | ((w8) << (64 - (8)))) ^ ((w8) >> (7))) + w7; w8 = ((((w6) >> (19)) | ((w6) << (64 - (19)))) ^ (((w6) >> (61)) | ((w6) << (64 - (61)))) ^ ((w6) >> (6))) + w1 + ((((w9) >> (1)) | ((w9) << (64 - (1)))) ^ (((w9) >> (8)) | ((w9) << (64 - (8)))) ^ ((w9) >> (7))) + w8; w9 = ((((w7) >> (19)) | ((w7) << (64 - (19)))) ^ (((w7) >> (61)) | ((w7) << (64 - (61)))) ^ ((w7) >> (6))) + w2 + ((((w10) >> (1)) | ((w10) << (64 - (1)))) ^ (((w10) >> (8)) | ((w10) << (64 - (8)))) ^ ((w10) >> (7))) + w9; w10 = ((((w8) >> (19)) | ((w8) << (64 - (19)))) ^ (((w8) >> (61)) | ((w8) << (64 - (61)))) ^ ((w8) >> (6))) + w3 + ((((w11) >> (1)) | ((w11) << (64 - (1)))) ^ (((w11) >> (8)) | ((w11) << (64 - (8)))) ^ ((w11) >> (7))) + w10; w11 = ((((w9) >> (19)) | ((w9) << (64 - (19)))) ^ (((w9) >> (61)) | ((w9) << (64 - (61)))) ^ ((w9) >> (6))) + w4 + ((((w12) >> (1)) | ((w12) << (64 - (1)))) ^ (((w12) >> (8)) | ((w12) << (64 - (8)))) ^ ((w12) >> (7))) + w11; w12 = ((((w10) >> (19)) | ((w10) << (64 - (19)))) ^ (((w10) >> (61)) | ((w10) << (64 - (61)))) ^ ((w10) >> (6))) + w5 + ((((w13) >> (1)) | ((w13) << (64 - (1)))) ^ (((w13) >> (8)) | ((w13) << (64 - (8)))) ^ ((w13) >> (7))) + w12; w13 = ((((w11) >> (19)) | ((w11) << (64 - (19)))) ^ (((w11) >> (61)) | ((w11) << (64 - (61)))) ^ ((w11) >> (6))) + w6 + ((((w14) >> (1)) | ((w14) << (64 - (1)))) ^ (((w14) >> (8)) | ((w14) << (64 - (8)))) ^ ((w14) >> (7))) + w13; w14 = ((((w12) >> (19)) | ((w12) << (64 - (19)))) ^ (((w12) >> (61)) | ((w12) << (64 - (61)))) ^ ((w12) >> (6))) + w7 + ((((w15) >> (1)) | ((w15) << (64 - (1)))) ^ (((w15) >> (8)) | ((w15) << (64 - (8)))) ^ ((w15) >> (7))) + w14; w15 = ((((w13) >> (19)) | ((w13) << (64 - (19)))) ^ (((w13) >> (61)) | ((w13) << (64 - (61)))) ^ ((w13) >> (6))) + w8 + ((((w0) >> (1)) | ((w0) << (64 - (1)))) ^ (((w0) >> (8)) | ((w0) << (64 - (8)))) ^ ((w0) >> (7))) + w15; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x27b70a8546d22ffc + w0; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x2e1b21385c26c926 + w1; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x4d2c6dfc5ac42aed + w2; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x53380d139d95b3df + w3; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x650a73548baf63de + w4; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x766a0abb3c77b2a8 + w5; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x81c2c92e47edaee6 + w6; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x92722c851482353b + w7; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xa2bfe8a14cf10364 + w8; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xa81a664bbc423001 + w9; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xc24b8b70d0f89791 + w10; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xc76c51a30654be30 + w11; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xd192e819d6ef5218 + w12; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xd69906245565a910 + w13; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xf40e35855771202a + w14; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x106aa07032bbd1b8 + w15; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; dummymethod(); w0 = ((((w14) >> (19)) | ((w14) << (64 - (19)))) ^ (((w14) >> (61)) | ((w14) << (64 - (61)))) ^ ((w14) >> (6))) + w9 + ((((w1) >> (1)) | ((w1) << (64 - (1)))) ^ (((w1) >> (8)) | ((w1) << (64 - (8)))) ^ ((w1) >> (7))) + w0; w1 = ((((w15) >> (19)) | ((w15) << (64 - (19)))) ^ (((w15) >> (61)) | ((w15) << (64 - (61)))) ^ ((w15) >> (6))) + w10 + ((((w2) >> (1)) | ((w2) << (64 - (1)))) ^ (((w2) >> (8)) | ((w2) << (64 - (8)))) ^ ((w2) >> (7))) + w1; w2 = ((((w0) >> (19)) | ((w0) << (64 - (19)))) ^ (((w0) >> (61)) | ((w0) << (64 - (61)))) ^ ((w0) >> (6))) + w11 + ((((w3) >> (1)) | ((w3) << (64 - (1)))) ^ (((w3) >> (8)) | ((w3) << (64 - (8)))) ^ ((w3) >> (7))) + w2; w3 = ((((w1) >> (19)) | ((w1) << (64 - (19)))) ^ (((w1) >> (61)) | ((w1) << (64 - (61)))) ^ ((w1) >> (6))) + w12 + ((((w4) >> (1)) | ((w4) << (64 - (1)))) ^ (((w4) >> (8)) | ((w4) << (64 - (8)))) ^ ((w4) >> (7))) + w3; w4 = ((((w2) >> (19)) | ((w2) << (64 - (19)))) ^ (((w2) >> (61)) | ((w2) << (64 - (61)))) ^ ((w2) >> (6))) + w13 + ((((w5) >> (1)) | ((w5) << (64 - (1)))) ^ (((w5) >> (8)) | ((w5) << (64 - (8)))) ^ ((w5) >> (7))) + w4; w5 = ((((w3) >> (19)) | ((w3) << (64 - (19)))) ^ (((w3) >> (61)) | ((w3) << (64 - (61)))) ^ ((w3) >> (6))) + w14 + ((((w6) >> (1)) | ((w6) << (64 - (1)))) ^ (((w6) >> (8)) | ((w6) << (64 - (8)))) ^ ((w6) >> (7))) + w5; w6 = ((((w4) >> (19)) | ((w4) << (64 - (19)))) ^ (((w4) >> (61)) | ((w4) << (64 - (61)))) ^ ((w4) >> (6))) + w15 + ((((w7) >> (1)) | ((w7) << (64 - (1)))) ^ (((w7) >> (8)) | ((w7) << (64 - (8)))) ^ ((w7) >> (7))) + w6; w7 = ((((w5) >> (19)) | ((w5) << (64 - (19)))) ^ (((w5) >> (61)) | ((w5) << (64 - (61)))) ^ ((w5) >> (6))) + w0 + ((((w8) >> (1)) | ((w8) << (64 - (1)))) ^ (((w8) >> (8)) | ((w8) << (64 - (8)))) ^ ((w8) >> (7))) + w7; w8 = ((((w6) >> (19)) | ((w6) << (64 - (19)))) ^ (((w6) >> (61)) | ((w6) << (64 - (61)))) ^ ((w6) >> (6))) + w1 + ((((w9) >> (1)) | ((w9) << (64 - (1)))) ^ (((w9) >> (8)) | ((w9) << (64 - (8)))) ^ ((w9) >> (7))) + w8; w9 = ((((w7) >> (19)) | ((w7) << (64 - (19)))) ^ (((w7) >> (61)) | ((w7) << (64 - (61)))) ^ ((w7) >> (6))) + w2 + ((((w10) >> (1)) | ((w10) << (64 - (1)))) ^ (((w10) >> (8)) | ((w10) << (64 - (8)))) ^ ((w10) >> (7))) + w9; w10 = ((((w8) >> (19)) | ((w8) << (64 - (19)))) ^ (((w8) >> (61)) | ((w8) << (64 - (61)))) ^ ((w8) >> (6))) + w3 + ((((w11) >> (1)) | ((w11) << (64 - (1)))) ^ (((w11) >> (8)) | ((w11) << (64 - (8)))) ^ ((w11) >> (7))) + w10; w11 = ((((w9) >> (19)) | ((w9) << (64 - (19)))) ^ (((w9) >> (61)) | ((w9) << (64 - (61)))) ^ ((w9) >> (6))) + w4 + ((((w12) >> (1)) | ((w12) << (64 - (1)))) ^ (((w12) >> (8)) | ((w12) << (64 - (8)))) ^ ((w12) >> (7))) + w11; w12 = ((((w10) >> (19)) | ((w10) << (64 - (19)))) ^ (((w10) >> (61)) | ((w10) << (64 - (61)))) ^ ((w10) >> (6))) + w5 + ((((w13) >> (1)) | ((w13) << (64 - (1)))) ^ (((w13) >> (8)) | ((w13) << (64 - (8)))) ^ ((w13) >> (7))) + w12; w13 = ((((w11) >> (19)) | ((w11) << (64 - (19)))) ^ (((w11) >> (61)) | ((w11) << (64 - (61)))) ^ ((w11) >> (6))) + w6 + ((((w14) >> (1)) | ((w14) << (64 - (1)))) ^ (((w14) >> (8)) | ((w14) << (64 - (8)))) ^ ((w14) >> (7))) + w13; w14 = ((((w12) >> (19)) | ((w12) << (64 - (19)))) ^ (((w12) >> (61)) | ((w12) << (64 - (61)))) ^ ((w12) >> (6))) + w7 + ((((w15) >> (1)) | ((w15) << (64 - (1)))) ^ (((w15) >> (8)) | ((w15) << (64 - (8)))) ^ ((w15) >> (7))) + w14; w15 = ((((w13) >> (19)) | ((w13) << (64 - (19)))) ^ (((w13) >> (61)) | ((w13) << (64 - (61)))) ^ ((w13) >> (6))) + w8 + ((((w0) >> (1)) | ((w0) << (64 - (1)))) ^ (((w0) >> (8)) | ((w0) << (64 - (8)))) ^ ((w0) >> (7))) + w15; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x19a4c116b8d2d0c8 + w0; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x1e376c085141ab53 + w1; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x2748774cdf8eeb99 + w2; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x34b0bcb5e19b48a8 + w3; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x391c0cb3c5c95a63 + w4; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x4ed8aa4ae3418acb + w5; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x5b9cca4f7763e373 + w6; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x682e6ff3d6b2b8a3 + w7; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x748f82ee5defb2fc + w8; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x78a5636f43172f60 + w9; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x84c87814a1f0ab72 + w10; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x8cc702081a6439ec + w11; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x90befffa23631e28 + w12; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xa4506cebde82bde9 + w13; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xbef9a3f7b2c67915 + w14; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xc67178f2e372532b + w15; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; dummymethod(); w0 = ((((w14) >> (19)) | ((w14) << (64 - (19)))) ^ (((w14) >> (61)) | ((w14) << (64 - (61)))) ^ ((w14) >> (6))) + w9 + ((((w1) >> (1)) | ((w1) << (64 - (1)))) ^ (((w1) >> (8)) | ((w1) << (64 - (8)))) ^ ((w1) >> (7))) + w0; w1 = ((((w15) >> (19)) | ((w15) << (64 - (19)))) ^ (((w15) >> (61)) | ((w15) << (64 - (61)))) ^ ((w15) >> (6))) + w10 + ((((w2) >> (1)) | ((w2) << (64 - (1)))) ^ (((w2) >> (8)) | ((w2) << (64 - (8)))) ^ ((w2) >> (7))) + w1; w2 = ((((w0) >> (19)) | ((w0) << (64 - (19)))) ^ (((w0) >> (61)) | ((w0) << (64 - (61)))) ^ ((w0) >> (6))) + w11 + ((((w3) >> (1)) | ((w3) << (64 - (1)))) ^ (((w3) >> (8)) | ((w3) << (64 - (8)))) ^ ((w3) >> (7))) + w2; w3 = ((((w1) >> (19)) | ((w1) << (64 - (19)))) ^ (((w1) >> (61)) | ((w1) << (64 - (61)))) ^ ((w1) >> (6))) + w12 + ((((w4) >> (1)) | ((w4) << (64 - (1)))) ^ (((w4) >> (8)) | ((w4) << (64 - (8)))) ^ ((w4) >> (7))) + w3; w4 = ((((w2) >> (19)) | ((w2) << (64 - (19)))) ^ (((w2) >> (61)) | ((w2) << (64 - (61)))) ^ ((w2) >> (6))) + w13 + ((((w5) >> (1)) | ((w5) << (64 - (1)))) ^ (((w5) >> (8)) | ((w5) << (64 - (8)))) ^ ((w5) >> (7))) + w4; w5 = ((((w3) >> (19)) | ((w3) << (64 - (19)))) ^ (((w3) >> (61)) | ((w3) << (64 - (61)))) ^ ((w3) >> (6))) + w14 + ((((w6) >> (1)) | ((w6) << (64 - (1)))) ^ (((w6) >> (8)) | ((w6) << (64 - (8)))) ^ ((w6) >> (7))) + w5; w6 = ((((w4) >> (19)) | ((w4) << (64 - (19)))) ^ (((w4) >> (61)) | ((w4) << (64 - (61)))) ^ ((w4) >> (6))) + w15 + ((((w7) >> (1)) | ((w7) << (64 - (1)))) ^ (((w7) >> (8)) | ((w7) << (64 - (8)))) ^ ((w7) >> (7))) + w6; w7 = ((((w5) >> (19)) | ((w5) << (64 - (19)))) ^ (((w5) >> (61)) | ((w5) << (64 - (61)))) ^ ((w5) >> (6))) + w0 + ((((w8) >> (1)) | ((w8) << (64 - (1)))) ^ (((w8) >> (8)) | ((w8) << (64 - (8)))) ^ ((w8) >> (7))) + w7; w8 = ((((w6) >> (19)) | ((w6) << (64 - (19)))) ^ (((w6) >> (61)) | ((w6) << (64 - (61)))) ^ ((w6) >> (6))) + w1 + ((((w9) >> (1)) | ((w9) << (64 - (1)))) ^ (((w9) >> (8)) | ((w9) << (64 - (8)))) ^ ((w9) >> (7))) + w8; w9 = ((((w7) >> (19)) | ((w7) << (64 - (19)))) ^ (((w7) >> (61)) | ((w7) << (64 - (61)))) ^ ((w7) >> (6))) + w2 + ((((w10) >> (1)) | ((w10) << (64 - (1)))) ^ (((w10) >> (8)) | ((w10) << (64 - (8)))) ^ ((w10) >> (7))) + w9; w10 = ((((w8) >> (19)) | ((w8) << (64 - (19)))) ^ (((w8) >> (61)) | ((w8) << (64 - (61)))) ^ ((w8) >> (6))) + w3 + ((((w11) >> (1)) | ((w11) << (64 - (1)))) ^ (((w11) >> (8)) | ((w11) << (64 - (8)))) ^ ((w11) >> (7))) + w10; w11 = ((((w9) >> (19)) | ((w9) << (64 - (19)))) ^ (((w9) >> (61)) | ((w9) << (64 - (61)))) ^ ((w9) >> (6))) + w4 + ((((w12) >> (1)) | ((w12) << (64 - (1)))) ^ (((w12) >> (8)) | ((w12) << (64 - (8)))) ^ ((w12) >> (7))) + w11; w12 = ((((w10) >> (19)) | ((w10) << (64 - (19)))) ^ (((w10) >> (61)) | ((w10) << (64 - (61)))) ^ ((w10) >> (6))) + w5 + ((((w13) >> (1)) | ((w13) << (64 - (1)))) ^ (((w13) >> (8)) | ((w13) << (64 - (8)))) ^ ((w13) >> (7))) + w12; w13 = ((((w11) >> (19)) | ((w11) << (64 - (19)))) ^ (((w11) >> (61)) | ((w11) << (64 - (61)))) ^ ((w11) >> (6))) + w6 + ((((w14) >> (1)) | ((w14) << (64 - (1)))) ^ (((w14) >> (8)) | ((w14) << (64 - (8)))) ^ ((w14) >> (7))) + w13; w14 = ((((w12) >> (19)) | ((w12) << (64 - (19)))) ^ (((w12) >> (61)) | ((w12) << (64 - (61)))) ^ ((w12) >> (6))) + w7 + ((((w15) >> (1)) | ((w15) << (64 - (1)))) ^ (((w15) >> (8)) | ((w15) << (64 - (8)))) ^ ((w15) >> (7))) + w14; w15 = ((((w13) >> (19)) | ((w13) << (64 - (19)))) ^ (((w13) >> (61)) | ((w13) << (64 - (61)))) ^ ((w13) >> (6))) + w8 + ((((w0) >> (1)) | ((w0) << (64 - (1)))) ^ (((w0) >> (8)) | ((w0) << (64 - (8)))) ^ ((w0) >> (7))) + w15; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xca273eceea26619c + w0; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xd186b8c721c0c207 + w1; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xeada7dd6cde0eb1e + w2; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0xf57d4f7fee6ed178 + w3; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x06f067aa72176fba + w4; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x0a637dc5a2c898a6 + w5; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x113f9804bef90dae + w6; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x1b710b35131c471b + w7; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x28db77f523047d84 + w8; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x32caab7b40c72493 + w9; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x3c9ebe0a15c9bebc + w10; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x431d67c49c100d4c + w11; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x4cc5d4becb3e42b6 + w12; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x597f299cfc657e2a + w13; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x5fcb6fab3ad6faec + w14; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; T1 = h + ((((e) >> (14)) | ((e) << (64 - (14)))) ^ (((e) >> (18)) | ((e) << (64 - (18)))) ^ (((e) >> (41)) | ((e) << (64 - (41))))) + ((e & f) ^ (~e & g)) + 0x6c44198c4a475817 + w15; T2 = ((((a) >> (28)) | ((a) << (64 - (28)))) ^ (((a) >> (34)) | ((a) << (64 - (34)))) ^ (((a) >> (39)) | ((a) << (64 - (39))))) + ((a & b) ^ (a & c) ^ (b & c)); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; a += state[0]; b += state[1]; c += state[2]; d += state[3]; e += state[4]; f += state[5]; g += state[6]; h += state[7]; state[0] = a; state[1] = b; state[2] = c; state[3] = d; state[4] = e; state[5] = f; state[6] = g; state[7] = h; inp += 128; inlen -= 128; } } public unsafe static void crypto_hashblocks_state_unpack(UInt64* state, Byte* statebytes) { state[0] = load_bigendian(statebytes + 0); state[1] = load_bigendian(statebytes + 8); state[2] = load_bigendian(statebytes + 16); state[3] = load_bigendian(statebytes + 24); state[4] = load_bigendian(statebytes + 32); state[5] = load_bigendian(statebytes + 40); state[6] = load_bigendian(statebytes + 48); state[7] = load_bigendian(statebytes + 56); } public unsafe static void crypto_hashblocks_state_pack(Byte* statebytes, UInt64* state) { store_bigendian(statebytes + 0, state[0]); store_bigendian(statebytes + 8, state[1]); store_bigendian(statebytes + 16, state[2]); store_bigendian(statebytes + 24, state[3]); store_bigendian(statebytes + 32, state[4]); store_bigendian(statebytes + 40, state[5]); store_bigendian(statebytes + 48, state[6]); store_bigendian(statebytes + 56, state[7]); } public unsafe static void crypto_hashblocks(Byte* statebytes, Byte* inp, UInt64 inlen) { UInt64* state = stackalloc UInt64[8]; crypto_hashblocks_state_unpack(state, statebytes); crypto_hashblocks(state, inp, inlen); crypto_hashblocks_state_pack(statebytes, state); } } }