summaryrefslogtreecommitdiff
path: root/chacha.h
diff options
context:
space:
mode:
authorJeffrey Walton <noloader@gmail.com>2018-07-25 16:25:41 -0400
committerJeffrey Walton <noloader@gmail.com>2018-07-25 16:25:41 -0400
commit2f83777e9b1949793f20e8f9b439e34296a6bae4 (patch)
tree6e1a9d0d10da85338a4d15a776132d470c9fcea2 /chacha.h
parente50a40ec59abb84d02c173ff31bdaf60a33cf94c (diff)
downloadcryptopp-git-2f83777e9b1949793f20e8f9b439e34296a6bae4.tar.gz
Backout ChaCha changes to Crypto++ 7.0
These changes made it in by accident at Commit b74a6f444568. We were going to try to let them ride but they broke versioning. They may be added later but we should avoid the change at this time.
Diffstat (limited to 'chacha.h')
-rw-r--r--chacha.h34
1 files changed, 27 insertions, 7 deletions
diff --git a/chacha.h b/chacha.h
index b9497cbf..bdbe925b 100644
--- a/chacha.h
+++ b/chacha.h
@@ -20,19 +20,21 @@ NAMESPACE_BEGIN(CryptoPP)
/// \brief ChaCha stream cipher information
/// \since Crypto++ 5.6.4
-struct ChaCha_Info : public VariableKeyLength<32, 16, 32, 16, SimpleKeyingInterface::UNIQUE_IV, 8>
+template <unsigned int R>
+struct ChaCha_Info : public VariableKeyLength<32, 16, 32, 16, SimpleKeyingInterface::UNIQUE_IV, 8>, public FixedRounds<R>
{
CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {
- return "ChaCha";
+ return (R==8?"ChaCha8":(R==12?"ChaCha12":(R==20?"ChaCha20":"ChaCha")));
}
};
/// \brief ChaCha stream cipher implementation
/// \since Crypto++ 5.6.4
+template <unsigned int R>
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);
@@ -45,15 +47,33 @@ protected:
int m_rounds;
};
-/// \brief ChaCha stream cipher
+/// \brief ChaCha8 stream cipher
+/// \sa <a href="http://cr.yp.to/chacha/chacha-20080128.pdf">ChaCha, a variant of Salsa20</a> (2008.01.28).
+/// \since Crypto++ 5.6.4
+struct ChaCha8 : public ChaCha_Info<8>, public SymmetricCipherDocumentation
+{
+ typedef SymmetricCipherFinal<ConcretePolicyHolder<ChaCha_Policy<8>, AdditiveCipherTemplate<> >, ChaCha_Info<8> > Encryption;
+ typedef Encryption Decryption;
+};
+
+/// \brief ChaCha12 stream cipher
/// \sa <a href="http://cr.yp.to/chacha/chacha-20080128.pdf">ChaCha, a variant of Salsa20</a> (2008.01.28).
-/// \details Bernstein and ECRYPT's ChaCha is _slightly_ different from the TLS working group's implementation for
+/// \since Crypto++ 5.6.4
+struct ChaCha12 : public ChaCha_Info<12>, public SymmetricCipherDocumentation
+{
+ typedef SymmetricCipherFinal<ConcretePolicyHolder<ChaCha_Policy<12>, AdditiveCipherTemplate<> >, ChaCha_Info<12> > Encryption;
+ typedef Encryption Decryption;
+};
+
+/// \brief ChaCha20 stream cipher
+/// \details Bernstein and ECRYPT's ChaCha is _slightly_ different from the TLS working roup's implementation for
/// cipher suites <tt>TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256</tt>,
/// <tt>TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256</tt>, and <tt>TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256</tt>.
+/// \sa <a href="http://cr.yp.to/chacha/chacha-20080208.pdf">ChaCha, a variant of Salsa20</a> (2008.01.28).
/// \since Crypto++ 5.6.4
-struct ChaCha : public ChaCha_Info, public SymmetricCipherDocumentation
+struct ChaCha20 : public ChaCha_Info<20>, public SymmetricCipherDocumentation
{
- typedef SymmetricCipherFinal<ConcretePolicyHolder<ChaCha_Policy, AdditiveCipherTemplate<> >, ChaCha_Info> Encryption;
+ typedef SymmetricCipherFinal<ConcretePolicyHolder<ChaCha_Policy<20>, AdditiveCipherTemplate<> >, ChaCha_Info<20> > Encryption;
typedef Encryption Decryption;
};