|
sha3
Embeddable C11 SHA-3 implementation.
|
C11 implementation of FIPS 202, NIST SP 800-185, and the draft KangarooTwelve and TurboSHAKE specification. More...
#include <stddef.h>#include <stdint.h>
Go to the source code of this file.
Data Structures | |
| union | sha3_state_t |
| Internal SHA-3 state (all members are private). More... | |
| struct | sha3_t |
| Iterative SHA-3 context (all members are private). More... | |
| struct | sha3_xof_t |
| Iterative XOF context (all members are private). More... | |
| struct | hmac_sha3_t |
| HMAC-SHA3 (Hash-based Message Authentication Code) context (all members are private). More... | |
| struct | cshake_params_t |
| cSHAKE parameters. More... | |
| struct | kmac_params_t |
| KMAC configuration parameters (key and customization string). More... | |
| struct | tuplehash_str_t |
| Individual element of TupleHash tuple. More... | |
| struct | tuplehash_params_t |
| TupleHash configuration parameters. More... | |
| struct | parallelhash_params_t |
| ParallelHash configuration parameters. More... | |
| struct | parallelhash_t |
| ParallelHash context (all members are private). More... | |
| struct | sha3_xof12_t |
| Iterative XOF context (all members are private) for XOFs with 12 round permutations. More... | |
| struct | turboshake_t |
| TurboShake XOF context (all members are private). More... | |
| struct | k12_t |
| KangarooTwelve XOF context (all members are private). More... | |
Functions | |
| void | sha3_224 (const uint8_t *src, size_t len, uint8_t dst[static 28]) |
| Calculate SHA3-224 hash of input data. More... | |
| void | sha3_224_init (sha3_t *hash) |
| Initialize SHA3-224 hash context. More... | |
| _Bool | sha3_224_absorb (sha3_t *hash, const uint8_t *src, const size_t len) |
| Initialize SHA3-224 hash context. More... | |
| 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. More... | |
| void | sha3_256 (const uint8_t *src, size_t len, uint8_t dst[static 32]) |
| Calculate SHA3-256 hash of input data. More... | |
| void | sha3_256_init (sha3_t *hash) |
| Initialize SHA3-256 hash context. More... | |
| _Bool | sha3_256_absorb (sha3_t *hash, const uint8_t *src, const size_t len) |
| Absorb input data into SHA3-256 hash context. More... | |
| 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. More... | |
| void | sha3_384 (const uint8_t *src, size_t len, uint8_t dst[static 48]) |
| Calculate SHA3-384 hash of input data. More... | |
| void | sha3_384_init (sha3_t *hash) |
| Initialize SHA3-384 hash context. More... | |
| _Bool | sha3_384_absorb (sha3_t *hash, const uint8_t *src, const size_t len) |
| Absorb input data into SHA3-384 hash context. More... | |
| 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. More... | |
| void | sha3_512 (const uint8_t *src, size_t len, uint8_t dst[static 64]) |
| Calculate SHA3-512 hash of input data. More... | |
| void | sha3_512_init (sha3_t *hash) |
| Initialize SHA3-512 hash context. More... | |
| _Bool | sha3_512_absorb (sha3_t *hash, const uint8_t *src, const size_t len) |
| Absorb input data into SHA3-512 hash context. More... | |
| 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. More... | |
| void | shake128_init (sha3_xof_t *const xof) |
| Initialize SHAKE128 extendable-output function (XOF) context. More... | |
| _Bool | shake128_absorb (sha3_xof_t *xof, const uint8_t *msg, const size_t len) |
| Absorb data into SHAKE128 XOF context. More... | |
| void | shake128_squeeze (sha3_xof_t *xof, uint8_t *dst, const size_t len) |
| Squeeze bytes from SHAKE128 XOF context. More... | |
| void | shake128 (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. More... | |
| void | shake256_init (sha3_xof_t *xof) |
| Initialize SHAKE256 extendable-output function (XOF) context. More... | |
| _Bool | shake256_absorb (sha3_xof_t *xof, const uint8_t *msg, const size_t len) |
| Absorb data into SHAKE256 XOF context. More... | |
| void | shake256_squeeze (sha3_xof_t *xof, uint8_t *dst, const size_t len) |
| Squeeze bytes from SHAKE256 XOF context. More... | |
| void | shake256 (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. More... | |
| 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]) |
| Calculate HMAC-SHA3-224 of given key and data. More... | |
| 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. More... | |
| 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. More... | |
| 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. More... | |
| 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. More... | |
| _Bool | hmac_sha3_224_absorb (hmac_sha3_t *ctx, const uint8_t *src, const size_t len) |
| Absorb data into HMAC-SHA3-224 context. More... | |
| 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. More... | |
| 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. More... | |
| _Bool | hmac_sha3_256_absorb (hmac_sha3_t *ctx, const uint8_t *src, const size_t len) |
| Absorb data into HMAC-SHA3-256 context. More... | |
| 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. More... | |
| 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. More... | |
| _Bool | hmac_sha3_384_absorb (hmac_sha3_t *ctx, const uint8_t *src, const size_t len) |
| Absorb data into HMAC-SHA3-384 context. More... | |
| 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. More... | |
| 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. More... | |
| _Bool | hmac_sha3_512_absorb (hmac_sha3_t *ctx, const uint8_t *src, const size_t len) |
| Absorb data into HMAC-SHA3-512 context. More... | |
| 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. More... | |
| 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. More... | |
| 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. More... | |
| void | cshake128_xof_init (sha3_xof_t *xof, const cshake_params_t params) |
| Initialize cSHAKE128 XOF context. More... | |
| _Bool | cshake128_xof_absorb (sha3_xof_t *xof, const uint8_t *src, const size_t len) |
| Absorb data into cSHAKE128 XOF context. More... | |
| void | cshake128_xof_squeeze (sha3_xof_t *xof, uint8_t *dst, const size_t len) |
| Squeeze bytes from cSHAKE128 XOF context. More... | |
| void | cshake256_xof_init (sha3_xof_t *xof, const cshake_params_t params) |
| Initialize cSHAKE256 XOF context. More... | |
| _Bool | cshake256_xof_absorb (sha3_xof_t *xof, const uint8_t *src, const size_t len) |
| Absorb data into cSHAKE256 XOF context. More... | |
| void | cshake256_xof_squeeze (sha3_xof_t *xof, uint8_t *dst, const size_t len) |
| Squeeze bytes from cSHAKE256 XOF context. More... | |
| 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. More... | |
| 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. More... | |
| void | kmac128_xof_init (sha3_xof_t *xof, const kmac_params_t params) |
| Initialize KMAC128 XOF context. More... | |
| _Bool | kmac128_xof_absorb (sha3_xof_t *xof, const uint8_t *src, const size_t len) |
| Absorb data into KMAC128 XOF context. More... | |
| void | kmac128_xof_squeeze (sha3_xof_t *xof, uint8_t *dst, const size_t len) |
| Squeeze data from KMAC128 XOF context. More... | |
| 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. More... | |
| void | kmac256_xof_init (sha3_xof_t *xof, const kmac_params_t params) |
| Initialize KMAC256 XOF context. More... | |
| _Bool | kmac256_xof_absorb (sha3_xof_t *xof, const uint8_t *src, const size_t len) |
| Absorb data into KMAC256 XOF context. More... | |
| void | kmac256_xof_squeeze (sha3_xof_t *xof, uint8_t *dst, const size_t len) |
| Squeeze data from KMAC256 XOF context. More... | |
| 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. More... | |
| 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. More... | |
| 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. More... | |
| void | tuplehash128_xof_init (sha3_xof_t *xof, const tuplehash_params_t params) |
| Initialize a TupleHash128 XOF context. More... | |
| void | tuplehash128_xof_squeeze (sha3_xof_t *xof, uint8_t *dst, const size_t len) |
| Squeeze data from TupleHash128 XOF context. More... | |
| 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. More... | |
| void | tuplehash256_xof_init (sha3_xof_t *xof, const tuplehash_params_t params) |
| Initialize a TupleHash256 XOF context. More... | |
| void | tuplehash256_xof_squeeze (sha3_xof_t *xof, uint8_t *dst, const size_t len) |
| Squeeze bytes from a TupleHash256 XOF context. More... | |
| 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. More... | |
| 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. More... | |
| 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. More... | |
| void | parallelhash128_xof_init (parallelhash_t *xof, const parallelhash_params_t params) |
| Initialize a ParallelHash128 XOF context. More... | |
| void | parallelhash128_xof_absorb (parallelhash_t *hash, const uint8_t *src, const size_t len) |
| Absorb data into a ParallelHash128 XOF context. More... | |
| void | parallelhash128_xof_squeeze (parallelhash_t *xof, uint8_t *dst, const size_t len) |
| Squeeze bytes from a ParallelHash128 XOF context. More... | |
| 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. More... | |
| void | parallelhash256_xof_init (parallelhash_t *xof, const parallelhash_params_t params) |
| Initialize a ParallelHash256 XOF context. More... | |
| void | parallelhash256_xof_absorb (parallelhash_t *xof, const uint8_t *src, const size_t len) |
| Absorb data into a ParallelHash256 XOF context. More... | |
| void | parallelhash256_xof_squeeze (parallelhash_t *xof, uint8_t *dst, const size_t len) |
| Squeeze bytes from a ParallelHash256 XOF context. More... | |
| 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. More... | |
| 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. More... | |
| 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. More... | |
| 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. More... | |
| 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. More... | |
| void | turboshake128_init (turboshake_t *ts) |
| Initialize TurboSHAKE128 XOF context. More... | |
| _Bool | turboshake128_init_custom (turboshake_t *ts, const uint8_t pad) |
| Initialize TurboSHAKE128 XOF context with custom padding byte. More... | |
| _Bool | turboshake128_absorb (turboshake_t *ts, const uint8_t *src, const size_t len) |
| Absorb data into TurboSHAKE128 XOF context. More... | |
| void | turboshake128_squeeze (turboshake_t *ts, uint8_t *dst, const size_t len) |
| Squeeze bytes from TurboSHAKE128 XOF context. More... | |
| void | turboshake256_init (turboshake_t *ts) |
| Initialize TurboSHAKE256 XOF context. More... | |
| _Bool | turboshake256_init_custom (turboshake_t *ts, const uint8_t pad) |
| Initialize TurboSHAKE256 XOF context with custom padding byte. More... | |
| _Bool | turboshake256_absorb (turboshake_t *ts, const uint8_t *src, const size_t len) |
| Absorb data into TurboSHAKE256 XOF context. More... | |
| void | turboshake256_squeeze (turboshake_t *ts, uint8_t *dst, const size_t len) |
| Squeeze bytes from TurboSHAKE256 XOF context. More... | |
| 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. More... | |
| 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. More... | |
| 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. More... | |
| void | k12_squeeze (k12_t *k12, uint8_t *dst, const size_t len) |
| Squeeze bytes from KangarooTwelve context. More... | |
| const char * | sha3_backend (void) |
| Get name of backend. More... | |
C11 implementation of FIPS 202, NIST SP 800-185, and the draft KangarooTwelve and TurboSHAKE specification.
sha3 https://pablotron.org/sha3
Copyright (c) 2023, 2024 Paul Duncan SPDX-License-Identifier: MIT-0
Embeddable, dependency-free, MIT-0-licensed C11 implementation of the following SHA-3 hash functions, XOFs, and HMACs: