diff options
author | weidai <weidai@57ff6487-cd31-0410-9ec3-f628ee90f5f0> | 2009-03-12 11:24:12 +0000 |
---|---|---|
committer | weidai <weidai@57ff6487-cd31-0410-9ec3-f628ee90f5f0> | 2009-03-12 11:24:12 +0000 |
commit | a36c71ecb6840ff799546ccaf665e55f6a6ed5dc (patch) | |
tree | 68edc0bccf003f5615716b3ae2d6b97067af39c4 /salsa.h | |
parent | ce1fbfcba325116155a605b8519bc0b4e272348f (diff) | |
download | cryptopp-a36c71ecb6840ff799546ccaf665e55f6a6ed5dc.tar.gz |
- add EAX mode, XSalsa20
- speed up GCM key setup
- wipe stack in AES assembly code
- speed up CFB mode
git-svn-id: svn://svn.code.sf.net/p/cryptopp/code/trunk/c5@444 57ff6487-cd31-0410-9ec3-f628ee90f5f0
Diffstat (limited to 'salsa.h')
-rwxr-xr-x | salsa.h | 26 |
1 files changed, 24 insertions, 2 deletions
@@ -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<word32, 16>, public Salsa20_Info +class CRYPTOPP_NO_VTABLE Salsa20_Policy : public AdditiveCipherConcretePolicy<word32, 16> { protected: void CipherSetKey(const NameValuePairs ¶ms, const byte *key, size_t length); @@ -26,7 +26,6 @@ protected: unsigned int GetOptimalBlockSize() const; #endif -private: FixedSizeAlignedSecBlock<word32, 16> 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<word32, 8> m_key; +}; + +/// <a href="http://www.cryptolounge.org/wiki/XSalsa20">XSalsa20</a>, variable rounds: 8, 12 or 20 (default 20) +struct XSalsa20 : public XSalsa20_Info, public SymmetricCipherDocumentation +{ + typedef SymmetricCipherFinal<ConcretePolicyHolder<XSalsa20_Policy, AdditiveCipherTemplate<> >, XSalsa20_Info> Encryption; + typedef Encryption Decryption; +}; + NAMESPACE_END #endif |