00001
#ifndef CRYPTOPP_RNG_H
00002
#define CRYPTOPP_RNG_H
00003
00004
#include "cryptlib.h"
00005
#include "filters.h"
00006
00007 NAMESPACE_BEGIN(CryptoPP)
00008
00009
00010
00011 class
LC_RNG : public
RandomNumberGenerator
00012 {
00013
public:
00014
LC_RNG(word32 init_seed)
00015 : seed(init_seed) {}
00016
00017 byte GenerateByte();
00018
00019 word32 GetSeed() {
return seed;}
00020
00021
private:
00022 word32 seed;
00023
00024
static const word32 m;
00025
static const word32 q;
00026
static const word16 a;
00027
static const word16 r;
00028 };
00029
00030
00031
00032 class X917RNG :
public RandomNumberGenerator
00033 {
00034
public:
00035
00036
X917RNG(
BlockTransformation *cipher,
const byte *seed,
unsigned long deterministicTimeVector = 0);
00037
00038 byte
GenerateByte();
00039
00040
private:
00041 member_ptr<BlockTransformation> cipher;
00042
const int S;
00043
SecByteBlock dtbuf;
00044
SecByteBlock randseed, randbuf;
00045
int randbuf_counter;
00046
unsigned long m_deterministicTimeVector;
00047 };
00048
00049
00050
00051
00052
00053 class MaurerRandomnessTest :
public Sink
00054 {
00055
public:
00056
MaurerRandomnessTest();
00057
00058
void Put(byte inByte);
00059
void Put(
const byte *inString,
unsigned int length);
00060
00061
00062
00063
unsigned int BytesNeeded()
const {
return n >= (Q+K) ? 0 : Q+K-n;}
00064
00065
00066
00067
double GetTestValue()
const;
00068
00069
private:
00070
enum {L=8, V=256, Q=2000, K=2000};
00071
double sum;
00072
unsigned int n;
00073
unsigned int tab[V];
00074 };
00075
00076 NAMESPACE_END
00077
00078
#endif