diff options
author | Jeffrey Walton <noloader@gmail.com> | 2018-07-25 16:25:41 -0400 |
---|---|---|
committer | Jeffrey Walton <noloader@gmail.com> | 2018-07-25 16:25:41 -0400 |
commit | 2f83777e9b1949793f20e8f9b439e34296a6bae4 (patch) | |
tree | 6e1a9d0d10da85338a4d15a776132d470c9fcea2 /chacha.h | |
parent | e50a40ec59abb84d02c173ff31bdaf60a33cf94c (diff) | |
download | cryptopp-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.h | 34 |
1 files changed, 27 insertions, 7 deletions
@@ -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 ¶ms, 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;
};
|