deps/scrypt/sha256.cpp
/*
* SHA256 block compression function.  The 256-bit state is transformed via
* the 512-bit input block to produce a new state.
*/
SHA256 block compression function.  The 256-bit state is transformed via
the 512-bit input block to produce a new state.
SHA256 block compression function . The 256 - bit state is transformed via the 512 - bit input block to produce a new state .
static void
SHA256_Transform(uint32_t * state, const unsigned char block[64])
{
	uint32_t W[64];
	uint32_t S[8];
	uint32_t t0, t1;
	int i;
	be32dec_vect(W, block, 64);
	for (i = 16; i < 64; i++)
		W[i] = s1(W[i - 2]) + W[i - 7] + s0(W[i - 15]) + W[i - 16];
	memcpy(S, state, 32);
	RNDr(S, W, 0, 0x428a2f98);
	RNDr(S, W, 1, 0x71374491);
	RNDr(S, W, 2, 0xb5c0fbcf);
	RNDr(S, W, 3, 0xe9b5dba5);
	RNDr(S, W, 4, 0x3956c25b);
	RNDr(S, W, 5, 0x59f111f1);
	RNDr(S, W, 6, 0x923f82a4);
	RNDr(S, W, 7, 0xab1c5ed5);
	RNDr(S, W, 8, 0xd807aa98);
	RNDr(S, W, 9, 0x12835b01);
	RNDr(S, W, 10, 0x243185be);
	RNDr(S, W, 11, 0x550c7dc3);
	RNDr(S, W, 12, 0x72be5d74);
	RNDr(S, W, 13, 0x80deb1fe);
	RNDr(S, W, 14, 0x9bdc06a7);
	RNDr(S, W, 15, 0xc19bf174);
	RNDr(S, W, 16, 0xe49b69c1);
	RNDr(S, W, 17, 0xefbe4786);
	RNDr(S, W, 18, 0x0fc19dc6);
	RNDr(S, W, 19, 0x240ca1cc);
	RNDr(S, W, 20, 0x2de92c6f);
	RNDr(S, W, 21, 0x4a7484aa);
	RNDr(S, W, 22, 0x5cb0a9dc);
	RNDr(S, W, 23, 0x76f988da);
	RNDr(S, W, 24, 0x983e5152);
	RNDr(S, W, 25, 0xa831c66d);
	RNDr(S, W, 26, 0xb00327c8);
	RNDr(S, W, 27, 0xbf597fc7);
	RNDr(S, W, 28, 0xc6e00bf3);
	RNDr(S, W, 29, 0xd5a79147);
	RNDr(S, W, 30, 0x06ca6351);
	RNDr(S, W, 31, 0x14292967);
	RNDr(S, W, 32, 0x27b70a85);
	RNDr(S, W, 33, 0x2e1b2138);
	RNDr(S, W, 34, 0x4d2c6dfc);
	RNDr(S, W, 35, 0x53380d13);
	RNDr(S, W, 36, 0x650a7354);
	RNDr(S, W, 37, 0x766a0abb);
	RNDr(S, W, 38, 0x81c2c92e);
	RNDr(S, W, 39, 0x92722c85);
	RNDr(S, W, 40, 0xa2bfe8a1);
	RNDr(S, W, 41, 0xa81a664b);
	RNDr(S, W, 42, 0xc24b8b70);
	RNDr(S, W, 43, 0xc76c51a3);
	RNDr(S, W, 44, 0xd192e819);
	RNDr(S, W, 45, 0xd6990624);
	RNDr(S, W, 46, 0xf40e3585);
	RNDr(S, W, 47, 0x106aa070);
	RNDr(S, W, 48, 0x19a4c116);
	RNDr(S, W, 49, 0x1e376c08);
	RNDr(S, W, 50, 0x2748774c);
	RNDr(S, W, 51, 0x34b0bcb5);
	RNDr(S, W, 52, 0x391c0cb3);
	RNDr(S, W, 53, 0x4ed8aa4a);
	RNDr(S, W, 54, 0x5b9cca4f);
	RNDr(S, W, 55, 0x682e6ff3);
	RNDr(S, W, 56, 0x748f82ee);
	RNDr(S, W, 57, 0x78a5636f);
	RNDr(S, W, 58, 0x84c87814);
	RNDr(S, W, 59, 0x8cc70208);
	RNDr(S, W, 60, 0x90befffa);
	RNDr(S, W, 61, 0xa4506ceb);
	RNDr(S, W, 62, 0xbef9a3f7);
	RNDr(S, W, 63, 0xc67178f2);
	for (i = 0; i < 8; i++)
		state[i] += S[i];
	memset(W, 0, 256);
	memset(S, 0, 32);
	t0 = t1 = 0;
}
static void SHA256_Transform ( uint32_t * state , const unsigned char block [ 64 ] ) { uint32_t W [ 64 ] ; uint32_t S [ 8 ] ; uint32_t t0 , t1 ; int i ; be32dec_vect ( W , block , 64 ) ; for ( i = 16 ; i < 64 ; i ++ ) W [ i ] = s1 ( W [ i - 2 ] ) + W [ i - 7 ] + s0 ( W [ i - 15 ] ) + W [ i - 16 ] ; memcpy ( S , state , 32 ) ; RNDr ( S , W , 0 , 0x428a2f98 ) ; RNDr ( S , W , 1 , 0x71374491 ) ; RNDr ( S , W , 2 , 0xb5c0fbcf ) ; RNDr ( S , W , 3 , 0xe9b5dba5 ) ; RNDr ( S , W , 4 , 0x3956c25b ) ; RNDr ( S , W , 5 , 0x59f111f1 ) ; RNDr ( S , W , 6 , 0x923f82a4 ) ; RNDr ( S , W , 7 , 0xab1c5ed5 ) ; RNDr ( S , W , 8 , 0xd807aa98 ) ; RNDr ( S , W , 9 , 0x12835b01 ) ; RNDr ( S , W , 10 , 0x243185be ) ; RNDr ( S , W , 11 , 0x550c7dc3 ) ; RNDr ( S , W , 12 , 0x72be5d74 ) ; RNDr ( S , W , 13 , 0x80deb1fe ) ; RNDr ( S , W , 14 , 0x9bdc06a7 ) ; RNDr ( S , W , 15 , 0xc19bf174 ) ; RNDr ( S , W , 16 , 0xe49b69c1 ) ; RNDr ( S , W , 17 , 0xefbe4786 ) ; RNDr ( S , W , 18 , 0x0fc19dc6 ) ; RNDr ( S , W , 19 , 0x240ca1cc ) ; RNDr ( S , W , 20 , 0x2de92c6f ) ; RNDr ( S , W , 21 , 0x4a7484aa ) ; RNDr ( S , W , 22 , 0x5cb0a9dc ) ; RNDr ( S , W , 23 , 0x76f988da ) ; RNDr ( S , W , 24 , 0x983e5152 ) ; RNDr ( S , W , 25 , 0xa831c66d ) ; RNDr ( S , W , 26 , 0xb00327c8 ) ; RNDr ( S , W , 27 , 0xbf597fc7 ) ; RNDr ( S , W , 28 , 0xc6e00bf3 ) ; RNDr ( S , W , 29 , 0xd5a79147 ) ; RNDr ( S , W , 30 , 0x06ca6351 ) ; RNDr ( S , W , 31 , 0x14292967 ) ; RNDr ( S , W , 32 , 0x27b70a85 ) ; RNDr ( S , W , 33 , 0x2e1b2138 ) ; RNDr ( S , W , 34 , 0x4d2c6dfc ) ; RNDr ( S , W , 35 , 0x53380d13 ) ; RNDr ( S , W , 36 , 0x650a7354 ) ; RNDr ( S , W , 37 , 0x766a0abb ) ; RNDr ( S , W , 38 , 0x81c2c92e ) ; RNDr ( S , W , 39 , 0x92722c85 ) ; RNDr ( S , W , 40 , 0xa2bfe8a1 ) ; RNDr ( S , W , 41 , 0xa81a664b ) ; RNDr ( S , W , 42 , 0xc24b8b70 ) ; RNDr ( S , W , 43 , 0xc76c51a3 ) ; RNDr ( S , W , 44 , 0xd192e819 ) ; RNDr ( S , W , 45 , 0xd6990624 ) ; RNDr ( S , W , 46 , 0xf40e3585 ) ; RNDr ( S , W , 47 , 0x106aa070 ) ; RNDr ( S , W , 48 , 0x19a4c116 ) ; RNDr ( S , W , 49 , 0x1e376c08 ) ; RNDr ( S , W , 50 , 0x2748774c ) ; RNDr ( S , W , 51 , 0x34b0bcb5 ) ; RNDr ( S , W , 52 , 0x391c0cb3 ) ; RNDr ( S , W , 53 , 0x4ed8aa4a ) ; RNDr ( S , W , 54 , 0x5b9cca4f ) ; RNDr ( S , W , 55 , 0x682e6ff3 ) ; RNDr ( S , W , 56 , 0x748f82ee ) ; RNDr ( S , W , 57 , 0x78a5636f ) ; RNDr ( S , W , 58 , 0x84c87814 ) ; RNDr ( S , W , 59 , 0x8cc70208 ) ; RNDr ( S , W , 60 , 0x90befffa ) ; RNDr ( S , W , 61 , 0xa4506ceb ) ; RNDr ( S , W , 62 , 0xbef9a3f7 ) ; RNDr ( S , W , 63 , 0xc67178f2 ) ; for ( i = 0 ; i < 8 ; i ++ ) state [ i ] += S [ i ] ; memset ( W , 0 , 256 ) ; memset ( S , 0 , 32 ) ; t0 = t1 = 0 ; }
SHA256 block compression function.
SHA256 block compression function .
/* 1. Prepare message schedule W. */ /* 2. Initialize working variables. */ /* 3. Mix. */ /* 4. Mix local working variables into global state */ /* Clean the stack. */