00001 #ifndef CRYPTOPP_BLOWFISH_H
00002 #define CRYPTOPP_BLOWFISH_H
00003
00004
00005
00006 #include "seckey.h"
00007 #include "secblock.h"
00008
00009 NAMESPACE_BEGIN(CryptoPP)
00010
00011 struct Blowfish_Info : public FixedBlockSize<8>, public VariableKeyLength<16, 1, 56>, public FixedRounds<16>
00012 {
00013 static const char *StaticAlgorithmName() {return "Blowfish";}
00014 };
00015
00016
00017 class Blowfish : public Blowfish_Info, public BlockCipherDocumentation
00018 {
00019 class Base : public BlockCipherBaseTemplate<Blowfish_Info>
00020 {
00021 public:
00022 void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const;
00023 void UncheckedSetKey(CipherDir direction, const byte *key_string, unsigned int keylength);
00024
00025 private:
00026 void crypt_block(const word32 in[2], word32 out[2]) const;
00027
00028 static const word32 p_init[ROUNDS+2];
00029 static const word32 s_init[4*256];
00030
00031 FixedSizeSecBlock<word32, ROUNDS+2> pbox;
00032 FixedSizeSecBlock<word32, 4*256> sbox;
00033 };
00034
00035 public:
00036 typedef BlockCipherTemplate<ENCRYPTION, Base> Encryption;
00037 typedef BlockCipherTemplate<DECRYPTION, Base> Decryption;
00038 };
00039
00040 typedef Blowfish::Encryption BlowfishEncryption;
00041 typedef Blowfish::Decryption BlowfishDecryption;
00042
00043 NAMESPACE_END
00044
00045 #endif