44#if defined(QSC_SYSTEM_AVX_INTRINSICS)
45# include "intrinsics.h"
48QSC_CPLUSPLUS_ENABLED_START
105#define QSC_KECCAK_CSHAKE_DOMAIN_ID 0x04U
111#define QSC_KECCAK_KMAC_DOMAIN_ID 0x04U
117#define QSC_KECCAK_KPA_DOMAIN_ID 0x41U
123#define QSC_KECCAK_PERMUTATION_ROUNDS 24ULL
129#define QSC_KECCAK_PERMUTATION_MAX_ROUNDS 48ULL
135#define QSC_KECCAK_PERMUTATION_MIN_ROUNDS 12ULL
141#define QSC_KECCAK_SHA3_DOMAIN_ID 0x06U
147#define QSC_KECCAK_SHAKE_DOMAIN_ID 0x1FU
153#define QSC_KECCAK_STATE_BYTE_SIZE 200ULL
159#define QSC_KECCAK_128_RATE 168ULL
165#define QSC_KECCAK_256_RATE 136ULL
171#define QSC_KECCAK_512_RATE 72ULL
177#define QSC_KECCAK_STATE_SIZE 25ULL
183#define QSC_KECCAK_STATE_BYTE_SIZE 200ULL
189#define QSC_KMAC_256_KEY_SIZE 32ULL
195#define QSC_KMAC_512_KEY_SIZE 64ULL
201#define QSC_KECCAK_SCBKDF_DOMAIN_ID 0x42U
207#define QSC_SHA3_128_HASH_SIZE 16ULL
213#define QSC_SHA3_256_HASH_SIZE 32ULL
219#define QSC_SHA3_512_HASH_SIZE 64ULL
225#define QSC_SHAKE_256_KEY_SIZE 32ULL
231#define QSC_SHAKE512_KEY_SIZE 64ULL
569QSC_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);
585QSC_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);
601QSC_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);
665QSC_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);
681QSC_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);
697QSC_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);
742#if defined(QSC_SYSTEM_HAS_AVX512) || defined(QSC_SYSTEM_HAS_AVX2)
743#define QSC_KPA_AVX_PARALLEL
750#define QSC_KPA_128_KEY_SIZE 16ULL
756#define QSC_KPA_256_KEY_SIZE 32ULL
762#define QSC_KPA_512_KEY_SIZE 64ULL
768#define QSC_KPA_ROUNDS 12ULL
774#define QSC_KPA_PARALLELISM 8ULL
782#if defined(QSC_SYSTEM_HAS_AVX512)
784#elif defined(QSC_SYSTEM_HAS_AVX2)
844#if defined(QSC_SYSTEM_HAS_AVX2)
862 const uint8_t* inp0,
const uint8_t* inp1,
const uint8_t* inp2,
const uint8_t* inp3,
size_t inplen, uint8_t domain);
881 const uint8_t* inp0,
const uint8_t* inp1,
const uint8_t* inp2,
const uint8_t* inp3,
size_t inplen, uint8_t domain);
898 uint8_t* out0, uint8_t* out1, uint8_t* out2, uint8_t* out3,
size_t nblocks);
904#if defined(QSC_SYSTEM_HAS_AVX512)
926 const uint8_t* inp0,
const uint8_t* inp1,
const uint8_t* inp2,
const uint8_t* inp3,
927 const uint8_t* inp4,
const uint8_t* inp5,
const uint8_t* inp6,
const uint8_t* inp7,
size_t inplen, uint8_t domain);
950 const uint8_t* inp0,
const uint8_t* inp1,
const uint8_t* inp2,
const uint8_t* inp3,
951 const uint8_t* inp4,
const uint8_t* inp5,
const uint8_t* inp6,
const uint8_t* inp7,
size_t inplen, uint8_t domain);
968 uint8_t* out0, uint8_t* out1, uint8_t* out2, uint8_t* out3, uint8_t* out4,
969 uint8_t* out5, uint8_t* out6, uint8_t* out7,
size_t nblocks);
993 const uint8_t* inp0,
const uint8_t* inp1,
const uint8_t* inp2,
const uint8_t* inp3,
size_t inplen);
1013 const uint8_t* inp0,
const uint8_t* inp1,
const uint8_t* inp2,
const uint8_t* inp3,
size_t inplen);
1033 const uint8_t* inp0,
const uint8_t* inp1,
const uint8_t* inp2,
const uint8_t* inp3,
size_t inplen);
1063 uint8_t* out4, uint8_t* out5, uint8_t* out6, uint8_t* out7,
size_t outlen,
1064 const uint8_t* inp0,
const uint8_t* inp1,
const uint8_t* inp2,
const uint8_t* inp3,
1065 const uint8_t* inp4,
const uint8_t* inp5,
const uint8_t* inp6,
const uint8_t* inp7,
size_t inplen);
1093 uint8_t* out4, uint8_t* out5, uint8_t* out6, uint8_t* out7,
size_t outlen,
1094 const uint8_t* inp0,
const uint8_t* inp1,
const uint8_t* inp2,
const uint8_t* inp3,
1095 const uint8_t* inp4,
const uint8_t* inp5,
const uint8_t* inp6,
const uint8_t* inp7,
size_t inplen);
1123 uint8_t* out4, uint8_t* out5, uint8_t* out6, uint8_t* out7,
size_t outlen,
1124 const uint8_t* inp0,
const uint8_t* inp1,
const uint8_t* inp2,
const uint8_t* inp3,
1125 const uint8_t* inp4,
const uint8_t* inp5,
const uint8_t* inp6,
const uint8_t* inp7,
size_t inplen);
1157 const uint8_t* key0,
const uint8_t* key1,
const uint8_t* key2,
const uint8_t* key3,
size_t keylen,
1158 const uint8_t* cst0,
const uint8_t* cst1,
const uint8_t* cst2,
const uint8_t* cst3,
size_t cstlen,
1159 const uint8_t* msg0,
const uint8_t* msg1,
const uint8_t* msg2,
const uint8_t* msg3,
size_t msglen);
1189 const uint8_t* key0,
const uint8_t* key1,
const uint8_t* key2,
const uint8_t* key3,
size_t keylen,
1190 const uint8_t* cst0,
const uint8_t* cst1,
const uint8_t* cst2,
const uint8_t* cst3,
size_t cstlen,
1191 const uint8_t* msg0,
const uint8_t* msg1,
const uint8_t* msg2,
const uint8_t* msg3,
size_t msglen);
1221 const uint8_t* key0,
const uint8_t* key1,
const uint8_t* key2,
const uint8_t* key3,
size_t keylen,
1222 const uint8_t* cst0,
const uint8_t* cst1,
const uint8_t* cst2,
const uint8_t* cst3,
size_t cstlen,
1223 const uint8_t* msg0,
const uint8_t* msg1,
const uint8_t* msg2,
const uint8_t* msg3,
size_t msglen);
1271 uint8_t* out4, uint8_t* out5, uint8_t* out6, uint8_t* out7,
size_t outlen,
1272 const uint8_t* key0,
const uint8_t* key1,
const uint8_t* key2,
const uint8_t* key3,
1273 const uint8_t* key4,
const uint8_t* key5,
const uint8_t* key6,
const uint8_t* key7,
size_t keylen,
1274 const uint8_t* cst0,
const uint8_t* cst1,
const uint8_t* cst2,
const uint8_t* cst3,
1275 const uint8_t* cst4,
const uint8_t* cst5,
const uint8_t* cst6,
const uint8_t* cst7,
size_t cstlen,
1276 const uint8_t* msg0,
const uint8_t* msg1,
const uint8_t* msg2,
const uint8_t* msg3,
1277 const uint8_t* msg4,
const uint8_t* msg5,
const uint8_t* msg6,
const uint8_t* msg7,
size_t msglen);
1323 uint8_t* out4, uint8_t* out5, uint8_t* out6, uint8_t* out7,
size_t outlen,
1324 const uint8_t* key0,
const uint8_t* key1,
const uint8_t* key2,
const uint8_t* key3,
1325 const uint8_t* key4,
const uint8_t* key5,
const uint8_t* key6,
const uint8_t* key7,
size_t keylen,
1326 const uint8_t* cst0,
const uint8_t* cst1,
const uint8_t* cst2,
const uint8_t* cst3,
1327 const uint8_t* cst4,
const uint8_t* cst5,
const uint8_t* cst6,
const uint8_t* cst7,
size_t cstlen,
1328 const uint8_t* msg0,
const uint8_t* msg1,
const uint8_t* msg2,
const uint8_t* msg3,
1329 const uint8_t* msg4,
const uint8_t* msg5,
const uint8_t* msg6,
const uint8_t* msg7,
size_t msglen);
1375 uint8_t* out4, uint8_t* out5, uint8_t* out6, uint8_t* out7,
size_t outlen,
1376 const uint8_t* key0,
const uint8_t* key1,
const uint8_t* key2,
const uint8_t* key3,
1377 const uint8_t* key4,
const uint8_t* key5,
const uint8_t* key6,
const uint8_t* key7,
size_t keylen,
1378 const uint8_t* cst0,
const uint8_t* cst1,
const uint8_t* cst2,
const uint8_t* cst3,
1379 const uint8_t* cst4,
const uint8_t* cst5,
const uint8_t* cst6,
const uint8_t* cst7,
size_t cstlen,
1380 const uint8_t* msg0,
const uint8_t* msg1,
const uint8_t* msg2,
const uint8_t* msg3,
1381 const uint8_t* msg4,
const uint8_t* msg5,
const uint8_t* msg6,
const uint8_t* msg7,
size_t msglen);
1383QSC_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 common.h:520
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:4417
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:4443
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:1409
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:5519
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:4144
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:1812
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:4430
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:1320
qsc_keccak_rate
The Keccak rate; determines which security strength is used by the function, 128, 256,...
Definition sha3.h:251
@ qsc_keccak_rate_256
Definition sha3.h:254
@ qsc_keccak_rate_128
Definition sha3.h:253
@ qsc_keccak_rate_512
Definition sha3.h:255
@ qsc_keccak_rate_none
Definition sha3.h:252
QSC_EXPORT_API void qsc_keccak_dispose(qsc_keccak_state *ctx)
Dispose of the Keccak state.
Definition sha3.c:1265
QSC_EXPORT_API void qsc_kpa_dispose(qsc_kpa_state *ctx)
Dispose of the KPA state.
Definition sha3.c:4697
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:4176
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:1498
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:5462
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:4044
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:4206
#define QSC_KECCAK_STATE_SIZE
The Keccak SHA3 uint64 state array size.
Definition sha3.h:177
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:6066
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:5716
#define QSC_KECCAK_STATE_BYTE_SIZE
The Keccak state array byte size.
Definition sha3.h:153
QSC_EXPORT_API void qsc_kpa_update(qsc_kpa_state *ctx, const uint8_t *message, size_t msglen)
The KPA message update function. Long form api: must be used in conjunction with the initialize and f...
Definition sha3.c:4942
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:4448
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:6547
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:4129
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:6411
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:1484
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:1098
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:4114
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:4271
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:6144
QSC_EXPORT_API void qsc_kpa_initialize(qsc_kpa_state *ctx, const uint8_t *key, size_t keylen, const uint8_t *custom, size_t custlen)
Initialize a KPA instance. Long form api: must be used in conjunction with the blockupdate and finali...
Definition sha3.c:4794
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:1395
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:1138
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:4019
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:4377
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:5799
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:4382
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:4056
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:6479
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:4099
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:4458
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:4365
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:5633
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:4302
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:4183
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:6105
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:4229
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:1277
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:4334
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:4261
QSC_EXPORT_API void qsc_kpa_finalize(qsc_kpa_state *ctx, uint8_t *output, size_t outlen)
The KPA finalize function. Long form api: must be used in conjunction with the initialize and blockup...
Definition sha3.c:4715
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:4171
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:4252
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:5575
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:4404
#define QSC_KPA_PARALLELISM
The KPA degree of parallelization.
Definition sha3.h:774
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:1188
The Keccak state array; state array must be initialized by the caller.
Definition sha3.h:240
uint64_t state[QSC_KECCAK_STATE_SIZE]
Definition sha3.h:241
size_t position
Definition sha3.h:243
uint8_t buffer[QSC_KECCAK_STATE_BYTE_SIZE]
Definition sha3.h:242
The KPA state array; state array must be initialized by the caller.
Definition sha3.h:781
uint64_t state[QSC_KPA_PARALLELISM][QSC_KECCAK_STATE_SIZE]
Definition sha3.h:787
size_t processed
Definition sha3.h:790
size_t position
Definition sha3.h:789
uint8_t buffer[QSC_KPA_PARALLELISM *QSC_KECCAK_STATE_BYTE_SIZE]
Definition sha3.h:788
qsc_keccak_rate rate
Definition sha3.h:791