Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

elgamal.h

00001 #ifndef CRYPTOPP_ELGAMAL_H
00002 #define CRYPTOPP_ELGAMAL_H
00003 
00004 #include "modexppc.h"
00005 
00006 NAMESPACE_BEGIN(CryptoPP)
00007 
00009 class ElGamalEncryptor : public PK_WithPrecomputation<PK_FixedLengthEncryptor>
00010 {
00011 public:
00012         ElGamalEncryptor(const Integer &p, const Integer &g, const Integer &y);
00013         ElGamalEncryptor(BufferedTransformation &bt);
00014 
00015         void DEREncode(BufferedTransformation &bt) const;
00016 
00017         void Precompute(unsigned int precomputationStorage=16);
00018         void LoadPrecomputation(BufferedTransformation &storedPrecomputation);
00019         void SavePrecomputation(BufferedTransformation &storedPrecomputation) const;
00020 
00021         void Encrypt(RandomNumberGenerator &rng, const byte *plainText, unsigned int plainTextLength, byte *cipherText);
00022 
00023         unsigned int MaxPlainTextLength() const {return STDMIN(255U, m_p.ByteCount()-3);}
00024         unsigned int CipherTextLength() const {return 2*m_p.ByteCount();}
00025 
00026         void RawEncrypt(const Integer &k, const Integer &m, Integer &a, Integer &b) const;
00027 
00028         const Integer & GetModulus() const {return m_p;}
00029         const Integer & GetGenerator() const {return m_g;}
00030         const Integer & GetPublicResidue() const {return m_y;}
00031 
00032         const ModExpPrecomputation & GetGPC() const {return m_gpc;}
00033         const ModExpPrecomputation & GetYPC() const {return m_ypc;}
00034 
00035 protected:
00036         ElGamalEncryptor() {}
00037         unsigned int ExponentBitLength() const;
00038 
00039         Integer m_p, m_g, m_y;
00040         ModExpPrecomputation m_gpc, m_ypc;
00041 };
00042 
00044 class ElGamalDecryptor : public ElGamalEncryptor, public PK_FixedLengthDecryptor
00045 {
00046 public:
00047         ElGamalDecryptor(const Integer &p, const Integer &g, const Integer &y, const Integer &x);
00048         ElGamalDecryptor(RandomNumberGenerator &rng, unsigned int pbits);
00049         // generate a random private key, given p and g
00050         ElGamalDecryptor(RandomNumberGenerator &rng, const Integer &p, const Integer &g);
00051 
00052         ElGamalDecryptor(BufferedTransformation &bt);
00053         void DEREncode(BufferedTransformation &bt) const;
00054 
00055         unsigned int Decrypt(const byte *cipherText, byte *plainText);
00056 
00057         void RawDecrypt(const Integer &a, const Integer &b, Integer &m) const;
00058 
00059         const Integer & GetPrivateExponent() const {return m_x;}
00060 
00061 protected:
00062         Integer m_x;
00063 };
00064 
00065 NAMESPACE_END
00066 
00067 #endif

Generated at Mon Jan 15 01:16:31 2001 for Crypto++ by doxygen1.2.4 written by Dimitri van Heesch, © 1997-2000