My Project
sha3.h
Go to the documentation of this file.
1
22#ifndef SHA3_H
23#define SHA3_H
24
25#ifdef __cplusplus
26extern "C" {
27#endif /* __cplusplus */
28
29#include <stddef.h> // size_t
30#include <stdint.h> // uint8_t, uint64_t
31
61typedef union {
62 uint8_t u8[200];
63 uint64_t u64[25];
65
70typedef struct {
71 size_t num_bytes;
73 _Bool finalized;
74} sha3_t;
75
80typedef struct {
81 size_t num_bytes;
83 _Bool squeezing;
85
98void sha3_224(const uint8_t *src, size_t len, uint8_t dst[static 28]);
99
107
122_Bool sha3_224_absorb(sha3_t *hash, const uint8_t *src, const size_t len);
123
132void sha3_224_final(sha3_t *hash, uint8_t dst[28]);
133
146void sha3_256(const uint8_t *src, size_t len, uint8_t dst[static 32]);
147
155
170_Bool sha3_256_absorb(sha3_t *hash, const uint8_t *src, const size_t len);
171
180void sha3_256_final(sha3_t *hash, uint8_t dst[32]);
181
194void sha3_384(const uint8_t *src, size_t len, uint8_t dst[static 48]);
195
203
218_Bool sha3_384_absorb(sha3_t *hash, const uint8_t *src, const size_t len);
219
228void sha3_384_final(sha3_t *hash, uint8_t dst[48]);
229
242void sha3_512(const uint8_t *src, size_t len, uint8_t dst[static 64]);
243
251
266_Bool sha3_512_absorb(sha3_t *hash, const uint8_t *src, const size_t len);
267
276void sha3_512_final(sha3_t *hash, uint8_t dst[64]);
277
311void hmac_sha3_224(const uint8_t *k, const size_t k_len, const uint8_t *m, const size_t m_len, uint8_t dst[28]);
312
327void hmac_sha3_256(const uint8_t *k, const size_t k_len, const uint8_t *m, const size_t m_len, uint8_t dst[32]);
328
343void hmac_sha3_384(const uint8_t *k, const size_t k_len, const uint8_t *m, const size_t m_len, uint8_t dst[48]);
344
359void hmac_sha3_512(const uint8_t *k, const size_t k_len, const uint8_t *m, const size_t m_len, uint8_t dst[64]);
360
365typedef struct {
368 _Bool finalized;
370
379void hmac_sha3_224_init(hmac_sha3_t *hmac, const uint8_t *k, const size_t k_len);
380
395_Bool hmac_sha3_224_absorb(hmac_sha3_t *hmac, const uint8_t *src, const size_t len);
396
405void hmac_sha3_224_final(hmac_sha3_t *hmac, uint8_t dst[28]);
406
415void hmac_sha3_256_init(hmac_sha3_t *hmac, const uint8_t *k, const size_t k_len);
416
431_Bool hmac_sha3_256_absorb(hmac_sha3_t *hmac, const uint8_t *src, const size_t len);
432
441void hmac_sha3_256_final(hmac_sha3_t *hmac, uint8_t dst[32]);
442
451void hmac_sha3_384_init(hmac_sha3_t *hmac, const uint8_t *k, const size_t k_len);
452
467_Bool hmac_sha3_384_absorb(hmac_sha3_t *hmac, const uint8_t *src, const size_t len);
468
477void hmac_sha3_384_final(hmac_sha3_t *hmac, uint8_t dst[48]);
478
487void hmac_sha3_512_init(hmac_sha3_t *hmac, const uint8_t *k, const size_t k_len);
488
503_Bool hmac_sha3_512_absorb(hmac_sha3_t *hmac, const uint8_t *src, const size_t len);
504
513void hmac_sha3_512_final(hmac_sha3_t *hmac, uint8_t dst[64]);
514
541void shake128(const uint8_t *m, size_t m_len, uint8_t dst[static 16]);
542
555void shake256(const uint8_t *m, size_t m_len, uint8_t dst[static 32]);
556
564
579_Bool shake128_xof_absorb(sha3_xof_t *xof, const uint8_t *m, const size_t len);
580
593void shake128_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t dst_len);
594
608void shake128_xof_once(const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
609
617
632_Bool shake256_xof_absorb(sha3_xof_t *xof, const uint8_t *m, const size_t len);
633
646void shake256_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t dst_len);
647
661void shake256_xof_once(const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
662
679typedef struct {
680 const uint8_t *name;
681 const size_t name_len;
682 const uint8_t *custom;
683 const size_t custom_len;
685
706void cshake128(const cshake_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
707
728void cshake256(const cshake_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
729
745
764_Bool cshake128_xof_absorb(sha3_xof_t *xof, const uint8_t *src, const size_t len);
765
782void cshake128_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t len);
783
801
820_Bool cshake256_xof_absorb(sha3_xof_t *xof, const uint8_t *src, const size_t len);
821
838void cshake256_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t len);
839
856typedef struct {
857 const uint8_t *key;
858 const size_t key_len;
859 const uint8_t *custom;
860 const size_t custom_len;
862
879void kmac128(const kmac_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
880
897void kmac256(const kmac_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
898
916
930_Bool kmac128_xof_absorb(sha3_xof_t *xof, const uint8_t *src, const size_t len);
931
949void kmac128_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t len);
950
972void 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);
973
991
1005_Bool kmac256_xof_absorb(sha3_xof_t *xof, const uint8_t *src, const size_t len);
1006
1026void kmac256_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t len);
1027
1049void 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);
1050
1069typedef struct {
1070 const uint8_t *ptr;
1071 size_t len;
1073
1078typedef struct {
1080 const size_t num_strs;
1081 const uint8_t *custom;
1082 const size_t custom_len;
1084
1097void tuplehash128(const tuplehash_params_t params, uint8_t *dst, const size_t dst_len);
1098
1113void tuplehash256(const tuplehash_params_t params, uint8_t *dst, const size_t dst_len);
1114
1132
1150void tuplehash128_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t len);
1151
1170void tuplehash128_xof_once(const tuplehash_params_t params, uint8_t *dst, const size_t dst_len);
1171
1189
1207void tuplehash256_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t len);
1208
1227void tuplehash256_xof_once(const tuplehash_params_t params, uint8_t *dst, const size_t len);
1228
1244typedef struct {
1245 const size_t block_len;
1246 const uint8_t *custom;
1247 const size_t custom_len;
1249
1254typedef struct {
1257 size_t ofs,
1262
1282void parallelhash128(const parallelhash_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
1283
1304void parallelhash256(const parallelhash_params_t params, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
1305
1326
1342void parallelhash128_xof_absorb(parallelhash_t *hash, const uint8_t *src, const size_t len);
1343
1364void parallelhash128_xof_squeeze(parallelhash_t *xof, uint8_t *dst, const size_t len);
1365
1390void 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);
1391
1412
1428void parallelhash256_xof_absorb(parallelhash_t *hash, const uint8_t *src, const size_t len);
1429
1450void parallelhash256_xof_squeeze(parallelhash_t *xof, uint8_t *dst, const size_t len);
1451
1476void 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);
1477
1502void turboshake128(const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
1503
1523void turboshake128_custom(const uint8_t pad, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
1524
1538void turboshake256(const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
1539
1557void turboshake256_custom(const uint8_t pad, const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
1558
1563typedef struct {
1565 uint8_t pad;
1566} turboshake_t;
1567
1575
1589_Bool turboshake128_init_custom(turboshake_t *ts, const uint8_t pad);
1590
1605_Bool turboshake128_absorb(turboshake_t *ts, const uint8_t *src, const size_t len);
1606
1619void turboshake128_squeeze(turboshake_t *ts, uint8_t *dst, const size_t len);
1620
1628
1642_Bool turboshake256_init_custom(turboshake_t *ts, const uint8_t pad);
1643
1658_Bool turboshake256_absorb(turboshake_t *ts, const uint8_t *src, const size_t len);
1659
1672void turboshake256_squeeze(turboshake_t *ts, uint8_t *dst, const size_t len);
1673
1690typedef struct {
1692} k12_t;
1693
1707void k12_once(const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len);
1708
1725void 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);
1726
1744void k12_init(k12_t *k12, const uint8_t *src, const size_t src_len, const uint8_t *custom, const size_t custom_len);
1745
1761void k12_squeeze(k12_t *k12, uint8_t *dst, const size_t dst_len);
1762
1763#ifdef __cplusplus
1764}
1765#endif /* __cplusplus */
1766
1767#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_224(const uint8_t *k, const size_t k_len, const uint8_t *m, const size_t m_len, uint8_t dst[28])
Calculat HMAC-SHA3-224 of given key and data.
void hmac_sha3_512_final(hmac_sha3_t *hmac, uint8_t dst[64])
Finalize HMAC-SHA3-512 hash context and write 64 bytes of output to destination buffer dst.
void hmac_sha3_224_final(hmac_sha3_t *hmac, uint8_t dst[28])
Finalize HMAC-SHA3-224 hash context and write 28 bytes of output to destination buffer dst.
void hmac_sha3_512(const uint8_t *k, const size_t k_len, const uint8_t *m, const size_t m_len, uint8_t dst[64])
Calculate HMAC-SHA3-512 of given key and data.
void hmac_sha3_384_init(hmac_sha3_t *hmac, const uint8_t *k, const size_t k_len)
Initialize HMAC-SHA3-384 (FIPS 202, Section 7) context.
_Bool hmac_sha3_224_absorb(hmac_sha3_t *hmac, const uint8_t *src, const size_t len)
Absorb data into HMAC-SHA3-224 context.
void hmac_sha3_384(const uint8_t *k, const size_t k_len, const uint8_t *m, const size_t m_len, uint8_t dst[48])
void hmac_sha3_224_init(hmac_sha3_t *hmac, const uint8_t *k, const size_t k_len)
Initialize HMAC-SHA3-224 (FIPS 202, Section 7) context.
_Bool hmac_sha3_256_absorb(hmac_sha3_t *hmac, const uint8_t *src, const size_t len)
Absorb data into HMAC-SHA3-256 context.
_Bool hmac_sha3_384_absorb(hmac_sha3_t *hmac, const uint8_t *src, const size_t len)
Absorb data into HMAC-SHA3-384 context.
void hmac_sha3_256_init(hmac_sha3_t *hmac, const uint8_t *k, const size_t k_len)
Initialize HMAC-SHA3-256 (FIPS 202, Section 7) context.
void hmac_sha3_384_final(hmac_sha3_t *hmac, uint8_t dst[48])
Finalize HMAC-SHA3-384 hash context and write 48 bytes of output to destination buffer dst.
void hmac_sha3_256(const uint8_t *k, const size_t k_len, const uint8_t *m, const size_t m_len, uint8_t dst[32])
Calculate HMAC-SHA3-256 given key and data.
void hmac_sha3_256_final(hmac_sha3_t *hmac, uint8_t dst[32])
Finalize HMAC-SHA3-256 hash context and write 32 bytes of output to destination buffer dst.
void hmac_sha3_512_init(hmac_sha3_t *hmac, const uint8_t *k, const size_t k_len)
Initialize HMAC-SHA3-512 (FIPS 202, Section 7) context.
_Bool hmac_sha3_512_absorb(hmac_sha3_t *hmac, const uint8_t *src, const size_t len)
Absorb data into HMAC-SHA3-512 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 dst_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_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 parallelhash256_xof_absorb(parallelhash_t *hash, const uint8_t *src, const size_t len)
Absorb data into 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.
_Bool shake256_xof_absorb(sha3_xof_t *xof, const uint8_t *m, const size_t len)
Absorb data into SHAKE256 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.
_Bool shake128_xof_absorb(sha3_xof_t *xof, const uint8_t *m, const size_t len)
Absorb data into SHAKE128 XOF context.
void shake128(const uint8_t *m, size_t m_len, uint8_t dst[static 16])
Hash data with SHAKE128.
void shake128_xof_init(sha3_xof_t *const xof)
Initialize SHAKE128 extendable-output function (XOF) context.
void shake256(const uint8_t *m, size_t m_len, uint8_t dst[static 32])
Hash data with SHAKE256.
void shake256_xof_init(sha3_xof_t *xof)
Initialize SHAKE256 extendable-output function (XOF) context.
void shake128_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t dst_len)
Squeeze bytes from SHAKE128 XOF context.
void shake256_xof_squeeze(sha3_xof_t *xof, uint8_t *dst, const size_t dst_len)
Squeeze bytes from SHAKE256 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(const tuplehash_params_t params, uint8_t *dst, const size_t dst_len)
Absorb data into TupleHash256, then squeeze bytes out.
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(const tuplehash_params_t params, uint8_t *dst, const size_t dst_len)
Absorb data into TupleHash128, 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 tuplehash256_xof_init(sha3_xof_t *xof, const tuplehash_params_t params)
Initialize a TupleHash256 XOF context.
void tuplehash128_xof_once(const tuplehash_params_t params, uint8_t *dst, const size_t dst_len)
Absorb data into TupleHash128 XOF, then squeeze bytes out.
void tuplehash128_xof_init(sha3_xof_t *xof, const tuplehash_params_t params)
Initialize a TupleHash128 XOF context.
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 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 context.
void turboshake128_init(turboshake_t *ts)
Initialize TurboSHAKE128 context.
void turboshake256_init(turboshake_t *ts)
Initialize TurboSHAKE256 context.
_Bool turboshake256_init_custom(turboshake_t *ts, const uint8_t pad)
Initialize TurboSHAKE256 context with custom padding byte.
_Bool turboshake128_absorb(turboshake_t *ts, const uint8_t *src, const size_t len)
Absorb data into TurboSHAKE128 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 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 context.
void turboshake128(const uint8_t *src, const size_t src_len, uint8_t *dst, const size_t dst_len)
Absorb bytes into TurboSHAKE128, then squeeze bytes out.
_Bool turboshake128_init_custom(turboshake_t *ts, const uint8_t pad)
Initialize TurboSHAKE128 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, then squeeze bytes out.
void turboshake256_squeeze(turboshake_t *ts, uint8_t *dst, const size_t len)
Squeeze bytes from TurboSHAKE256 context.
cSHAKE parameters.
Definition: sha3.h:679
const size_t custom_len
Definition: sha3.h:683
const uint8_t * custom
Definition: sha3.h:682
const size_t name_len
Definition: sha3.h:681
const uint8_t * name
Definition: sha3.h:680
HMAC-SHA3 (Hash-based Message Authentication Code) context.
Definition: sha3.h:365
sha3_t outer
Definition: sha3.h:367
sha3_t inner
Definition: sha3.h:366
_Bool finalized
Definition: sha3.h:368
KangarooTwelve context.
Definition: sha3.h:1690
turboshake_t ts
Definition: sha3.h:1691
KMAC configuration parameters (key and customization string).
Definition: sha3.h:856
const size_t key_len
Definition: sha3.h:858
const size_t custom_len
Definition: sha3.h:860
const uint8_t * key
Definition: sha3.h:857
const uint8_t * custom
Definition: sha3.h:859
ParallelHash configuration parameters.
Definition: sha3.h:1244
const size_t custom_len
Definition: sha3.h:1247
const uint8_t * custom
Definition: sha3.h:1246
const size_t block_len
Definition: sha3.h:1245
ParallelHash context (all members are private).
Definition: sha3.h:1254
sha3_xof_t curr_xof
Definition: sha3.h:1256
size_t num_blocks
Definition: sha3.h:1259
size_t block_len
Definition: sha3.h:1258
_Bool squeezing
Definition: sha3.h:1260
size_t ofs
Definition: sha3.h:1257
sha3_xof_t root_xof
Definition: sha3.h:1255
Iterative SHA-3 context (all members are private).
Definition: sha3.h:70
_Bool finalized
Definition: sha3.h:73
size_t num_bytes
Definition: sha3.h:71
sha3_state_t a
Definition: sha3.h:72
Iterative XOF context (all members are private).
Definition: sha3.h:80
sha3_state_t a
Definition: sha3.h:82
_Bool squeezing
Definition: sha3.h:83
size_t num_bytes
Definition: sha3.h:81
TupleHash configuration parameters.
Definition: sha3.h:1078
const tuplehash_str_t * strs
Definition: sha3.h:1079
const size_t num_strs
Definition: sha3.h:1080
const size_t custom_len
Definition: sha3.h:1082
const uint8_t * custom
Definition: sha3.h:1081
TupleHash tuple element.
Definition: sha3.h:1069
size_t len
Definition: sha3.h:1071
const uint8_t * ptr
Definition: sha3.h:1070
TurboShake XOF context.
Definition: sha3.h:1563
uint8_t pad
Definition: sha3.h:1565
sha3_xof_t xof
Definition: sha3.h:1564
Internal SHA-3 state (all members are private).
Definition: sha3.h:61