summaryrefslogtreecommitdiff
path: root/chacha.h
diff options
context:
space:
mode:
authorJeffrey Walton <noloader@gmail.com>2016-04-21 12:12:42 -0400
committerJeffrey Walton <noloader@gmail.com>2016-04-21 12:12:42 -0400
commit38f6c33789e1a029595564dd5663622b15410d35 (patch)
treede8dbfd87fdf1eb56711539c918197fec7b811c9 /chacha.h
parent0f702accfc8fd7eb1f6a9f98e4b004d6949b58c8 (diff)
downloadcryptopp-git-38f6c33789e1a029595564dd5663622b15410d35.tar.gz
Update ChaCha to latest sources
Diffstat (limited to 'chacha.h')
-rwxr-xr-x[-rw-r--r--]chacha.h26
1 files changed, 16 insertions, 10 deletions
diff --git a/chacha.h b/chacha.h
index 9a07467a..23608070 100644..100755
--- a/chacha.h
+++ b/chacha.h
@@ -1,8 +1,10 @@
// chacha.h - written and placed in the public domain by Jeffrey Walton.
// Copyright assigned to the Crypto++ project.
+// Based on Wei Dai's Salsa20 and Bernstein's reference ChaCha
+// family implementation at http://cr.yp.to/chacha.html.
//! \file chacha.h
-//! \brief Classes for ChaCha8, ChaCha12 and ChaCha stream ciphers
+//! \brief Classes for ChaCha8, ChaCha12 and ChaCha20 stream ciphers
#ifndef CRYPTOPP_CHACHA_H
#define CRYPTOPP_CHACHA_H
@@ -17,17 +19,21 @@ NAMESPACE_BEGIN(CryptoPP)
template <unsigned int R>
struct ChaCha_Info : public VariableKeyLength<32, 16, 32, 16, SimpleKeyingInterface::UNIQUE_IV, 8>, public FixedRounds<R>
{
- static const char *StaticAlgorithmName() {return "ChaCha";}
+ static const char *StaticAlgorithmName() {static const std::string name = "ChaCha" + IntToString(R); return name.c_str();}
};
+//! \class ChaCha_Policy
+//! \brief ChaCha stream cipher implementation
template <unsigned int R>
-class CRYPTOPP_NO_VTABLE ChaCha_Base : public AdditiveCipherConcretePolicy<word32, 16>
+class CRYPTOPP_NO_VTABLE ChaCha_Policy : public AdditiveCipherConcretePolicy<word32, 16>
{
protected:
+ CRYPTOPP_CONSTANT(ROUNDS=FixedRounds<R>::ROUNDS);
+
void CipherSetKey(const NameValuePairs &params, const byte *key, size_t length);
void OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount);
void CipherResynchronize(byte *keystreamBuffer, const byte *IV, size_t length);
- bool CipherIsRandomAccess() const {return true;}
+ bool CipherIsRandomAccess() const {return false;} // TODO
void SeekToIteration(lword iterationCount);
unsigned int GetAlignment() const;
unsigned int GetOptimalBlockSize() const;
@@ -40,8 +46,8 @@ protected:
//! \sa <a href="http://cr.yp.to/chacha/chacha-20080128.pdf">ChaCha, a variant of Salsa20</a> (2008.01.28).
struct ChaCha8 : public ChaCha_Info<8>, public SymmetricCipherDocumentation
{
- typedef SymmetricCipherFinal<ConcretePolicyHolder<ChaCha_Base<8>, AdditiveCipherTemplate<> >, ChaCha_Info<8> > Encryption;
- typedef SymmetricCipherFinal<ConcretePolicyHolder<ChaCha_Base<8>, AdditiveCipherTemplate<> >, ChaCha_Info<8> > Decryption;
+ typedef SymmetricCipherFinal<ConcretePolicyHolder<ChaCha_Policy<8>, AdditiveCipherTemplate<> >, ChaCha_Info<8> > Encryption;
+ typedef SymmetricCipherFinal<ConcretePolicyHolder<ChaCha_Policy<8>, AdditiveCipherTemplate<> >, ChaCha_Info<8> > Decryption;
};
//! \class ChaCha12
@@ -49,8 +55,8 @@ struct ChaCha8 : public ChaCha_Info<8>, public SymmetricCipherDocumentation
//! \sa <a href="http://cr.yp.to/chacha/chacha-20080128.pdf">ChaCha, a variant of Salsa20</a> (2008.01.28).
struct ChaCha12 : public ChaCha_Info<12>, public SymmetricCipherDocumentation
{
- typedef SymmetricCipherFinal<ConcretePolicyHolder<ChaCha_Base<12>, AdditiveCipherTemplate<> >, ChaCha_Info<12> > Encryption;
- typedef SymmetricCipherFinal<ConcretePolicyHolder<ChaCha_Base<12>, AdditiveCipherTemplate<> >, ChaCha_Info<12> > Decryption;
+ typedef SymmetricCipherFinal<ConcretePolicyHolder<ChaCha_Policy<12>, AdditiveCipherTemplate<> >, ChaCha_Info<12> > Encryption;
+ typedef SymmetricCipherFinal<ConcretePolicyHolder<ChaCha_Policy<12>, AdditiveCipherTemplate<> >, ChaCha_Info<12> > Decryption;
};
//! \class ChaCha20
@@ -58,8 +64,8 @@ struct ChaCha12 : public ChaCha_Info<12>, public SymmetricCipherDocumentation
//! \sa <a href="http://cr.yp.to/chacha/chacha-20080128.pdf">ChaCha, a variant of Salsa20</a> (2008.01.28).
struct ChaCha20 : public ChaCha_Info<20>, public SymmetricCipherDocumentation
{
- typedef SymmetricCipherFinal<ConcretePolicyHolder<ChaCha_Base<20>, AdditiveCipherTemplate<> >, ChaCha_Info<20> > Encryption;
- typedef SymmetricCipherFinal<ConcretePolicyHolder<ChaCha_Base<20>, AdditiveCipherTemplate<> >, ChaCha_Info<20> > Decryption;
+ typedef SymmetricCipherFinal<ConcretePolicyHolder<ChaCha_Policy<20>, AdditiveCipherTemplate<> >, ChaCha_Info<20> > Encryption;
+ typedef SymmetricCipherFinal<ConcretePolicyHolder<ChaCha_Policy<20>, AdditiveCipherTemplate<> >, ChaCha_Info<20> > Decryption;
};
NAMESPACE_END