/* XKCP calls can be dispatched to platform-specific implementation at runtime. * * If this is a dist build we put a "_arch" suffix on each symbol in each xkcp_low * library that we build. If it's not a dist build, we omit the suffix and only build * one library. Hence we will either have a single "KeccakP1600_Initialize" or we will have * one or more symbols of the form "KeccakP1600_Initialize_arch". * * This header file defines all of the symbols that might be available. * * SPDX-License-Identifier: MIT */ #ifndef OQS_SHA3_XKCP_DISPATCH_H #define OQS_SHA3_XKCP_DISPATCH_H typedef void KeccakInitFn(void *); extern KeccakInitFn \ KeccakP1600_Initialize, \ KeccakP1600_Initialize_plain64, \ KeccakP1600_Initialize_avx2; typedef void KeccakAddByteFn(void *, const uint8_t, unsigned int); extern KeccakAddByteFn \ KeccakP1600_AddByte, \ KeccakP1600_AddByte_plain64, \ KeccakP1600_AddByte_avx2; typedef void KeccakAddBytesFn(void *, const uint8_t *, unsigned int, unsigned int); extern KeccakAddBytesFn \ KeccakP1600_AddBytes, \ KeccakP1600_AddBytes_plain64, \ KeccakP1600_AddBytes_avx2; typedef void KeccakPermuteFn(void *); extern KeccakPermuteFn \ KeccakP1600_Permute_24rounds, \ KeccakP1600_Permute_24rounds_plain64, \ KeccakP1600_Permute_24rounds_avx2; typedef void KeccakExtractBytesFn(const void *, uint8_t *, unsigned int, unsigned int); extern KeccakExtractBytesFn \ KeccakP1600_ExtractBytes, \ KeccakP1600_ExtractBytes_plain64, \ KeccakP1600_ExtractBytes_avx2; typedef size_t KeccakFastLoopAbsorbFn(void *, unsigned int, const uint8_t *, size_t); extern KeccakFastLoopAbsorbFn \ KeccakF1600_FastLoop_Absorb, \ KeccakF1600_FastLoop_Absorb_plain64, \ KeccakF1600_FastLoop_Absorb_avx2; typedef void KeccakX4InitFn(void *); extern KeccakX4InitFn \ KeccakP1600times4_InitializeAll, \ KeccakP1600times4_InitializeAll_serial, \ KeccakP1600times4_InitializeAll_avx2; typedef void KeccakX4AddByteFn(void *, unsigned int, unsigned char, unsigned int); extern KeccakX4AddByteFn \ KeccakP1600times4_AddByte, \ KeccakP1600times4_AddByte_serial, \ KeccakP1600times4_AddByte_avx2; typedef void KeccakX4AddBytesFn(void *, unsigned int, const unsigned char *, unsigned int, unsigned int); extern KeccakX4AddBytesFn \ KeccakP1600times4_AddBytes, \ KeccakP1600times4_AddBytes_serial, \ KeccakP1600times4_AddBytes_avx2; typedef void KeccakX4PermuteFn(void *); extern KeccakX4PermuteFn \ KeccakP1600times4_PermuteAll_24rounds, \ KeccakP1600times4_PermuteAll_24rounds_serial, \ KeccakP1600times4_PermuteAll_24rounds_avx2; typedef void KeccakX4ExtractBytesFn(const void *, unsigned int, unsigned char *, unsigned int, unsigned int); extern KeccakX4ExtractBytesFn \ KeccakP1600times4_ExtractBytes, \ KeccakP1600times4_ExtractBytes_serial, \ KeccakP1600times4_ExtractBytes_avx2; #endif // OQS_SHA3_XKCP_DISPATCH_H