2002-10-04 17:31:41 +00:00
# ifndef CRYPTOPP_ARC4_H
# define CRYPTOPP_ARC4_H
# include "strciphr.h"
NAMESPACE_BEGIN ( CryptoPP )
2007-05-04 15:10:50 +00:00
namespace Weak1 {
2007-04-16 21:27:41 +00:00
2004-07-22 00:51:57 +00:00
//! _
class CRYPTOPP_NO_VTABLE ARC4_Base : public VariableKeyLength < 16 , 1 , 256 > , public RandomNumberGenerator , public SymmetricCipher , public SymmetricCipherDocumentation
2002-10-04 17:31:41 +00:00
{
public :
~ ARC4_Base ( ) ;
static const char * StaticAlgorithmName ( ) { return " ARC4 " ; }
2007-05-04 15:10:50 +00:00
void GenerateBlock ( byte * output , size_t size ) ;
2005-07-12 04:23:32 +00:00
void DiscardBytes ( size_t n ) ;
2002-10-04 17:31:41 +00:00
2015-07-20 16:19:18 +00:00
void ProcessData ( byte * outString , const byte * inString , size_t length ) ;
2002-10-04 17:31:41 +00:00
bool IsRandomAccess ( ) const { return false ; }
bool IsSelfInverting ( ) const { return true ; }
bool IsForwardTransformation ( ) const { return true ; }
2003-07-04 00:17:37 +00:00
typedef SymmetricCipherFinal < ARC4_Base > Encryption ;
typedef SymmetricCipherFinal < ARC4_Base > Decryption ;
2002-10-04 17:31:41 +00:00
protected :
2006-12-10 02:12:23 +00:00
void UncheckedSetKey ( const byte * key , unsigned int length , const NameValuePairs & params ) ;
2002-10-04 17:31:41 +00:00
virtual unsigned int GetDefaultDiscardBytes ( ) const { return 0 ; }
FixedSizeSecBlock < byte , 256 > m_state ;
byte m_x , m_y ;
} ;
2004-07-22 00:51:57 +00:00
//! <a href="http://www.weidai.com/scan-mirror/cs.html#RC4">Alleged RC4</a>
DOCUMENTED_TYPEDEF ( SymmetricCipherFinal < ARC4_Base > , ARC4 )
2002-10-04 17:31:41 +00:00
2004-07-22 00:51:57 +00:00
//! _
2003-05-16 00:53:53 +00:00
class CRYPTOPP_NO_VTABLE MARC4_Base : public ARC4_Base
2002-10-04 17:31:41 +00:00
{
public :
static const char * StaticAlgorithmName ( ) { return " MARC4 " ; }
2003-07-04 00:17:37 +00:00
typedef SymmetricCipherFinal < MARC4_Base > Encryption ;
typedef SymmetricCipherFinal < MARC4_Base > Decryption ;
2002-10-04 17:31:41 +00:00
protected :
unsigned int GetDefaultDiscardBytes ( ) const { return 256 ; }
} ;
2004-07-22 00:51:57 +00:00
//! Modified ARC4: it discards the first 256 bytes of keystream which may be weaker than the rest
DOCUMENTED_TYPEDEF ( SymmetricCipherFinal < MARC4_Base > , MARC4 )
2002-10-04 17:31:41 +00:00
2007-04-16 21:27:41 +00:00
}
2007-05-04 15:10:50 +00:00
# if CRYPTOPP_ENABLE_NAMESPACE_WEAK >= 1
namespace Weak { using namespace Weak1 ; } // import Weak1 into CryptoPP::Weak
# else
using namespace Weak1 ; // import Weak1 into CryptoPP with warning
2007-04-16 21:27:41 +00:00
# ifdef __GNUC__
2007-05-04 15:10:50 +00:00
# warning "You may be using a weak algorithm that has been retained for backwards compatibility. Please '#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1' before including this .h file and prepend the class name with 'Weak::' to remove this warning."
2007-04-16 21:27:41 +00:00
# else
2007-05-04 15:10:50 +00:00
# pragma message("You may be using a weak algorithm that has been retained for backwards compatibility. Please '#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1' before including this .h file and prepend the class name with 'Weak::' to remove this warning.")
2007-04-16 21:27:41 +00:00
# endif
# endif
2002-10-04 17:31:41 +00:00
NAMESPACE_END
# endif