sha3
Embeddable C11 SHA-3 implementation.
sha3.h
Go to the documentation of this file.
1
26#ifndef SHA3_H
27#define SHA3_H
28
29#ifdef __cplusplus
30extern "C" {
31#endif /* __cplusplus */
32
33#include <stddef.h> // size_t
34#include <stdint.h> // uint8_t, uint64_t
35
68typedef union {
69 uint8_t u8[200];
70 uint64_t u64[25];
72
80typedef struct {
81 size_t num_bytes;
83 _Bool finalized;
84} sha3_t;
85
93typedef struct {
94 size_t num_bytes;
96 _Bool squeezing;
98
117void sha3_224(const uint8_t *src, size_t len, uint8_t dst[static 28]);
118
129
147_Bool sha3_224_absorb(sha3_t *hash, const uint8_t *src, const size_t len);
148
160void sha3_224_final(sha3_t *hash, uint8_t dst[28]);
161
180void sha3_256(const uint8_t *src, size_t len, uint8_t dst[static 32]);
181
192
210_Bool sha3_256_absorb(sha3_t *hash, const uint8_t *src, const size_t len);
211
223void sha3_256_final(sha3_t *hash, uint8_t dst[32]);
224
243void sha3_384(const uint8_t *src, size_t len, uint8_t dst[static 48]);
244
255
273_Bool sha3_384_absorb(sha3_t *hash, const uint8_t *src, const size_t len);
274
286void sha3_384_final(sha3_t *hash, uint8_t dst[48]);
287
306void sha3_512(const uint8_t *src, size_t len, uint8_t dst[static 64]);
307
318
336_Bool sha3_512_absorb(sha3_t *hash, const uint8_t *src, const size_t len);
337
349void sha3_512_final(sha3_t *hash, uint8_t dst[64]);
350
393void hmac_sha3_224(const uint8_t *key, const size_t key_len, const uint8_t *msg, const size_t msg_len, uint8_t mac[28]);
394
418void hmac_sha3_256(const uint8_t *key, const size_t key_len, const uint8_t *msg, const size_t msg_len, uint8_t mac[32]);
419
443void hmac_sha3_384(const uint8_t *key, const size_t key_len, const uint8_t *msg, const size_t msg_len, uint8_t mac[48]);
444
468void hmac_sha3_512(const uint8_t *key, const size_t key_len, const uint8_t *msg, const size_t msg_len, uint8_t mac[64]);
469
478typedef struct {
481 _Bool finalized;
483
498void hmac_sha3_224_init(hmac_sha3_t *ctx, const uint8_t *key, const size_t key_len);
499
517_Bool hmac_sha3_224_absorb(hmac_sha3_t *ctx, const uint8_t *src, const size_t len);
518
533void hmac_sha3_224_final(hmac_sha3_t *ctx, uint8_t mac[28]);
534
549void hmac_sha3_256_init(hmac_sha3_t *ctx, const uint8_t *key, const size_t key_len);
550
568_Bool hmac_sha3_256_absorb(hmac_sha3_t *ctx, const uint8_t *src, const size_t len);
569
584void hmac_sha3_256_final(hmac_sha3_t *ctx, uint8_t mac[32]);
585
600void hmac_sha3_384_init(hmac_sha3_t *ctx, const uint8_t *key, const size_t key_len);
601
619_Bool hmac_sha3_384_absorb(hmac_sha3_t *ctx, const uint8_t *src, const size_t len);
620
635void hmac_sha3_384_final(hmac_sha3_t *ctx, uint8_t mac[48]);
636
651void hmac_sha3_512_init(hmac_sha3_t *ctx, const uint8_t *key, const size_t key_len);
652
670_Bool hmac_sha3_512_absorb(hmac_sha3_t *ctx, const uint8_t *src, const size_t len);
671
686void hmac_sha3_512_final(hmac_sha3_t *ctx, uint8_t mac[64]);
687
721void shake128(const uint8_t *msg, size_t len, uint8_t dst[static 16]);
722
741void shake256(const uint8_t *msg, size_t len, uint8_t dst[static 32]);
742
756
777_Bool shake128_xof_absorb(sha3_xof_t *xof, const uint8_t *msg, const size_t len);
778
797void shake128_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t len);
798
822void shake128_xof_once(const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
823
838
859_Bool shake256_xof_absorb(sha3_xof_t *xof, const uint8_t *msg, const size_t len);
860
879void shake256_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t len);
880
904void shake256_xof_once(const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
905
922typedef struct {
923 const uint8_t *name;
924 const size_t name_len;
925 const uint8_t *custom;
926 const size_t custom_len;
928
957void cshake128(const cshake_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
958
987void cshake256(const cshake_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
988
1013
1040_Bool cshake128_xof_absorb(sha3_xof_t *xof, const uint8_t *src, const size_t len);
1041
1066void cshake128_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t len);
1067
1094
1121_Bool cshake256_xof_absorb(sha3_xof_t *xof, const uint8_t *src, const size_t len);
1122
1147void cshake256_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t len);
1148
1165typedef struct {
1166 const uint8_t *key;
1167 const size_t key_len;
1168 const uint8_t *custom;
1169 const size_t custom_len;
1171
1198void kmac128(const kmac_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
1199
1226void kmac256(const kmac_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
1227
1255
1280_Bool kmac128_xof_absorb(sha3_xof_t *xof, const uint8_t *src, const size_t len);
1281
1309void kmac128_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t len);
1310
1343void kmac128_xof_once(const kmac_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
1344
1372
1397_Bool kmac256_xof_absorb(sha3_xof_t *xof, const uint8_t *src, const size_t len);
1398
1428void kmac256_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t len);
1429
1462void kmac256_xof_once(const kmac_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
1463
1485typedef struct {
1486 const uint8_t *ptr;
1487 size_t len;
1489
1494typedef struct {
1496 const size_t num_strs;
1497 const uint8_t *custom;
1498 const size_t custom_len;
1500
1522void tuplehash128(const tuplehash_params_t params, uint8_t *dst, const size_t len);
1523
1547void tuplehash256(const tuplehash_params_t params, uint8_t *dst, const size_t len);
1548
1576
1604void tuplehash128_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t len);
1605
1634void tuplehash128_xof_once(const tuplehash_params_t params, uint8_t *dst, const size_t len);
1635
1663
1691void tuplehash256_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t len);
1692
1721void tuplehash256_xof_once(const tuplehash_params_t params, uint8_t *dst, const size_t len);
1722
1738typedef struct {
1739 const size_t block_len;
1740 const uint8_t *custom;
1741 const size_t custom_len;
1743
1748typedef struct {
1751 size_t ofs,
1756
1782void parallelhash128(const parallelhash_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
1783
1811void parallelhash256(const parallelhash_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
1812
1840
1863void parallelhash128_xof_absorb(parallelhash_t *hash, const uint8_t *src, const size_t len);
1864
1892void parallelhash128_xof_squeeze(parallelhash_t *xof, uint8_t *dst, const size_t len);
1893
1925void parallelhash128_xof_once(const parallelhash_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
1926
1954
1977void parallelhash256_xof_absorb(parallelhash_t *xof, const uint8_t *src, const size_t len);
1978
2006void parallelhash256_xof_squeeze(parallelhash_t *xof, uint8_t *dst, const size_t len);
2007
2039void parallelhash256_xof_once(const parallelhash_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
2040
2071void turboshake128(const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
2072
2099void turboshake128_custom(const uint8_t pad, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
2100
2120void turboshake256(const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
2121
2146void turboshake256_custom(const uint8_t pad, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
2147
2155typedef struct {
2157 uint8_t pad;
2158} turboshake_t;
2159
2173
2193_Bool turboshake128_init_custom(turboshake_t *ts, const uint8_t pad);
2194
2215_Bool turboshake128_absorb(turboshake_t *ts, const uint8_t *src, const size_t len);
2216
2235void turboshake128_squeeze(turboshake_t *ts, uint8_t *dst, const size_t len);
2236
2250
2270_Bool turboshake256_init_custom(turboshake_t *ts, const uint8_t pad);
2271
2292_Bool turboshake256_absorb(turboshake_t *ts, const uint8_t *src, const size_t len);
2293
2312void turboshake256_squeeze(turboshake_t *ts, uint8_t *dst, const size_t len);
2313
2333typedef struct {
2335} k12_t;
2336
2353void k12_once(const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
2354
2374void k12_custom_once(const uint8_t *src, const size_t src_len, const uint8_t *custom, const size_t custom_len, uint8_t *dst, const size_t dst_len);
2375
2395void k12_init(k12_t *k12, const uint8_t *src, const size_t src_len, const uint8_t *custom, const size_t custom_len);
2396
2414void k12_squeeze(k12_t *k12, uint8_t *dst, const size_t len);
2415
2416#ifdef __cplusplus
2417}
2418#endif /* __cplusplus */
2419
2420#endif /* SHA3_H */
void cshake128_xof_init(sha3_xof_t *xof, const cshake_params_t params)
Initialize cSHAKE128 XOF context.
void cshake256(const cshake_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len)
Initialize cSHAKE256, absorb data, then squeeze bytes out.
void cshake256_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t len)
Squeeze bytes from cSHAKE256 XOF context.
_Bool cshake256_xof_absorb(sha3_xof_t *xof, const uint8_t *src, const size_t len)
Absorb data into cSHAKE256 XOF context.
void cshake128(const cshake_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len)
Initialize cSHAKE128, absorb data, then squeeze bytes out.
void cshake128_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t len)
Squeeze bytes from cSHAKE128 XOF context.
void cshake256_xof_init(sha3_xof_t *xof, const cshake_params_t params)
Initialize cSHAKE256 XOF context.
_Bool cshake128_xof_absorb(sha3_xof_t *xof, const uint8_t *src, const size_t len)
Absorb data into cSHAKE128 XOF context.
void hmac_sha3_512_init(hmac_sha3_t *ctx, const uint8_t *key, const size_t key_len)
Initialize HMAC-SHA3-512 (FIPS 202, Section 7) context.
_Bool hmac_sha3_512_absorb(hmac_sha3_t *ctx, const uint8_t *src, const size_t len)
Absorb data into HMAC-SHA3-512 context.
void hmac_sha3_512(const uint8_t *key, const size_t key_len, const uint8_t *msg, const size_t msg_len, uint8_t mac[64])
Calculate HMAC-SHA3-512 of given key and data.
void hmac_sha3_224(const uint8_t *key, const size_t key_len, const uint8_t *msg, const size_t msg_len, uint8_t mac[28])
Calculat HMAC-SHA3-224 of given key and data.
_Bool hmac_sha3_224_absorb(hmac_sha3_t *ctx, const uint8_t *src, const size_t len)
Absorb data into HMAC-SHA3-224 context.
_Bool hmac_sha3_256_absorb(hmac_sha3_t *ctx, const uint8_t *src, const size_t len)
Absorb data into HMAC-SHA3-256 context.
void hmac_sha3_512_final(hmac_sha3_t *ctx, uint8_t mac[64])
Finalize HMAC-SHA3-512 context and write 64 byte MAC to destination buffer.
void hmac_sha3_224_final(hmac_sha3_t *ctx, uint8_t mac[28])
Finalize HMAC-SHA3-224 context and write 28 byte MAC to destination buffer.
void hmac_sha3_256_final(hmac_sha3_t *ctx, uint8_t mac[32])
Finalize HMAC-SHA3-256 context and write 32 byte MAC to destination buffer.
void hmac_sha3_256(const uint8_t *key, const size_t key_len, const uint8_t *msg, const size_t msg_len, uint8_t mac[32])
Calculate HMAC-SHA3-256 given key and data.
void hmac_sha3_384_final(hmac_sha3_t *ctx, uint8_t mac[48])
Finalize HMAC-SHA3-384 context and write 48 byte MAC to destination buffer.
void hmac_sha3_224_init(hmac_sha3_t *ctx, const uint8_t *key, const size_t key_len)
Initialize HMAC-SHA3-224 (FIPS 202, Section 7) context.
_Bool hmac_sha3_384_absorb(hmac_sha3_t *ctx, const uint8_t *src, const size_t len)
Absorb data into HMAC-SHA3-384 context.
void hmac_sha3_384(const uint8_t *key, const size_t key_len, const uint8_t *msg, const size_t msg_len, uint8_t mac[48])
Calculate HMAC-SHA3-384 of given key and data.
void hmac_sha3_256_init(hmac_sha3_t *ctx, const uint8_t *key, const size_t key_len)
Initialize HMAC-SHA3-256 (FIPS 202, Section 7) context.
void hmac_sha3_384_init(hmac_sha3_t *ctx, const uint8_t *key, const size_t key_len)
Initialize HMAC-SHA3-384 (FIPS 202, Section 7) context.
void k12_once(const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len)
Absorb data into KangarooTwelve, then squeeze bytes out.
void k12_custom_once(const uint8_t *src, const size_t src_len, const uint8_t *custom, const size_t custom_len, uint8_t *dst, const size_t dst_len)
Absorb data into KangarooTwelve with customization string, then squeeze bytes out.
void k12_squeeze(k12_t *k12, uint8_t *dst, const size_t len)
Squeeze bytes from KangarooTwelve context.
void k12_init(k12_t *k12, const uint8_t *src, const size_t src_len, const uint8_t *custom, const size_t custom_len)
Initialize KangarooTwelve context.
void kmac128_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t len)
Squeeze data from KMAC128 XOF context.
void kmac256(const kmac_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len)
Absorb data into KMAC256, then squeeze bytes out.
void kmac256_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t len)
Squeeze data from KMAC256 XOF context.
void kmac256_xof_init(sha3_xof_t *xof, const kmac_params_t params)
Initialize KMAC256 XOF context.
_Bool kmac256_xof_absorb(sha3_xof_t *xof, const uint8_t *src, const size_t len)
Absorb data into KMAC256 XOF context.
_Bool kmac128_xof_absorb(sha3_xof_t *xof, const uint8_t *src, const size_t len)
Absorb data into KMAC128 XOF context.
void kmac256_xof_once(const kmac_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len)
Absorb data into KMAC256 XOF context, then squeeze bytes out.
void kmac128(const kmac_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len)
Absorb data into KMAC128, then squeeze bytes out.
void kmac128_xof_init(sha3_xof_t *xof, const kmac_params_t params)
Initialize KMAC128 XOF context.
void kmac128_xof_once(const kmac_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len)
Absorb data into KMAC128 XOF context, then squeeze bytes out.
void parallelhash256_xof_absorb(parallelhash_t *xof, const uint8_t *src, const size_t len)
Absorb data into a ParallelHash256 XOF context.
void parallelhash256_xof_once(const parallelhash_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len)
Absorb bytes into ParallelHash256 XOF, then squeeze bytes out.
void parallelhash128_xof_squeeze(parallelhash_t *xof, uint8_t *dst, const size_t len)
Squeeze bytes from a ParallelHash128 XOF context.
void parallelhash256_xof_init(parallelhash_t *xof, const parallelhash_params_t params)
Initialize a ParallelHash256 XOF context.
void parallelhash128(const parallelhash_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len)
Absorb data into ParallelHash128, then squeeze bytes out.
void parallelhash128_xof_once(const parallelhash_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len)
Absorb bytes into ParallelHash128 XOF, then squeeze bytes out.
void parallelhash128_xof_absorb(parallelhash_t *hash, const uint8_t *src, const size_t len)
Absorb data into a ParallelHash128 XOF context.
void parallelhash256_xof_squeeze(parallelhash_t *xof, uint8_t *dst, const size_t len)
Squeeze bytes from a ParallelHash256 XOF context.
void parallelhash128_xof_init(parallelhash_t *xof, const parallelhash_params_t params)
Initialize a ParallelHash128 XOF context.
void parallelhash256(const parallelhash_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len)
Absorb data into ParallelHash256, then squeeze bytes out.
void sha3_256_final(sha3_t *hash, uint8_t dst[32])
Finalize SHA3-256 hash context and write 32 bytes of output to destination buffer dst.
void sha3_384(const uint8_t *src, size_t len, uint8_t dst[static 48])
Calculate SHA3-384 hash of input data.
_Bool sha3_512_absorb(sha3_t *hash, const uint8_t *src, const size_t len)
Absorb input data into SHA3-512 hash context.
void sha3_224_final(sha3_t *hash, uint8_t dst[28])
Finalize SHA3-224 hash context and write 28 bytes of output to destination buffer dst.
void sha3_384_final(sha3_t *hash, uint8_t dst[48])
Finalize SHA3-384 hash context and write 48 bytes of output to destination buffer dst.
void sha3_256(const uint8_t *src, size_t len, uint8_t dst[static 32])
Calculate SHA3-256 hash of input data.
void sha3_224_init(sha3_t *hash)
Initialize SHA3-224 hash context.
void sha3_256_init(sha3_t *hash)
Initialize SHA3-256 hash context.
void sha3_224(const uint8_t *src, size_t len, uint8_t dst[static 28])
Calculate SHA3-224 hash of input data.
void sha3_512(const uint8_t *src, size_t len, uint8_t dst[static 64])
Calculate SHA3-512 hash of input data.
void sha3_512_final(sha3_t *hash, uint8_t dst[64])
Finalize SHA3-512 hash context and write 64 bytes of output to destination buffer dst.
void sha3_512_init(sha3_t *hash)
Initialize SHA3-512 hash context.
_Bool sha3_224_absorb(sha3_t *hash, const uint8_t *src, const size_t len)
Initialize SHA3-224 hash context.
_Bool sha3_384_absorb(sha3_t *hash, const uint8_t *src, const size_t len)
Absorb input data into SHA3-384 hash context.
_Bool sha3_256_absorb(sha3_t *hash, const uint8_t *src, const size_t len)
Absorb input data into SHA3-256 hash context.
void sha3_384_init(sha3_t *hash)
Initialize SHA3-384 hash context.
void shake128_xof_once(const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len)
Absorb data into SHAKE128 XOF, then squeeze bytes out.
void shake256(const uint8_t *msg, size_t len, uint8_t dst[static 32])
Hash data with SHAKE256.
void shake128(const uint8_t *msg, size_t len, uint8_t dst[static 16])
Hash data with SHAKE128.
void shake128_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t len)
Squeeze bytes from SHAKE128 XOF context.
void shake256_xof_once(const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len)
Absorb data into SHAKE256 XOF, then squeeze bytes out.
void shake128_xof_init(sha3_xof_t *const xof)
Initialize SHAKE128 extendable-output function (XOF) context.
_Bool shake256_xof_absorb(sha3_xof_t *xof, const uint8_t *msg, const size_t len)
Absorb data into SHAKE256 XOF context.
void shake256_xof_init(sha3_xof_t *xof)
Initialize SHAKE256 extendable-output function (XOF) context.
void shake256_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t len)
Squeeze bytes from SHAKE256 XOF context.
_Bool shake128_xof_absorb(sha3_xof_t *xof, const uint8_t *msg, const size_t len)
Absorb data into SHAKE128 XOF context.
void tuplehash256_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t len)
Squeeze bytes from a TupleHash256 XOF context.
void tuplehash256_xof_once(const tuplehash_params_t params, uint8_t *dst, const size_t len)
Absorb data into TupleHash256 XOF, then squeeze bytes out.
void tuplehash128_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t len)
Squeeze data from TupleHash128 XOF context.
void tuplehash128(const tuplehash_params_t params, uint8_t *dst, const size_t len)
Absorb tuple and customization string into TupleHash128, then squeeze bytes out.
void tuplehash256_xof_init(sha3_xof_t *xof, const tuplehash_params_t params)
Initialize a TupleHash256 XOF context.
void tuplehash128_xof_init(sha3_xof_t *xof, const tuplehash_params_t params)
Initialize a TupleHash128 XOF context.
void tuplehash128_xof_once(const tuplehash_params_t params, uint8_t *dst, const size_t len)
Absorb data into TupleHash128 XOF, then squeeze bytes out.
void tuplehash256(const tuplehash_params_t params, uint8_t *dst, const size_t len)
Absorb tuple and customization string into TupleHash256, then squeeze bytes out.
void turboshake256_custom(const uint8_t pad, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len)
Absorb bytes into TurboSHAKE256 XOF with custom padding byte, then squeeze bytes out.
_Bool turboshake256_absorb(turboshake_t *ts, const uint8_t *src, const size_t len)
Absorb data into TurboSHAKE256 XOF context.
void turboshake128_init(turboshake_t *ts)
Initialize TurboSHAKE128 XOF context.
void turboshake256_init(turboshake_t *ts)
Initialize TurboSHAKE256 XOF context.
_Bool turboshake256_init_custom(turboshake_t *ts, const uint8_t pad)
Initialize TurboSHAKE256 XOF context with custom padding byte.
_Bool turboshake128_absorb(turboshake_t *ts, const uint8_t *src, const size_t len)
Absorb data into TurboSHAKE128 XOF context.
void turboshake128_custom(const uint8_t pad, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len)
Absorb bytes into TurboSHAKE128 XOF with custom padding byte, then squeeze bytes out.
void turboshake128_squeeze(turboshake_t *ts, uint8_t *dst, const size_t len)
Squeeze bytes from TurboSHAKE128 XOF context.
void turboshake128(const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len)
Absorb bytes into TurboSHAKE128 XOF, then squeeze bytes out.
_Bool turboshake128_init_custom(turboshake_t *ts, const uint8_t pad)
Initialize TurboSHAKE128 XOF context with custom padding byte.
void turboshake256(const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len)
Absorb bytes into TurboSHAKE256 XOF, then squeeze bytes out.
void turboshake256_squeeze(turboshake_t *ts, uint8_t *dst, const size_t len)
Squeeze bytes from TurboSHAKE256 XOF context.
cSHAKE parameters.
Definition: sha3.h:922
const size_t custom_len
Definition: sha3.h:926
const uint8_t * custom
Definition: sha3.h:925
const size_t name_len
Definition: sha3.h:924
const uint8_t * name
Definition: sha3.h:923
HMAC-SHA3 (Hash-based Message Authentication Code) context (all members are private).
Definition: sha3.h:478
sha3_t outer
Definition: sha3.h:480
sha3_t inner
Definition: sha3.h:479
_Bool finalized
Definition: sha3.h:481
KangarooTwelve XOF context (all members are private).
Definition: sha3.h:2333
turboshake_t ts
Definition: sha3.h:2334
KMAC configuration parameters (key and customization string).
Definition: sha3.h:1165
const size_t key_len
Definition: sha3.h:1167
const size_t custom_len
Definition: sha3.h:1169
const uint8_t * key
Definition: sha3.h:1166
const uint8_t * custom
Definition: sha3.h:1168
ParallelHash configuration parameters.
Definition: sha3.h:1738
const size_t custom_len
Definition: sha3.h:1741
const uint8_t * custom
Definition: sha3.h:1740
const size_t block_len
Definition: sha3.h:1739
ParallelHash context (all members are private).
Definition: sha3.h:1748
sha3_xof_t curr_xof
Definition: sha3.h:1750
size_t num_blocks
Definition: sha3.h:1753
size_t block_len
Definition: sha3.h:1752
_Bool squeezing
Definition: sha3.h:1754
size_t ofs
Definition: sha3.h:1751
sha3_xof_t root_xof
Definition: sha3.h:1749
Iterative SHA-3 context (all members are private).
Definition: sha3.h:80
_Bool finalized
Definition: sha3.h:83
size_t num_bytes
Definition: sha3.h:81
sha3_state_t a
Definition: sha3.h:82
Iterative XOF context (all members are private).
Definition: sha3.h:93
sha3_state_t a
Definition: sha3.h:95
_Bool squeezing
Definition: sha3.h:96
size_t num_bytes
Definition: sha3.h:94
TupleHash configuration parameters.
Definition: sha3.h:1494
const tuplehash_str_t * strs
Definition: sha3.h:1495
const size_t num_strs
Definition: sha3.h:1496
const size_t custom_len
Definition: sha3.h:1498
const uint8_t * custom
Definition: sha3.h:1497
Individual element of TupleHash tuple.
Definition: sha3.h:1485
size_t len
Definition: sha3.h:1487
const uint8_t * ptr
Definition: sha3.h:1486
TurboShake XOF context (all members are private).
Definition: sha3.h:2155
uint8_t pad
Definition: sha3.h:2157
sha3_xof_t xof
Definition: sha3.h:2156
Internal SHA-3 state (all members are private).
Definition: sha3.h:68