summaryrefslogtreecommitdiff
path: root/blowfish.h
diff options
context:
space:
mode:
authorRăzvan Cojocaru <36885180+rzvncj@users.noreply.github.com>2019-09-30 03:18:56 +0300
committerJeffrey Walton <noloader@gmail.com>2019-09-29 20:18:56 -0400
commit9912d0630e4aea48b9cdd7c5dd2ca4a5d856e7b1 (patch)
tree3cbf07995f7a678c89393e8b9f39ee736b0eaec0 /blowfish.h
parent7a927b4d8270c017d533a29f1e21be8c6d595ba9 (diff)
downloadcryptopp-git-9912d0630e4aea48b9cdd7c5dd2ca4a5d856e7b1.tar.gz
Add support for Mcrypt's blowfish-compat (PR #877)
Diffstat (limited to 'blowfish.h')
-rw-r--r--blowfish.h58
1 files changed, 37 insertions, 21 deletions
diff --git a/blowfish.h b/blowfish.h
index 5f34609f..855795b2 100644
--- a/blowfish.h
+++ b/blowfish.h
@@ -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 &params);
+
+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 &params);
-
- 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