summaryrefslogtreecommitdiff
path: root/Modules/_sha3/kcp/PlSnP-Fallback.inc
diff options
context:
space:
mode:
Diffstat (limited to 'Modules/_sha3/kcp/PlSnP-Fallback.inc')
-rw-r--r--Modules/_sha3/kcp/PlSnP-Fallback.inc257
1 files changed, 257 insertions, 0 deletions
diff --git a/Modules/_sha3/kcp/PlSnP-Fallback.inc b/Modules/_sha3/kcp/PlSnP-Fallback.inc
new file mode 100644
index 0000000000..3a9119ab4b
--- /dev/null
+++ b/Modules/_sha3/kcp/PlSnP-Fallback.inc
@@ -0,0 +1,257 @@
+/*
+Implementation by the Keccak, Keyak and Ketje Teams, namely, Guido Bertoni,
+Joan Daemen, Michaƫl Peeters, Gilles Van Assche and Ronny Van Keer, hereby
+denoted as "the implementer".
+
+For more information, feedback or questions, please refer to our websites:
+http://keccak.noekeon.org/
+http://keyak.noekeon.org/
+http://ketje.noekeon.org/
+
+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/
+*/
+
+/* expect PlSnP_baseParallelism, PlSnP_targetParallelism */
+
+/* expect SnP_stateSizeInBytes, SnP_stateAlignment */
+
+/* expect prefix */
+
+/* expect SnP_* */
+
+
+#define JOIN0(a, b) a ## b
+#define JOIN(a, b) JOIN0(a, b)
+
+#define PlSnP_StaticInitialize JOIN(prefix, _StaticInitialize)
+#define PlSnP_InitializeAll JOIN(prefix, _InitializeAll)
+#define PlSnP_AddByte JOIN(prefix, _AddByte)
+#define PlSnP_AddBytes JOIN(prefix, _AddBytes)
+#define PlSnP_AddLanesAll JOIN(prefix, _AddLanesAll)
+#define PlSnP_OverwriteBytes JOIN(prefix, _OverwriteBytes)
+#define PlSnP_OverwriteLanesAll JOIN(prefix, _OverwriteLanesAll)
+#define PlSnP_OverwriteWithZeroes JOIN(prefix, _OverwriteWithZeroes)
+#define PlSnP_ExtractBytes JOIN(prefix, _ExtractBytes)
+#define PlSnP_ExtractLanesAll JOIN(prefix, _ExtractLanesAll)
+#define PlSnP_ExtractAndAddBytes JOIN(prefix, _ExtractAndAddBytes)
+#define PlSnP_ExtractAndAddLanesAll JOIN(prefix, _ExtractAndAddLanesAll)
+
+#if (PlSnP_baseParallelism == 1)
+ #define SnP_stateSizeInBytes JOIN(SnP, _stateSizeInBytes)
+ #define SnP_stateAlignment JOIN(SnP, _stateAlignment)
+#else
+ #define SnP_stateSizeInBytes JOIN(SnP, _statesSizeInBytes)
+ #define SnP_stateAlignment JOIN(SnP, _statesAlignment)
+#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, _StaticInitialize)
+#define SnP_Initialize JOIN(SnP, _Initialize)
+#define SnP_InitializeAll JOIN(SnP, _InitializeAll)
+#define SnP_AddByte JOIN(SnP, _AddByte)
+#define SnP_AddBytes JOIN(SnP, _AddBytes)
+#define SnP_AddLanesAll JOIN(SnP, _AddLanesAll)
+#define SnP_OverwriteBytes JOIN(SnP, _OverwriteBytes)
+#define SnP_OverwriteLanesAll JOIN(SnP, _OverwriteLanesAll)
+#define SnP_OverwriteWithZeroes JOIN(SnP, _OverwriteWithZeroes)
+#define SnP_ExtractBytes JOIN(SnP, _ExtractBytes)
+#define SnP_ExtractLanesAll JOIN(SnP, _ExtractLanesAll)
+#define SnP_ExtractAndAddBytes JOIN(SnP, _ExtractAndAddBytes)
+#define SnP_ExtractAndAddLanesAll JOIN(SnP, _ExtractAndAddLanesAll)
+
+void PlSnP_StaticInitialize( void )
+{
+ SnP_StaticInitialize();
+}
+
+void PlSnP_InitializeAll(void *states)
+{
+ unsigned int i;
+
+ for(i=0; i<PlSnP_factor; i++)
+ #if (PlSnP_baseParallelism == 1)
+ SnP_Initialize(stateWithIndex(i));
+ #else
+ SnP_InitializeAll(stateWithIndex(i));
+ #endif
+}
+
+void PlSnP_AddByte(void *states, unsigned int instanceIndex, unsigned char byte, unsigned int offset)
+{
+ #if (PlSnP_baseParallelism == 1)
+ SnP_AddByte(stateWithIndex(instanceIndex), byte, offset);
+ #else
+ SnP_AddByte(stateWithIndex(instanceIndex/PlSnP_baseParallelism), instanceIndex%PlSnP_baseParallelism, byte, offset);
+ #endif
+}
+
+void PlSnP_AddBytes(void *states, unsigned int instanceIndex, const unsigned char *data, unsigned int offset, unsigned int length)
+{
+ #if (PlSnP_baseParallelism == 1)
+ SnP_AddBytes(stateWithIndex(instanceIndex), data, offset, length);
+ #else
+ SnP_AddBytes(stateWithIndex(instanceIndex/PlSnP_baseParallelism), instanceIndex%PlSnP_baseParallelism, data, offset, length);
+ #endif
+}
+
+void PlSnP_AddLanesAll(void *states, const unsigned char *data, unsigned int laneCount, unsigned int laneOffset)
+{
+ unsigned int i;
+
+ for(i=0; i<PlSnP_factor; i++) {
+ #if (PlSnP_baseParallelism == 1)
+ SnP_AddBytes(stateWithIndex(i), data, 0, laneCount*SnP_laneLengthInBytes);
+ #else
+ SnP_AddLanesAll(stateWithIndex(i), data, laneCount, laneOffset);
+ #endif
+ data += PlSnP_baseParallelism*laneOffset*SnP_laneLengthInBytes;
+ }
+}
+
+void PlSnP_OverwriteBytes(void *states, unsigned int instanceIndex, const unsigned char *data, unsigned int offset, unsigned int length)
+{
+ #if (PlSnP_baseParallelism == 1)
+ SnP_OverwriteBytes(stateWithIndex(instanceIndex), data, offset, length);
+ #else
+ SnP_OverwriteBytes(stateWithIndex(instanceIndex/PlSnP_baseParallelism), instanceIndex%PlSnP_baseParallelism, data, offset, length);
+ #endif
+}
+
+void PlSnP_OverwriteLanesAll(void *states, const unsigned char *data, unsigned int laneCount, unsigned int laneOffset)
+{
+ unsigned int i;
+
+ for(i=0; i<PlSnP_factor; i++) {
+ #if (PlSnP_baseParallelism == 1)
+ SnP_OverwriteBytes(stateWithIndex(i), data, 0, laneCount*SnP_laneLengthInBytes);
+ #else
+ SnP_OverwriteLanesAll(stateWithIndex(i), data, laneCount, laneOffset);
+ #endif
+ data += PlSnP_baseParallelism*laneOffset*SnP_laneLengthInBytes;
+ }
+}
+
+void PlSnP_OverwriteWithZeroes(void *states, unsigned int instanceIndex, unsigned int byteCount)
+{
+ #if (PlSnP_baseParallelism == 1)
+ SnP_OverwriteWithZeroes(stateWithIndex(instanceIndex), byteCount);
+ #else
+ SnP_OverwriteWithZeroes(stateWithIndex(instanceIndex/PlSnP_baseParallelism), instanceIndex%PlSnP_baseParallelism, byteCount);
+ #endif
+}
+
+void PlSnP_PermuteAll(void *states)
+{
+ unsigned int i;
+
+ for(i=0; i<PlSnP_factor; i++) {
+ #if (PlSnP_baseParallelism == 1)
+ SnP_Permute(stateWithIndex(i));
+ #else
+ SnP_PermuteAll(stateWithIndex(i));
+ #endif
+ }
+}
+
+#if (defined(SnP_Permute_12rounds) || defined(SnP_PermuteAll_12rounds))
+void PlSnP_PermuteAll_12rounds(void *states)
+{
+ unsigned int i;
+
+ for(i=0; i<PlSnP_factor; i++) {
+ #if (PlSnP_baseParallelism == 1)
+ SnP_Permute_12rounds(stateWithIndex(i));
+ #else
+ SnP_PermuteAll_12rounds(stateWithIndex(i));
+ #endif
+ }
+}
+#endif
+
+void PlSnP_ExtractBytes(void *states, unsigned int instanceIndex, unsigned char *data, unsigned int offset, unsigned int length)
+{
+ #if (PlSnP_baseParallelism == 1)
+ SnP_ExtractBytes(stateWithIndex(instanceIndex), data, offset, length);
+ #else
+ SnP_ExtractBytes(stateWithIndex(instanceIndex/PlSnP_baseParallelism), instanceIndex%PlSnP_baseParallelism, data, offset, length);
+ #endif
+}
+
+void PlSnP_ExtractLanesAll(const void *states, unsigned char *data, unsigned int laneCount, unsigned int laneOffset)
+{
+ unsigned int i;
+
+ for(i=0; i<PlSnP_factor; i++) {
+ #if (PlSnP_baseParallelism == 1)
+ SnP_ExtractBytes(stateWithIndex(i), data, 0, laneCount*SnP_laneLengthInBytes);
+ #else
+ SnP_ExtractLanesAll(stateWithIndex(i), data, laneCount, laneOffset);
+ #endif
+ data += laneOffset*SnP_laneLengthInBytes*PlSnP_baseParallelism;
+ }
+}
+
+void PlSnP_ExtractAndAddBytes(void *states, unsigned int instanceIndex, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
+{
+ #if (PlSnP_baseParallelism == 1)
+ SnP_ExtractAndAddBytes(stateWithIndex(instanceIndex), input, output, offset, length);
+ #else
+ SnP_ExtractAndAddBytes(stateWithIndex(instanceIndex/PlSnP_baseParallelism), instanceIndex%PlSnP_baseParallelism, input, output, offset, length);
+ #endif
+}
+
+void PlSnP_ExtractAndAddLanesAll(const void *states, const unsigned char *input, unsigned char *output, unsigned int laneCount, unsigned int laneOffset)
+{
+ unsigned int i;
+
+ for(i=0; i<PlSnP_factor; i++) {
+ #if (PlSnP_baseParallelism == 1)
+ SnP_ExtractAndAddBytes(stateWithIndex(i), input, output, 0, laneCount*SnP_laneLengthInBytes);
+ #else
+ SnP_ExtractAndAddLanesAll(stateWithIndex(i), input, output, laneCount, laneOffset);
+ #endif
+ input += laneOffset*SnP_laneLengthInBytes*PlSnP_baseParallelism;
+ output += laneOffset*SnP_laneLengthInBytes*PlSnP_baseParallelism;
+ }
+}
+
+#undef PlSnP_factor
+#undef SnP_stateOffset
+#undef stateWithIndex
+#undef JOIN0
+#undef JOIN
+#undef PlSnP_StaticInitialize
+#undef PlSnP_InitializeAll
+#undef PlSnP_AddByte
+#undef PlSnP_AddBytes
+#undef PlSnP_AddLanesAll
+#undef PlSnP_OverwriteBytes
+#undef PlSnP_OverwriteLanesAll
+#undef PlSnP_OverwriteWithZeroes
+#undef PlSnP_PermuteAll
+#undef PlSnP_ExtractBytes
+#undef PlSnP_ExtractLanesAll
+#undef PlSnP_ExtractAndAddBytes
+#undef PlSnP_ExtractAndAddLanesAll
+#undef SnP_stateAlignment
+#undef SnP_stateSizeInBytes
+#undef PlSnP_factor
+#undef SnP_stateOffset
+#undef stateWithIndex
+#undef SnP_StaticInitialize
+#undef SnP_Initialize
+#undef SnP_InitializeAll
+#undef SnP_AddByte
+#undef SnP_AddBytes
+#undef SnP_AddLanesAll
+#undef SnP_OverwriteBytes
+#undef SnP_OverwriteWithZeroes
+#undef SnP_OverwriteLanesAll
+#undef SnP_ExtractBytes
+#undef SnP_ExtractLanesAll
+#undef SnP_ExtractAndAddBytes
+#undef SnP_ExtractAndAddLanesAll