6 #ifndef _INC_cCipherBlowfish_H
7 #define _INC_cCipherBlowfish_H
39 this->m_v.
u_qw = b.m_v.u_qw;
68 static const int k_Rounds = 16;
69 static const UINT32 k_P[k_Rounds + 2];
70 static const UINT32 k_S[4][256];
72 UINT32 m_RK[k_Rounds + 2];
78 static const size_t k_BlockAlign = 8;
79 static const size_t k_KeySizeMax = 56;
82 inline UINT32
F(UINT32 ui)
const noexcept
84 return ((m_S[0][LOBYTE(ui >> 24)] + m_S[1][LOBYTE(ui >> 16)]) ^ m_S[2][LOBYTE(ui >> 8)]) + m_S[3][LOBYTE(ui)];
91 cCipherBlowfish(
bool bEncodeMode =
true,
const void* pKeyData =
nullptr,
size_t nKeySize = 0);
101 virtual HRESULT SetCipherKey(
const void* pKeyData =
nullptr,
size_t nKeySize = 0)
override;
103 virtual HRESULT CipherModeECB(BYTE pOutput[k_BlockAlign],
const BYTE pInput[k_BlockAlign])
override;
104 virtual HRESULT CipherModeCBC(BYTE* pOutput,
const BYTE* pInput,
size_t nSize, BYTE* pIV)
override;
105 virtual HRESULT CipherModeCFB(BYTE* pOutput,
const BYTE* pInput,
size_t nSize, BYTE pIV[k_BlockAlign],
size_t* pnIVOffset)
override;
106 virtual HRESULT CipherModeCTR(BYTE* pOutput,
const BYTE* pInput,
size_t nSize, BYTE pNonceCounter[k_BlockAlign],
size_t* pNCOffset, BYTE pStreamBlock[k_BlockAlign])
override;
108 virtual HRESULT Cipher(BYTE* pOutput,
const BYTE* pInput,
size_t nSizeBytes)
override;
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
Definition: cCipherBlowfish.h:114
virtual cCipherBase * AllocCipherAlg(bool bEncodeMode) const
Definition: cCipherBlowfish.h:121
cCipherAlgBlowfish()
Definition: cCipherBlowfish.h:118
Definition: cCipherTypeDef.h:67
Definition: cCipherBase.h:125
Definition: cCipherBlowfish.h:20
cCipherBlowfishBlock(const cCipherBlowfishBlock &b) noexcept
Definition: cCipherBlowfish.h:37
cCipherBlowfishBlock & operator^=(const cCipherBlowfishBlock &b)
Definition: cCipherBlowfish.h:41
cCipherBlowfishBlock(const BYTE *pInput)
Definition: cCipherBlowfish.h:33
void get_BlockBytes(BYTE *pOutput) const
Definition: cCipherBlowfish.h:51
cCipherBlowfishBlock() noexcept
Definition: cCipherBlowfish.h:29
cUnion64 m_v
Definition: cCipherBlowfish.h:27
void put_BytesToBlock(const BYTE *pInput)
Definition: cCipherBlowfish.h:46
Definition: cCipherBlowfish.h:59
UNITTEST_FRIEND(cCipherBlowfish)
virtual size_t get_BlockAlignSize() const override
Definition: cCipherBlowfish.h:95
@ CipherAlgorithm_Blowfish
Definition: cCipherBase.h:33
static void CopyHtoN(BYTE *pDst, const void *pSrc, size_t nSizeBlock) noexcept
Definition: cMem.h:194
static void CopyNtoH(void *pDst, const BYTE *pSrc, size_t nSizeBlock) noexcept
Definition: cMem.h:203
UINT64 u_qw
64 bits = QuadPart = ULONGLONG.
Definition: cTypes.h:122