arc4.h

00001 #ifndef CRYPTOPP_ARC4_H
00002 #define CRYPTOPP_ARC4_H
00003 
00004 #include "strciphr.h"
00005 
00006 NAMESPACE_BEGIN(CryptoPP)
00007 
00008 //! _
00009 class CRYPTOPP_NO_VTABLE ARC4_Base : public VariableKeyLength<16, 1, 256>, public RandomNumberGenerator, public SymmetricCipher, public SymmetricCipherDocumentation
00010 {
00011 public:
00012         ~ARC4_Base();
00013 
00014         static const char *StaticAlgorithmName() {return "ARC4";}
00015 
00016     byte GenerateByte();
00017         void DiscardBytes(size_t n);
00018 
00019     void ProcessData(byte *outString, const byte *inString, size_t length);
00020         
00021         bool IsRandomAccess() const {return false;}
00022         bool IsSelfInverting() const {return true;}
00023         bool IsForwardTransformation() const {return true;}
00024 
00025         typedef SymmetricCipherFinal<ARC4_Base> Encryption;
00026         typedef SymmetricCipherFinal<ARC4_Base> Decryption;
00027 
00028 protected:
00029         void UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs &params);
00030         virtual unsigned int GetDefaultDiscardBytes() const {return 0;}
00031 
00032     FixedSizeSecBlock<byte, 256> m_state;
00033     byte m_x, m_y;
00034 };
00035 
00036 //! <a href="http://www.weidai.com/scan-mirror/cs.html#RC4">Alleged RC4</a>
00037 DOCUMENTED_TYPEDEF(SymmetricCipherFinal<ARC4_Base>, ARC4)
00038 
00039 //! _
00040 class CRYPTOPP_NO_VTABLE MARC4_Base : public ARC4_Base
00041 {
00042 public:
00043         static const char *StaticAlgorithmName() {return "MARC4";}
00044 
00045         typedef SymmetricCipherFinal<MARC4_Base> Encryption;
00046         typedef SymmetricCipherFinal<MARC4_Base> Decryption;
00047 
00048 protected:
00049         unsigned int GetDefaultDiscardBytes() const {return 256;}
00050 };
00051 
00052 //! Modified ARC4: it discards the first 256 bytes of keystream which may be weaker than the rest
00053 DOCUMENTED_TYPEDEF(SymmetricCipherFinal<MARC4_Base>, MARC4)
00054 
00055 NAMESPACE_END
00056 
00057 #endif

Generated on Sat Dec 23 02:07:05 2006 for Crypto++ by  doxygen 1.5.1-p1