Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cCipherCamellia.h
Go to the documentation of this file.
1 //
5 //
6 #ifndef _INC_cCipherCamellia_H
7 #define _INC_cCipherCamellia_H
8 #ifndef NO_PRAGMA_ONCE
9 #pragma once
10 #endif
11 #include "cCipherBase.h"
12 #include "cCipherTypeDef.h"
13 
14 namespace GrayLib
15 {
17  {
20 
21  private:
22  static const BYTE k_SIGMA_CHARS[6][8];
23 
24  static const BYTE k_FSb[4][256]; // SBOX 4
25 
26  static const BYTE k_shifts[2][4][4];
27  static const signed char k_indexes[2][4][20];
28  static const signed char k_transposes[2][20];
29 
30  public:
31  static const size_t k_BlockAlign = 16;
32  int m_nRounds;
33  UINT32 m_RK[68];
34 
35  private:
36  static void feistel(const UINT32 x[2], const UINT32 k[2], OUT UINT32 z[2]);
37 
38  public:
39  cCipherCamellia(bool bEncodeMode)
40  : cCipherBase(bEncodeMode)
41  , m_nRounds(0)
42  {
43  cMem::Zero(m_RK, sizeof(m_RK));
44  }
45  virtual ~cCipherCamellia()
46  {
47  m_nRounds = 0;
48  cMem::ZeroSecure(m_RK, sizeof(m_RK));
49  }
50 
51  virtual size_t get_BlockAlignSize() const override
52  {
53  return k_BlockAlign;
54  }
55 
56  virtual HRESULT SetCipherKey(const void* pKeyData, size_t nKeySize) override;
57 
58  virtual HRESULT CipherModeECB(BYTE pOutput[k_BlockAlign], const BYTE pInput[k_BlockAlign]) override; // [k_BlockAlign]
59  virtual HRESULT CipherModeCBC(BYTE* pOutput, const BYTE* pInput, size_t nSize, BYTE* pIV) override; // [k_BlockAlign]
60  virtual HRESULT CipherModeCFB(BYTE* pOutput, const BYTE* pInput, size_t nSize, BYTE pIV[k_BlockAlign], size_t* pnIVOffset) override; // [k_BlockAlign]
61  virtual HRESULT CipherModeCTR(BYTE* pOutput, const BYTE* pInput, size_t nSize, BYTE pNonceCounter[k_BlockAlign], size_t* pNCOffset, BYTE pStreamBlock[k_BlockAlign] ) override; // [k_BlockAlign]
62 
63  virtual HRESULT Cipher(BYTE* pOutput, const BYTE* pInput, size_t nSize) override;
64 
66  };
67 
69  {
72  public:
74  {
75  }
76  virtual cCipherBase* AllocCipherAlg(bool bEncodeMode) const
77  {
78  return new cCipherCamellia(bEncodeMode);
79  }
80  };
81 }
82 
83 #endif
84 
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
Definition: cCipherCamellia.h:69
cCipherAlgCamellia()
Definition: cCipherCamellia.h:73
virtual cCipherBase * AllocCipherAlg(bool bEncodeMode) const
Definition: cCipherCamellia.h:76
Definition: cCipherTypeDef.h:67
Definition: cCipherBase.h:125
Definition: cCipherCamellia.h:17
UNITTEST_FRIEND(cCipherCamellia)
virtual size_t get_BlockAlignSize() const override
Definition: cCipherCamellia.h:51
cCipherCamellia(bool bEncodeMode)
Definition: cCipherCamellia.h:39
int m_nRounds
number of rounds
Definition: cCipherCamellia.h:32
virtual ~cCipherCamellia()
Definition: cCipherCamellia.h:45
Definition: cMesh.h:22
@ CipherAlgorithm_Camellia
Definition: cCipherBase.h:30
static void Zero(void *pData, size_t nSizeBlock) noexcept
Definition: cMem.h:100
static void ZeroSecure(void *pData, size_t nSizeBlock) noexcept
Definition: cMem.h:110