~zooko/cryptopp/trunk

« back to all changes in this revision

Viewing changes to randpool.h

  • Committer: weidai
  • Date: 2009-03-14 22:27:56 UTC
  • Revision ID: svn-v4:57ff6487-cd31-0410-9ec3-f628ee90f5f0:trunk/c5:455
fix line ending

Show diffs side-by-side

added added

removed removed

Lines of Context:
7
7
NAMESPACE_BEGIN(CryptoPP)
8
8
 
9
9
//! Randomness Pool
10
 
/*! This class can be used to generate
11
 
        pseudorandom bytes after seeding the pool with
12
 
        the Put() methods */
13
 
class CRYPTOPP_DLL RandomPool : public RandomNumberGenerator,
14
 
                                   public Bufferless<BufferedTransformation>
 
10
/*! This class can be used to generate cryptographic quality
 
11
        pseudorandom bytes after seeding the pool with IncorporateEntropy() */
 
12
class CRYPTOPP_DLL RandomPool : public RandomNumberGenerator, public NotCopyable
15
13
{
16
14
public:
17
 
        //! poolSize must be greater than 16
18
 
        RandomPool(unsigned int poolSize=384);
19
 
 
20
 
        size_t Put2(const byte *begin, size_t length, int messageEnd, bool blocking);
21
 
 
22
 
        bool AnyRetrievable() const {return true;}
23
 
        lword MaxRetrievable() const {return ULONG_MAX;}
24
 
 
25
 
        size_t TransferTo2(BufferedTransformation &target, lword &transferBytes, const std::string &channel=NULL_CHANNEL, bool blocking=true);
26
 
        size_t CopyRangeTo2(BufferedTransformation &target, lword &begin, lword end=LWORD_MAX, const std::string &channel=NULL_CHANNEL, bool blocking=true) const
27
 
        {
28
 
                throw NotImplemented("RandomPool: CopyRangeTo2() is not supported by this store");
29
 
        }
30
 
 
31
 
        byte GenerateByte();
32
 
        void GenerateBlock(byte *output, size_t size);
33
 
 
34
 
        void IsolatedInitialize(const NameValuePairs &parameters) {}
35
 
 
36
 
protected:
37
 
        void Stir();
 
15
        RandomPool();
 
16
 
 
17
        bool CanIncorporateEntropy() const {return true;}
 
18
        void IncorporateEntropy(const byte *input, size_t length);
 
19
        void GenerateIntoBufferedTransformation(BufferedTransformation &target, const std::string &channel, lword size);
 
20
 
 
21
        // for backwards compatibility. use RandomNumberSource, RandomNumberStore, and RandomNumberSink for other BufferTransformation functionality
 
22
        void Put(const byte *input, size_t length) {IncorporateEntropy(input, length);}
38
23
 
39
24
private:
40
 
        SecByteBlock pool, key;
41
 
        size_t addPos, getPos;
 
25
        FixedSizeSecBlock<byte, 32> m_key;
 
26
        FixedSizeSecBlock<byte, 16> m_seed;
 
27
        member_ptr<BlockCipher> m_pCipher;
 
28
        bool m_keySet;
42
29
};
43
30
 
44
31
NAMESPACE_END