diff options
author | Răzvan Cojocaru <36885180+rzvncj@users.noreply.github.com> | 2019-09-30 03:18:56 +0300 |
---|---|---|
committer | Jeffrey Walton <noloader@gmail.com> | 2019-09-29 20:18:56 -0400 |
commit | 9912d0630e4aea48b9cdd7c5dd2ca4a5d856e7b1 (patch) | |
tree | 3cbf07995f7a678c89393e8b9f39ee736b0eaec0 /blowfish.h | |
parent | 7a927b4d8270c017d533a29f1e21be8c6d595ba9 (diff) | |
download | cryptopp-git-9912d0630e4aea48b9cdd7c5dd2ca4a5d856e7b1.tar.gz |
Add support for Mcrypt's blowfish-compat (PR #877)
Diffstat (limited to 'blowfish.h')
-rw-r--r-- | blowfish.h | 58 |
1 files changed, 37 insertions, 21 deletions
@@ -11,6 +11,25 @@ NAMESPACE_BEGIN(CryptoPP)
+/// \brief Class specific implementation and overrides used to operate the cipher.
+/// \details Implementations and overrides in \p Base apply to both \p ENCRYPTION and \p DECRYPTION directions
+template<class Info, class ByteOrder>
+class CRYPTOPP_NO_VTABLE Blowfish_Base : public BlockCipherImpl<Info>
+{
+public:
+ void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const;
+ void UncheckedSetKey(const byte *key_string, unsigned int keylength, const NameValuePairs ¶ms);
+
+private:
+ void crypt_block(const word32 in[2], word32 out[2]) const;
+
+ static const word32 p_init[Info::ROUNDS+2];
+ static const word32 s_init[4*256];
+
+ FixedSizeSecBlock<word32, Info::ROUNDS+2> pbox;
+ FixedSizeSecBlock<word32, 4*256> sbox;
+};
+
/// \brief Blowfish block cipher information
struct Blowfish_Info : public FixedBlockSize<8>, public VariableKeyLength<16, 4, 56>, public FixedRounds<16>
{
@@ -21,33 +40,30 @@ struct Blowfish_Info : public FixedBlockSize<8>, public VariableKeyLength<16, 4, /// \brief Blowfish block cipher
/// \since Crypto++ 1.0
-class Blowfish : public Blowfish_Info, public BlockCipherDocumentation
+struct Blowfish : public Blowfish_Info, public BlockCipherDocumentation
{
- /// \brief Class specific implementation and overrides used to operate the cipher.
- /// \details Implementations and overrides in \p Base apply to both \p ENCRYPTION and \p DECRYPTION directions
- class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl<Blowfish_Info>
- {
- public:
- void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const;
- void UncheckedSetKey(const byte *key_string, unsigned int keylength, const NameValuePairs ¶ms);
-
- private:
- void crypt_block(const word32 in[2], word32 out[2]) const;
+ typedef BlockCipherFinal<ENCRYPTION, Blowfish_Base<Blowfish_Info, BigEndian> > Encryption;
+ typedef BlockCipherFinal<DECRYPTION, Blowfish_Base<Blowfish_Info, BigEndian> > Decryption;
+};
- static const word32 p_init[ROUNDS+2];
- static const word32 s_init[4*256];
+typedef Blowfish::Encryption BlowfishEncryption;
+typedef Blowfish::Decryption BlowfishDecryption;
- FixedSizeSecBlock<word32, ROUNDS+2> pbox;
- FixedSizeSecBlock<word32, 4*256> sbox;
- };
+/// \brief BlowfishCompat block cipher information
+struct BlowfishCompat_Info : public FixedBlockSize<8>, public VariableKeyLength<16, 4, 56>, public FixedRounds<16>
+{
+ CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "BlowfishCompat";}
+};
-public:
- typedef BlockCipherFinal<ENCRYPTION, Base> Encryption;
- typedef BlockCipherFinal<DECRYPTION, Base> Decryption;
+/// \brief BlowfishCompat block cipher
+struct BlowfishCompat : public BlowfishCompat_Info, public BlockCipherDocumentation
+{
+ typedef BlockCipherFinal<ENCRYPTION, Blowfish_Base<BlowfishCompat_Info, LittleEndian> > Encryption;
+ typedef BlockCipherFinal<DECRYPTION, Blowfish_Base<BlowfishCompat_Info, LittleEndian> > Decryption;
};
-typedef Blowfish::Encryption BlowfishEncryption;
-typedef Blowfish::Decryption BlowfishDecryption;
+typedef BlowfishCompat::Encryption BlowfishCompatEncryption;
+typedef BlowfishCompat::Decryption BlowfishCompatDecryption;
NAMESPACE_END
|