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;
}

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…