<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <title>Crypto++: MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION > Class Template Reference</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="doxygen.css" rel="stylesheet" type="text/css"/> </head> <body> <!-- Generated by Doxygen 1.6.1 --> <div class="navigation" id="top"> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> <li><a href="files.html"><span>Files</span></a></li> </ul> </div> <div class="tabs"> <ul> <li><a href="annotated.html"><span>Class List</span></a></li> <li><a href="classes.html"><span>Class Index</span></a></li> <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> <li><a href="functions.html"><span>Class Members</span></a></li> </ul> </div> </div> <div class="contents"> <h1>MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION > Class Template Reference</h1><!-- doxytag: class="MQV_Domain" --><!-- doxytag: inherits="AuthenticatedKeyAgreementDomain" --> <p>_ <a href="#_details">More...</a></p> <p><code>#include <<a class="el" href="mqv_8h_source.html">mqv.h</a>></code></p> <div class="dynheader"> Inheritance diagram for MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >:</div> <div class="dynsection"> <div class="center"> <img src="class_m_q_v___domain.gif" usemap="#MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >_map" alt=""/> <map id="MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >_map" name="MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION >_map"> <area href="class_authenticated_key_agreement_domain.html" alt="AuthenticatedKeyAgreementDomain" shape="rect" coords="0,224,382,248"/> <area href="class_key_agreement_algorithm.html" alt="KeyAgreementAlgorithm" shape="rect" coords="0,168,382,192"/> <area href="class_asymmetric_algorithm.html" alt="AsymmetricAlgorithm" shape="rect" coords="0,112,382,136"/> <area href="class_algorithm.html" alt="Algorithm" shape="rect" coords="0,56,382,80"/> <area href="class_clonable.html" alt="Clonable" shape="rect" coords="0,0,382,24"/> </map> </div> </div> <p><a href="class_m_q_v___domain-members.html">List of all members.</a></p> <table border="0" cellpadding="0" cellspacing="0"> <tr><td colspan="2"><h2>Public Types</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4cff608458e5959a568d7436fdc3029f"></a><!-- doxytag: member="MQV_Domain::GroupParameters" ref="a4cff608458e5959a568d7436fdc3029f" args="" --> typedef GROUP_PARAMETERS </td><td class="memItemRight" valign="bottom"><b>GroupParameters</b></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9f5dcde7c2ada9f94e2c67fd07389360"></a><!-- doxytag: member="MQV_Domain::Element" ref="a9f5dcde7c2ada9f94e2c67fd07389360" args="" --> typedef GroupParameters::Element </td><td class="memItemRight" valign="bottom"><b>Element</b></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a575a65a1e83cbf2981ba727f2a424fcc"></a><!-- doxytag: member="MQV_Domain::Domain" ref="a575a65a1e83cbf2981ba727f2a424fcc" args="" --> typedef <a class="el" href="class_m_q_v___domain.html">MQV_Domain</a><br class="typebreak"/> < GROUP_PARAMETERS, <br class="typebreak"/> COFACTOR_OPTION > </td><td class="memItemRight" valign="bottom"><b>Domain</b></td></tr> <tr><td colspan="2"><h2>Public Member Functions</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a89a6c2d98cc463ae0355c9c52d950b18"></a><!-- doxytag: member="MQV_Domain::MQV_Domain" ref="a89a6c2d98cc463ae0355c9c52d950b18" args="(const GroupParameters &params)" --> </td><td class="memItemRight" valign="bottom"><b>MQV_Domain</b> (const GroupParameters &params)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c64fc7b2e78e07654f4ec77176aa0dd"></a><!-- doxytag: member="MQV_Domain::MQV_Domain" ref="a2c64fc7b2e78e07654f4ec77176aa0dd" args="(BufferedTransformation &bt)" --> </td><td class="memItemRight" valign="bottom"><b>MQV_Domain</b> (<a class="el" href="class_buffered_transformation.html">BufferedTransformation</a> &bt)</td></tr> <tr><td class="memTemplParams" colspan="2"><a class="anchor" id="a13413bb88b2c027a189393a89d3dbcb2"></a><!-- doxytag: member="MQV_Domain::MQV_Domain" ref="a13413bb88b2c027a189393a89d3dbcb2" args="(T1 v1, T2 v2)" --> template<class T1 , class T2 > </td></tr> <tr><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>MQV_Domain</b> (T1 v1, T2 v2)</td></tr> <tr><td class="memTemplParams" colspan="2"><a class="anchor" id="a21ca678dae86d2418dda040ee67e60cf"></a><!-- doxytag: member="MQV_Domain::MQV_Domain" ref="a21ca678dae86d2418dda040ee67e60cf" args="(T1 v1, T2 v2, T3 v3)" --> template<class T1 , class T2 , class T3 > </td></tr> <tr><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>MQV_Domain</b> (T1 v1, T2 v2, T3 v3)</td></tr> <tr><td class="memTemplParams" colspan="2"><a class="anchor" id="af07abe18b592b214e80883cb4065fa2e"></a><!-- doxytag: member="MQV_Domain::MQV_Domain" ref="af07abe18b592b214e80883cb4065fa2e" args="(T1 v1, T2 v2, T3 v3, T4 v4)" --> template<class T1 , class T2 , class T3 , class T4 > </td></tr> <tr><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>MQV_Domain</b> (T1 v1, T2 v2, T3 v3, T4 v4)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a49b0a85296b1bcfcac68672a10b55d96"></a><!-- doxytag: member="MQV_Domain::GetGroupParameters" ref="a49b0a85296b1bcfcac68672a10b55d96" args="() const " --> const GroupParameters & </td><td class="memItemRight" valign="bottom"><b>GetGroupParameters</b> () const </td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa2af02b1905ff725e7f8fb379ac64940"></a><!-- doxytag: member="MQV_Domain::AccessGroupParameters" ref="aa2af02b1905ff725e7f8fb379ac64940" args="()" --> GroupParameters & </td><td class="memItemRight" valign="bottom"><b>AccessGroupParameters</b> ()</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af4dda134c82bac3cd13bb1b468159cde"></a><!-- doxytag: member="MQV_Domain::AccessCryptoParameters" ref="af4dda134c82bac3cd13bb1b468159cde" args="()" --> <a class="el" href="class_crypto_parameters.html">CryptoParameters</a> & </td><td class="memItemRight" valign="bottom"><b>AccessCryptoParameters</b> ()</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad92db2cb60736ff6d37bc20efabc98ee"></a><!-- doxytag: member="MQV_Domain::AgreedValueLength" ref="ad92db2cb60736ff6d37bc20efabc98ee" args="() const " --> unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="class_m_q_v___domain.html#ad92db2cb60736ff6d37bc20efabc98ee">AgreedValueLength</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">return length of agreed value produced <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a253afc0b839a2650ec076cb919236245"></a><!-- doxytag: member="MQV_Domain::StaticPrivateKeyLength" ref="a253afc0b839a2650ec076cb919236245" args="() const " --> unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="class_m_q_v___domain.html#a253afc0b839a2650ec076cb919236245">StaticPrivateKeyLength</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">return length of static private keys in this domain <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5a50415b5ef733d8f7fca9d89d99266b"></a><!-- doxytag: member="MQV_Domain::StaticPublicKeyLength" ref="a5a50415b5ef733d8f7fca9d89d99266b" args="() const " --> unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="class_m_q_v___domain.html#a5a50415b5ef733d8f7fca9d89d99266b">StaticPublicKeyLength</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">return length of static public keys in this domain <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_m_q_v___domain.html#a11bfbdb30b9a6776f2827ba200d5af50">GenerateStaticPrivateKey</a> (<a class="el" href="class_random_number_generator.html">RandomNumberGenerator</a> &rng, byte *privateKey) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">generate static private key <a href="#a11bfbdb30b9a6776f2827ba200d5af50"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_m_q_v___domain.html#a61fa5fd2199f8b5ce450002ac61072d2">GenerateStaticPublicKey</a> (<a class="el" href="class_random_number_generator.html">RandomNumberGenerator</a> &rng, const byte *privateKey, byte *publicKey) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">generate static public key <a href="#a61fa5fd2199f8b5ce450002ac61072d2"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a559eb73d99d87c5bb89720a810e7ad01"></a><!-- doxytag: member="MQV_Domain::EphemeralPrivateKeyLength" ref="a559eb73d99d87c5bb89720a810e7ad01" args="() const " --> unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="class_m_q_v___domain.html#a559eb73d99d87c5bb89720a810e7ad01">EphemeralPrivateKeyLength</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">return length of ephemeral private keys in this domain <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a78793f5c2ff53d3ca7b63e86dcc05649"></a><!-- doxytag: member="MQV_Domain::EphemeralPublicKeyLength" ref="a78793f5c2ff53d3ca7b63e86dcc05649" args="() const " --> unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="class_m_q_v___domain.html#a78793f5c2ff53d3ca7b63e86dcc05649">EphemeralPublicKeyLength</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">return length of ephemeral public keys in this domain <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_m_q_v___domain.html#aefc317e9012eea4b7f43b3a72398e34d">GenerateEphemeralPrivateKey</a> (<a class="el" href="class_random_number_generator.html">RandomNumberGenerator</a> &rng, byte *privateKey) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">generate ephemeral private key <a href="#aefc317e9012eea4b7f43b3a72398e34d"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_m_q_v___domain.html#a2cc3ee07353b65ac5f353ef5cb7aad14">GenerateEphemeralPublicKey</a> (<a class="el" href="class_random_number_generator.html">RandomNumberGenerator</a> &rng, const byte *privateKey, byte *publicKey) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">generate ephemeral public key <a href="#a2cc3ee07353b65ac5f353ef5cb7aad14"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_m_q_v___domain.html#a9a7642a35cdbaca0023629c0477aefc1">Agree</a> (byte *agreedValue, const byte *staticPrivateKey, const byte *ephemeralPrivateKey, const byte *staticOtherPublicKey, const byte *ephemeralOtherPublicKey, bool validateStaticOtherPublicKey=true) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">derive agreed value from your private keys and couterparty's public keys, return false in case of failure <a href="#a9a7642a35cdbaca0023629c0477aefc1"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_authenticated_key_agreement_domain.html#ae2c306a6582c6e592ecb2c13abfd7c9f">GenerateStaticKeyPair</a> (<a class="el" href="class_random_number_generator.html">RandomNumberGenerator</a> &rng, byte *privateKey, byte *publicKey) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">generate private/public key pair <a href="#ae2c306a6582c6e592ecb2c13abfd7c9f"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_authenticated_key_agreement_domain.html#a18f1fc5fa590be704d53759e44fba093">GenerateEphemeralKeyPair</a> (<a class="el" href="class_random_number_generator.html">RandomNumberGenerator</a> &rng, byte *privateKey, byte *publicKey) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">generate private/public key pair <a href="#a18f1fc5fa590be704d53759e44fba093"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab9c52198ff0dd877243c9520d96beaaa"></a><!-- doxytag: member="MQV_Domain::AccessMaterial" ref="ab9c52198ff0dd877243c9520d96beaaa" args="()" --> <a class="el" href="class_crypto_material.html">CryptoMaterial</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="class_key_agreement_algorithm.html#ab9c52198ff0dd877243c9520d96beaaa">AccessMaterial</a> ()</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">returns a reference to the crypto material used by this object <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeef052b9f5db7aa72d451c272e578e47"></a><!-- doxytag: member="MQV_Domain::GetMaterial" ref="aeef052b9f5db7aa72d451c272e578e47" args="() const " --> const <a class="el" href="class_crypto_material.html">CryptoMaterial</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="class_key_agreement_algorithm.html#aeef052b9f5db7aa72d451c272e578e47">GetMaterial</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">returns a const reference to the crypto material used by this object <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3641afd3786b1fbd50a55c3c69a2389"></a><!-- doxytag: member="MQV_Domain::GetCryptoParameters" ref="ad3641afd3786b1fbd50a55c3c69a2389" args="() const " --> virtual const <a class="el" href="class_crypto_parameters.html">CryptoParameters</a> & </td><td class="memItemRight" valign="bottom"><b>GetCryptoParameters</b> () const </td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a522dbfcd5c1a46bf1be301cec26d6534"></a><!-- doxytag: member="MQV_Domain::BERDecode" ref="a522dbfcd5c1a46bf1be301cec26d6534" args="(BufferedTransformation &bt)" --> void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_asymmetric_algorithm.html#a522dbfcd5c1a46bf1be301cec26d6534">BERDecode</a> (<a class="el" href="class_buffered_transformation.html">BufferedTransformation</a> &bt)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">for backwards compatibility, calls <a class="el" href="class_asymmetric_algorithm.html#ad99d55413166b69a0a12e10d111926c8" title="returns a reference to the crypto material used by this object">AccessMaterial()</a>.Load(bt) <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2d704079890783422b0a44653480ab83"></a><!-- doxytag: member="MQV_Domain::DEREncode" ref="a2d704079890783422b0a44653480ab83" args="(BufferedTransformation &bt) const " --> void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_asymmetric_algorithm.html#a2d704079890783422b0a44653480ab83">DEREncode</a> (<a class="el" href="class_buffered_transformation.html">BufferedTransformation</a> &bt) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">for backwards compatibility, calls <a class="el" href="class_asymmetric_algorithm.html#adf9cc798c5a2d20ab3436dbad8e6df2d" title="returns a const reference to the crypto material used by this object">GetMaterial()</a>.Save(bt) <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acd21c6715add4884fa043eaf51655039"></a><!-- doxytag: member="MQV_Domain::AlgorithmName" ref="acd21c6715add4884fa043eaf51655039" args="() const " --> virtual std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="class_algorithm.html#acd21c6715add4884fa043eaf51655039">AlgorithmName</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">returns name of this algorithm, not universally implemented yet <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a24b43349a71e1f98508eeb10b31a0a62"></a><!-- doxytag: member="MQV_Domain::Clone" ref="a24b43349a71e1f98508eeb10b31a0a62" args="() const " --> virtual <a class="el" href="class_clonable.html">Clonable</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="class_clonable.html#a24b43349a71e1f98508eeb10b31a0a62">Clone</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">this is not implemented by most classes yet <br/></td></tr> </table> <hr/><a name="_details"></a><h2>Detailed Description</h2> <h3>template<class GROUP_PARAMETERS, class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption><br/> class MQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION ></h3> <p>_ </p> <p>Definition at line <a class="el" href="mqv_8h_source.html#l00013">13</a> of file <a class="el" href="mqv_8h_source.html">mqv.h</a>.</p> <hr/><h2>Member Function Documentation</h2> <a class="anchor" id="a11bfbdb30b9a6776f2827ba200d5af50"></a><!-- doxytag: member="MQV_Domain::GenerateStaticPrivateKey" ref="a11bfbdb30b9a6776f2827ba200d5af50" args="(RandomNumberGenerator &rng, byte *privateKey) const " --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption> </div> <table class="memname"> <tr> <td class="memname">void <a class="el" href="class_m_q_v___domain.html">MQV_Domain</a>< GROUP_PARAMETERS, COFACTOR_OPTION >::GenerateStaticPrivateKey </td> <td>(</td> <td class="paramtype"><a class="el" href="class_random_number_generator.html">RandomNumberGenerator</a> & </td> <td class="paramname"> <em>rng</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">byte * </td> <td class="paramname"> <em>privateKey</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td> const<code> [inline, virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p>generate static private key </p> <dl class="pre"><dt><b>Precondition:</b></dt><dd>size of privateKey == PrivateStaticKeyLength() </dd></dl> <p>Implements <a class="el" href="class_authenticated_key_agreement_domain.html#a00d9b12028e9ecb61af6d0f312965c6f">AuthenticatedKeyAgreementDomain</a>.</p> <p>Definition at line <a class="el" href="mqv_8h_source.html#l00049">49</a> of file <a class="el" href="mqv_8h_source.html">mqv.h</a>.</p> <p>References <a class="el" href="integer_8cpp_source.html#l03124">Integer::Encode()</a>, and <a class="el" href="integer_8cpp_source.html#l02879">Integer::One()</a>.</p> </div> </div> <a class="anchor" id="a61fa5fd2199f8b5ce450002ac61072d2"></a><!-- doxytag: member="MQV_Domain::GenerateStaticPublicKey" ref="a61fa5fd2199f8b5ce450002ac61072d2" args="(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const " --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption> </div> <table class="memname"> <tr> <td class="memname">void <a class="el" href="class_m_q_v___domain.html">MQV_Domain</a>< GROUP_PARAMETERS, COFACTOR_OPTION >::GenerateStaticPublicKey </td> <td>(</td> <td class="paramtype"><a class="el" href="class_random_number_generator.html">RandomNumberGenerator</a> & </td> <td class="paramname"> <em>rng</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const byte * </td> <td class="paramname"> <em>privateKey</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">byte * </td> <td class="paramname"> <em>publicKey</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td> const<code> [inline, virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p>generate static public key </p> <dl class="pre"><dt><b>Precondition:</b></dt><dd>size of publicKey == PublicStaticKeyLength() </dd></dl> <p>Implements <a class="el" href="class_authenticated_key_agreement_domain.html#a853885a901ac7c4f8c51fd177df5d96c">AuthenticatedKeyAgreementDomain</a>.</p> <p>Definition at line <a class="el" href="mqv_8h_source.html#l00055">55</a> of file <a class="el" href="mqv_8h_source.html">mqv.h</a>.</p> </div> </div> <a class="anchor" id="aefc317e9012eea4b7f43b3a72398e34d"></a><!-- doxytag: member="MQV_Domain::GenerateEphemeralPrivateKey" ref="aefc317e9012eea4b7f43b3a72398e34d" args="(RandomNumberGenerator &rng, byte *privateKey) const " --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption> </div> <table class="memname"> <tr> <td class="memname">void <a class="el" href="class_m_q_v___domain.html">MQV_Domain</a>< GROUP_PARAMETERS, COFACTOR_OPTION >::GenerateEphemeralPrivateKey </td> <td>(</td> <td class="paramtype"><a class="el" href="class_random_number_generator.html">RandomNumberGenerator</a> & </td> <td class="paramname"> <em>rng</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">byte * </td> <td class="paramname"> <em>privateKey</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td> const<code> [inline, virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p>generate ephemeral private key </p> <dl class="pre"><dt><b>Precondition:</b></dt><dd>size of privateKey == PrivateEphemeralKeyLength() </dd></dl> <p>Implements <a class="el" href="class_authenticated_key_agreement_domain.html#ab6280d3bf8ad1dd2aa976910b81502f8">AuthenticatedKeyAgreementDomain</a>.</p> <p>Definition at line <a class="el" href="mqv_8h_source.html#l00066">66</a> of file <a class="el" href="mqv_8h_source.html">mqv.h</a>.</p> <p>References <a class="el" href="integer_8cpp_source.html#l02879">Integer::One()</a>.</p> </div> </div> <a class="anchor" id="a2cc3ee07353b65ac5f353ef5cb7aad14"></a><!-- doxytag: member="MQV_Domain::GenerateEphemeralPublicKey" ref="a2cc3ee07353b65ac5f353ef5cb7aad14" args="(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const " --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption> </div> <table class="memname"> <tr> <td class="memname">void <a class="el" href="class_m_q_v___domain.html">MQV_Domain</a>< GROUP_PARAMETERS, COFACTOR_OPTION >::GenerateEphemeralPublicKey </td> <td>(</td> <td class="paramtype"><a class="el" href="class_random_number_generator.html">RandomNumberGenerator</a> & </td> <td class="paramname"> <em>rng</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const byte * </td> <td class="paramname"> <em>privateKey</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">byte * </td> <td class="paramname"> <em>publicKey</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td> const<code> [inline, virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p>generate ephemeral public key </p> <dl class="pre"><dt><b>Precondition:</b></dt><dd>size of publicKey == PublicEphemeralKeyLength() </dd></dl> <p>Implements <a class="el" href="class_authenticated_key_agreement_domain.html#a9d1bc83a77f44af6616da42c33b3bc49">AuthenticatedKeyAgreementDomain</a>.</p> <p>Definition at line <a class="el" href="mqv_8h_source.html#l00075">75</a> of file <a class="el" href="mqv_8h_source.html">mqv.h</a>.</p> </div> </div> <a class="anchor" id="a9a7642a35cdbaca0023629c0477aefc1"></a><!-- doxytag: member="MQV_Domain::Agree" ref="a9a7642a35cdbaca0023629c0477aefc1" args="(byte *agreedValue, const byte *staticPrivateKey, const byte *ephemeralPrivateKey, const byte *staticOtherPublicKey, const byte *ephemeralOtherPublicKey, bool validateStaticOtherPublicKey=true) const " --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption> </div> <table class="memname"> <tr> <td class="memname">bool <a class="el" href="class_m_q_v___domain.html">MQV_Domain</a>< GROUP_PARAMETERS, COFACTOR_OPTION >::Agree </td> <td>(</td> <td class="paramtype">byte * </td> <td class="paramname"> <em>agreedValue</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const byte * </td> <td class="paramname"> <em>staticPrivateKey</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const byte * </td> <td class="paramname"> <em>ephemeralPrivateKey</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const byte * </td> <td class="paramname"> <em>staticOtherPublicKey</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const byte * </td> <td class="paramname"> <em>ephemeralOtherPublicKey</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">bool </td> <td class="paramname"> <em>validateStaticOtherPublicKey</em> = <code>true</code></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td> const<code> [inline, virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p>derive agreed value from your private keys and couterparty's public keys, return false in case of failure </p> <dl class="note"><dt><b>Note:</b></dt><dd>The ephemeral public key will always be validated. If you have previously validated the static public key, use validateStaticOtherPublicKey=false to save time. </dd></dl> <dl class="pre"><dt><b>Precondition:</b></dt><dd>size of agreedValue == <a class="el" href="class_m_q_v___domain.html#ad92db2cb60736ff6d37bc20efabc98ee" title="return length of agreed value produced">AgreedValueLength()</a> </dd> <dd> length of staticPrivateKey == <a class="el" href="class_m_q_v___domain.html#a253afc0b839a2650ec076cb919236245" title="return length of static private keys in this domain">StaticPrivateKeyLength()</a> </dd> <dd> length of ephemeralPrivateKey == <a class="el" href="class_m_q_v___domain.html#a559eb73d99d87c5bb89720a810e7ad01" title="return length of ephemeral private keys in this domain">EphemeralPrivateKeyLength()</a> </dd> <dd> length of staticOtherPublicKey == <a class="el" href="class_m_q_v___domain.html#a5a50415b5ef733d8f7fca9d89d99266b" title="return length of static public keys in this domain">StaticPublicKeyLength()</a> </dd> <dd> length of ephemeralOtherPublicKey == <a class="el" href="class_m_q_v___domain.html#a78793f5c2ff53d3ca7b63e86dcc05649" title="return length of ephemeral public keys in this domain">EphemeralPublicKeyLength()</a> </dd></dl> <p>Implements <a class="el" href="class_authenticated_key_agreement_domain.html#ac9808fb56eacee0c08a9bbd22fe2c98e">AuthenticatedKeyAgreementDomain</a>.</p> <p>Definition at line <a class="el" href="mqv_8h_source.html#l00080">80</a> of file <a class="el" href="mqv_8h_source.html">mqv.h</a>.</p> <p>References <a class="el" href="integer_8cpp_source.html#l03066">Integer::BitCount()</a>, <a class="el" href="integer_8cpp_source.html#l03746">Integer::Divide()</a>, and <a class="el" href="integer_8cpp_source.html#l02858">Integer::Power2()</a>.</p> </div> </div> <a class="anchor" id="ae2c306a6582c6e592ecb2c13abfd7c9f"></a><!-- doxytag: member="MQV_Domain::GenerateStaticKeyPair" ref="ae2c306a6582c6e592ecb2c13abfd7c9f" args="(RandomNumberGenerator &rng, byte *privateKey, byte *publicKey) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void AuthenticatedKeyAgreementDomain::GenerateStaticKeyPair </td> <td>(</td> <td class="paramtype"><a class="el" href="class_random_number_generator.html">RandomNumberGenerator</a> & </td> <td class="paramname"> <em>rng</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">byte * </td> <td class="paramname"> <em>privateKey</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">byte * </td> <td class="paramname"> <em>publicKey</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td> const<code> [virtual, inherited]</code></td> </tr> </table> </div> <div class="memdoc"> <p>generate private/public key pair </p> <dl class="note"><dt><b>Note:</b></dt><dd>equivalent to calling <a class="el" href="class_authenticated_key_agreement_domain.html#a00d9b12028e9ecb61af6d0f312965c6f" title="generate static private key">GenerateStaticPrivateKey()</a> and then <a class="el" href="class_authenticated_key_agreement_domain.html#a853885a901ac7c4f8c51fd177df5d96c" title="generate static public key">GenerateStaticPublicKey()</a> </dd></dl> <p>Reimplemented in <a class="el" href="class_d_h2.html#aa4a447f81fcdcc656fe4fc5b6e99dc2e">DH2</a>.</p> <p>Definition at line <a class="el" href="cryptlib_8cpp_source.html#l00807">807</a> of file <a class="el" href="cryptlib_8cpp_source.html">cryptlib.cpp</a>.</p> <p>References <a class="el" href="class_authenticated_key_agreement_domain.html#a00d9b12028e9ecb61af6d0f312965c6f">AuthenticatedKeyAgreementDomain::GenerateStaticPrivateKey()</a>, and <a class="el" href="class_authenticated_key_agreement_domain.html#a853885a901ac7c4f8c51fd177df5d96c">AuthenticatedKeyAgreementDomain::GenerateStaticPublicKey()</a>.</p> </div> </div> <a class="anchor" id="a18f1fc5fa590be704d53759e44fba093"></a><!-- doxytag: member="MQV_Domain::GenerateEphemeralKeyPair" ref="a18f1fc5fa590be704d53759e44fba093" args="(RandomNumberGenerator &rng, byte *privateKey, byte *publicKey) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void AuthenticatedKeyAgreementDomain::GenerateEphemeralKeyPair </td> <td>(</td> <td class="paramtype"><a class="el" href="class_random_number_generator.html">RandomNumberGenerator</a> & </td> <td class="paramname"> <em>rng</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">byte * </td> <td class="paramname"> <em>privateKey</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">byte * </td> <td class="paramname"> <em>publicKey</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td> const<code> [virtual, inherited]</code></td> </tr> </table> </div> <div class="memdoc"> <p>generate private/public key pair </p> <dl class="note"><dt><b>Note:</b></dt><dd>equivalent to calling <a class="el" href="class_authenticated_key_agreement_domain.html#ab6280d3bf8ad1dd2aa976910b81502f8" title="generate ephemeral private key">GenerateEphemeralPrivateKey()</a> and then <a class="el" href="class_authenticated_key_agreement_domain.html#a9d1bc83a77f44af6616da42c33b3bc49" title="generate ephemeral public key">GenerateEphemeralPublicKey()</a> </dd></dl> <p>Reimplemented in <a class="el" href="class_d_h2.html#a4b5a84bf47e9a18348521b5a9c752cce">DH2</a>.</p> <p>Definition at line <a class="el" href="cryptlib_8cpp_source.html#l00813">813</a> of file <a class="el" href="cryptlib_8cpp_source.html">cryptlib.cpp</a>.</p> <p>References <a class="el" href="class_authenticated_key_agreement_domain.html#ab6280d3bf8ad1dd2aa976910b81502f8">AuthenticatedKeyAgreementDomain::GenerateEphemeralPrivateKey()</a>, and <a class="el" href="class_authenticated_key_agreement_domain.html#a9d1bc83a77f44af6616da42c33b3bc49">AuthenticatedKeyAgreementDomain::GenerateEphemeralPublicKey()</a>.</p> </div> </div> <hr/>The documentation for this class was generated from the following file:<ul> <li><a class="el" href="mqv_8h_source.html">mqv.h</a></li> </ul> </div> <hr size="1"/><address style="text-align: right;"><small>Generated on 9 Dec 2009 for Crypto++ by <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address> </body> </html>