scripts/mkhash.c
/*
 * 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])
{
	static const uint32_t 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
	};
	uint32_t W[64];
	uint32_t S[8];
	int i;
#define S0(x)		(ROTR(x, 2) ^ ROTR(x, 13) ^ ROTR(x, 22))
#define S1(x)		(ROTR(x, 6) ^ ROTR(x, 11) ^ ROTR(x, 25))
#define s0(x)		(ROTR(x, 7) ^ ROTR(x, 18) ^ (x >> 3))
#define s1(x)		(ROTR(x, 17) ^ ROTR(x, 19) ^ (x >> 10))
#define RND(a, b, c, d, e, f, g, h, k)			\
	h += S1(e) + Ch(e, f, g) + k;			\
	d += h;						\
	h += S0(a) + Maj(a, b, c);
#define RNDr(S, W, i, ii)			\
	RND(S[(64 - i) % 8], S[(65 - i) % 8],	\
	    S[(66 - i) % 8], S[(67 - i) % 8],	\
	    S[(68 - i) % 8], S[(69 - i) % 8],	\
	    S[(70 - i) % 8], S[(71 - i) % 8],	\
	    W[i + ii] + K[i + ii])
#define MSCH(W, ii, i)				\
	W[i + ii + 16] = s1(W[i + ii + 14]) + W[i + ii + 9] + s0(W[i + ii + 1]) + W[i + ii]
	be32dec_vect(W, block, 64);
	memcpy(S, state, 32);
	for (i = 0; i < 64; i += 16) {
		RNDr(S, W, 0, i);
		RNDr(S, W, 1, i);
		RNDr(S, W, 2, i);
		RNDr(S, W, 3, i);
		RNDr(S, W, 4, i);
		RNDr(S, W, 5, i);
		RNDr(S, W, 6, i);
		RNDr(S, W, 7, i);
		RNDr(S, W, 8, i);
		RNDr(S, W, 9, i);
		RNDr(S, W, 10, i);
		RNDr(S, W, 11, i);
		RNDr(S, W, 12, i);
		RNDr(S, W, 13, i);
		RNDr(S, W, 14, i);
		RNDr(S, W, 15, i);
		if (i == 48)
			break;
		MSCH(W, 0, i);
		MSCH(W, 1, i);
		MSCH(W, 2, i);
		MSCH(W, 3, i);
		MSCH(W, 4, i);
		MSCH(W, 5, i);
		MSCH(W, 6, i);
		MSCH(W, 7, i);
		MSCH(W, 8, i);
		MSCH(W, 9, i);
		MSCH(W, 10, i);
		MSCH(W, 11, i);
		MSCH(W, 12, i);
		MSCH(W, 13, i);
		MSCH(W, 14, i);
		MSCH(W, 15, i);
	}
#undef S0
#undef s0
#undef S1
#undef s1
#undef RND
#undef RNDr
#undef MSCH
	for (i = 0; i < 8; i++)
		state[i] += S[i];
}
static void SHA256_Transform ( uint32_t * state , const unsigned char block [ 64 ] ) { static const uint32_t 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 } ; uint32_t W [ 64 ] ; uint32_t S [ 8 ] ; int i ; #define S0 ( x ) 		(ROTR(x, 2) ^ ROTR(x, 13) ^ ROTR(x, 22)) #define S1 ( x ) 		(ROTR(x, 6) ^ ROTR(x, 11) ^ ROTR(x, 25)) #define s0 ( x ) 		(ROTR(x, 7) ^ ROTR(x, 18) ^ (x >> 3)) #define s1 ( x ) 		(ROTR(x, 17) ^ ROTR(x, 19) ^ (x >> 10)) #define RND ( a , b , c , d , e , f , g , h , k ) 			\
	h += S1(e) + Ch(e, f, g) + k;			\
	d += h;						\
	h += S0(a) + Maj(a, b, c); #define RNDr ( S , W , i , ii ) 			\
	RND(S[(64 - i) % 8], S[(65 - i) % 8],	\
	    S[(66 - i) % 8], S[(67 - i) % 8],	\
	    S[(68 - i) % 8], S[(69 - i) % 8],	\
	    S[(70 - i) % 8], S[(71 - i) % 8],	\
	    W[i + ii] + K[i + ii]) #define MSCH ( W , ii , i ) 				\
	W[i + ii + 16] = s1(W[i + ii + 14]) + W[i + ii + 9] + s0(W[i + ii + 1]) + W[i + ii] be32dec_vect ( W , block , 64 ) ; memcpy ( S , state , 32 ) ; for ( i = 0 ; i < 64 ; i += 16 ) { RNDr ( S , W , 0 , i ) ; RNDr ( S , W , 1 , i ) ; RNDr ( S , W , 2 , i ) ; RNDr ( S , W , 3 , i ) ; RNDr ( S , W , 4 , i ) ; RNDr ( S , W , 5 , i ) ; RNDr ( S , W , 6 , i ) ; RNDr ( S , W , 7 , i ) ; RNDr ( S , W , 8 , i ) ; RNDr ( S , W , 9 , i ) ; RNDr ( S , W , 10 , i ) ; RNDr ( S , W , 11 , i ) ; RNDr ( S , W , 12 , i ) ; RNDr ( S , W , 13 , i ) ; RNDr ( S , W , 14 , i ) ; RNDr ( S , W , 15 , i ) ; if ( i == 48 ) break ; MSCH ( W , 0 , i ) ; MSCH ( W , 1 , i ) ; MSCH ( W , 2 , i ) ; MSCH ( W , 3 , i ) ; MSCH ( W , 4 , i ) ; MSCH ( W , 5 , i ) ; MSCH ( W , 6 , i ) ; MSCH ( W , 7 , i ) ; MSCH ( W , 8 , i ) ; MSCH ( W , 9 , i ) ; MSCH ( W , 10 , i ) ; MSCH ( W , 11 , i ) ; MSCH ( W , 12 , i ) ; MSCH ( W , 13 , i ) ; MSCH ( W , 14 , i ) ; MSCH ( W , 15 , i ) ; } #undef  S0 #undef  s0 #undef  S1 #undef  s1 #undef  RND #undef  RNDr #undef  MSCH for ( i = 0 ; i < 8 ; i ++ ) state [ i ] += S [ i ] ; }
SHA256 block compression function.
SHA256 block compression function .
/* SHA256 round constants. */ /* SHA256 round function */ /* Adjusted round function for rotating state */ /* Message schedule computation */ /* 1. Prepare the first part of the message schedule W. */ /* 2. Initialize working variables. */ /* 3. Mix. */ /* 4. Mix local working variables into global state */