Lines Matching +defs:bc +defs:c
1 /* $OpenBSD: sha3.c,v 1.16 2024/11/23 15:38:12 jsing Exp $ */
5 * Copyright (c) 2015 Markku-Juhani O. Saarinen
57 uint64_t t, bc[5];
67 bc[i] = st[i] ^ st[i + 5] ^ st[i + 10] ^ st[i + 15] ^ st[i + 20];
70 t = bc[(i + 4) % 5] ^ ROTL64(bc[(i + 1) % 5], 1);
79 bc[0] = st[j];
81 t = bc[0];
87 bc[i] = st[j + i];
89 st[j + i] ^= (~bc[(i + 1) % 5]) & bc[(i + 2) % 5];
101 sha3_init(sha3_ctx *c, int mdlen)
106 memset(c, 0, sizeof(*c));
108 c->mdlen = mdlen;
109 c->rsize = KECCAK_BYTE_WIDTH - 2 * mdlen;
115 sha3_update(sha3_ctx *c, const void *data, size_t len)
119 j = c->pt;
121 c->state.b[j++] ^= ((const uint8_t *) data)[i];
122 if (j >= c->rsize) {
123 sha3_keccakf(c->state.q);
127 c->pt = j;
133 sha3_final(void *md, sha3_ctx *c)
137 c->state.b[c->pt] ^= 0x06;
138 c->state.b[c->rsize - 1] ^= 0x80;
139 sha3_keccakf(c->state.q);
141 for (i = 0; i < c->mdlen; i++) {
142 ((uint8_t *) md)[i] = c->state.b[i];
150 shake_xof(sha3_ctx *c)
152 c->state.b[c->pt] ^= 0x1F;
153 c->state.b[c->rsize - 1] ^= 0x80;
154 sha3_keccakf(c->state.q);
155 c->pt = 0;
159 shake_out(sha3_ctx *c, void *out, size_t len)
163 j = c->pt;
165 if (j >= c->rsize) {
166 sha3_keccakf(c->state.q);
169 ((uint8_t *) out)[i] = c->state.b[j++];
171 c->pt = j;