Giter Site home page Giter Site logo

opencl_sha_al_im's People

Contributors

fruneng avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

opencl_sha_al_im's Issues

Replace your for loops with this since there wasting ticks

#ifdef VECTORS4
typedef uint4 u;
#elif defined VECTORS2
typedef uint2 u;
#else
typedef uint u;
#endif
/*
__constant uint K[64] = {
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
};
__constant uint initH[8] = {
0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
};
__constant uint paddy[24] = {
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00800000, 0x00000000, 0x000005A8,
0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100
};*/
#define FOUND (0x0F)
#define SETFOUND(Xnonce) output[atomic_inc(&output[FOUND])] = Xnonce
#ifdef BITALIGN
#pragma OPENCL EXTENSION cl_amd_media_ops : enable
#define rotr(x, y) amd_bitalign((u)x, (u)x, (u)y)
#else // BITALIGN
#define rotr(x, y) rotate((u)x, (u)(32 - y))
#endif

#ifdef BFI_INT
#define ch(x, y, z) amd_bytealign(x, y, z)
#define Ma(x, y, z) amd_bytealign( (z^x), (y), (x) )
#define Ma2(x, y, z) bitselect((u)x, (u)y, (u)z ^ (u)x)
#else // BFI_INT
#define ch(x, y, z) bitselect((u)z, (u)y, (u)x)
#define Ma(x, y, z) bitselect((u)x, (u)y, (u)z ^ (u)x)
#define Ma2(x, y, z) Ma(x, y, z)
#endif

#define E0(x) (rotr(x,2)^rotr(x,13)^rotr(x,22))
#define E1(x) (rotr(x,6)^rotr(x,11)^rotr(x,25))
#define O0(x) (rotr(x,7)^rotr(x,18)^(x>>3U))
#define O1(x) (rotr(x,17)^rotr(x,19)^(x>>10U))

#define a Vals[0]
#define b Vals[1]
#define c Vals[2]
#define d Vals[3]
#define e Vals[4]
#define f Vals[5]
#define g Vals[6]
#define h Vals[7]

__kernel
attribute((vec_type_hint(u)))
attribute((reqd_work_group_size(WORKSIZE, 1, 1)))

void search(

const uint state0, //H1 - a
const uint state1, //H2 - b
const uint state2, //H3 - c
const uint state3, //H4 - b
const uint state4, //H5 - e
const uint state5, //H6 - f
const uint state6, //H7 - g
const uint state7, //H8 - h

// second message block - the nonce is here, so we have to do it here
const uint merkend,//M0
const uint time, //M1
const uint target, //M2 (nonce is M3)
const uint html1, //M4
const uint html2, //M5
const uint html3, //M6
const uint html4, //M7
const uint html5, //M8
const uint html6, //M9
const uint html7, //M10
const uint html8, //M11
const uint html9, //M12
const uint html10, //M13
const uint html11, //M14
const uint html12, //M15

// final message block
const uint html13, //M2-0
const uint html14, //M2-1
const uint html15, //M2-3
const uint html16, //M2-4

// after this, 256 bits of 0
// 32 bits of F
// 32 bits of 00800000
// 32 bits of 0
// 32 bits of 000005A8
#ifndef GOFFSET
const u base,
#endif
volatile __global uint * output)

{

__private uint K[64] = {
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
};
__private uint initH[8] = {
0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
};
__private uint paddy[24] = {
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00800000, 0x00000000, 0x000005A8,
0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100
};

#ifdef GOFFSET
const u nonce = (uint)(get_global_id(0));
#else
const u nonce = base + (uint)(get_global_id(0));
#endif

__private u Vals[8]; // TODO: try __private as this shouild be faster than a register copy
__private u Last[8];
__private u W[64];
__private u t1=0;
__private u t2=0;

/* // a=state0; copies saved in first line of hash
// b=state1;
// c=state2;
// d=state3;
// e=state4;
// f=state5;
// g=state6;
// h=state7;
W[0]=merkend; copies saved in hash
W[1]=time;
W[2]=target;
W[3]=nonce;
W[4]=html1;
W[5]=html2;
W[6]=html3;
W[7]=html4;
W[8]=html5;
W[9]=html6;
W[10]=html7;
W[11]=html8;
W[12]=html9;
W[13]=html10;
W[14]=html11;
W[15]=html12;*/

t1 = state7 + E1(state4) + ch(state4,state5,state6) + K[0] + merkend;t2 = E0(state0) + Ma(state0,state1,state2);h=state6;g=state5;f=state4;e=state3+t1;d=state2;c=state1;b=state0;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[1] + time;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[2] + target;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[3] + nonce;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[4] + html1;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[5] + html2;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[6] + html3;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[7] + html4;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[8] + html5;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[9] + html6;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[10] + html7;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[11] + html8;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[12] + html9;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[13] + html10;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[14] + html11;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[15] + html12;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[16] = O1(html11) + html6 + O0(time) + merkend;t1 = h + E1(e) + ch(e,f,g) + K[16] + W[16];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[17] = O1(html12) + html7 + O0(target) + time;t1 = h + E1(e) + ch(e,f,g) + K[17] + W[17];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[18] = O1(W[16]) + html8 + O0(nonce) + target;t1 = h + E1(e) + ch(e,f,g) + K[18] + W[18];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[19] = O1(W[17]) + html9 + O0(html1) + nonce;t1 = h + E1(e) + ch(e,f,g) + K[19] + W[19];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[20] = O1(W[18]) + html10 + O0(html2) + html1;t1 = h + E1(e) + ch(e,f,g) + K[20] + W[20];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[21] = O1(W[19]) + html11 + O0(html3) + html2;t1 = h + E1(e) + ch(e,f,g) + K[21] + W[21];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[22] = O1(W[20]) + html12 + O0(html4) + html3;t1 = h + E1(e) + ch(e,f,g) + K[22] + W[22];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[23] = O1(W[21]) + W[16] + O0(html5) + html4;t1 = h + E1(e) + ch(e,f,g) + K[23] + W[23];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[24] = O1(W[22]) + W[17] + O0(html6) + html5;t1 = h + E1(e) + ch(e,f,g) + K[24] + W[24];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[25] = O1(W[23]) + W[18] + O0(html7) + html6;t1 = h + E1(e) + ch(e,f,g) + K[25] + W[25];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[26] = O1(W[24]) + W[19] + O0(html8) + html7;t1 = h + E1(e) + ch(e,f,g) + K[26] + W[26];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[27] = O1(W[25]) + W[20] + O0(html9) + html8;t1 = h + E1(e) + ch(e,f,g) + K[27] + W[27];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[28] = O1(W[26]) + W[21] + O0(html10) + html9;t1 = h + E1(e) + ch(e,f,g) + K[28] + W[28];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[29] = O1(W[27]) + W[22] + O0(html11) + html10;t1 = h + E1(e) + ch(e,f,g) + K[29] + W[29];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[30] = O1(W[28]) + W[23] + O0(html12) + html11;t1 = h + E1(e) + ch(e,f,g) + K[30] + W[30];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[31] = O1(W[29]) + W[24] + O0(W[16]) + html12;t1 = h + E1(e) + ch(e,f,g) + K[31] + W[31];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[32] = O1(W[30]) + W[25] + O0(W[17]) + W[16];t1 = h + E1(e) + ch(e,f,g) + K[32] + W[32];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[33] = O1(W[31]) + W[26] + O0(W[18]) + W[17];t1 = h + E1(e) + ch(e,f,g) + K[33] + W[33];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[34] = O1(W[32]) + W[27] + O0(W[19]) + W[18];t1 = h + E1(e) + ch(e,f,g) + K[34] + W[34];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[35] = O1(W[33]) + W[28] + O0(W[20]) + W[19];t1 = h + E1(e) + ch(e,f,g) + K[35] + W[35];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[36] = O1(W[34]) + W[29] + O0(W[21]) + W[20];t1 = h + E1(e) + ch(e,f,g) + K[36] + W[36];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[37] = O1(W[35]) + W[30] + O0(W[22]) + W[21];t1 = h + E1(e) + ch(e,f,g) + K[37] + W[37];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[38] = O1(W[36]) + W[31] + O0(W[23]) + W[22];t1 = h + E1(e) + ch(e,f,g) + K[38] + W[38];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[39] = O1(W[37]) + W[32] + O0(W[24]) + W[23];t1 = h + E1(e) + ch(e,f,g) + K[39] + W[39];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[40] = O1(W[38]) + W[33] + O0(W[25]) + W[24];t1 = h + E1(e) + ch(e,f,g) + K[40] + W[40];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[41] = O1(W[39]) + W[34] + O0(W[26]) + W[25];t1 = h + E1(e) + ch(e,f,g) + K[41] + W[41];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[42] = O1(W[40]) + W[35] + O0(W[27]) + W[26];t1 = h + E1(e) + ch(e,f,g) + K[42] + W[42];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[43] = O1(W[41]) + W[36] + O0(W[28]) + W[27];t1 = h + E1(e) + ch(e,f,g) + K[43] + W[43];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[44] = O1(W[42]) + W[37] + O0(W[29]) + W[28];t1 = h + E1(e) + ch(e,f,g) + K[44] + W[44];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[45] = O1(W[43]) + W[38] + O0(W[30]) + W[29];t1 = h + E1(e) + ch(e,f,g) + K[45] + W[45];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[46] = O1(W[44]) + W[39] + O0(W[31]) + W[30];t1 = h + E1(e) + ch(e,f,g) + K[46] + W[46];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[47] = O1(W[45]) + W[40] + O0(W[32]) + W[31];t1 = h + E1(e) + ch(e,f,g) + K[47] + W[47];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[48] = O1(W[46]) + W[41] + O0(W[33]) + W[32];t1 = h + E1(e) + ch(e,f,g) + K[48] + W[48];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[49] = O1(W[47]) + W[42] + O0(W[34]) + W[33];t1 = h + E1(e) + ch(e,f,g) + K[49] + W[49];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[50] = O1(W[48]) + W[43] + O0(W[35]) + W[34];t1 = h + E1(e) + ch(e,f,g) + K[50] + W[50];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[51] = O1(W[49]) + W[44] + O0(W[36]) + W[35];t1 = h + E1(e) + ch(e,f,g) + K[51] + W[51];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[52] = O1(W[50]) + W[45] + O0(W[37]) + W[36];t1 = h + E1(e) + ch(e,f,g) + K[52] + W[52];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[53] = O1(W[51]) + W[46] + O0(W[38]) + W[37];t1 = h + E1(e) + ch(e,f,g) + K[53] + W[53];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[54] = O1(W[52]) + W[47] + O0(W[39]) + W[38];t1 = h + E1(e) + ch(e,f,g) + K[54] + W[54];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[55] = O1(W[53]) + W[48] + O0(W[40]) + W[39];t1 = h + E1(e) + ch(e,f,g) + K[55] + W[55];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[56] = O1(W[54]) + W[49] + O0(W[41]) + W[40];t1 = h + E1(e) + ch(e,f,g) + K[56] + W[56];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[57] = O1(W[55]) + W[50] + O0(W[42]) + W[41];t1 = h + E1(e) + ch(e,f,g) + K[57] + W[57];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[58] = O1(W[56]) + W[51] + O0(W[43]) + W[42];t1 = h + E1(e) + ch(e,f,g) + K[58] + W[58];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[59] = O1(W[57]) + W[52] + O0(W[44]) + W[43];t1 = h + E1(e) + ch(e,f,g) + K[59] + W[59];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[60] = O1(W[58]) + W[53] + O0(W[45]) + W[44];t1 = h + E1(e) + ch(e,f,g) + K[60] + W[60];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[61] = O1(W[59]) + W[54] + O0(W[46]) + W[45];t1 = h + E1(e) + ch(e,f,g) + K[61] + W[61];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[62] = O1(W[60]) + W[55] + O0(W[47]) + W[46];t1 = h + E1(e) + ch(e,f,g) + K[62] + W[62];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[63] = O1(W[61]) + W[56] + O0(W[48]) + W[47];t1 = h + E1(e) + ch(e,f,g) + K[63] + W[63];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;

Last[0]=a+=state0;
Last[1]=b+=state1;
Last[2]=c+=state2;
Last[3]=d+=state3;
Last[4]=e+=state4;
Last[5]=f+=state5;
Last[6]=g+=state6;
Last[7]=h+=state7;

/* W[0]=html13;
W[1]=html14;
W[2]=html15;
W[3]=html16;
W[4]=paddy[0];
W[5]=paddy[1];
W[6]=paddy[2];
W[7]=paddy[3];
W[8]=paddy[4];
W[9]=paddy[5];
W[10]=paddy[6];
W[11]=paddy[7];
W[12]=paddy[8];
W[13]=paddy[9];
W[14]=paddy[10];
W[15]=paddy[11];
__constant uint paddy[24] = { as a lot of these are 0's we can save some additions of 0
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00800000, 0x00000000, 0x000005A8,
0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100
values 0-7, 10, 13, 14, 15, 16, 17, 18 are all zeros and can be reomved from below TODO***
*/

t1 = h + E1(e) + ch(e,f,g) + K[0] + html13;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[1] + html14;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[2] + html15;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[3] + html16;t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[4];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[5];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[6];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[7];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[8];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[9];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[10];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[11];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[12] + paddy[8];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[13] + paddy[9];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[14];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[15] + paddy[11];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[16] = O0(html14) + html13;t1 = h + E1(e) + ch(e,f,g) + K[16] + W[16];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[17] = O1(paddy[11]) + O0(html15) + html14;t1 = h + E1(e) + ch(e,f,g) + K[17] + W[17];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[18] = O1(W[16]) + O0(html16) + html15; t1 = h + E1(e) + ch(e,f,g) + K[18] + W[18];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[19] = O1(W[17]) + paddy[8] + html16; t1 = h + E1(e) + ch(e,f,g) + K[19] + W[19];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[20] = O1(W[18]) + paddy[9];t1 = h + E1(e) + ch(e,f,g) + K[20] + W[20];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[21] = O1(W[19]);t1 = h + E1(e) + ch(e,f,g) + K[21] + W[21];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[22] = O1(W[20]) + paddy[11];t1 = h + E1(e) + ch(e,f,g) + K[22] + W[22];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[23] = O1(W[21]) + W[16] ;t1 = h + E1(e) + ch(e,f,g) + K[23] + W[23];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[24] = O1(W[22]) + W[17] ;t1 = h + E1(e) + ch(e,f,g) + K[24] + W[24];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[25] = O1(W[23]) + W[18] ;t1 = h + E1(e) + ch(e,f,g) + K[25] + W[25];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[26] = O1(W[24]) + W[19] ;t1 = h + E1(e) + ch(e,f,g) + K[26] + W[26];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[27] = O1(W[25]) + W[20] + O0(paddy[8]);t1 = h + E1(e) + ch(e,f,g) + K[27] + W[27];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[28] = O1(W[26]) + W[21] + O0(paddy[9]) + paddy[8];t1 = h + E1(e) + ch(e,f,g) + K[28] + W[28];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[29] = O1(W[27]) + W[22] + paddy[9];t1 = h + E1(e) + ch(e,f,g) + K[29] + W[29];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[30] = O1(W[28]) + W[23] + O0(paddy[11]);t1 = h + E1(e) + ch(e,f,g) + K[30] + W[30];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[31] = O1(W[29]) + W[24] + O0(W[16]) + paddy[11];t1 = h + E1(e) + ch(e,f,g) + K[31] + W[31];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[32] = O1(W[30]) + W[25] + O0(W[17]) + W[16];t1 = h + E1(e) + ch(e,f,g) + K[32] + W[32];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[33] = O1(W[31]) + W[26] + O0(W[18]) + W[17];t1 = h + E1(e) + ch(e,f,g) + K[33] + W[33];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[34] = O1(W[32]) + W[27] + O0(W[19]) + W[18];t1 = h + E1(e) + ch(e,f,g) + K[34] + W[34];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[35] = O1(W[33]) + W[28] + O0(W[20]) + W[19];t1 = h + E1(e) + ch(e,f,g) + K[35] + W[35];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[36] = O1(W[34]) + W[29] + O0(W[21]) + W[20];t1 = h + E1(e) + ch(e,f,g) + K[36] + W[36];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[37] = O1(W[35]) + W[30] + O0(W[22]) + W[21];t1 = h + E1(e) + ch(e,f,g) + K[37] + W[37];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[38] = O1(W[36]) + W[31] + O0(W[23]) + W[22];t1 = h + E1(e) + ch(e,f,g) + K[38] + W[38];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[39] = O1(W[37]) + W[32] + O0(W[24]) + W[23];t1 = h + E1(e) + ch(e,f,g) + K[39] + W[39];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[40] = O1(W[38]) + W[33] + O0(W[25]) + W[24];t1 = h + E1(e) + ch(e,f,g) + K[40] + W[40];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[41] = O1(W[39]) + W[34] + O0(W[26]) + W[25];t1 = h + E1(e) + ch(e,f,g) + K[41] + W[41];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[42] = O1(W[40]) + W[35] + O0(W[27]) + W[26];t1 = h + E1(e) + ch(e,f,g) + K[42] + W[42];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[43] = O1(W[41]) + W[36] + O0(W[28]) + W[27];t1 = h + E1(e) + ch(e,f,g) + K[43] + W[43];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[44] = O1(W[42]) + W[37] + O0(W[29]) + W[28];t1 = h + E1(e) + ch(e,f,g) + K[44] + W[44];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[45] = O1(W[43]) + W[38] + O0(W[30]) + W[29];t1 = h + E1(e) + ch(e,f,g) + K[45] + W[45];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[46] = O1(W[44]) + W[39] + O0(W[31]) + W[30];t1 = h + E1(e) + ch(e,f,g) + K[46] + W[46];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[47] = O1(W[45]) + W[40] + O0(W[32]) + W[31];t1 = h + E1(e) + ch(e,f,g) + K[47] + W[47];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[48] = O1(W[46]) + W[41] + O0(W[33]) + W[32];t1 = h + E1(e) + ch(e,f,g) + K[48] + W[48];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[49] = O1(W[47]) + W[42] + O0(W[34]) + W[33];t1 = h + E1(e) + ch(e,f,g) + K[49] + W[49];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[50] = O1(W[48]) + W[43] + O0(W[35]) + W[34];t1 = h + E1(e) + ch(e,f,g) + K[50] + W[50];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[51] = O1(W[49]) + W[44] + O0(W[36]) + W[35];t1 = h + E1(e) + ch(e,f,g) + K[51] + W[51];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[52] = O1(W[50]) + W[45] + O0(W[37]) + W[36];t1 = h + E1(e) + ch(e,f,g) + K[52] + W[52];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[53] = O1(W[51]) + W[46] + O0(W[38]) + W[37];t1 = h + E1(e) + ch(e,f,g) + K[53] + W[53];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[54] = O1(W[52]) + W[47] + O0(W[39]) + W[38];t1 = h + E1(e) + ch(e,f,g) + K[54] + W[54];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[55] = O1(W[53]) + W[48] + O0(W[40]) + W[39];t1 = h + E1(e) + ch(e,f,g) + K[55] + W[55];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[56] = O1(W[54]) + W[49] + O0(W[41]) + W[40];t1 = h + E1(e) + ch(e,f,g) + K[56] + W[56];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[57] = O1(W[55]) + W[50] + O0(W[42]) + W[41];t1 = h + E1(e) + ch(e,f,g) + K[57] + W[57];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[58] = O1(W[56]) + W[51] + O0(W[43]) + W[42];t1 = h + E1(e) + ch(e,f,g) + K[58] + W[58];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[59] = O1(W[57]) + W[52] + O0(W[44]) + W[43];t1 = h + E1(e) + ch(e,f,g) + K[59] + W[59];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[60] = O1(W[58]) + W[53] + O0(W[45]) + W[44];t1 = h + E1(e) + ch(e,f,g) + K[60] + W[60];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[61] = O1(W[59]) + W[54] + O0(W[46]) + W[45];t1 = h + E1(e) + ch(e,f,g) + K[61] + W[61];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[62] = O1(W[60]) + W[55] + O0(W[47]) + W[46];t1 = h + E1(e) + ch(e,f,g) + K[62] + W[62];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[63] = O1(W[61]) + W[56] + O0(W[48]) + W[47];t1 = h + E1(e) + ch(e,f,g) + K[63] + W[63];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;

W[0]=a+=Last[0];
W[1]=b+=Last[1];
W[2]=c+=Last[2];
W[3]=d+=Last[3];
W[4]=e+=Last[4];
W[5]=f+=Last[5];
W[6]=g+=Last[6];
W[7]=h+=Last[7];

W[8]=paddy[12];

// W[9]=paddy[13];
// W[10]=paddy[14];
// W[11]=paddy[15];
// W[12]=paddy[16];
// W[13]=paddy[17];
// W[14]=paddy[18];
W[15]=paddy[19];

// a=initH[0]; copies below can be avoided TODO
// b=initH[1];
// c=initH[2];
// d=initH[3];
// e=initH[4];
//f=initH[5];
// g=initH[6];
// h=initH[7];

/* __constant uint paddy[24] = { as a lot of these are 0's we can save some additions of 0
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00800000, 0x00000000, 0x000005A8,
0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100
values 0-7, 10, 13, 14, 15, 16, 17, 18 are all zeros and can be reomved from below TODO***
*/

t1 = initH[7] + E1(initH[4]) + ch(initH[4],initH[5],initH[6]) + K[0] + W[0];t2 = E0(initH[0]) + Ma(initH[0],initH[1],initH[2]); h=initH[6];g=initH[5];f=initH[4];e=initH[3]+t1;d=initH[2];c=initH[1];b=initH[0];a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[1] + W[1];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[2] + W[2];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[3] + W[3];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[4] + W[4];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[5] + W[5];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[6] + W[6];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[7] + W[7];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[8] + paddy[12];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[9];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[10];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[11];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[12];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[13];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[14];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
t1 = h + E1(e) + ch(e,f,g) + K[15] + paddy[19];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[16] = O0(W[1]) + W[0];t1 = h + E1(e) + ch(e,f,g) + K[16] + W[16];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[17] = O1(paddy[19]) + O0(W[2]) + W[1];t1 = h + E1(e) + ch(e,f,g) + K[17] + W[17];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[18] = O1(W[16]) + O0(W[3]) + W[2];t1 = h + E1(e) + ch(e,f,g) + K[18] + W[18];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[19] = O1(W[17]) + O0(W[4]) + W[3];t1 = h + E1(e) + ch(e,f,g) + K[19] + W[19];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[20] = O1(W[18]) + O0(W[5]) + W[4];t1 = h + E1(e) + ch(e,f,g) + K[20] + W[20];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[21] = O1(W[19]) + O0(W[6]) + W[5];t1 = h + E1(e) + ch(e,f,g) + K[21] + W[21];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[22] = O1(W[20]) + paddy[19] + O0(W[7]) + W[6];t1 = h + E1(e) + ch(e,f,g) + K[22] + W[22];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[23] = O1(W[21]) + W[16] + O0(paddy[12]) + W[7];t1 = h + E1(e) + ch(e,f,g) + K[23] + W[23];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[24] = O1(W[22]) + W[17] + paddy[12];t1 = h + E1(e) + ch(e,f,g) + K[24] + W[24];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[25] = O1(W[23]) + W[18] ;t1 = h + E1(e) + ch(e,f,g) + K[25] + W[25];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[26] = O1(W[24]) + W[19] ;t1 = h + E1(e) + ch(e,f,g) + K[26] + W[26];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[27] = O1(W[25]) + W[20];t1 = h + E1(e) + ch(e,f,g) + K[27] + W[27];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[28] = O1(W[26]) + W[21] ;t1 = h + E1(e) + ch(e,f,g) + K[28] + W[28];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[29] = O1(W[27]) + W[22] ;t1 = h + E1(e) + ch(e,f,g) + K[29] + W[29];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[30] = O1(W[28]) + W[23] + O0(paddy[19]);t1 = h + E1(e) + ch(e,f,g) + K[30] + W[30];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[31] = O1(W[29]) + W[24] + O0(W[16]) + paddy[19];t1 = h + E1(e) + ch(e,f,g) + K[31] + W[31];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[32] = O1(W[30]) + W[25] + O0(W[17]) + W[16];t1 = h + E1(e) + ch(e,f,g) + K[32] + W[32];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[33] = O1(W[31]) + W[26] + O0(W[18]) + W[17];t1 = h + E1(e) + ch(e,f,g) + K[33] + W[33];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[34] = O1(W[32]) + W[27] + O0(W[19]) + W[18];t1 = h + E1(e) + ch(e,f,g) + K[34] + W[34];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[35] = O1(W[33]) + W[28] + O0(W[20]) + W[19];t1 = h + E1(e) + ch(e,f,g) + K[35] + W[35];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[36] = O1(W[34]) + W[29] + O0(W[21]) + W[20];t1 = h + E1(e) + ch(e,f,g) + K[36] + W[36];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[37] = O1(W[35]) + W[30] + O0(W[22]) + W[21];t1 = h + E1(e) + ch(e,f,g) + K[37] + W[37];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[38] = O1(W[36]) + W[31] + O0(W[23]) + W[22];t1 = h + E1(e) + ch(e,f,g) + K[38] + W[38];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[39] = O1(W[37]) + W[32] + O0(W[24]) + W[23];t1 = h + E1(e) + ch(e,f,g) + K[39] + W[39];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[40] = O1(W[38]) + W[33] + O0(W[25]) + W[24];t1 = h + E1(e) + ch(e,f,g) + K[40] + W[40];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[41] = O1(W[39]) + W[34] + O0(W[26]) + W[25];t1 = h + E1(e) + ch(e,f,g) + K[41] + W[41];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[42] = O1(W[40]) + W[35] + O0(W[27]) + W[26];t1 = h + E1(e) + ch(e,f,g) + K[42] + W[42];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[43] = O1(W[41]) + W[36] + O0(W[28]) + W[27];t1 = h + E1(e) + ch(e,f,g) + K[43] + W[43];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[44] = O1(W[42]) + W[37] + O0(W[29]) + W[28];t1 = h + E1(e) + ch(e,f,g) + K[44] + W[44];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[45] = O1(W[43]) + W[38] + O0(W[30]) + W[29];t1 = h + E1(e) + ch(e,f,g) + K[45] + W[45];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[46] = O1(W[44]) + W[39] + O0(W[31]) + W[30];t1 = h + E1(e) + ch(e,f,g) + K[46] + W[46];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[47] = O1(W[45]) + W[40] + O0(W[32]) + W[31];t1 = h + E1(e) + ch(e,f,g) + K[47] + W[47];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[48] = O1(W[46]) + W[41] + O0(W[33]) + W[32];t1 = h + E1(e) + ch(e,f,g) + K[48] + W[48];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[49] = O1(W[47]) + W[42] + O0(W[34]) + W[33];t1 = h + E1(e) + ch(e,f,g) + K[49] + W[49];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[50] = O1(W[48]) + W[43] + O0(W[35]) + W[34];t1 = h + E1(e) + ch(e,f,g) + K[50] + W[50];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[51] = O1(W[49]) + W[44] + O0(W[36]) + W[35];t1 = h + E1(e) + ch(e,f,g) + K[51] + W[51];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[52] = O1(W[50]) + W[45] + O0(W[37]) + W[36];t1 = h + E1(e) + ch(e,f,g) + K[52] + W[52];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[53] = O1(W[51]) + W[46] + O0(W[38]) + W[37];t1 = h + E1(e) + ch(e,f,g) + K[53] + W[53];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[54] = O1(W[52]) + W[47] + O0(W[39]) + W[38];t1 = h + E1(e) + ch(e,f,g) + K[54] + W[54];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[55] = O1(W[53]) + W[48] + O0(W[40]) + W[39];t1 = h + E1(e) + ch(e,f,g) + K[55] + W[55];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[56] = O1(W[54]) + W[49] + O0(W[41]) + W[40];t1 = h + E1(e) + ch(e,f,g) + K[56] + W[56];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[57] = O1(W[55]) + W[50] + O0(W[42]) + W[41];t1 = h + E1(e) + ch(e,f,g) + K[57] + W[57];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[58] = O1(W[56]) + W[51] + O0(W[43]) + W[42];t1 = h + E1(e) + ch(e,f,g) + K[58] + W[58];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[59] = O1(W[57]) + W[52] + O0(W[44]) + W[43];t1 = h + E1(e) + ch(e,f,g) + K[59] + W[59];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[60] = O1(W[58]) + W[53] + O0(W[45]) + W[44];t1 = h + E1(e) + ch(e,f,g) + K[60] + W[60];t2 = E0(a) + Ma(a,b,c);
if (((d+t1) + initH[7]) == 0)
{
h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;

W[61] = O1(W[59]) + W[54] + O0(W[46]) + W[45];t1 = h + E1(e) + ch(e,f,g) + K[61] + W[61];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
// not sure of the endian so TODO here --->>> if (((d+t1) + initH[6]) <= target){
W[62] = O1(W[60]) + W[55] + O0(W[47]) + W[46];t1 = h + E1(e) + ch(e,f,g) + K[62] + W[62];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;
W[63] = O1(W[61]) + W[56] + O0(W[48]) + W[47];t1 = h + E1(e) + ch(e,f,g) + K[63] + W[63];t2 = E0(a) + Ma(a,b,c);h=g;g=f;f=e;e=d+t1;d=c;c=b;b=a;a=t1+t2;

a+=initH[0];
b+=initH[1];
c+=initH[2];
d+=initH[3];
e+=initH[4];
f+=initH[5];
g+=initH[6];
h+=initH[7]; 



#if defined(VECTORS2)||defined(VECTORS4)
if (any(h==0)) { // 32 zeros at least
    if (h.x==0)
    SETFOUND(nonce.x);
if (h.y==0)
    SETFOUND(nonce.y);
#if defined(VECTORS4)
    if (h.z==0)
    SETFOUND(nonce.z);
if(h.w ==0)
    SETFOUND(nonce.w);

#endif
}

#else
    if (h==0) { // 32 zeros at least
    SETFOUND(nonce);
}

#endif

};

}

'SHA256': is not a class or namespace name

I get this error in every line that starts with: SHA256::
so for example:

void SHA256::transform(const unsigned char *message, unsigned int block_nb)

and

void SHA256::init()

Am I missing something?
I'm using Visual Studio 2017 by the way, not gcc (as I'm trying to incorporate your code in a little project of mine)

License?

What's the license of this code?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.