src/crypto/yescrypt/yescrypt-ref_c.h
/**
 * salsa20(B):
 * Apply the Salsa20 core to the provided block.
 */
Apply the Salsa20 core to the provided block.
Apply the Salsa20 core to the provided block .
void
salsa20(uint32_t B[16], uint32_t rounds)
{
	uint32_t x[16];
	size_t i;
	for (i = 0; i < 16; i++)
		x[i * 5 % 16] = B[i];
	for (i = 0; i < rounds; i += 2) {
#define R(a,b) (((a) << (b)) | ((a) >> (32 - (b))))
		x[ 4] ^= R(x[ 0]+x[12], 7);  x[ 8] ^= R(x[ 4]+x[ 0], 9);
		x[12] ^= R(x[ 8]+x[ 4],13);  x[ 0] ^= R(x[12]+x[ 8],18);
		x[ 9] ^= R(x[ 5]+x[ 1], 7);  x[13] ^= R(x[ 9]+x[ 5], 9);
		x[ 1] ^= R(x[13]+x[ 9],13);  x[ 5] ^= R(x[ 1]+x[13],18);
		x[14] ^= R(x[10]+x[ 6], 7);  x[ 2] ^= R(x[14]+x[10], 9);
		x[ 6] ^= R(x[ 2]+x[14],13);  x[10] ^= R(x[ 6]+x[ 2],18);
		x[ 3] ^= R(x[15]+x[11], 7);  x[ 7] ^= R(x[ 3]+x[15], 9);
		x[11] ^= R(x[ 7]+x[ 3],13);  x[15] ^= R(x[11]+x[ 7],18);
		x[ 1] ^= R(x[ 0]+x[ 3], 7);  x[ 2] ^= R(x[ 1]+x[ 0], 9);
		x[ 3] ^= R(x[ 2]+x[ 1],13);  x[ 0] ^= R(x[ 3]+x[ 2],18);
		x[ 6] ^= R(x[ 5]+x[ 4], 7);  x[ 7] ^= R(x[ 6]+x[ 5], 9);
		x[ 4] ^= R(x[ 7]+x[ 6],13);  x[ 5] ^= R(x[ 4]+x[ 7],18);
		x[11] ^= R(x[10]+x[ 9], 7);  x[ 8] ^= R(x[11]+x[10], 9);
		x[ 9] ^= R(x[ 8]+x[11],13);  x[10] ^= R(x[ 9]+x[ 8],18);
		x[12] ^= R(x[15]+x[14], 7);  x[13] ^= R(x[12]+x[15], 9);
		x[14] ^= R(x[13]+x[12],13);  x[15] ^= R(x[14]+x[13],18);
#undef R
	}
	for (i = 0; i < 16; i++)
		B[i] += x[i * 5 % 16];
}
void salsa20 ( uint32_t B [ 16 ] , uint32_t rounds ) { uint32_t x [ 16 ] ; size_t i ; for ( i = 0 ; i < 16 ; i ++ ) x [ i * 5 % 16 ] = B [ i ] ; for ( i = 0 ; i < rounds ; i += 2 ) { #define R ( a , b )  (((a) << (b)) | ((a) >> (32 - (b)))) x [ 4 ] ^= R ( x [ 0 ] + x [ 12 ] , 7 ) ; x [ 8 ] ^= R ( x [ 4 ] + x [ 0 ] , 9 ) ; x [ 12 ] ^= R ( x [ 8 ] + x [ 4 ] , 13 ) ; x [ 0 ] ^= R ( x [ 12 ] + x [ 8 ] , 18 ) ; x [ 9 ] ^= R ( x [ 5 ] + x [ 1 ] , 7 ) ; x [ 13 ] ^= R ( x [ 9 ] + x [ 5 ] , 9 ) ; x [ 1 ] ^= R ( x [ 13 ] + x [ 9 ] , 13 ) ; x [ 5 ] ^= R ( x [ 1 ] + x [ 13 ] , 18 ) ; x [ 14 ] ^= R ( x [ 10 ] + x [ 6 ] , 7 ) ; x [ 2 ] ^= R ( x [ 14 ] + x [ 10 ] , 9 ) ; x [ 6 ] ^= R ( x [ 2 ] + x [ 14 ] , 13 ) ; x [ 10 ] ^= R ( x [ 6 ] + x [ 2 ] , 18 ) ; x [ 3 ] ^= R ( x [ 15 ] + x [ 11 ] , 7 ) ; x [ 7 ] ^= R ( x [ 3 ] + x [ 15 ] , 9 ) ; x [ 11 ] ^= R ( x [ 7 ] + x [ 3 ] , 13 ) ; x [ 15 ] ^= R ( x [ 11 ] + x [ 7 ] , 18 ) ; x [ 1 ] ^= R ( x [ 0 ] + x [ 3 ] , 7 ) ; x [ 2 ] ^= R ( x [ 1 ] + x [ 0 ] , 9 ) ; x [ 3 ] ^= R ( x [ 2 ] + x [ 1 ] , 13 ) ; x [ 0 ] ^= R ( x [ 3 ] + x [ 2 ] , 18 ) ; x [ 6 ] ^= R ( x [ 5 ] + x [ 4 ] , 7 ) ; x [ 7 ] ^= R ( x [ 6 ] + x [ 5 ] , 9 ) ; x [ 4 ] ^= R ( x [ 7 ] + x [ 6 ] , 13 ) ; x [ 5 ] ^= R ( x [ 4 ] + x [ 7 ] , 18 ) ; x [ 11 ] ^= R ( x [ 10 ] + x [ 9 ] , 7 ) ; x [ 8 ] ^= R ( x [ 11 ] + x [ 10 ] , 9 ) ; x [ 9 ] ^= R ( x [ 8 ] + x [ 11 ] , 13 ) ; x [ 10 ] ^= R ( x [ 9 ] + x [ 8 ] , 18 ) ; x [ 12 ] ^= R ( x [ 15 ] + x [ 14 ] , 7 ) ; x [ 13 ] ^= R ( x [ 12 ] + x [ 15 ] , 9 ) ; x [ 14 ] ^= R ( x [ 13 ] + x [ 12 ] , 13 ) ; x [ 15 ] ^= R ( x [ 14 ] + x [ 13 ] , 18 ) ; #undef  R } for ( i = 0 ; i < 16 ; i ++ ) B [ i ] += x [ i * 5 % 16 ] ; }
salsa20(B):
 Apply the Salsa20 core to the provided block.
salsa20 ( B ) : Apply the Salsa20 core to the provided block .
/* SIMD unshuffle */ /* Operate on columns */ /* Operate on rows */ /* SIMD shuffle */