AdditiveCipherConcretePolicy< WT, W, X, BASE > Struct Template Referenceabstract

Base class for additive stream ciphers. More...

Inheritance diagram for AdditiveCipherConcretePolicy< WT, W, X, BASE >:

## Public Types

typedef WT | WordType
| Word type for the cipher.

## Public Member Functions

unsigned int | GetAlignment () const
| Provides data alignment requirements. More...
unsigned int | GetBytesPerIteration () const
| Provides number of bytes operated upon during an iteration. More...
unsigned int | GetIterationsToBuffer () const
| Provides buffer size based on iterations. More...
bool | CanOperateKeystream () const
| Flag indicating. More...
virtual void | OperateKeystream (KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount)=0
| Operates the keystream. More...
Public Member Functions inherited from AdditiveCipherAbstractPolicy
virtual unsigned int | GetOptimalBlockSize () const
| Provides number of ideal bytes to process. More...
virtual void | WriteKeystream (byte *keystream, size_t iterationCount)
| Generate the keystream. More...
virtual void | CipherSetKey (const NameValuePairs &params, const byte *key, size_t length)=0
| Key the cipher. More...
virtual void | CipherResynchronize (byte *keystreamBuffer, const byte *iv, size_t length)
| Resynchronize the cipher. More...
virtual bool | CipherIsRandomAccess () const =0
| Flag indicating random access. More...
virtual void | SeekToIteration (lword iterationCount)
| Seeks to a random position in the stream. More...
virtual std::string | AlgorithmProvider () const
| Retrieve the provider of this algorithm. More...

## Static Public Attributes

static const int | BYTES_PER_ITERATION = sizeof(WordType) * W
| Number of bytes for an iteration. More...

## Detailed Description

### template<typename WT, unsigned int W, unsigned int X = 1, class BASE = AdditiveCipherAbstractPolicy>
struct AdditiveCipherConcretePolicy< WT, W, X, BASE >

Base class for additive stream ciphers.

Template Parameters

  WT | word type
  W | count of words
  X | bytes per iteration count
  BASE | AdditiveCipherAbstractPolicy derived base class

Definition at line 201 of file strciphr.h.

## Member Function Documentation

## GetAlignment()

template<typename WT , unsigned int W, unsigned int X = 1, class BASE = AdditiveCipherAbstractPolicy>

unsigned int AdditiveCipherConcretePolicy< WT, W, X, BASE >::GetAlignment | ( |  | ) | const

inline virtual

Provides data alignment requirements.

Returns
  data alignment requirements, in bytes

Internally, the default implementation returns 1. If the stream cipher is implemented using an SSE2 ASM or intrinsics, then the value returned is usually 16.

Reimplemented from AdditiveCipherAbstractPolicy.

Definition at line 220 of file strciphr.h.

## GetBytesPerIteration()

template<typename WT , unsigned int W, unsigned int X = 1, class BASE = AdditiveCipherAbstractPolicy>

unsigned int AdditiveCipherConcretePolicy< WT, W, X, BASE >::GetBytesPerIteration | ( |  | ) | const

inline virtual

Provides number of bytes operated upon during an iteration.

Returns
  bytes operated upon during an iteration, in bytes

See also
  GetOptimalBlockSize()

Implements AdditiveCipherAbstractPolicy.

Definition at line 225 of file strciphr.h.

## GetIterationsToBuffer()

template<typename WT , unsigned int W, unsigned int X = 1, class BASE = AdditiveCipherAbstractPolicy>

unsigned int AdditiveCipherConcretePolicy< WT, W, X, BASE >::GetIterationsToBuffer | ( |  | ) | const

inline virtual

Provides buffer size based on iterations.

Returns
  the buffer size based on iterations, in bytes

Implements AdditiveCipherAbstractPolicy.

Definition at line 229 of file strciphr.h.

## CanOperateKeystream()

template<typename WT , unsigned int W, unsigned int X = 1, class BASE = AdditiveCipherAbstractPolicy>

bool AdditiveCipherConcretePolicy< WT, W, X, BASE >::CanOperateKeystream | ( |  | ) | const

inline virtual

Flag indicating.

Returns
  true if the stream can be generated independent of the transformation input, false otherwise

See also
  CanOperateKeystream(), OperateKeystream(), WriteKeystream()

Reimplemented from AdditiveCipherAbstractPolicy.

Definition at line 235 of file strciphr.h.

## OperateKeystream()

template<typename WT , unsigned int W, unsigned int X = 1, class BASE = AdditiveCipherAbstractPolicy>

virtual void AdditiveCipherConcretePolicy< WT, W, X, BASE >::OperateKeystream | ( | KeystreamOperation | operation,
|  | byte * | output,
|  | const byte * | input,
|  | size_t | iterationCount
| ) |  |

pure virtual

Operates the keystream.

Parameters

  operation | the operation with additional flags
  output | the output buffer
  input | the input buffer
  iterationCount | the number of iterations to perform on the input

OperateKeystream() will attempt to operate upon GetOptimalBlockSize() buffer, which will be derived from GetBytesPerIteration().

See also
  CanOperateKeystream(), OperateKeystream(), WriteKeystream(), KeystreamOperation()

Reimplemented from AdditiveCipherAbstractPolicy.

## Member Data Documentation

## BYTES_PER_ITERATION

template<typename WT , unsigned int W, unsigned int X = 1, class BASE = AdditiveCipherAbstractPolicy>

const int AdditiveCipherConcretePolicy< WT, W, X, BASE >::BYTES_PER_ITERATION = sizeof(WordType) * W

static

Number of bytes for an iteration.

BYTES_PER_ITERATION is the product `sizeof(WordType) * W`. For example, ChaCha uses 16 each `word32`, and the value of BYTES_PER_ITERATION is 64. Each invocation of the ChaCha block function produces 64 bytes of keystream.

Definition at line 211 of file strciphr.h.

The documentation for this struct was generated from the following file:

- strciphr.h