16#define ROL(a, offset) (((a) << (offset)) ^ ((a) >> (64 - (offset))))
20extern unsigned long long hash_cycles;
36static void keccak_absorb(uint64_t *s,
38 const uint8_t *m,
size_t mlen,
76static void keccak_squeezeblocks(uint8_t *h,
size_t nblocks,
99static void keccak_inc_init(uint64_t *s_inc) {
102 for (
i = 0;
i < 25; ++
i) {
121static void keccak_inc_absorb(uint64_t *s_inc, uint32_t r,
const uint8_t *m,
124 while (mlen + s_inc[25] >= r) {
127 mlen -= (size_t)(r - s_inc[25]);
151static void keccak_inc_finalize(uint64_t *s_inc, uint32_t r, uint8_t
p) {
154 if(s_inc[25] == r-1){
178static void keccak_inc_squeeze(uint8_t *h,
size_t outlen,
179 uint64_t *s_inc, uint32_t r) {
181 if(outlen < s_inc[25])
215#ifdef PROFILE_HASHING
218 keccak_inc_init(state->
ctx);
219#ifdef PROFILE_HASHING
221 hash_cycles += (t1-t0);
226#ifdef PROFILE_HASHING
230#ifdef PROFILE_HASHING
232 hash_cycles += (t1-t0);
237#ifdef PROFILE_HASHING
241#ifdef PROFILE_HASHING
243 hash_cycles += (t1-t0);
248#ifdef PROFILE_HASHING
252#ifdef PROFILE_HASHING
254 hash_cycles += (t1-t0);
267#ifdef PROFILE_HASHING
270 keccak_inc_init(state->
ctx);
271#ifdef PROFILE_HASHING
273 hash_cycles += (t1-t0);
278#ifdef PROFILE_HASHING
282#ifdef PROFILE_HASHING
284 hash_cycles += (t1-t0);
289#ifdef PROFILE_HASHING
293#ifdef PROFILE_HASHING
295 hash_cycles += (t1-t0);
300#ifdef PROFILE_HASHING
304#ifdef PROFILE_HASHING
306 hash_cycles += (t1-t0);
322#ifdef PROFILE_HASHING
330 for (
i = 0;
i < 25;
i++)
340 sep[6] = cstm & 0xff;
349#ifdef PROFILE_HASHING
351 hash_cycles += (t1-t0);
359#ifdef PROFILE_HASHING
363#ifdef PROFILE_HASHING
365 hash_cycles += (t1-t0);
370void cshake128_simple(uint8_t *output,
size_t outlen, uint16_t cstm,
const uint8_t *in,
size_t inlen)
374#ifdef PROFILE_HASHING
378 keccak_inc_init(state.
ctx);
387 sep[6] = cstm & 0xff;
399#ifdef PROFILE_HASHING
401 hash_cycles += (t1-t0);
419#ifdef PROFILE_HASHING
423 for (
i = 0;
i < 25;
i++)
427#ifdef PROFILE_HASHING
429 hash_cycles += (t1-t0);
446#ifdef PROFILE_HASHING
450#ifdef PROFILE_HASHING
452 hash_cycles += (t1-t0);
456void shake128(uint8_t *output,
size_t outlen,
const uint8_t *input,
size_t inlen)
458#ifdef PROFILE_HASHING
463 keccak_inc_init(state.
ctx);
471#ifdef PROFILE_HASHING
473 hash_cycles += (t1-t0);
486#ifdef PROFILE_HASHING
490 for (
i = 0;
i < 25;
i++)
494#ifdef PROFILE_HASHING
496 hash_cycles += (t1-t0);
503#ifdef PROFILE_HASHING
507#ifdef PROFILE_HASHING
509 hash_cycles += (t1-t0);
524 const uint8_t *input,
size_t inlen)
526#ifdef PROFILE_HASHING
531 keccak_inc_init(state.
ctx);
539#ifdef PROFILE_HASHING
541 hash_cycles += (t1-t0);
563void sha3_256(uint8_t *output,
const uint8_t *input,
size_t inlen)
565#ifdef PROFILE_HASHING
569 keccak_inc_init(state.
ctx);
577#ifdef PROFILE_HASHING
579 hash_cycles += (t1-t0);
583#ifdef PROFILE_HASHING
586 keccak_inc_init(state->
ctx);
587#ifdef PROFILE_HASHING
589 hash_cycles += (t1-t0);
594#ifdef PROFILE_HASHING
598#ifdef PROFILE_HASHING
600 hash_cycles += (t1-t0);
605#ifdef PROFILE_HASHING
613 for (
size_t i = 0;
i < 32;
i++) {
616#ifdef PROFILE_HASHING
618 hash_cycles += (t1-t0);
631#ifdef PROFILE_HASHING
634 keccak_inc_init(state->
ctx);
635#ifdef PROFILE_HASHING
637 hash_cycles += (t1-t0);
642#ifdef PROFILE_HASHING
646#ifdef PROFILE_HASHING
648 hash_cycles += (t1-t0);
653#ifdef PROFILE_HASHING
661 for (
size_t i = 0;
i < 48;
i++) {
664#ifdef PROFILE_HASHING
666 hash_cycles += (t1-t0);
687void sha3_384(uint8_t *output,
const uint8_t *input,
size_t inlen) {
688#ifdef PROFILE_HASHING
692 keccak_inc_init(state.
ctx);
700#ifdef PROFILE_HASHING
702 hash_cycles += (t1-t0);
714void sha3_512(uint8_t *output,
const uint8_t *input,
size_t inlen)
716#ifdef PROFILE_HASHING
720 keccak_inc_init(state.
ctx);
728#ifdef PROFILE_HASHING
730 hash_cycles += (t1-t0);
734#ifdef PROFILE_HASHING
737 keccak_inc_init(state->
ctx);
738#ifdef PROFILE_HASHING
740 hash_cycles += (t1-t0);
745#ifdef PROFILE_HASHING
749#ifdef PROFILE_HASHING
751 hash_cycles += (t1-t0);
756#ifdef PROFILE_HASHING
764 for (
size_t i = 0;
i < 64;
i++) {
767#ifdef PROFILE_HASHING
769 hash_cycles += (t1-t0);
785#ifdef PROFILE_HASHING
791 for (
i = 0;
i < 25;
i++)
801 sep[6] = cstm & 0xff;
809#ifdef PROFILE_HASHING
811 hash_cycles += (t1-t0);
818#ifdef PROFILE_HASHING
822#ifdef PROFILE_HASHING
824 hash_cycles += (t1-t0);
829void cshake256_simple(uint8_t *output,
size_t outlen, uint16_t cstm,
const uint8_t *in,
size_t inlen)
833 #ifdef PROFILE_HASHING
838 keccak_inc_init(state.
ctx);
847 sep[6] = cstm & 0xff;
859#ifdef PROFILE_HASHING
861 hash_cycles += (t1-t0);
void cshake128_simple_absorb(shake128ctx *state, uint16_t cstm, const uint8_t *in, size_t inlen)
void sha3_256_inc_ctx_clone(sha3_256incctx *dest, const sha3_256incctx *src)
void shake256(uint8_t *output, size_t outlen, const uint8_t *input, size_t inlen)
void shake256_ctx_release(shake256ctx *state)
void shake256_inc_finalize(shake256incctx *state)
void cshake256_simple_absorb(shake256ctx *state, uint16_t cstm, const uint8_t *in, size_t inlen)
void sha3_384_inc_ctx_release(sha3_384incctx *state)
void shake128_inc_init(shake128incctx *state)
void shake128_inc_absorb(shake128incctx *state, const uint8_t *input, size_t inlen)
void shake128_inc_squeeze(uint8_t *output, size_t outlen, shake128incctx *state)
void sha3_512_inc_init(sha3_512incctx *state)
void sha3_256_inc_absorb(sha3_256incctx *state, const uint8_t *input, size_t inlen)
void sha3_384(uint8_t *output, const uint8_t *input, size_t inlen)
void sha3_512_inc_absorb(sha3_512incctx *state, const uint8_t *input, size_t inlen)
void shake128_inc_ctx_clone(shake128incctx *dest, const shake128incctx *src)
void sha3_512_inc_ctx_clone(sha3_512incctx *dest, const sha3_512incctx *src)
void cshake256_simple(uint8_t *output, size_t outlen, uint16_t cstm, const uint8_t *in, size_t inlen)
void shake128_ctx_clone(shake128ctx *dest, const shake128ctx *src)
void shake128_inc_ctx_release(shake128incctx *state)
void shake128_inc_finalize(shake128incctx *state)
void shake256_squeezeblocks(uint8_t *output, size_t nblocks, shake256ctx *state)
void sha3_256_inc_finalize(uint8_t *output, sha3_256incctx *state)
void shake256_ctx_clone(shake256ctx *dest, const shake256ctx *src)
void shake128_absorb(shake128ctx *state, const uint8_t *input, size_t inlen)
void shake256_inc_ctx_clone(shake256incctx *dest, const shake256incctx *src)
void sha3_384_inc_ctx_clone(sha3_384incctx *dest, const sha3_384incctx *src)
void sha3_384_inc_init(sha3_384incctx *state)
void shake128_squeezeblocks(uint8_t *output, size_t nblocks, shake128ctx *state)
void sha3_512_inc_finalize(uint8_t *output, sha3_512incctx *state)
void sha3_384_inc_finalize(uint8_t *output, sha3_384incctx *state)
void cshake256_simple_squeezeblocks(uint8_t *output, size_t nblocks, shake256ctx *state)
void shake256_inc_ctx_release(shake256incctx *state)
void shake128(uint8_t *output, size_t outlen, const uint8_t *input, size_t inlen)
void shake256_inc_squeeze(uint8_t *output, size_t outlen, shake256incctx *state)
void sha3_256_inc_init(sha3_256incctx *state)
void sha3_512(uint8_t *output, const uint8_t *input, size_t inlen)
void sha3_512_inc_ctx_release(sha3_512incctx *state)
void sha3_384_inc_absorb(sha3_384incctx *state, const uint8_t *input, size_t inlen)
void shake256_inc_init(shake256incctx *state)
void shake128_ctx_release(shake128ctx *state)
void shake256_inc_absorb(shake256incctx *state, const uint8_t *input, size_t inlen)
void sha3_256(uint8_t *output, const uint8_t *input, size_t inlen)
void cshake128_simple_squeezeblocks(uint8_t *output, size_t nblocks, shake128ctx *state)
void cshake128_simple(uint8_t *output, size_t outlen, uint16_t cstm, const uint8_t *in, size_t inlen)
void sha3_256_inc_ctx_release(sha3_256incctx *state)
void shake256_absorb(shake256ctx *state, const uint8_t *input, size_t inlen)
void KeccakF1600_StateExtractBytes(uint64_t *state, unsigned char *data, unsigned int offset, unsigned int length)
void KeccakF1600_StateXORBytes(uint64_t *state, const unsigned char *data, unsigned int offset, unsigned int length)
void KeccakF1600_StatePermute(uint64_t *state)