#ifndef CRYPTOPP_ARC4_H #define CRYPTOPP_ARC4_H #include "strciphr.h" NAMESPACE_BEGIN(CryptoPP) //! Alleged RC4 /*! Use #ARC4 typedef rather than this class directly. */ class CRYPTOPP_NO_VTABLE ARC4_Base : public VariableKeyLength<16, 1, 256>, public RandomNumberGenerator, public SymmetricCipher { public: ~ARC4_Base(); static const char *StaticAlgorithmName() {return "ARC4";} byte GenerateByte(); void DiscardBytes(unsigned int n); void ProcessData(byte *outString, const byte *inString, unsigned int length); bool IsRandomAccess() const {return false;} bool IsSelfInverting() const {return true;} bool IsForwardTransformation() const {return true;} typedef SymmetricCipherFinal Encryption; typedef SymmetricCipherFinal Decryption; protected: void UncheckedSetKey(const NameValuePairs ¶ms, const byte *key, unsigned int length, const byte *iv); virtual unsigned int GetDefaultDiscardBytes() const {return 0;} FixedSizeSecBlock m_state; byte m_x, m_y; }; //! . typedef SymmetricCipherFinal ARC4; //! Modified ARC4: it discards the first 256 bytes of keystream which may be weaker than the rest /*! Use #MARC4 typedef rather than this class directly. */ class CRYPTOPP_NO_VTABLE MARC4_Base : public ARC4_Base { public: static const char *StaticAlgorithmName() {return "MARC4";} typedef SymmetricCipherFinal Encryption; typedef SymmetricCipherFinal Decryption; protected: unsigned int GetDefaultDiscardBytes() const {return 256;} }; //! . typedef SymmetricCipherFinal MARC4; NAMESPACE_END #endif