INNER CODE UNIT · C
Qround
dmitrystu/sboot_stm32 · src/chacha.c:38
static void Qround (uint32_t *s, uint32_t abcd) {
uint32_t A = s[(abcd >> 24) & 0x0F];
uint32_t B = s[(abcd >> 16) & 0x0F];
uint32_t C = s[(abcd >> 8 ) & 0x0F];
uint32_t D = s[(abcd >> 0 ) & 0x0F];
A += B; D ^= A; D = __rol32(D, 16);
C += D; B ^= C; B = __rol32(B, 12);
A += B; D ^= A; D = __rol32(D, 8);
C += D; B ^= C; B = __rol32(B, 7);
s[(abcd >> 24) & 0x0F] = A;
s[(abcd >> 16) & 0x0F] = B;
s[(abcd >> 8) & 0x0F] = C;
s[(abcd >> 0) & 0x0F] = D;
}