Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members

arc4.h

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

Generated on Wed Jul 28 08:07:06 2004 for Crypto++ by doxygen 1.3.7