Crypto++

- Main Page
- Namespaces
- Classes
- Files

- File List
- File Members

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(SimpleKeyAgreementDomain &domain)
    00016         : d1(domain), d2(domain) {}
    00017     DH2(SimpleKeyAgreementDomain &staticDomain, SimpleKeyAgreementDomain &ephemeralDomain)
    00018         : d1(staticDomain), d2(ephemeralDomain) {}
    00019
    00020     CryptoParameters & AccessCryptoParameters() {return d1.AccessCryptoParameters();}
    00021
    00022     unsigned int AgreedValueLength() const
    00023         {return d1.AgreedValueLength() + d2.AgreedValueLength();}
    00024
    00025     unsigned int StaticPrivateKeyLength() const
    00026         {return d1.PrivateKeyLength();}
    00027     unsigned int StaticPublicKeyLength() const
    00028         {return d1.PublicKeyLength();}
    00029     void GenerateStaticPrivateKey(RandomNumberGenerator &rng, byte *privateKey) const
    00030         {d1.GeneratePrivateKey(rng, privateKey);}
    00031     void GenerateStaticPublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const
    00032         {d1.GeneratePublicKey(rng, privateKey, publicKey);}
    00033     void GenerateStaticKeyPair(RandomNumberGenerator &rng, byte *privateKey, byte *publicKey) const
    00034         {d1.GenerateKeyPair(rng, privateKey, publicKey);}
    00035
    00036     unsigned int EphemeralPrivateKeyLength() const
    00037         {return d2.PrivateKeyLength();}
    00038     unsigned int EphemeralPublicKeyLength() const
    00039         {return d2.PublicKeyLength();}
    00040     void GenerateEphemeralPrivateKey(RandomNumberGenerator &rng, byte *privateKey) const
    00041         {d2.GeneratePrivateKey(rng, privateKey);}
    00042     void GenerateEphemeralPublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const
    00043         {d2.GeneratePublicKey(rng, privateKey, publicKey);}
    00044     void GenerateEphemeralKeyPair(RandomNumberGenerator &rng, byte *privateKey, byte *publicKey) const
    00045         {d2.GenerateKeyPair(rng, privateKey, publicKey);}
    00046
    00047     bool Agree(byte *agreedValue,
    00048         const byte *staticPrivateKey, const byte *ephemeralPrivateKey,
    00049         const byte *staticOtherPublicKey, const byte *ephemeralOtherPublicKey,
    00050         bool validateStaticOtherPublicKey=true) const;
    00051
    00052 protected:
    00053     SimpleKeyAgreementDomain &d1, &d2;
    00054 };
    00055
    00056 NAMESPACE_END
    00057
    00058 #endif