Crypto++ 8.6 Free C++ class library of cryptographic schemes

wake.h
Go to the documentation of this file.
1 // wake.h - originally written and placed in the public domain by Wei Dai
2
3 /// \file wake.h
4 /// \brief Classes for WAKE stream cipher
5
6 #ifndef CRYPTOPP_WAKE_H
7 #define CRYPTOPP_WAKE_H
8
9 #include "seckey.h"
10 #include "secblock.h"
11 #include "strciphr.h"
12
13 NAMESPACE_BEGIN(CryptoPP)
14
15 /// \brief WAKE stream cipher information
16 /// \tparam B Endianness of the stream cipher
17 /// \since Crypto++ 1.0
18 template <class B = BigEndian>
19 struct WAKE_OFB_Info : public FixedKeyLength<32>
20 {
21 CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return B::ToEnum() == LITTLE_ENDIAN_ORDER ? "WAKE-OFB-LE" : "WAKE-OFB-BE";}
22 };
23
24 class CRYPTOPP_NO_VTABLE WAKE_Base
25 {
26 protected:
27 word32 M(word32 x, word32 y);
28 void GenKey(word32 k0, word32 k1, word32 k2, word32 k3);
29
30 word32 t[257];
31 word32 r3, r4, r5, r6;
32 };
33
34 /// \brief WAKE stream cipher operation
35 /// \tparam B Endianness of the stream cipher
36 /// \since Crypto++ 1.0
37 template <class B = BigEndian>
38 class CRYPTOPP_NO_VTABLE WAKE_Policy : public AdditiveCipherConcretePolicy<word32, 1, 64>, protected WAKE_Base
39 {
40 protected:
41 void CipherSetKey(const NameValuePairs &params, const byte *key, size_t length);
42 // OFB
43 void OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount);
44 bool CipherIsRandomAccess() const {return false;}
45 };
46
47 /// \brief WAKE stream cipher
48 /// \tparam B Endianness of the stream cipher
49 /// \since Crypto++ 1.0
50 template <class B = BigEndian>
51 struct WAKE_OFB : public WAKE_OFB_Info<B>, public SymmetricCipherDocumentation
52 {
53 typedef SymmetricCipherFinal<ConcretePolicyHolder<WAKE_Policy<B>, AdditiveCipherTemplate<> >, WAKE_OFB_Info<B> > Encryption;
54 typedef Encryption Decryption;
55 };
56
57 NAMESPACE_END
58
59 #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:327
SymmetricCipherFinal
SymmetricCipher implementation.
Definition: strciphr.h:684
SymmetricCipher
Interface for one direction (encryption or decryption) of a stream cipher or cipher mode.
Definition: cryptlib.h:1296
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:72
LITTLE_ENDIAN_ORDER
@ LITTLE_ENDIAN_ORDER
byte order is little-endian
Definition: cryptlib.h:150
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