9 NAMESPACE_BEGIN(CryptoPP)
12 template <class GROUP_PARAMETERS, class COFACTOR_OPTION = CPP_TYPENAME GROUP_PARAMETERS::DefaultCofactorOption>
18 typedef GROUP_PARAMETERS GroupParameters;
19 typedef typename GroupParameters::Element Element;
26 : m_groupParameters(params) {}
33 {m_groupParameters.Initialize(v1, v2);}
35 template <
class T2,
class T3>
37 {m_groupParameters.Initialize(v1, v2, v3);}
39 template <
class T2,
class T3,
class T4>
41 {m_groupParameters.Initialize(v1, v2, v3, v4);}
43 template <
class T1,
class T2>
45 {m_groupParameters.Initialize(v1, v2);}
47 template <
class T1,
class T2,
class T3>
48 DH_Domain(
const T1 &v1,
const T2 &v2,
const T3 &v3)
49 {m_groupParameters.Initialize(v1, v2, v3);}
51 template <
class T1,
class T2,
class T3,
class T4>
52 DH_Domain(
const T1 &v1,
const T2 &v2,
const T3 &v3,
const T4 &v4)
53 {m_groupParameters.Initialize(v1, v2, v3, v4);}
55 const GroupParameters & GetGroupParameters()
const {
return m_groupParameters;}
56 GroupParameters & AccessGroupParameters() {
return m_groupParameters;}
60 Base::GeneratePublicKey(rng, privateKey, publicKey);
65 this->GeneratePrivateKey(rng, privateKey2);
68 Base::GeneratePublicKey(rng, privateKey2, publicKey2);
70 SecByteBlock agreedValue(this->AgreedValueLength()), agreedValue2(this->AgreedValueLength());
71 bool agreed1 = this->Agree(agreedValue, privateKey, publicKey2);
72 bool agreed2 = this->Agree(agreedValue2, privateKey2, publicKey);
74 if (!agreed1 || !agreed2 || agreedValue != agreedValue2)
75 throw SelfTestFailure(this->AlgorithmName() +
": pairwise consistency test failed");
79 static std::string CRYPTOPP_API StaticAlgorithmName()
80 {
return GroupParameters::StaticAlgorithmNamePrefix() + DH_Algorithm::StaticAlgorithmName();}
87 {
return m_groupParameters;}
89 GroupParameters m_groupParameters;
void GeneratePublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const
generate public key
DH key agreement algorithm.
std::string AlgorithmName() const
returns name of this algorithm, not universally implemented yet
interface for DL group parameters
void BERDecode(BufferedTransformation &bt)
for backwards compatibility, calls AccessMaterial().Load(bt)
interface for random number generators
bool FIPS_140_2_ComplianceEnabled()
returns whether FIPS 140-2 compliance features were enabled at compile time
exception thrown when a crypto algorithm is used after a self test fails
Implementation of schemes based on DL over GF(p)
DH_Domain< DL_GroupParameters_GFP_DefaultSafePrime > DH
Diffie-Hellman in GF(p) with key validation
interface for DL key agreement algorithms