/* The eXtended Keccak Code Package (XKCP) https://github.com/XKCP/XKCP Implementation by Gilles Van Assche, hereby denoted as "the implementer". For more information, feedback or questions, please refer to the Keccak Team website: https://keccak.team/ To the extent possible under law, the implementer has waived all copyright and related or neighboring rights to the source code in this file. http://creativecommons.org/publicdomain/zero/1.0/ --- This file contains macros that help make a PlSnP-compatible implementation by serially falling back on a SnP-compatible implementation or on a PlSnP-compatible implementation of lower parallism degree. Please refer to PlSnP-documentation.h for more details. */ /* expect PlSnP_baseParallelism, PlSnP_targetParallelism */ /* expect SnP_stateSizeInBytes, SnP_stateAlignment */ /* expect prefix */ /* expect SnP_* */ #if defined(ADD_SYMBOL_SUFFIX) #define JOIN0(a, b, c) a ## _ ## b ## _ ## c #define JOIN(a, b, c) JOIN0(a, b, c) #else #define JOIN0(a, b) a ## _ ## b #define JOIN(a, b, c) JOIN0(a, b) #endif #define PlSnP_StaticInitialize JOIN(prefix, StaticInitialize, suffix) #define PlSnP_InitializeAll JOIN(prefix, InitializeAll, suffix) #define PlSnP_AddByte JOIN(prefix, AddByte, suffix) #define PlSnP_AddBytes JOIN(prefix, AddBytes, suffix) #define PlSnP_AddLanesAll JOIN(prefix, AddLanesAll, suffix) #define PlSnP_OverwriteBytes JOIN(prefix, OverwriteBytes, suffix) #define PlSnP_OverwriteLanesAll JOIN(prefix, OverwriteLanesAll, suffix) #define PlSnP_OverwriteWithZeroes JOIN(prefix, OverwriteWithZeroes, suffix) #define PlSnP_ExtractBytes JOIN(prefix, ExtractBytes, suffix) #define PlSnP_ExtractLanesAll JOIN(prefix, ExtractLanesAll, suffix) #define PlSnP_ExtractAndAddBytes JOIN(prefix, ExtractAndAddBytes, suffix) #define PlSnP_ExtractAndAddLanesAll JOIN(prefix, ExtractAndAddLanesAll, suffix) #if (PlSnP_baseParallelism == 1) #define SnP_stateSizeInBytes JOIN(SnP_prefix, stateSizeInBytes, SnP_suffix) #define SnP_stateAlignment JOIN(SnP_prefix, stateAlignment, SnP_suffix) #else #define SnP_stateSizeInBytes JOIN(SnP_prefix, statesSizeInBytes, SnP_suffix) #define SnP_stateAlignment JOIN(SnP_prefix, statesAlignment, SnP_suffix) #endif #define PlSnP_factor ((PlSnP_targetParallelism)/(PlSnP_baseParallelism)) #define SnP_stateOffset (((SnP_stateSizeInBytes+(SnP_stateAlignment-1))/SnP_stateAlignment)*SnP_stateAlignment) #define stateWithIndex(i) ((unsigned char *)states+((i)*SnP_stateOffset)) #define SnP_StaticInitialize JOIN(SnP_prefix, StaticInitialize, SnP_suffix) #define SnP_Initialize JOIN(SnP_prefix, Initialize, SnP_suffix) #define SnP_InitializeAll JOIN(SnP_prefix, InitializeAll, SnP_suffix) #define SnP_AddByte JOIN(SnP_prefix, AddByte, SnP_suffix) #define SnP_AddBytes JOIN(SnP_prefix, AddBytes, SnP_suffix) #define SnP_AddLanesAll JOIN(SnP_prefix, AddLanesAll, SnP_suffix) #define SnP_OverwriteBytes JOIN(SnP_prefix, OverwriteBytes, SnP_suffix) #define SnP_OverwriteLanesAll JOIN(SnP_prefix, OverwriteLanesAll, SnP_suffix) #define SnP_OverwriteWithZeroes JOIN(SnP_prefix, OverwriteWithZeroes, SnP_suffix) #define SnP_ExtractBytes JOIN(SnP_prefix, ExtractBytes, SnP_suffix) #define SnP_ExtractLanesAll JOIN(SnP_prefix, ExtractLanesAll, SnP_suffix) #define SnP_ExtractAndAddBytes JOIN(SnP_prefix, ExtractAndAddBytes, SnP_suffix) #define SnP_ExtractAndAddLanesAll JOIN(SnP_prefix, ExtractAndAddLanesAll, SnP_suffix) void PlSnP_StaticInitialize( void ) { SnP_StaticInitialize(); } void PlSnP_InitializeAll(void *states) { unsigned int i; for(i=0; i