From b21162cf8e06f40baa1f58be6a8c17435cebc34d Mon Sep 17 00:00:00 2001 From: weidai Date: Fri, 4 Oct 2002 17:31:41 +0000 Subject: Initial revision git-svn-id: svn://svn.code.sf.net/p/cryptopp/code/trunk/c5@2 57ff6487-cd31-0410-9ec3-f628ee90f5f0 --- blumshub.h | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 blumshub.h (limited to 'blumshub.h') diff --git a/blumshub.h b/blumshub.h new file mode 100644 index 0000000..10b3cac --- /dev/null +++ b/blumshub.h @@ -0,0 +1,58 @@ +#ifndef CRYPTOPP_BLUMSHUB_H +#define CRYPTOPP_BLUMSHUB_H + +#include "modarith.h" + +NAMESPACE_BEGIN(CryptoPP) + +class BlumGoldwasserPublicKey; +class BlumGoldwasserPrivateKey; + +//! BlumBlumShub without factorization of the modulus +class PublicBlumBlumShub : public RandomNumberGenerator, + public StreamTransformation +{ +public: + PublicBlumBlumShub(const Integer &n, const Integer &seed); + + unsigned int GenerateBit(); + byte GenerateByte(); + + void ProcessData(byte *outString, const byte *inString, unsigned int length) + { + while (length--) + *outString++ = *inString ^ GenerateByte(); + } + + bool IsSelfInverting() const {return true;} + bool IsForwardTransformation() const {return true;} + +protected: + const ModularArithmetic modn; + const int maxBits; + Integer current; + int bitsLeft; + + friend class BlumGoldwasserPublicKey; + friend class BlumGoldwasserPrivateKey; +}; + +//! BlumBlumShub with factorization of the modulus +class BlumBlumShub : public PublicBlumBlumShub +{ +public: + // Make sure p and q are both primes congruent to 3 mod 4 and at least 512 bits long, + // seed is the secret key and should be about as big as p*q + BlumBlumShub(const Integer &p, const Integer &q, const Integer &seed); + + bool IsRandomAccess() const {return true;} + void Seek(dword index); + +protected: + const Integer p, q; + const Integer x0; +}; + +NAMESPACE_END + +#endif -- cgit v1.2.1