#include "pch.h"
#include "Cipher/cCipherDES.h"
FIPS-46-3 compliant Triple-DES implementation DES, on which TDES is based, was originally designed by Horst Feistel at IBM in 1974, and was adopted as a standard by NIST (formerly NBS). http://csrc.nist.gov/publications/fips/fips46-3/fips46-3.pdf
◆ DES_FP
Value: { \
X = ((X << 31) | (X >> 1)) & 0xFFFFFFFF; \
T = (X ^ Y) & 0xAAAAAAAA; X ^= T; Y ^= T; \
Y = ((Y << 31) | (Y >> 1)) & 0xFFFFFFFF; \
T = ((Y >> 8) ^ X) & 0x00FF00FF; X ^= T; Y ^= (T << 8); \
T = ((Y >> 2) ^ X) & 0x33333333; X ^= T; Y ^= (T << 2); \
T = ((X >> 16) ^ Y) & 0x0000FFFF; Y ^= T; X ^= (T << 16); \
T = ((X >> 4) ^ Y) & 0x0F0F0F0F; Y ^= T; X ^= (T << 4); \
}
◆ DES_IP
Value: { \
T = ((X >> 4) ^ Y) & 0x0F0F0F0F; Y ^= T; X ^= (T << 4); \
T = ((X >> 16) ^ Y) & 0x0000FFFF; Y ^= T; X ^= (T << 16); \
T = ((Y >> 2) ^ X) & 0x33333333; X ^= T; Y ^= (T << 2); \
T = ((Y >> 8) ^ X) & 0x00FF00FF; X ^= T; Y ^= (T << 8); \
Y = ((Y << 1) | (Y >> 31)) & 0xFFFFFFFF; \
T = (X ^ Y) & 0xAAAAAAAA; Y ^= T; X ^= T; \
X = ((X << 1) | (X >> 31)) & 0xFFFFFFFF; \
}
◆ DES_ROUND
#define DES_ROUND |
( |
|
X, |
|
|
|
Y |
|
) |
| |
Value: { \
T = *pSK++ ^ X; \
Y ^= k_SB8[ (T ) & 0x3F ] ^ \
k_SB6[ (T >> 8) & 0x3F ] ^ \
k_SB4[ (T >> 16) & 0x3F ] ^ \
k_SB2[ (T >> 24) & 0x3F ]; \
\
T = *pSK++ ^ ((X << 28) | (X >> 4)); \
Y ^= k_SB7[ (T ) & 0x3F ] ^ \
k_SB5[ (T >> 8) & 0x3F ] ^ \
k_SB3[ (T >> 16) & 0x3F ] ^ \
k_SB1[ (T >> 24) & 0x3F ]; \
}