summaryrefslogtreecommitdiff
path: root/dh.h
diff options
context:
space:
mode:
authorJeffrey Walton <noloader@gmail.com>2015-11-05 01:59:46 -0500
committerJeffrey Walton <noloader@gmail.com>2015-11-05 01:59:46 -0500
commit48809d4e85c125814425c621d8d0d89f95405924 (patch)
tree1010fd16c4b1199f3d27dd726dda241a2bd29f83 /dh.h
parent025337a94aceb75d188149db70c2094673772816 (diff)
downloadcryptopp-git-48809d4e85c125814425c621d8d0d89f95405924.tar.gz
CRYPTOPP 5.6.3 RC6 checkin
Diffstat (limited to 'dh.h')
-rw-r--r--dh.h203
1 files changed, 104 insertions, 99 deletions
diff --git a/dh.h b/dh.h
index 10e8d142..399ff040 100644
--- a/dh.h
+++ b/dh.h
@@ -1,99 +1,104 @@
-#ifndef CRYPTOPP_DH_H
-#define CRYPTOPP_DH_H
-
-/** \file
-*/
-
-#include "gfpcrypt.h"
-
-NAMESPACE_BEGIN(CryptoPP)
-
-//! ,
-template <class GROUP_PARAMETERS, class COFACTOR_OPTION = CPP_TYPENAME GROUP_PARAMETERS::DefaultCofactorOption>
-class DH_Domain : public DL_SimpleKeyAgreementDomainBase<typename GROUP_PARAMETERS::Element>
-{
- typedef DL_SimpleKeyAgreementDomainBase<typename GROUP_PARAMETERS::Element> Base;
-
-public:
- typedef GROUP_PARAMETERS GroupParameters;
- typedef typename GroupParameters::Element Element;
- typedef DL_KeyAgreementAlgorithm_DH<Element, COFACTOR_OPTION> DH_Algorithm;
- typedef DH_Domain<GROUP_PARAMETERS, COFACTOR_OPTION> Domain;
-
- DH_Domain() {}
-
- DH_Domain(const GroupParameters &params)
- : m_groupParameters(params) {}
-
- DH_Domain(BufferedTransformation &bt)
- {m_groupParameters.BERDecode(bt);}
-
- template <class T2>
- DH_Domain(RandomNumberGenerator &v1, const T2 &v2)
- {m_groupParameters.Initialize(v1, v2);}
-
- template <class T2, class T3>
- DH_Domain(RandomNumberGenerator &v1, const T2 &v2, const T3 &v3)
- {m_groupParameters.Initialize(v1, v2, v3);}
-
- template <class T2, class T3, class T4>
- DH_Domain(RandomNumberGenerator &v1, const T2 &v2, const T3 &v3, const T4 &v4)
- {m_groupParameters.Initialize(v1, v2, v3, v4);}
-
- template <class T1, class T2>
- DH_Domain(const T1 &v1, const T2 &v2)
- {m_groupParameters.Initialize(v1, v2);}
-
- template <class T1, class T2, class T3>
- DH_Domain(const T1 &v1, const T2 &v2, const T3 &v3)
- {m_groupParameters.Initialize(v1, v2, v3);}
-
- template <class T1, class T2, class T3, class T4>
- DH_Domain(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4)
- {m_groupParameters.Initialize(v1, v2, v3, v4);}
-
- const GroupParameters & GetGroupParameters() const {return m_groupParameters;}
- GroupParameters & AccessGroupParameters() {return m_groupParameters;}
-
- void GeneratePublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const
- {
- Base::GeneratePublicKey(rng, privateKey, publicKey);
-
- if (FIPS_140_2_ComplianceEnabled())
- {
- SecByteBlock privateKey2(this->PrivateKeyLength());
- this->GeneratePrivateKey(rng, privateKey2);
-
- SecByteBlock publicKey2(this->PublicKeyLength());
- Base::GeneratePublicKey(rng, privateKey2, publicKey2);
-
- SecByteBlock agreedValue(this->AgreedValueLength()), agreedValue2(this->AgreedValueLength());
- bool agreed1 = this->Agree(agreedValue, privateKey, publicKey2);
- bool agreed2 = this->Agree(agreedValue2, privateKey2, publicKey);
-
- if (!agreed1 || !agreed2 || agreedValue != agreedValue2)
- throw SelfTestFailure(this->AlgorithmName() + ": pairwise consistency test failed");
- }
- }
-
- static std::string CRYPTOPP_API StaticAlgorithmName()
- {return GroupParameters::StaticAlgorithmNamePrefix() + DH_Algorithm::StaticAlgorithmName();}
- std::string AlgorithmName() const {return StaticAlgorithmName();}
-
-private:
- const DL_KeyAgreementAlgorithm<Element> & GetKeyAgreementAlgorithm() const
- {return Singleton<DH_Algorithm>().Ref();}
- DL_GroupParameters<Element> & AccessAbstractGroupParameters()
- {return m_groupParameters;}
-
- GroupParameters m_groupParameters;
-};
-
-CRYPTOPP_DLL_TEMPLATE_CLASS DH_Domain<DL_GroupParameters_GFP_DefaultSafePrime>;
-
-//! <a href="http://www.weidai.com/scan-mirror/ka.html#DH">Diffie-Hellman</a> in GF(p) with key validation
-typedef DH_Domain<DL_GroupParameters_GFP_DefaultSafePrime> DH;
-
-NAMESPACE_END
-
-#endif
+#ifndef CRYPTOPP_DH_H
+#define CRYPTOPP_DH_H
+
+/** \file
+*/
+
+#include "cryptlib.h"
+#include "gfpcrypt.h"
+
+NAMESPACE_BEGIN(CryptoPP)
+
+//! ,
+template <class GROUP_PARAMETERS, class COFACTOR_OPTION = CPP_TYPENAME GROUP_PARAMETERS::DefaultCofactorOption>
+class DH_Domain : public DL_SimpleKeyAgreementDomainBase<typename GROUP_PARAMETERS::Element>
+{
+ typedef DL_SimpleKeyAgreementDomainBase<typename GROUP_PARAMETERS::Element> Base;
+
+public:
+ typedef GROUP_PARAMETERS GroupParameters;
+ typedef typename GroupParameters::Element Element;
+ typedef DL_KeyAgreementAlgorithm_DH<Element, COFACTOR_OPTION> DH_Algorithm;
+ typedef DH_Domain<GROUP_PARAMETERS, COFACTOR_OPTION> Domain;
+
+ DH_Domain() {}
+
+ DH_Domain(const GroupParameters &params)
+ : m_groupParameters(params) {}
+
+ DH_Domain(BufferedTransformation &bt)
+ {m_groupParameters.BERDecode(bt);}
+
+ template <class T2>
+ DH_Domain(RandomNumberGenerator &v1, const T2 &v2)
+ {m_groupParameters.Initialize(v1, v2);}
+
+ template <class T2, class T3>
+ DH_Domain(RandomNumberGenerator &v1, const T2 &v2, const T3 &v3)
+ {m_groupParameters.Initialize(v1, v2, v3);}
+
+ template <class T2, class T3, class T4>
+ DH_Domain(RandomNumberGenerator &v1, const T2 &v2, const T3 &v3, const T4 &v4)
+ {m_groupParameters.Initialize(v1, v2, v3, v4);}
+
+ template <class T1, class T2>
+ DH_Domain(const T1 &v1, const T2 &v2)
+ {m_groupParameters.Initialize(v1, v2);}
+
+ template <class T1, class T2, class T3>
+ DH_Domain(const T1 &v1, const T2 &v2, const T3 &v3)
+ {m_groupParameters.Initialize(v1, v2, v3);}
+
+ template <class T1, class T2, class T3, class T4>
+ DH_Domain(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4)
+ {m_groupParameters.Initialize(v1, v2, v3, v4);}
+
+ const GroupParameters & GetGroupParameters() const {return m_groupParameters;}
+ GroupParameters & AccessGroupParameters() {return m_groupParameters;}
+
+ void GeneratePublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const
+ {
+ Base::GeneratePublicKey(rng, privateKey, publicKey);
+
+ if (FIPS_140_2_ComplianceEnabled())
+ {
+ SecByteBlock privateKey2(this->PrivateKeyLength());
+ this->GeneratePrivateKey(rng, privateKey2);
+
+ SecByteBlock publicKey2(this->PublicKeyLength());
+ Base::GeneratePublicKey(rng, privateKey2, publicKey2);
+
+ SecByteBlock agreedValue(this->AgreedValueLength()), agreedValue2(this->AgreedValueLength());
+ bool agreed1 = this->Agree(agreedValue, privateKey, publicKey2);
+ bool agreed2 = this->Agree(agreedValue2, privateKey2, publicKey);
+
+ if (!agreed1 || !agreed2 || agreedValue != agreedValue2)
+ throw SelfTestFailure(this->AlgorithmName() + ": pairwise consistency test failed");
+ }
+ }
+
+ static std::string CRYPTOPP_API StaticAlgorithmName()
+ {return GroupParameters::StaticAlgorithmNamePrefix() + DH_Algorithm::StaticAlgorithmName();}
+ std::string AlgorithmName() const {return StaticAlgorithmName();}
+
+#ifndef CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY_562
+ virtual ~DH_Domain() {}
+#endif
+
+private:
+ const DL_KeyAgreementAlgorithm<Element> & GetKeyAgreementAlgorithm() const
+ {return Singleton<DH_Algorithm>().Ref();}
+ DL_GroupParameters<Element> & AccessAbstractGroupParameters()
+ {return m_groupParameters;}
+
+ GroupParameters m_groupParameters;
+};
+
+CRYPTOPP_DLL_TEMPLATE_CLASS DH_Domain<DL_GroupParameters_GFP_DefaultSafePrime>;
+
+//! <a href="http://www.weidai.com/scan-mirror/ka.html#DH">Diffie-Hellman</a> in GF(p) with key validation
+typedef DH_Domain<DL_GroupParameters_GFP_DefaultSafePrime> DH;
+
+NAMESPACE_END
+
+#endif