9 {4, 10, 9, 2, 13, 8, 0, 14, 6, 11, 1, 12, 7, 15, 5, 3},
10 {14, 11, 4, 12, 6, 13, 15, 10, 2, 3, 8, 1, 0, 7, 5, 9},
11 {5, 8, 1, 13, 10, 3, 4, 2, 14, 15, 12, 7, 6, 0, 9, 11},
12 {7, 13, 10, 1, 0, 8, 9, 15, 14, 4, 6, 12, 11, 2, 5, 3},
13 {6, 12, 7, 1, 5, 15, 13, 8, 4, 10, 9, 14, 0, 3, 11, 2},
14 {4, 11, 10, 0, 7, 2, 1, 13, 3, 6, 8, 5, 9, 12, 15, 14},
15 {13, 11, 4, 1, 3, 15, 5, 9, 0, 10, 14, 7, 6, 8, 2, 12},
16 {1, 15, 13, 0, 5, 7, 10, 4, 9, 2, 3, 14, 6, 11, 8, 12}};
46 for (
unsigned i = 0; i < 4; i++)
47 for (
unsigned j = 0; j < 256; j++)
58 sTable[3][GETBYTE(t, 3)] ^ sTable[2][GETBYTE(t, 2)] \ 59 ^ sTable[1][GETBYTE(t, 1)] ^ sTable[0][GETBYTE(t, 0)] ) 69 for (
unsigned int i=0; i<3; i++)
108 for (
unsigned int i=0; i<3; i++)
void GetUserKey(ByteOrder order, T *out, size_t outlen, const byte *in, size_t inlen)
static word32 sTable[4][256]
static void PrecalculateSTable()
Utility functions for the Crypto++ library.
static volatile bool sTableCalculated
#define NAMESPACE_BEGIN(x)
static GetBlock< T, B, GA > Get(const void *block)
void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms)
Sets the key for this object without performing parameter validation.
FixedSizeSecBlock< word32, 8 > m_key
Classes for the GIST block cipher.
Access a block of memory.
byte order is little-endian
void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const
Encrypt or decrypt a block.
void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const
Encrypt or decrypt a block.
void AssertValidKeyLength(size_t length) const
Validates the key length.
static const byte sBox[8][16]
iterator begin()
Provides an iterator pointing to the first element in the memory block.
T rotlMod(T x, unsigned int y)
Performs a left rotate.
BlockGetAndPut< word32, LittleEndian > Block
Interface for retrieving values given their names.