mirror of
https://github.com/veracrypt/VeraCrypt.git
synced 2025-11-12 03:18:26 -06:00
Add missing fast Serpent implementation sources.
This commit is contained in:
437
src/Crypto/SerpentFast_sbox.h
Normal file
437
src/Crypto/SerpentFast_sbox.h
Normal file
@@ -0,0 +1,437 @@
|
||||
/*
|
||||
* Serpent SBox Expressions
|
||||
* (C) 1999-2007,2013 Jack Lloyd
|
||||
*
|
||||
* The sbox expressions used here were discovered by Dag Arne Osvik and
|
||||
* are described in his paper "Speeding Up Serpent".
|
||||
*
|
||||
* Botan is released under the Simplified BSD License (see license.txt)
|
||||
*/
|
||||
|
||||
#ifndef BOTAN_SERPENT_SBOX_H__
|
||||
#define BOTAN_SERPENT_SBOX_H__
|
||||
|
||||
#define SBoxE1(T, B0, B1, B2, B3) \
|
||||
do { \
|
||||
T B4; \
|
||||
B3 ^= B0; \
|
||||
B4 = B1; \
|
||||
B1 &= B3; \
|
||||
B4 ^= B2; \
|
||||
B1 ^= B0; \
|
||||
B0 |= B3; \
|
||||
B0 ^= B4; \
|
||||
B4 ^= B3; \
|
||||
B3 ^= B2; \
|
||||
B2 |= B1; \
|
||||
B2 ^= B4; \
|
||||
B4 = ~B4; \
|
||||
B4 |= B1; \
|
||||
B1 ^= B3; \
|
||||
B1 ^= B4; \
|
||||
B3 |= B0; \
|
||||
B1 ^= B3; \
|
||||
B4 ^= B3; \
|
||||
B3 = B0; \
|
||||
B0 = B1; \
|
||||
B1 = B4; \
|
||||
} while(0);
|
||||
|
||||
#define SBoxE2(T, B0, B1, B2, B3) \
|
||||
do { \
|
||||
T B4; \
|
||||
B0 = ~B0; \
|
||||
B2 = ~B2; \
|
||||
B4 = B0; \
|
||||
B0 &= B1; \
|
||||
B2 ^= B0; \
|
||||
B0 |= B3; \
|
||||
B3 ^= B2; \
|
||||
B1 ^= B0; \
|
||||
B0 ^= B4; \
|
||||
B4 |= B1; \
|
||||
B1 ^= B3; \
|
||||
B2 |= B0; \
|
||||
B2 &= B4; \
|
||||
B0 ^= B1; \
|
||||
B1 &= B2; \
|
||||
B1 ^= B0; \
|
||||
B0 &= B2; \
|
||||
B4 ^= B0; \
|
||||
B0 = B2; \
|
||||
B2 = B3; \
|
||||
B3 = B1; \
|
||||
B1 = B4; \
|
||||
} while(0);
|
||||
|
||||
#define SBoxE3(T, B0, B1, B2, B3) \
|
||||
do { \
|
||||
T B4 = B0; \
|
||||
B0 &= B2; \
|
||||
B0 ^= B3; \
|
||||
B2 ^= B1; \
|
||||
B2 ^= B0; \
|
||||
B3 |= B4; \
|
||||
B3 ^= B1; \
|
||||
B4 ^= B2; \
|
||||
B1 = B3; \
|
||||
B3 |= B4; \
|
||||
B3 ^= B0; \
|
||||
B0 &= B1; \
|
||||
B4 ^= B0; \
|
||||
B1 ^= B3; \
|
||||
B1 ^= B4; \
|
||||
B0 = B2; \
|
||||
B2 = B1; \
|
||||
B1 = B3; \
|
||||
B3 = ~B4; \
|
||||
} while(0);
|
||||
|
||||
#define SBoxE4(T, B0, B1, B2, B3) \
|
||||
do { \
|
||||
T B4 = B0; \
|
||||
B0 |= B3; \
|
||||
B3 ^= B1; \
|
||||
B1 &= B4; \
|
||||
B4 ^= B2; \
|
||||
B2 ^= B3; \
|
||||
B3 &= B0; \
|
||||
B4 |= B1; \
|
||||
B3 ^= B4; \
|
||||
B0 ^= B1; \
|
||||
B4 &= B0; \
|
||||
B1 ^= B3; \
|
||||
B4 ^= B2; \
|
||||
B1 |= B0; \
|
||||
B1 ^= B2; \
|
||||
B0 ^= B3; \
|
||||
B2 = B1; \
|
||||
B1 |= B3; \
|
||||
B0 ^= B1; \
|
||||
B1 = B2; \
|
||||
B2 = B3; \
|
||||
B3 = B4; \
|
||||
} while(0);
|
||||
|
||||
#define SBoxE5(T, B0, B1, B2, B3) \
|
||||
do { \
|
||||
T B4; \
|
||||
B1 ^= B3; \
|
||||
B3 = ~B3; \
|
||||
B2 ^= B3; \
|
||||
B3 ^= B0; \
|
||||
B4 = B1; \
|
||||
B1 &= B3; \
|
||||
B1 ^= B2; \
|
||||
B4 ^= B3; \
|
||||
B0 ^= B4; \
|
||||
B2 &= B4; \
|
||||
B2 ^= B0; \
|
||||
B0 &= B1; \
|
||||
B3 ^= B0; \
|
||||
B4 |= B1; \
|
||||
B4 ^= B0; \
|
||||
B0 |= B3; \
|
||||
B0 ^= B2; \
|
||||
B2 &= B3; \
|
||||
B0 = ~B0; \
|
||||
B4 ^= B2; \
|
||||
B2 = B0; \
|
||||
B0 = B1; \
|
||||
B1 = B4; \
|
||||
} while(0);
|
||||
|
||||
#define SBoxE6(T, B0, B1, B2, B3) \
|
||||
do { \
|
||||
T B4; \
|
||||
B0 ^= B1; \
|
||||
B1 ^= B3; \
|
||||
B3 = ~B3; \
|
||||
B4 = B1; \
|
||||
B1 &= B0; \
|
||||
B2 ^= B3; \
|
||||
B1 ^= B2; \
|
||||
B2 |= B4; \
|
||||
B4 ^= B3; \
|
||||
B3 &= B1; \
|
||||
B3 ^= B0; \
|
||||
B4 ^= B1; \
|
||||
B4 ^= B2; \
|
||||
B2 ^= B0; \
|
||||
B0 &= B3; \
|
||||
B2 = ~B2; \
|
||||
B0 ^= B4; \
|
||||
B4 |= B3; \
|
||||
B4 ^= B2; \
|
||||
B2 = B0; \
|
||||
B0 = B1; \
|
||||
B1 = B3; \
|
||||
B3 = B4; \
|
||||
} while(0);
|
||||
|
||||
#define SBoxE7(T, B0, B1, B2, B3) \
|
||||
do { \
|
||||
T B4; \
|
||||
B2 = ~B2; \
|
||||
B4 = B3; \
|
||||
B3 &= B0; \
|
||||
B0 ^= B4; \
|
||||
B3 ^= B2; \
|
||||
B2 |= B4; \
|
||||
B1 ^= B3; \
|
||||
B2 ^= B0; \
|
||||
B0 |= B1; \
|
||||
B2 ^= B1; \
|
||||
B4 ^= B0; \
|
||||
B0 |= B3; \
|
||||
B0 ^= B2; \
|
||||
B4 ^= B3; \
|
||||
B4 ^= B0; \
|
||||
B3 = ~B3; \
|
||||
B2 &= B4; \
|
||||
B3 ^= B2; \
|
||||
B2 = B4; \
|
||||
} while(0);
|
||||
|
||||
#define SBoxE8(T, B0, B1, B2, B3) \
|
||||
do { \
|
||||
T B4 = B1; \
|
||||
B1 |= B2; \
|
||||
B1 ^= B3; \
|
||||
B4 ^= B2; \
|
||||
B2 ^= B1; \
|
||||
B3 |= B4; \
|
||||
B3 &= B0; \
|
||||
B4 ^= B2; \
|
||||
B3 ^= B1; \
|
||||
B1 |= B4; \
|
||||
B1 ^= B0; \
|
||||
B0 |= B4; \
|
||||
B0 ^= B2; \
|
||||
B1 ^= B4; \
|
||||
B2 ^= B1; \
|
||||
B1 &= B0; \
|
||||
B1 ^= B4; \
|
||||
B2 = ~B2; \
|
||||
B2 |= B0; \
|
||||
B4 ^= B2; \
|
||||
B2 = B1; \
|
||||
B1 = B3; \
|
||||
B3 = B0; \
|
||||
B0 = B4; \
|
||||
} while(0);
|
||||
|
||||
#define SBoxD1(T, B0, B1, B2, B3) \
|
||||
do { \
|
||||
T B4; \
|
||||
B2 = ~B2; \
|
||||
B4 = B1; \
|
||||
B1 |= B0; \
|
||||
B4 = ~B4; \
|
||||
B1 ^= B2; \
|
||||
B2 |= B4; \
|
||||
B1 ^= B3; \
|
||||
B0 ^= B4; \
|
||||
B2 ^= B0; \
|
||||
B0 &= B3; \
|
||||
B4 ^= B0; \
|
||||
B0 |= B1; \
|
||||
B0 ^= B2; \
|
||||
B3 ^= B4; \
|
||||
B2 ^= B1; \
|
||||
B3 ^= B0; \
|
||||
B3 ^= B1; \
|
||||
B2 &= B3; \
|
||||
B4 ^= B2; \
|
||||
B2 = B1; \
|
||||
B1 = B4; \
|
||||
} while(0);
|
||||
|
||||
#define SBoxD2(T, B0, B1, B2, B3) \
|
||||
do { \
|
||||
T B4 = B1; \
|
||||
B1 ^= B3; \
|
||||
B3 &= B1; \
|
||||
B4 ^= B2; \
|
||||
B3 ^= B0; \
|
||||
B0 |= B1; \
|
||||
B2 ^= B3; \
|
||||
B0 ^= B4; \
|
||||
B0 |= B2; \
|
||||
B1 ^= B3; \
|
||||
B0 ^= B1; \
|
||||
B1 |= B3; \
|
||||
B1 ^= B0; \
|
||||
B4 = ~B4; \
|
||||
B4 ^= B1; \
|
||||
B1 |= B0; \
|
||||
B1 ^= B0; \
|
||||
B1 |= B4; \
|
||||
B3 ^= B1; \
|
||||
B1 = B0; \
|
||||
B0 = B4; \
|
||||
B4 = B2; \
|
||||
B2 = B3; \
|
||||
B3 = B4; \
|
||||
} while(0);
|
||||
|
||||
#define SBoxD3(T, B0, B1, B2, B3) \
|
||||
do { \
|
||||
T B4; \
|
||||
B2 ^= B3; \
|
||||
B3 ^= B0; \
|
||||
B4 = B3; \
|
||||
B3 &= B2; \
|
||||
B3 ^= B1; \
|
||||
B1 |= B2; \
|
||||
B1 ^= B4; \
|
||||
B4 &= B3; \
|
||||
B2 ^= B3; \
|
||||
B4 &= B0; \
|
||||
B4 ^= B2; \
|
||||
B2 &= B1; \
|
||||
B2 |= B0; \
|
||||
B3 = ~B3; \
|
||||
B2 ^= B3; \
|
||||
B0 ^= B3; \
|
||||
B0 &= B1; \
|
||||
B3 ^= B4; \
|
||||
B3 ^= B0; \
|
||||
B0 = B1; \
|
||||
B1 = B4; \
|
||||
} while(0);
|
||||
|
||||
#define SBoxD4(T, B0, B1, B2, B3) \
|
||||
do { \
|
||||
T B4 = B2; \
|
||||
B2 ^= B1; \
|
||||
B0 ^= B2; \
|
||||
B4 &= B2; \
|
||||
B4 ^= B0; \
|
||||
B0 &= B1; \
|
||||
B1 ^= B3; \
|
||||
B3 |= B4; \
|
||||
B2 ^= B3; \
|
||||
B0 ^= B3; \
|
||||
B1 ^= B4; \
|
||||
B3 &= B2; \
|
||||
B3 ^= B1; \
|
||||
B1 ^= B0; \
|
||||
B1 |= B2; \
|
||||
B0 ^= B3; \
|
||||
B1 ^= B4; \
|
||||
B0 ^= B1; \
|
||||
B4 = B0; \
|
||||
B0 = B2; \
|
||||
B2 = B3; \
|
||||
B3 = B4; \
|
||||
} while(0);
|
||||
|
||||
#define SBoxD5(T, B0, B1, B2, B3) \
|
||||
do { \
|
||||
T B4 = B2; \
|
||||
B2 &= B3; \
|
||||
B2 ^= B1; \
|
||||
B1 |= B3; \
|
||||
B1 &= B0; \
|
||||
B4 ^= B2; \
|
||||
B4 ^= B1; \
|
||||
B1 &= B2; \
|
||||
B0 = ~B0; \
|
||||
B3 ^= B4; \
|
||||
B1 ^= B3; \
|
||||
B3 &= B0; \
|
||||
B3 ^= B2; \
|
||||
B0 ^= B1; \
|
||||
B2 &= B0; \
|
||||
B3 ^= B0; \
|
||||
B2 ^= B4; \
|
||||
B2 |= B3; \
|
||||
B3 ^= B0; \
|
||||
B2 ^= B1; \
|
||||
B1 = B3; \
|
||||
B3 = B4; \
|
||||
} while(0);
|
||||
|
||||
#define SBoxD6(T, B0, B1, B2, B3) \
|
||||
do { \
|
||||
T B4; \
|
||||
B1 = ~B1; \
|
||||
B4 = B3; \
|
||||
B2 ^= B1; \
|
||||
B3 |= B0; \
|
||||
B3 ^= B2; \
|
||||
B2 |= B1; \
|
||||
B2 &= B0; \
|
||||
B4 ^= B3; \
|
||||
B2 ^= B4; \
|
||||
B4 |= B0; \
|
||||
B4 ^= B1; \
|
||||
B1 &= B2; \
|
||||
B1 ^= B3; \
|
||||
B4 ^= B2; \
|
||||
B3 &= B4; \
|
||||
B4 ^= B1; \
|
||||
B3 ^= B4; \
|
||||
B4 = ~B4; \
|
||||
B3 ^= B0; \
|
||||
B0 = B1; \
|
||||
B1 = B4; \
|
||||
B4 = B3; \
|
||||
B3 = B2; \
|
||||
B2 = B4; \
|
||||
} while(0);
|
||||
|
||||
#define SBoxD7(T, B0, B1, B2, B3) \
|
||||
do { \
|
||||
T B4; \
|
||||
B0 ^= B2; \
|
||||
B4 = B2; \
|
||||
B2 &= B0; \
|
||||
B4 ^= B3; \
|
||||
B2 = ~B2; \
|
||||
B3 ^= B1; \
|
||||
B2 ^= B3; \
|
||||
B4 |= B0; \
|
||||
B0 ^= B2; \
|
||||
B3 ^= B4; \
|
||||
B4 ^= B1; \
|
||||
B1 &= B3; \
|
||||
B1 ^= B0; \
|
||||
B0 ^= B3; \
|
||||
B0 |= B2; \
|
||||
B3 ^= B1; \
|
||||
B4 ^= B0; \
|
||||
B0 = B1; \
|
||||
B1 = B2; \
|
||||
B2 = B4; \
|
||||
} while(0);
|
||||
|
||||
#define SBoxD8(T, B0, B1, B2, B3) \
|
||||
do { \
|
||||
T B4 = B2; \
|
||||
B2 ^= B0; \
|
||||
B0 &= B3; \
|
||||
B4 |= B3; \
|
||||
B2 = ~B2; \
|
||||
B3 ^= B1; \
|
||||
B1 |= B0; \
|
||||
B0 ^= B2; \
|
||||
B2 &= B4; \
|
||||
B3 &= B4; \
|
||||
B1 ^= B2; \
|
||||
B2 ^= B0; \
|
||||
B0 |= B2; \
|
||||
B4 ^= B1; \
|
||||
B0 ^= B3; \
|
||||
B3 ^= B4; \
|
||||
B4 |= B0; \
|
||||
B3 ^= B2; \
|
||||
B4 ^= B2; \
|
||||
B2 = B1; \
|
||||
B1 = B0; \
|
||||
B0 = B3; \
|
||||
B3 = B4; \
|
||||
} while(0);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user