dh2.h

Go to the documentation of this file.
00001 #ifndef CRYPTOPP_DH2_H
00002 #define CRYPTOPP_DH2_H
00003 
00004 /** \file
00005 */
00006 
00007 #include "cryptlib.h"
00008 
00009 NAMESPACE_BEGIN(CryptoPP)
00010 
00011 /// <a href="http://www.weidai.com/scan-mirror/ka.html#DH2">Unified Diffie-Hellman</a>
00012 class DH2 : public AuthenticatedKeyAgreementDomain
00013 {
00014 public:
00015         DH2(const SimpleKeyAgreementDomain &domain)
00016                 : d1(domain), d2(domain) {}
00017         DH2(const SimpleKeyAgreementDomain &staticDomain, const SimpleKeyAgreementDomain &ephemeralDomain)
00018                 : d1(staticDomain), d2(ephemeralDomain) {}
00019 
00020         unsigned int AgreedValueLength() const
00021                 {return d1.AgreedValueLength() + d2.AgreedValueLength();}
00022 
00023         unsigned int StaticPrivateKeyLength() const
00024                 {return d1.PrivateKeyLength();}
00025         unsigned int StaticPublicKeyLength() const
00026                 {return d1.PublicKeyLength();}
00027         void GenerateStaticPrivateKey(RandomNumberGenerator &rng, byte *privateKey) const
00028                 {d1.GeneratePrivateKey(rng, privateKey);}
00029         void GenerateStaticPublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const
00030                 {d1.GeneratePublicKey(rng, privateKey, publicKey);}
00031         void GenerateStaticKeyPair(RandomNumberGenerator &rng, byte *privateKey, byte *publicKey) const
00032                 {d1.GenerateKeyPair(rng, privateKey, publicKey);}
00033 
00034         unsigned int EphemeralPrivateKeyLength() const
00035                 {return d2.PrivateKeyLength();}
00036         unsigned int EphemeralPublicKeyLength() const
00037                 {return d2.PublicKeyLength();}
00038         void GenerateEphemeralPrivateKey(RandomNumberGenerator &rng, byte *privateKey) const
00039                 {d2.GeneratePrivateKey(rng, privateKey);}
00040         void GenerateEphemeralPublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const
00041                 {d2.GeneratePublicKey(rng, privateKey, publicKey);}
00042         void GenerateEphemeralKeyPair(RandomNumberGenerator &rng, byte *privateKey, byte *publicKey) const
00043                 {d2.GenerateKeyPair(rng, privateKey, publicKey);}
00044 
00045         bool Agree(byte *agreedValue,
00046                 const byte *staticPrivateKey, const byte *ephemeralPrivateKey, 
00047                 const byte *staticOtherPublicKey, const byte *ephemeralOtherPublicKey,
00048                 bool validateStaticOtherPublicKey=true) const;
00049 
00050 protected:
00051         const SimpleKeyAgreementDomain &d1, &d2;
00052 };
00053 
00054 NAMESPACE_END
00055 
00056 #endif

Generated on Sat Dec 23 02:07:06 2006 for Crypto++ by  doxygen 1.5.1-p1