arc4.h
Go to the documentation of this file.
// arc4.h - originally written and placed in the public domain by Wei Dai
/// \file arc4.h
/// \brief Classes for ARC4 cipher
/// \since Crypto++ 3.1
#ifndef CRYPTOPP_ARC4_H
#define CRYPTOPP_ARC4_H
#include "cryptlib.h"
#include "strciphr.h"
#include "secblock.h"
#include "smartptr.h"
NAMESPACE_BEGIN(CryptoPP)
namespace Weak1 {
/// \brief ARC4 base class
/// \details Implementations and overrides in \p Base apply to both \p ENCRYPTION and \p DECRYPTION directions
/// \since Crypto++ 3.1
class CRYPTOPP_NO_VTABLE ARC4_Base : public VariableKeyLength<16, 1, 256>, public RandomNumberGenerator, public SymmetricCipher, public SymmetricCipherDocumentation
{
public:
~ARC4_Base();
CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "ARC4";}
void GenerateBlock(byte *output, size_t size);
void DiscardBytes(size_t n);
void ProcessData(byte *outString, const byte *inString, size_t length);
bool IsRandomAccess() const {return false;}
bool IsSelfInverting() const {return true;}
bool IsForwardTransformation() const {return true;}
typedef SymmetricCipherFinal<ARC4_Base> Encryption;
typedef SymmetricCipherFinal<ARC4_Base> Decryption;
protected:
void UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs &params);
virtual unsigned int GetDefaultDiscardBytes() const {return 0;}
FixedSizeSecBlock<byte, 256> m_state;
byte m_x, m_y;
};
/// \brief Alleged RC4
/// \sa <a href="http://www.cryptopp.com/wiki/RC4">Alleged RC4</a>
/// \since Crypto++ 3.1
DOCUMENTED_TYPEDEF(SymmetricCipherFinal<ARC4_Base>, ARC4);
/// \brief MARC4 base class
/// \details Implementations and overrides in \p Base apply to both \p ENCRYPTION and \p DECRYPTION directions
/// \details MARC4 discards the first 256 bytes of keystream, which may be weaker than the rest
/// \since Crypto++ 3.1
class CRYPTOPP_NO_VTABLE MARC4_Base : public ARC4_Base
{
public:
CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "MARC4";}
typedef SymmetricCipherFinal<MARC4_Base> Encryption;
typedef SymmetricCipherFinal<MARC4_Base> Decryption;
protected:
unsigned int GetDefaultDiscardBytes() const {return 256;}
};
/// \brief Modified Alleged RC4
/// \sa <a href="http://www.cryptopp.com/wiki/RC4">Alleged RC4</a>
/// \since Crypto++ 3.1
DOCUMENTED_TYPEDEF(SymmetricCipherFinal<MARC4_Base>, MARC4);
}
#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
#ifdef __GNUC__
#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."
#else
#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.")
#endif
#endif
NAMESPACE_END
#endif
FixedSizeSecBlock
Fixed size stack-based SecBlock.
Definition secblock.h:1246
NameValuePairs
Interface for retrieving values given their names.
Definition cryptlib.h:327
RandomNumberGenerator
Interface for random number generators.
Definition cryptlib.h:1440
SymmetricCipherFinal
SymmetricCipher implementation.
Definition strciphr.h:684
SymmetricCipherFinal< ARC4_Base >::SymmetricCipherFinal
SymmetricCipherFinal()
Definition strciphr.h:689
SymmetricCipher
Interface for one direction (encryption or decryption) of a stream cipher or cipher mode.
Definition cryptlib.h:1296
VariableKeyLength
Inherited by keyed algorithms with variable key length.
Definition seckey.h:166
Weak::ARC4_Base
ARC4 base class.
Definition arc4.h:23
Weak::ARC4_Base::GenerateBlock
void GenerateBlock(byte *output, size_t size)
Generate random array of bytes.
Definition arc4.cpp:67
Weak::ARC4_Base::IsRandomAccess
bool IsRandomAccess() const
Determines whether the cipher supports random access.
Definition arc4.h:34
Weak::ARC4_Base::IsSelfInverting
bool IsSelfInverting() const
Determines whether the cipher is self-inverting.
Definition arc4.h:35
Weak::ARC4_Base::IsForwardTransformation
bool IsForwardTransformation() const
Determines if the cipher is being operated in its forward direction.
Definition arc4.h:36
Weak::ARC4_Base::DiscardBytes
void DiscardBytes(size_t n)
Generate and discard n bytes.
Definition arc4.cpp:102
Weak::ARC4_Base::ProcessData
void ProcessData(byte *outString, const byte *inString, size_t length)
Encrypt or decrypt an array of bytes.
Definition arc4.cpp:73
Weak::ARC4
Alleged RC4.
Definition arc4.h:52
Weak::MARC4_Base
MARC4 base class.
Definition arc4.h:59
Weak::MARC4
Modified Alleged RC4.
Definition arc4.h:73
cryptlib.h
Abstract base classes that provide a uniform interface to this library.
CryptoPP
Crypto++ library namespace.
Weak
Namespace containing weak and wounded algorithms.
Definition arc4.cpp:14
secblock.h
Classes and functions for secure memory allocations.
smartptr.h
Classes for automatic resource management.
strciphr.h
Classes for implementing stream ciphers.
SymmetricCipherDocumentation
Provides Encryption and Decryption typedefs used by derived classes to implement a symmetric cipher.
Definition seckey.h:414