~zooko/cryptopp/trunk

« back to all changes in this revision

Viewing changes to salsa.h

  • Committer: noloader
  • Date: 2015-06-29 13:37:03 UTC
  • Revision ID: svn-v4:57ff6487-cd31-0410-9ec3-f628ee90f5f0:trunk/c5:558
Cleared warning on operator precedence

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
8
NAMESPACE_BEGIN(CryptoPP)
9
9
 
10
10
//! _
11
 
struct Salsa20_Info : public VariableKeyLength<32, 16, 32, 16, SimpleKeyingInterface::STRUCTURED_IV>
 
11
struct Salsa20_Info : public VariableKeyLength<32, 16, 32, 16, SimpleKeyingInterface::UNIQUE_IV, 8>
12
12
{
13
13
        static const char *StaticAlgorithmName() {return "Salsa20";}
14
14
};
15
15
 
16
 
class CRYPTOPP_NO_VTABLE Salsa20_Policy : public AdditiveCipherConcretePolicy<word32, 16>, public Salsa20_Info
 
16
class CRYPTOPP_NO_VTABLE Salsa20_Policy : public AdditiveCipherConcretePolicy<word32, 16>
17
17
{
18
 
public:
19
 
        unsigned int IVSize() const {return 8;}
20
 
        void GetNextIV(byte *IV) const;
21
 
 
22
18
protected:
23
19
        void CipherSetKey(const NameValuePairs &params, const byte *key, size_t length);
24
20
        void OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount);
25
 
        void CipherResynchronize(byte *keystreamBuffer, const byte *IV);
26
 
        bool IsRandomAccess() const {return true;}
 
21
        void CipherResynchronize(byte *keystreamBuffer, const byte *IV, size_t length);
 
22
        bool CipherIsRandomAccess() const {return true;}
27
23
        void SeekToIteration(lword iterationCount);
 
24
#if CRYPTOPP_BOOL_X86 || CRYPTOPP_BOOL_X64
 
25
        unsigned int GetAlignment() const;
 
26
        unsigned int GetOptimalBlockSize() const;
 
27
#endif
28
28
 
29
 
private:
 
29
        FixedSizeAlignedSecBlock<word32, 16> m_state;
30
30
        int m_rounds;
31
 
        FixedSizeSecBlock<word32, 16> m_state;
32
31
};
33
32
 
34
 
//! Salsa20, variable rounds: 8, 12 or 20 (default 20)
 
33
/// <a href="http://www.cryptolounge.org/wiki/Salsa20">Salsa20</a>, variable rounds: 8, 12 or 20 (default 20)
35
34
struct Salsa20 : public Salsa20_Info, public SymmetricCipherDocumentation
36
35
{
37
36
        typedef SymmetricCipherFinal<ConcretePolicyHolder<Salsa20_Policy, AdditiveCipherTemplate<> >, Salsa20_Info> Encryption;
38
37
        typedef Encryption Decryption;
39
38
};
40
39
 
 
40
//! _
 
41
struct XSalsa20_Info : public FixedKeyLength<32, SimpleKeyingInterface::UNIQUE_IV, 24>
 
42
{
 
43
        static const char *StaticAlgorithmName() {return "XSalsa20";}
 
44
};
 
45
 
 
46
class CRYPTOPP_NO_VTABLE XSalsa20_Policy : public Salsa20_Policy
 
47
{
 
48
public:
 
49
        void CipherSetKey(const NameValuePairs &params, const byte *key, size_t length);
 
50
        void CipherResynchronize(byte *keystreamBuffer, const byte *IV, size_t length);
 
51
 
 
52
protected:
 
53
        FixedSizeSecBlock<word32, 8> m_key;
 
54
};
 
55
 
 
56
/// <a href="http://www.cryptolounge.org/wiki/XSalsa20">XSalsa20</a>, variable rounds: 8, 12 or 20 (default 20)
 
57
struct XSalsa20 : public XSalsa20_Info, public SymmetricCipherDocumentation
 
58
{
 
59
        typedef SymmetricCipherFinal<ConcretePolicyHolder<XSalsa20_Policy, AdditiveCipherTemplate<> >, XSalsa20_Info> Encryption;
 
60
        typedef Encryption Decryption;
 
61
};
 
62
 
41
63
NAMESPACE_END
42
64
 
43
65
#endif