#ifndef CRYPTOPP_TEA_H #define CRYPTOPP_TEA_H /** \file */ #include "seckey.h" #include "secblock.h" #include "misc.h" NAMESPACE_BEGIN(CryptoPP) //! _ struct TEA_Info : public FixedBlockSize<8>, public FixedKeyLength<16>, public VariableRounds<32> { static const char *StaticAlgorithmName() {return "TEA";} }; /// TEA class TEA : public TEA_Info, public BlockCipherDocumentation { class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl { public: void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms); protected: FixedSizeSecBlock m_k; word32 m_limit; }; class CRYPTOPP_NO_VTABLE Enc : public Base { public: void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; }; class CRYPTOPP_NO_VTABLE Dec : public Base { public: void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; }; public: typedef BlockCipherFinal Encryption; typedef BlockCipherFinal Decryption; }; typedef TEA::Encryption TEAEncryption; typedef TEA::Decryption TEADecryption; //! _ struct XTEA_Info : public FixedBlockSize<8>, public FixedKeyLength<16>, public VariableRounds<32> { static const char *StaticAlgorithmName() {return "XTEA";} }; /// XTEA class XTEA : public XTEA_Info, public BlockCipherDocumentation { class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl { public: void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms); protected: FixedSizeSecBlock m_k; word32 m_limit; }; class CRYPTOPP_NO_VTABLE Enc : public Base { public: void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; }; class CRYPTOPP_NO_VTABLE Dec : public Base { public: void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; }; public: typedef BlockCipherFinal Encryption; typedef BlockCipherFinal Decryption; }; //! _ struct BTEA_Info : public FixedKeyLength<16> { static const char *StaticAlgorithmName() {return "BTEA";} }; //! corrected Block TEA (as described in "xxtea"). /*! This class hasn't been tested yet. */ class BTEA : public BTEA_Info, public BlockCipherDocumentation { class CRYPTOPP_NO_VTABLE Base : public AlgorithmImpl, BTEA_Info>, public BTEA_Info { public: void UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs ¶ms) { CRYPTOPP_UNUSED(length), CRYPTOPP_UNUSED(params); m_blockSize = params.GetIntValueWithDefault("BlockSize", 60*4); GetUserKey(BIG_ENDIAN_ORDER, m_k.begin(), 4, key, KEYLENGTH); } unsigned int BlockSize() const {return m_blockSize;} protected: FixedSizeSecBlock m_k; unsigned int m_blockSize; }; class CRYPTOPP_NO_VTABLE Enc : public Base { public: void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; }; class CRYPTOPP_NO_VTABLE Dec : public Base { public: void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; }; public: typedef BlockCipherFinal Encryption; typedef BlockCipherFinal Decryption; }; NAMESPACE_END #endif