From 2779fc60506e2042ab1569ffad4061f1187d186c Mon Sep 17 00:00:00 2001 From: weidai Date: Thu, 12 Mar 2009 11:24:12 +0000 Subject: - add EAX mode, XSalsa20 - speed up GCM key setup - wipe stack in AES assembly code - speed up CFB mode --- salsa.h | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'salsa.h') diff --git a/salsa.h b/salsa.h index 69dbd2c5..49af8854 100755 --- a/salsa.h +++ b/salsa.h @@ -13,7 +13,7 @@ struct Salsa20_Info : public VariableKeyLength<32, 16, 32, 16, SimpleKeyingInter static const char *StaticAlgorithmName() {return "Salsa20";} }; -class CRYPTOPP_NO_VTABLE Salsa20_Policy : public AdditiveCipherConcretePolicy, public Salsa20_Info +class CRYPTOPP_NO_VTABLE Salsa20_Policy : public AdditiveCipherConcretePolicy { protected: void CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length); @@ -26,7 +26,6 @@ protected: unsigned int GetOptimalBlockSize() const; #endif -private: FixedSizeAlignedSecBlock m_state; int m_rounds; }; @@ -38,6 +37,29 @@ struct Salsa20 : public Salsa20_Info, public SymmetricCipherDocumentation typedef Encryption Decryption; }; +//! _ +struct XSalsa20_Info : public FixedKeyLength<32, SimpleKeyingInterface::UNIQUE_IV, 24> +{ + static const char *StaticAlgorithmName() {return "XSalsa20";} +}; + +class CRYPTOPP_NO_VTABLE XSalsa20_Policy : public Salsa20_Policy +{ +public: + void CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length); + void CipherResynchronize(byte *keystreamBuffer, const byte *IV, size_t length); + +protected: + FixedSizeSecBlock m_key; +}; + +/// XSalsa20, variable rounds: 8, 12 or 20 (default 20) +struct XSalsa20 : public XSalsa20_Info, public SymmetricCipherDocumentation +{ + typedef SymmetricCipherFinal >, XSalsa20_Info> Encryption; + typedef Encryption Decryption; +}; + NAMESPACE_END #endif -- cgit v1.2.1