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

Namespaces

 GrayLib
 

Macros

#define ROTL(DEST, SRC, SHIFT)
 
#define FL(XL, XR, KL, KR)
 
#define FLInv(YL, YR, KL, KR)
 
#define SHIFT_AND_PLACE(INDEX, OFFSET)
 

Detailed Description

Camellia implementation The Camellia block cipher was designed by NTT and Mitsubishi Electric Corporation. http://info.isl.ntt.co.jp/crypt/eng/camellia/dl/01espec.pdf

Macro Definition Documentation

◆ FL

#define FL (   XL,
  XR,
  KL,
  KR 
)
Value:
{ \
(XR) = ((((XL) & (KL)) << 1) | (((XL) & (KL)) >> 31)) ^ (XR); \
(XL) = ((XR) | (KR)) ^ (XL); \
}

◆ FLInv

#define FLInv (   YL,
  YR,
  KL,
  KR 
)
Value:
{ \
(YL) = ((YR) | (KR)) ^ (YL); \
(YR) = ((((YL) & (KL)) << 1) | (((YL) & (KL)) >> 31)) ^ (YR); \
}

◆ ROTL

#define ROTL (   DEST,
  SRC,
  SHIFT 
)
Value:
{ \
(DEST)[0] = (SRC)[0] << (SHIFT) ^ (SRC)[1] >> (32 - (SHIFT)); \
(DEST)[1] = (SRC)[1] << (SHIFT) ^ (SRC)[2] >> (32 - (SHIFT)); \
(DEST)[2] = (SRC)[2] << (SHIFT) ^ (SRC)[3] >> (32 - (SHIFT)); \
(DEST)[3] = (SRC)[3] << (SHIFT) ^ (SRC)[0] >> (32 - (SHIFT)); \
}

◆ SHIFT_AND_PLACE

#define SHIFT_AND_PLACE (   INDEX,
  OFFSET 
)
Value:
{ \
TK[0] = KC[(OFFSET) * 4 + 0]; \
TK[1] = KC[(OFFSET) * 4 + 1]; \
TK[2] = KC[(OFFSET) * 4 + 2]; \
TK[3] = KC[(OFFSET) * 4 + 3]; \
\
for( i = 1; i <= 4; i++ ) \
if( k_shifts[(INDEX)][(OFFSET)][i -1] ) \
ROTL(TK + i * 4, TK, ( 15 * i ) % 32); \
\
for( i = 0; i < 20; i++ ) \
if( k_indexes[(INDEX)][(OFFSET)][i] != -1 ) { \
pRK[k_indexes[(INDEX)][(OFFSET)][i]] = TK[ i ]; \
} \
}