wake.h
Go to the documentation of this file.
// wake.h - originally written and placed in the public domain by Wei Dai
/// \file wake.h
/// \brief Classes for WAKE stream cipher
#ifndef CRYPTOPP_WAKE_H
#define CRYPTOPP_WAKE_H
#include "seckey.h"
#include "secblock.h"
#include "strciphr.h"
NAMESPACE_BEGIN(CryptoPP)
/// \brief WAKE stream cipher information
/// \tparam B Endianness of the stream cipher
/// \since Crypto++ 1.0
template <class B = BigEndian>
struct WAKE_OFB_Info : public FixedKeyLength<32>
{
CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return B::ToEnum() == LITTLE_ENDIAN_ORDER ? "WAKE-OFB-LE" : "WAKE-OFB-BE";}
};
class CRYPTOPP_NO_VTABLE WAKE_Base
{
protected:
word32 M(word32 x, word32 y);
void GenKey(word32 k0, word32 k1, word32 k2, word32 k3);
word32 t[257];
word32 r3, r4, r5, r6;
};
/// \brief WAKE stream cipher operation
/// \tparam B Endianness of the stream cipher
/// \since Crypto++ 1.0
template <class B = BigEndian>
class CRYPTOPP_NO_VTABLE WAKE_Policy : public AdditiveCipherConcretePolicy<word32, 1, 64>, protected WAKE_Base
{
protected:
void CipherSetKey(const NameValuePairs &params, const byte *key, size_t length);
// OFB
void OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount);
bool CipherIsRandomAccess() const {return false;}
};
/// \brief WAKE stream cipher
/// \tparam B Endianness of the stream cipher
/// \since Crypto++ 1.0
template <class B = BigEndian>
struct WAKE_OFB : public WAKE_OFB_Info<B>, public SymmetricCipherDocumentation
{
typedef SymmetricCipherFinal<ConcretePolicyHolder<WAKE_Policy<B>, AdditiveCipherTemplate<> >, WAKE_OFB_Info<B> > Encryption;
typedef Encryption Decryption;
};
NAMESPACE_END
#endif
AdditiveCipherTemplate
Base class for additive stream ciphers with SymmetricCipher interface.
Definition: strciphr.h:298
FixedKeyLength
Inherited by keyed algorithms with fixed key length.
Definition: seckey.h:125
NameValuePairs
Interface for retrieving values given their names.
Definition: cryptlib.h:322
SymmetricCipherFinal
SymmetricCipher implementation.
Definition: strciphr.h:675
SymmetricCipher
Interface for one direction (encryption or decryption) of a stream cipher or cipher mode.
Definition: cryptlib.h:1291
WAKE_Base
Definition: wake.h:25
WAKE_Policy
WAKE stream cipher operation.
Definition: wake.h:39
word32
unsigned int word32
32-bit unsigned datatype
Definition: config_int.h:62
LITTLE_ENDIAN_ORDER
@ LITTLE_ENDIAN_ORDER
byte order is little-endian
Definition: cryptlib.h:145
CryptoPP
Crypto++ library namespace.
secblock.h
Classes and functions for secure memory allocations.
seckey.h
Classes and functions for implementing secret key algorithms.
strciphr.h
Classes for implementing stream ciphers.
KeystreamOperation
KeystreamOperation
Keystream operation flags.
Definition: strciphr.h:88
AdditiveCipherConcretePolicy
Base class for additive stream ciphers.
Definition: strciphr.h:202
SymmetricCipherDocumentation
Provides Encryption and Decryption typedefs used by derived classes to implement a symmetric cipher.
Definition: seckey.h:414
WAKE_OFB_Info
WAKE stream cipher information.
Definition: wake.h:20
WAKE_OFB
WAKE stream cipher.
Definition: wake.h:52