56#if defined(QSC_SYSTEM_AVX_INTRINSICS)
57# include "intrinsics.h"
60QSC_CPLUSPLUS_ENABLED_START
121#define QSC_KECCAK_CSHAKE_DOMAIN_ID 0x04U
127#define QSC_KECCAK_KMAC_DOMAIN_ID 0x04U
133#define QSC_KECCAK_KPA_DOMAIN_ID 0x41U
139#define QSC_KECCAK_PERMUTATION_ROUNDS 24U
145#define QSC_KECCAK_PERMUTATION_MAX_ROUNDS 48U
151#define QSC_KECCAK_PERMUTATION_MIN_ROUNDS 12U
157#define QSC_KECCAK_SHA3_DOMAIN_ID 0x06U
163#define QSC_KECCAK_SHAKE_DOMAIN_ID 0x1FU
169#define QSC_KECCAK_STATE_BYTE_SIZE 200U
175#define QSC_KECCAK_128_RATE 168U
181#define QSC_KECCAK_256_RATE 136U
187#define QSC_KECCAK_512_RATE 72U
193#define QSC_KECCAK_STATE_SIZE 25U
199#define QSC_KECCAK_STATE_BYTE_SIZE 200U
205#define QSC_KMAC_256_KEY_SIZE 32U
211#define QSC_KMAC_512_KEY_SIZE 64U
217#define QSC_KECCAK_SCBKDF_DOMAIN_ID 0x42U
223#define QSC_SHA3_128_HASH_SIZE 16U
229#define QSC_SHA3_256_HASH_SIZE 32U
235#define QSC_SHA3_512_HASH_SIZE 64U
241#define QSC_SHAKE_256_KEY_SIZE 32U
247#define QSC_SHAKE512_KEY_SIZE 64U
585QSC_EXPORT_API void qsc_cshake128_compute(uint8_t* output,
size_t outlen,
const uint8_t* key,
size_t keylen,
const uint8_t* name,
size_t namelen,
const uint8_t* custom,
size_t custlen);
601QSC_EXPORT_API void qsc_cshake256_compute(uint8_t* output,
size_t outlen,
const uint8_t* key,
size_t keylen,
const uint8_t* name,
size_t namelen,
const uint8_t* custom,
size_t custlen);
617QSC_EXPORT_API void qsc_cshake512_compute(uint8_t* output,
size_t outlen,
const uint8_t* key,
size_t keylen,
const uint8_t* name,
size_t namelen,
const uint8_t* custom,
size_t custlen);
681QSC_EXPORT_API void qsc_kmac128_compute(uint8_t* output,
size_t outlen,
const uint8_t* message,
size_t msglen,
const uint8_t* key,
size_t keylen,
const uint8_t* custom,
size_t custlen);
746QSC_EXPORT_API void qsc_kmac256_compute(uint8_t* output,
size_t outlen,
const uint8_t* message,
size_t msglen,
const uint8_t* key,
size_t keylen,
const uint8_t* custom,
size_t custlen);
762QSC_EXPORT_API void qsc_kmac512_compute(uint8_t* output,
size_t outlen,
const uint8_t* message,
size_t msglen,
const uint8_t* key,
size_t keylen,
const uint8_t* custom,
size_t custlen);
807#if defined(QSC_SYSTEM_HAS_AVX2)
825 const uint8_t* inp0,
const uint8_t* inp1,
const uint8_t* inp2,
const uint8_t* inp3,
size_t inplen, uint8_t domain);
842 uint8_t* out0, uint8_t* out1, uint8_t* out2, uint8_t* out3,
size_t nblocks);
848#if defined(QSC_SYSTEM_HAS_AVX512)
870 const uint8_t* inp0,
const uint8_t* inp1,
const uint8_t* inp2,
const uint8_t* inp3,
871 const uint8_t* inp4,
const uint8_t* inp5,
const uint8_t* inp6,
const uint8_t* inp7,
size_t inplen, uint8_t domain);
888 uint8_t* out0, uint8_t* out1, uint8_t* out2, uint8_t* out3, uint8_t* out4,
889 uint8_t* out5, uint8_t* out6, uint8_t* out7,
size_t nblocks);
913 const uint8_t* inp0,
const uint8_t* inp1,
const uint8_t* inp2,
const uint8_t* inp3,
size_t inplen);
933 const uint8_t* inp0,
const uint8_t* inp1,
const uint8_t* inp2,
const uint8_t* inp3,
size_t inplen);
953 const uint8_t* inp0,
const uint8_t* inp1,
const uint8_t* inp2,
const uint8_t* inp3,
size_t inplen);
983 uint8_t* out4, uint8_t* out5, uint8_t* out6, uint8_t* out7,
size_t outlen,
984 const uint8_t* inp0,
const uint8_t* inp1,
const uint8_t* inp2,
const uint8_t* inp3,
985 const uint8_t* inp4,
const uint8_t* inp5,
const uint8_t* inp6,
const uint8_t* inp7,
size_t inplen);
1013 uint8_t* out4, uint8_t* out5, uint8_t* out6, uint8_t* out7,
size_t outlen,
1014 const uint8_t* inp0,
const uint8_t* inp1,
const uint8_t* inp2,
const uint8_t* inp3,
1015 const uint8_t* inp4,
const uint8_t* inp5,
const uint8_t* inp6,
const uint8_t* inp7,
size_t inplen);
1043 uint8_t* out4, uint8_t* out5, uint8_t* out6, uint8_t* out7,
size_t outlen,
1044 const uint8_t* inp0,
const uint8_t* inp1,
const uint8_t* inp2,
const uint8_t* inp3,
1045 const uint8_t* inp4,
const uint8_t* inp5,
const uint8_t* inp6,
const uint8_t* inp7,
size_t inplen);
1077 const uint8_t* key0,
const uint8_t* key1,
const uint8_t* key2,
const uint8_t* key3,
size_t keylen,
1078 const uint8_t* cst0,
const uint8_t* cst1,
const uint8_t* cst2,
const uint8_t* cst3,
size_t cstlen,
1079 const uint8_t* msg0,
const uint8_t* msg1,
const uint8_t* msg2,
const uint8_t* msg3,
size_t msglen);
1109 const uint8_t* key0,
const uint8_t* key1,
const uint8_t* key2,
const uint8_t* key3,
size_t keylen,
1110 const uint8_t* cst0,
const uint8_t* cst1,
const uint8_t* cst2,
const uint8_t* cst3,
size_t cstlen,
1111 const uint8_t* msg0,
const uint8_t* msg1,
const uint8_t* msg2,
const uint8_t* msg3,
size_t msglen);
1141 const uint8_t* key0,
const uint8_t* key1,
const uint8_t* key2,
const uint8_t* key3,
size_t keylen,
1142 const uint8_t* cst0,
const uint8_t* cst1,
const uint8_t* cst2,
const uint8_t* cst3,
size_t cstlen,
1143 const uint8_t* msg0,
const uint8_t* msg1,
const uint8_t* msg2,
const uint8_t* msg3,
size_t msglen);
1191 uint8_t* out4, uint8_t* out5, uint8_t* out6, uint8_t* out7,
size_t outlen,
1192 const uint8_t* key0,
const uint8_t* key1,
const uint8_t* key2,
const uint8_t* key3,
1193 const uint8_t* key4,
const uint8_t* key5,
const uint8_t* key6,
const uint8_t* key7,
size_t keylen,
1194 const uint8_t* cst0,
const uint8_t* cst1,
const uint8_t* cst2,
const uint8_t* cst3,
1195 const uint8_t* cst4,
const uint8_t* cst5,
const uint8_t* cst6,
const uint8_t* cst7,
size_t cstlen,
1196 const uint8_t* msg0,
const uint8_t* msg1,
const uint8_t* msg2,
const uint8_t* msg3,
1197 const uint8_t* msg4,
const uint8_t* msg5,
const uint8_t* msg6,
const uint8_t* msg7,
size_t msglen);
1243 uint8_t* out4, uint8_t* out5, uint8_t* out6, uint8_t* out7,
size_t outlen,
1244 const uint8_t* key0,
const uint8_t* key1,
const uint8_t* key2,
const uint8_t* key3,
1245 const uint8_t* key4,
const uint8_t* key5,
const uint8_t* key6,
const uint8_t* key7,
size_t keylen,
1246 const uint8_t* cst0,
const uint8_t* cst1,
const uint8_t* cst2,
const uint8_t* cst3,
1247 const uint8_t* cst4,
const uint8_t* cst5,
const uint8_t* cst6,
const uint8_t* cst7,
size_t cstlen,
1248 const uint8_t* msg0,
const uint8_t* msg1,
const uint8_t* msg2,
const uint8_t* msg3,
1249 const uint8_t* msg4,
const uint8_t* msg5,
const uint8_t* msg6,
const uint8_t* msg7,
size_t msglen);
1295 uint8_t* out4, uint8_t* out5, uint8_t* out6, uint8_t* out7,
size_t outlen,
1296 const uint8_t* key0,
const uint8_t* key1,
const uint8_t* key2,
const uint8_t* key3,
1297 const uint8_t* key4,
const uint8_t* key5,
const uint8_t* key6,
const uint8_t* key7,
size_t keylen,
1298 const uint8_t* cst0,
const uint8_t* cst1,
const uint8_t* cst2,
const uint8_t* cst3,
1299 const uint8_t* cst4,
const uint8_t* cst5,
const uint8_t* cst6,
const uint8_t* cst7,
size_t cstlen,
1300 const uint8_t* msg0,
const uint8_t* msg1,
const uint8_t* msg2,
const uint8_t* msg3,
1301 const uint8_t* msg4,
const uint8_t* msg5,
const uint8_t* msg6,
const uint8_t* msg7,
size_t msglen);
1303QSC_CPLUSPLUS_ENABLED_END
Contains common definitions for the Quantum Secure Cryptographic (QSC) library.
#define QSC_EXPORT_API
API export macro for Microsoft compilers when importing from a DLL.
Definition qsccommon.h:605
QSC_EXPORT_API void qsc_kmac256_compute(uint8_t *output, size_t outlen, const uint8_t *message, size_t msglen, const uint8_t *key, size_t keylen, const uint8_t *custom, size_t custlen)
Key a KMAC-256 instance and generate a MAC code. Short form api: processes the key and custom inputs ...
Definition sha3.c:4035
QSC_EXPORT_API void qsc_kmac_xof256_compute(uint8_t *kout, size_t koutlen, const uint8_t *x, size_t xlen, const uint8_t *kin, size_t kinlen, const uint8_t *s, size_t slen)
Key a KMAC-256 XOF instance and generate an output key. Short form api: processes the keyin,...
Definition sha3.c:4090
QSC_EXPORT_API void qsc_kmac_finalize(qsc_keccak_state *ctx, qsc_keccak_rate rate, uint8_t *output, size_t outlen)
The KMAC finalize function. Long form api: must be used in conjunction with the initialize and blocku...
Definition sha3.c:4061
QSC_EXPORT_API void qsc_keccak_incremental_squeeze(qsc_keccak_state *ctx, size_t rate, uint8_t *output, size_t outlen)
Extract an array of bytes from the Keccak state.
Definition sha3.c:1018
QSC_EXPORT_API void qsc_shake_256x4(uint8_t *out0, uint8_t *out1, uint8_t *out2, uint8_t *out3, size_t outlen, const uint8_t *inp0, const uint8_t *inp1, const uint8_t *inp2, const uint8_t *inp3, size_t inplen)
Process 4 SHAKE-256 instances simultaneously using SIMD instructions.
Definition sha3.c:4456
QSC_EXPORT_API void qsc_sha3_finalize(qsc_keccak_state *ctx, qsc_keccak_rate rate, uint8_t *output)
Finalize the message state and returns the hash value in output. Long form api: must be used in conju...
Definition sha3.c:3762
QSC_EXPORT_API void qsc_keccak_permute_p1600u(uint64_t *state)
The unrolled Keccak permute function. Internal function: Permutes the state array,...
Definition sha3.c:1427
QSC_EXPORT_API void qsc_kmac512_compute(uint8_t *output, size_t outlen, const uint8_t *message, size_t msglen, const uint8_t *key, size_t keylen, const uint8_t *custom, size_t custlen)
Key a KMAC-512 instance and generate a MAC code. Short form api: processes the key and custom inputs ...
Definition sha3.c:4048
QSC_EXPORT_API void qsc_keccak_incremental_absorb(qsc_keccak_state *ctx, uint32_t rate, const uint8_t *message, size_t msglen)
Absorb bytes into state incrementally.
Definition sha3.c:923
qsc_keccak_rate
The Keccak rate; determines which security strength is used by the function, 128, 256,...
Definition sha3.h:267
@ qsc_keccak_rate_256
Definition sha3.h:270
@ qsc_keccak_rate_128
Definition sha3.h:269
@ qsc_keccak_rate_512
Definition sha3.h:271
@ qsc_keccak_rate_none
Definition sha3.h:268
QSC_EXPORT_API void qsc_keccak_dispose(qsc_keccak_state *ctx)
Dispose of the Keccak state.
Definition sha3.c:865
QSC_EXPORT_API void qsc_sha3_update(qsc_keccak_state *ctx, qsc_keccak_rate rate, const uint8_t *message, size_t msglen)
Update SHA3 with message input. Long form api: must be used in conjunction with the initialize and fi...
Definition sha3.c:3794
QSC_EXPORT_API void qsc_keccak_permute_p1600c(uint64_t *state, size_t rounds)
The compact Keccak permute function. Internal function: Permutes the state array, can be used in exte...
Definition sha3.c:1110
QSC_EXPORT_API void qsc_shake_128x4(uint8_t *out0, uint8_t *out1, uint8_t *out2, uint8_t *out3, size_t outlen, const uint8_t *inp0, const uint8_t *inp1, const uint8_t *inp2, const uint8_t *inp3, size_t inplen)
Process 4 SHAKE-128 instances simultaneously using SIMD instructions.
Definition sha3.c:4396
QSC_EXPORT_API void qsc_keccak_initialize_state(qsc_keccak_state *ctx)
Initializes a Keccak state structure, must be called before message processing. Long form api: must b...
Definition sha3.c:3662
QSC_EXPORT_API void qsc_shake256_compute(uint8_t *output, size_t outlen, const uint8_t *key, size_t keylen)
Key a SHAKE-256 instance, and generate an array of pseudo-random bytes. Short form api: processes the...
Definition sha3.c:3824
#define QSC_KECCAK_STATE_SIZE
The Keccak SHA3 uint64 state array size.
Definition sha3.h:193
QSC_EXPORT_API void qsc_kmac_128x4(uint8_t *out0, uint8_t *out1, uint8_t *out2, uint8_t *out3, size_t outlen, const uint8_t *key0, const uint8_t *key1, const uint8_t *key2, const uint8_t *key3, size_t keylen, const uint8_t *cst0, const uint8_t *cst1, const uint8_t *cst2, const uint8_t *cst3, size_t cstlen, const uint8_t *msg0, const uint8_t *msg1, const uint8_t *msg2, const uint8_t *msg3, size_t msglen)
Process 4 KMAC-128 instances simultaneously using SIMD instructions.
Definition sha3.c:5021
QSC_EXPORT_API void qsc_shake_256x8(uint8_t *out0, uint8_t *out1, uint8_t *out2, uint8_t *out3, uint8_t *out4, uint8_t *out5, uint8_t *out6, uint8_t *out7, size_t outlen, const uint8_t *inp0, const uint8_t *inp1, const uint8_t *inp2, const uint8_t *inp3, const uint8_t *inp4, const uint8_t *inp5, const uint8_t *inp6, const uint8_t *inp7, size_t inplen)
Process 8 SHAKE-256 instances simultaneously using SIMD instructions.
Definition sha3.c:4663
#define QSC_KECCAK_STATE_BYTE_SIZE
The Keccak state array byte size.
Definition sha3.h:169
QSC_EXPORT_API void qsc_kmac_initialize(qsc_keccak_state *ctx, qsc_keccak_rate rate, const uint8_t *key, size_t keylen, const uint8_t *custom, size_t custlen)
Initialize a KMAC instance. Long form api: must be used in conjunction with the blockupdate and final...
Definition sha3.c:4066
QSC_EXPORT_API void qsc_kmac_512x8(uint8_t *out0, uint8_t *out1, uint8_t *out2, uint8_t *out3, uint8_t *out4, uint8_t *out5, uint8_t *out6, uint8_t *out7, size_t outlen, const uint8_t *key0, const uint8_t *key1, const uint8_t *key2, const uint8_t *key3, const uint8_t *key4, const uint8_t *key5, const uint8_t *key6, const uint8_t *key7, size_t keylen, const uint8_t *cst0, const uint8_t *cst1, const uint8_t *cst2, const uint8_t *cst3, const uint8_t *cst4, const uint8_t *cst5, const uint8_t *cst6, const uint8_t *cst7, size_t cstlen, const uint8_t *msg0, const uint8_t *msg1, const uint8_t *msg2, const uint8_t *msg3, const uint8_t *msg4, const uint8_t *msg5, const uint8_t *msg6, const uint8_t *msg7, size_t msglen)
Process 8 KMAC-512 instances simultaneously using SIMD instructions.
Definition sha3.c:5524
QSC_EXPORT_API void qsc_sha3_compute512(uint8_t *output, const uint8_t *message, size_t msglen)
Process a message with SHA3-512 and return the hash code in the output byte array....
Definition sha3.c:3747
QSC_EXPORT_API void qsc_kmac_128x8(uint8_t *out0, uint8_t *out1, uint8_t *out2, uint8_t *out3, uint8_t *out4, uint8_t *out5, uint8_t *out6, uint8_t *out7, size_t outlen, const uint8_t *key0, const uint8_t *key1, const uint8_t *key2, const uint8_t *key3, const uint8_t *key4, const uint8_t *key5, const uint8_t *key6, const uint8_t *key7, size_t keylen, const uint8_t *cst0, const uint8_t *cst1, const uint8_t *cst2, const uint8_t *cst3, const uint8_t *cst4, const uint8_t *cst5, const uint8_t *cst6, const uint8_t *cst7, size_t cstlen, const uint8_t *msg0, const uint8_t *msg1, const uint8_t *msg2, const uint8_t *msg3, const uint8_t *msg4, const uint8_t *msg5, const uint8_t *msg6, const uint8_t *msg7, size_t msglen)
Process 8 KMAC-128 instances simultaneously using SIMD instructions.
Definition sha3.c:5378
QSC_EXPORT_API void qsc_kmac_xof512_compute(uint8_t *kout, size_t koutlen, const uint8_t *x, size_t xlen, const uint8_t *kin, size_t kinlen, const uint8_t *s, size_t slen)
Key a KMAC-512 XOF instance and generate an output key. The KMAC XOF as specified in SP800-108r1....
Definition sha3.c:4095
QSC_EXPORT_API void qsc_keccak_permute(qsc_keccak_state *ctx, size_t rounds)
The Keccak permute function. Internal function: Permutes the state array, can be used in external con...
Definition sha3.c:1096
QSC_EXPORT_API void qsc_keccak_absorb(qsc_keccak_state *ctx, qsc_keccak_rate rate, const uint8_t *message, size_t msglen, uint8_t domain, size_t rounds)
Absorb an input message into the Keccak state.
Definition sha3.c:690
QSC_EXPORT_API void qsc_sha3_compute256(uint8_t *output, const uint8_t *message, size_t msglen)
Process a message with SHA3-256 and return the hash code in the output byte array....
Definition sha3.c:3732
QSC_EXPORT_API void qsc_cshake128_compute(uint8_t *output, size_t outlen, const uint8_t *key, size_t keylen, const uint8_t *name, size_t namelen, const uint8_t *custom, size_t custlen)
Key a cSHAKE-128 instance and generate pseudo-random output. Short form api: processes the key,...
Definition sha3.c:3889
QSC_EXPORT_API void qsc_kmac_512x4(uint8_t *out0, uint8_t *out1, uint8_t *out2, uint8_t *out3, size_t outlen, const uint8_t *key0, const uint8_t *key1, const uint8_t *key2, const uint8_t *key3, size_t keylen, const uint8_t *cst0, const uint8_t *cst1, const uint8_t *cst2, const uint8_t *cst3, size_t cstlen, const uint8_t *msg0, const uint8_t *msg1, const uint8_t *msg2, const uint8_t *msg3, size_t msglen)
Process 4 KMAC-512 instances simultaneously using SIMD instructions.
Definition sha3.c:5107
QSC_EXPORT_API void qsc_keccak_incremental_finalize(qsc_keccak_state *ctx, uint32_t rate, uint8_t domain)
Finalize state added incrementally.
Definition sha3.c:1001
QSC_EXPORT_API void qsc_keccak_absorb_custom(qsc_keccak_state *ctx, qsc_keccak_rate rate, const uint8_t *custom, size_t custlen, const uint8_t *name, size_t namelen, size_t rounds)
Absorb the custom, and name arrays into the Keccak state.
Definition sha3.c:735
QSC_EXPORT_API void qsc_keccak_squeezeblocks(qsc_keccak_state *ctx, uint8_t *output, size_t nblocks, qsc_keccak_rate rate, size_t rounds)
The Keccak squeeze function.
Definition sha3.c:3637
QSC_EXPORT_API void qsc_cshake_squeezeblocks(qsc_keccak_state *ctx, qsc_keccak_rate rate, uint8_t *output, size_t nblocks)
The cSHAKE squeeze function. Long form api: must be used in conjunction with the initialize function....
Definition sha3.c:3995
QSC_EXPORT_API void qsc_shake_512x8(uint8_t *out0, uint8_t *out1, uint8_t *out2, uint8_t *out3, uint8_t *out4, uint8_t *out5, uint8_t *out6, uint8_t *out7, size_t outlen, const uint8_t *inp0, const uint8_t *inp1, const uint8_t *inp2, const uint8_t *inp3, const uint8_t *inp4, const uint8_t *inp5, const uint8_t *inp6, const uint8_t *inp7, size_t inplen)
Process 8 SHAKE-512 instances simultaneously using SIMD instructions.
Definition sha3.c:4750
QSC_EXPORT_API void qsc_cshake_update(qsc_keccak_state *ctx, qsc_keccak_rate rate, const uint8_t *key, size_t keylen)
The cSHAKE update function. Long form api: must be used in conjunction with the initialize and squeez...
Definition sha3.c:4000
QSC_EXPORT_API void qsc_keccak_update(qsc_keccak_state *ctx, qsc_keccak_rate rate, const uint8_t *message, size_t msglen, size_t rounds)
Update Keccak state with message input.
Definition sha3.c:3674
QSC_EXPORT_API void qsc_kmac_256x8(uint8_t *out0, uint8_t *out1, uint8_t *out2, uint8_t *out3, uint8_t *out4, uint8_t *out5, uint8_t *out6, uint8_t *out7, size_t outlen, const uint8_t *key0, const uint8_t *key1, const uint8_t *key2, const uint8_t *key3, const uint8_t *key4, const uint8_t *key5, const uint8_t *key6, const uint8_t *key7, size_t keylen, const uint8_t *cst0, const uint8_t *cst1, const uint8_t *cst2, const uint8_t *cst3, const uint8_t *cst4, const uint8_t *cst5, const uint8_t *cst6, const uint8_t *cst7, size_t cstlen, const uint8_t *msg0, const uint8_t *msg1, const uint8_t *msg2, const uint8_t *msg3, const uint8_t *msg4, const uint8_t *msg5, const uint8_t *msg6, const uint8_t *msg7, size_t msglen)
Process 8 KMAC-256 instances simultaneously using SIMD instructions.
Definition sha3.c:5451
QSC_EXPORT_API void qsc_sha3_compute128(uint8_t *output, const uint8_t *message, size_t msglen)
Process a message with SHA3-128 and return the hash code in the output byte array....
Definition sha3.c:3717
QSC_EXPORT_API void qsc_kmac_update(qsc_keccak_state *ctx, qsc_keccak_rate rate, const uint8_t *message, size_t msglen)
The KMAC message update function. Long form api: must be used in conjunction with the initialize and ...
Definition sha3.c:4077
QSC_EXPORT_API void qsc_cshake_initialize(qsc_keccak_state *ctx, qsc_keccak_rate rate, const uint8_t *key, size_t keylen, const uint8_t *name, size_t namelen, const uint8_t *custom, size_t custlen)
The cSHAKE initialize function. Long form api: must be used in conjunction with the squeezeblocks fun...
Definition sha3.c:3983
QSC_EXPORT_API void qsc_shake_128x8(uint8_t *out0, uint8_t *out1, uint8_t *out2, uint8_t *out3, uint8_t *out4, uint8_t *out5, uint8_t *out6, uint8_t *out7, size_t outlen, const uint8_t *inp0, const uint8_t *inp1, const uint8_t *inp2, const uint8_t *inp3, const uint8_t *inp4, const uint8_t *inp5, const uint8_t *inp6, const uint8_t *inp7, size_t inplen)
Process 8 SHAKE-128 instances simultaneously using SIMD instructions.
Definition sha3.c:4576
QSC_EXPORT_API void qsc_kmac_xof128_compute(uint8_t *kout, size_t koutlen, const uint8_t *x, size_t xlen, const uint8_t *kin, size_t kinlen, const uint8_t *s, size_t slen)
Key a KMAC-128 XOF instance and generate an output key. Short form api: processes the keyin,...
Definition sha3.c:4085
QSC_EXPORT_API void qsc_cshake256_compute(uint8_t *output, size_t outlen, const uint8_t *key, size_t keylen, const uint8_t *name, size_t namelen, const uint8_t *custom, size_t custlen)
Key a cSHAKE-256 instance and generate pseudo-random output. Short form api: processes the key,...
Definition sha3.c:3920
QSC_EXPORT_API void qsc_shake128_compute(uint8_t *output, size_t outlen, const uint8_t *key, size_t keylen)
Key a SHAKE-128 instance, and generate an array of pseudo-random bytes. Short form api: processes the...
Definition sha3.c:3801
QSC_EXPORT_API void qsc_kmac_256x4(uint8_t *out0, uint8_t *out1, uint8_t *out2, uint8_t *out3, size_t outlen, const uint8_t *key0, const uint8_t *key1, const uint8_t *key2, const uint8_t *key3, size_t keylen, const uint8_t *cst0, const uint8_t *cst1, const uint8_t *cst2, const uint8_t *cst3, size_t cstlen, const uint8_t *msg0, const uint8_t *msg1, const uint8_t *msg2, const uint8_t *msg3, size_t msglen)
Process 4 KMAC-256 instances simultaneously using SIMD instructions.
Definition sha3.c:5064
QSC_EXPORT_API void qsc_shake512_compute(uint8_t *output, size_t outlen, const uint8_t *key, size_t keylen)
Key a SHAKE-512 instance, and generate an array of pseudo-random bytes. Short form api: processes the...
Definition sha3.c:3847
QSC_EXPORT_API void qsc_keccak_finalize(qsc_keccak_state *ctx, qsc_keccak_rate rate, uint8_t *output, size_t outlen, uint8_t domain, size_t rounds)
Finalize the Keccak state.
Definition sha3.c:877
QSC_EXPORT_API void qsc_cshake512_compute(uint8_t *output, size_t outlen, const uint8_t *key, size_t keylen, const uint8_t *name, size_t namelen, const uint8_t *custom, size_t custlen)
Key a cSHAKE-512 instance and generate pseudo-random output. Short form api: processes the key,...
Definition sha3.c:3952
QSC_EXPORT_API void qsc_shake_squeezeblocks(qsc_keccak_state *ctx, qsc_keccak_rate rate, uint8_t *output, size_t nblocks)
The SHAKE squeeze function. Long form api: must be used in conjunction with the initialize function....
Definition sha3.c:3879
QSC_EXPORT_API void qsc_sha3_initialize(qsc_keccak_state *ctx)
Initialize the SHA3 state Long form api: Must be called before the update or finalize functions are c...
Definition sha3.c:3789
QSC_EXPORT_API void qsc_shake_initialize(qsc_keccak_state *ctx, qsc_keccak_rate rate, const uint8_t *key, size_t keylen)
The SHAKE initialize function. Long form api: must be used in conjunction with the squeezeblocks func...
Definition sha3.c:3870
QSC_EXPORT_API void qsc_shake_512x4(uint8_t *out0, uint8_t *out1, uint8_t *out2, uint8_t *out3, size_t outlen, const uint8_t *inp0, const uint8_t *inp1, const uint8_t *inp2, const uint8_t *inp3, size_t inplen)
Process 4 SHAKE-512 instances simultaneously using SIMD instructions.
Definition sha3.c:4515
QSC_EXPORT_API void qsc_kmac128_compute(uint8_t *output, size_t outlen, const uint8_t *message, size_t msglen, const uint8_t *key, size_t keylen, const uint8_t *custom, size_t custlen)
Key a KMAC-128 instance and generate a MAC code. Short form api: processes the key and custom inputs ...
Definition sha3.c:4022
QSC_EXPORT_API void qsc_keccak_absorb_key_custom(qsc_keccak_state *ctx, qsc_keccak_rate rate, const uint8_t *key, size_t keylen, const uint8_t *custom, size_t custlen, const uint8_t *name, size_t namelen, size_t rounds)
Absorb the custom, name, and key arrays into the Keccak state.
Definition sha3.c:785
The Keccak state array; state array must be initialized by the caller.
Definition sha3.h:256
uint64_t state[QSC_KECCAK_STATE_SIZE]
Definition sha3.h:257
size_t position
Definition sha3.h:259
uint8_t buffer[QSC_KECCAK_STATE_BYTE_SIZE]
Definition sha3.h:258