Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cCipherDES.cpp File Reference
#include "pch.h"
#include "Cipher/cCipherDES.h"

Namespaces

 GrayLib
 

Macros

#define DES_IP(X, Y)
 
#define DES_FP(X, Y)
 
#define DES_ROUND(X, Y)
 

Detailed Description

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

Macro Definition Documentation

◆ DES_FP

#define DES_FP (   X,
 
)
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

#define DES_IP (   X,
 
)
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,
 
)
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 ]; \
}