1/*
2Implementation by the Keccak, Keyak and Ketje Teams, namely, Guido Bertoni,
3Joan Daemen, Michaƫl Peeters, Gilles Van Assche and Ronny Van Keer, hereby
4denoted as "the implementer".
5
6For more information, feedback or questions, please refer to our websites:
7http://keccak.noekeon.org/
8http://keyak.noekeon.org/
9http://ketje.noekeon.org/
10
11To the extent possible under law, the implementer has waived all copyright
12and related or neighboring rights to the source code in this file.
13http://creativecommons.org/publicdomain/zero/1.0/
14*/
15
16#ifndef _KeccakP_1600_SnP_h_
17#define _KeccakP_1600_SnP_h_
18
19/** For the documentation, see SnP-documentation.h.
20 */
21
22/* #include "brg_endian.h" */
23#include "KeccakP-1600-opt64-config.h"
24
25#define KeccakP1600_implementation "generic 64-bit optimized implementation (" KeccakP1600_implementation_config ")"
26#define KeccakP1600_stateSizeInBytes 200
27#define KeccakP1600_stateAlignment 8
28#define KeccakF1600_FastLoop_supported
29
30#include <stddef.h>
31
32#define KeccakP1600_StaticInitialize()
33void KeccakP1600_Initialize(void *state);
34#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
35#define KeccakP1600_AddByte(state, byte, offset) \
36 ((unsigned char*)(state))[(offset)] ^= (byte)
37#else
38void KeccakP1600_AddByte(void *state, unsigned char data, unsigned int offset);
39#endif
40void KeccakP1600_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
41void KeccakP1600_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
42void KeccakP1600_OverwriteWithZeroes(void *state, unsigned int byteCount);
43void KeccakP1600_Permute_12rounds(void *state);
44void KeccakP1600_Permute_24rounds(void *state);
45void KeccakP1600_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length);
46void KeccakP1600_ExtractAndAddBytes(const void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length);
47size_t KeccakF1600_FastLoop_Absorb(void *state, unsigned int laneCount, const unsigned char *data, size_t dataByteLen);
48
49#endif
50