#define R(a,b) (((a) << (b)) | ((a) >> (32 - (b)))) void salsa10_specification(uint32 x[16],uint32 in[16]) { int i; for (i = 0;i < 16;++i) x[i] = in[i]; for (i = 10;i > 0;--i) { x[ 4] ^= R(x[ 0]+x[12], 6); x[ 8] ^= R(x[ 4]+x[ 0],17); x[12] += R(x[ 8]|x[ 4],16); x[ 0] += R(x[12]^x[ 8], 5); x[ 9] += R(x[ 5]|x[ 1], 8); x[13] += R(x[ 9]|x[ 5], 7); x[ 1] ^= R(x[13]+x[ 9],17); x[ 5] += R(x[ 1]^x[13],12); x[14] ^= R(x[10]+x[ 6], 7); x[ 2] += R(x[14]^x[10],15); x[ 6] ^= R(x[ 2]+x[14],13); x[10] ^= R(x[ 6]+x[ 2],15); x[ 3] += R(x[15]|x[11],20); x[ 7] ^= R(x[ 3]+x[15],16); x[11] += R(x[ 7]^x[ 3], 7); x[15] += R(x[11]^x[ 7], 8); x[ 1] += R(x[ 0]|x[ 3], 8)^i;x[ 2] ^= R(x[ 1]+x[ 0],14); x[ 3] ^= R(x[ 2]+x[ 1], 6); x[ 0] += R(x[ 3]^x[ 2],18); x[ 6] += R(x[ 5]^x[ 4], 8); x[ 7] += R(x[ 6]^x[ 5],12); x[ 4] += R(x[ 7]|x[ 6],13); x[ 5] ^= R(x[ 4]+x[ 7],15); x[11] ^= R(x[10]+x[ 9],18); x[ 8] += R(x[11]^x[10],11); x[ 9] ^= R(x[ 8]+x[11], 8); x[10] += R(x[ 9]|x[ 8], 6); x[12] += R(x[15]^x[14],17); x[13] ^= R(x[12]+x[15],15); x[14] += R(x[13]|x[12], 9); x[15] += R(x[14]^x[13], 7); } for (i = 0;i < 16;++i) x[i] += in[i]; }