Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
GrayLib::cCipherCamellia Class Reference

#include <cCipherCamellia.h>

Inheritance diagram for GrayLib::cCipherCamellia:
GrayLib::cCipherBase Gray::CObject ICipherBase

Public Member Functions

 cCipherCamellia (bool bEncodeMode)
 
virtual ~cCipherCamellia ()
 
virtual size_t get_BlockAlignSize () const override
 
virtual HRESULT SetCipherKey (const void *pKeyData, size_t nKeySize) override
 
virtual HRESULT CipherModeECB (BYTE pOutput[k_BlockAlign], const BYTE pInput[k_BlockAlign]) override
 
virtual HRESULT CipherModeCBC (BYTE *pOutput, const BYTE *pInput, size_t nSize, BYTE *pIV) override
 
virtual HRESULT CipherModeCFB (BYTE *pOutput, const BYTE *pInput, size_t nSize, BYTE pIV[k_BlockAlign], size_t *pnIVOffset) override
 
virtual HRESULT CipherModeCTR (BYTE *pOutput, const BYTE *pInput, size_t nSize, BYTE pNonceCounter[k_BlockAlign], size_t *pNCOffset, BYTE pStreamBlock[k_BlockAlign]) override
 
virtual HRESULT Cipher (BYTE *pOutput, const BYTE *pInput, size_t nSize) override
 
 UNITTEST_FRIEND (cCipherCamellia)
 
- Public Member Functions inherited from GrayLib::cCipherBase
 cCipherBase (bool bEncodeMode=true, CIPHER_BLOCK_TYPE eBlockMode=CIPHER_BLOCK_UNK) noexcept
 
virtual ~cCipherBase ()
 
void put_EncodeMode (bool bEncodeMode) noexcept
 
bool get_EncodeMode () const noexcept
 
void put_BlockMode (CIPHER_BLOCK_TYPE eBlockMode) noexcept
 
virtual HRESULT CipherModeECB (BYTE *pOutput, const BYTE *pInput)
 
virtual HRESULT CipherModeCFB (BYTE *pOutput, const BYTE *pInput, size_t nSize, BYTE *pIV, size_t *pIVOffset)
 
virtual HRESULT CipherModeCTR (BYTE *pOutput, const BYTE *pInput, size_t nSize, BYTE *pNonceCounter, size_t *pNCOffset, BYTE *pStreamBlock)
 
- Public Member Functions inherited from Gray::CObject
virtual ~CObject ()
 
virtual bool isValidCheck () const noexcept
 < memory allocation and structure definitions are valid. More...
 
virtual void AssertValid () const
 < memory allocation and structure definitions are valid. More...
 
virtual void Serialize (cArchive &a)
 

Public Attributes

int m_nRounds
 number of rounds More...
 
UINT32 m_RK [68]
 CAMELLIA round keys. More...
 

Static Public Attributes

static const size_t k_BlockAlign = 16
 

Additional Inherited Members

- Static Public Member Functions inherited from GrayLib::cCipherBase
static size_t GRAYCALL CopyFillX (void *pOutput, size_t nOutSize, const void *pInput, size_t nInputSize)
 
- Protected Attributes inherited from GrayLib::cCipherBase
bool m_bEncodeMode
 We are in encode/encrypt mode vs decode/decrypt mode. More...
 
CIPHER_BLOCK_TYPE m_eBlockMode
 Cipher block mode. How are sequences of blocks treated? More...
 

Detailed Description

CipherAlgorithm_Camellia

Constructor & Destructor Documentation

◆ cCipherCamellia()

GrayLib::cCipherCamellia::cCipherCamellia ( bool  bEncodeMode)
inline

◆ ~cCipherCamellia()

virtual GrayLib::cCipherCamellia::~cCipherCamellia ( )
inlinevirtual

Member Function Documentation

◆ Cipher()

HRESULT GrayLib::cCipherCamellia::Cipher ( BYTE *  pOutput,
const BYTE *  pInput,
size_t  nSize 
)
overridevirtual

Reimplemented from GrayLib::cCipherBase.

◆ CipherModeCBC()

HRESULT GrayLib::cCipherCamellia::CipherModeCBC ( BYTE *  pOutput,
const BYTE *  pInput,
size_t  nSize,
BYTE *  pIV 
)
overridevirtual

CIPHER_BLOCK_CBC CAMELLIA-CBC buffer encryption/decryption Length should be a multiple of the block size (16 bytes)

Note
Upon exit, the content of the IV is updated so that you can call the function same function again on the following block(s) of data and get the same result as if it was encrypted in one call. This allows a "streaming" usage. If on the other hand you need to retain the contents of the IV, you should either save it manually or use the cipher module instead.
  • pOutput = buffer holding the output data
  • pInput = buffer holding the input data
  • nSize = length of the input data
  • pIV = initialization vector (updated after use)
    Returns
    0 if successful, or NTE_BAD_LEN

Reimplemented from GrayLib::cCipherBase.

◆ CipherModeCFB()

HRESULT GrayLib::cCipherCamellia::CipherModeCFB ( BYTE *  pOutput,
const BYTE *  pInput,
size_t  nSize,
BYTE  pIV[k_BlockAlign],
size_t *  pnIVOffset 
)
overridevirtual

CIPHER_BLOCK_CFB CAMELLIA-CFB128 buffer encryption/decryption

Note
Due to the nature of CFB you should use the same key schedule for both encryption and decryption. So a context initialized with camellia_setkey_enc() for bEncodeMode
Upon exit, the content of the IV is updated so that you can call the function same function again on the following block(s) of data and get the same result as if it was encrypted in one call. This allows a "streaming" usage. If on the other hand you need to retain the contents of the IV, you should either save it manually or use the cipher module instead.
  • pOutput = buffer holding the output data
  • pInput = buffer holding the input data
  • nSize = length of the input data
  • pIV = initialization vector (updated after use)
  • pnIVOffset = offset in IV (updated after use)
    Returns
    0 if successful, or NTE_BAD_LEN

◆ CipherModeCTR()

HRESULT GrayLib::cCipherCamellia::CipherModeCTR ( BYTE *  pOutput,
const BYTE *  pInput,
size_t  nSize,
BYTE  pNonceCounter[k_BlockAlign],
size_t *  pNCOffset,
BYTE  pStreamBlock[k_BlockAlign] 
)
overridevirtual

Camellia-CTR buffer encryption/decryption

Warning: You have to keep the maximum use of your counter in mind!

Note
Due to the nature of CTR you should use the same key schedule for both encryption and decryption. So a context initialized with camellia_setkey_enc() for bEncodeMode
  • pOutput = buffer holding the output data
  • pInput = buffer holding the input data
  • nSize = length of the input data
  • pNonceCounter The 128-bit nonce and counter.
  • pNCOffset = The offset in the current pStreamBlock (for resuming within current cipher stream). The offset pointer to should be 0 at the start of a stream.
  • pStreamBlock = The saved stream-block for resuming. Is overwritten by the function.
Returns
0 if successful

◆ CipherModeECB()

HRESULT GrayLib::cCipherCamellia::CipherModeECB ( BYTE  pOutput[k_BlockAlign],
const BYTE  pInput[k_BlockAlign] 
)
overridevirtual

CIPHER_BLOCK_ECB CAMELLIA-ECB block encryption/decryption

  • pOutput = 16-byte output block
  • pInput = 16-byte input block
    Returns
    0 if successful

◆ get_BlockAlignSize()

virtual size_t GrayLib::cCipherCamellia::get_BlockAlignSize ( ) const
inlineoverridevirtual

Reimplemented from GrayLib::cCipherBase.

◆ SetCipherKey()

HRESULT GrayLib::cCipherCamellia::SetCipherKey ( const void *  pKeyData,
size_t  nKeySize 
)
overridevirtual

CAMELLIA key schedule (encryption)

  • pKeyData = set cipher key. Fix it if unaligned.
  • nKeySize = must be 128/8, 192/8 or 256/8
    Returns
    0 if successful, or NTE_BAD_LEN

Reimplemented from GrayLib::cCipherBase.

◆ UNITTEST_FRIEND()

GrayLib::cCipherCamellia::UNITTEST_FRIEND ( cCipherCamellia  )

Member Data Documentation

◆ k_BlockAlign

const size_t GrayLib::cCipherCamellia::k_BlockAlign = 16
static

◆ m_nRounds

int GrayLib::cCipherCamellia::m_nRounds

number of rounds

◆ m_RK

UINT32 GrayLib::cCipherCamellia::m_RK[68]

CAMELLIA round keys.


The documentation for this class was generated from the following files: