<!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"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta name="generator" content="Doxygen 1.8.14"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title>Crypto++: HMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH > Class Template Reference</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td id="projectalign" style="padding-left: 0.5em;"> <div id="projectname">Crypto++  <span id="projectnumber">7.0</span> </div> <div id="projectbrief">Free C++ class library of cryptographic schemes</div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.14 --> <script type="text/javascript" src="menudata.js"></script> <script type="text/javascript" src="menu.js"></script> <script type="text/javascript"> /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ $(function() { initMenu('',false,false,'search.php','Search'); }); /* @license-end */</script> <div id="main-nav"></div> </div><!-- top --> <div class="header"> <div class="summary"> <a href="#pub-types">Public Types</a> | <a href="#pub-methods">Public Member Functions</a> | <a href="class_h_m_q_v___domain-members.html">List of all members</a> </div> <div class="headertitle"> <div class="title">HMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH > Class Template Reference</div> </div> </div><!--header--> <div class="contents"> <p>Hashed Menezes-Qu-Vanstone in GF(p) <a href="class_h_m_q_v___domain.html#details">More...</a></p> <div id="dynsection-0" onclick="return toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"> <img id="dynsection-0-trigger" src="closed.png" alt="+"/> Inheritance diagram for HMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >:</div> <div id="dynsection-0-summary" class="dynsummary" style="display:block;"> </div> <div id="dynsection-0-content" class="dyncontent" style="display:none;"> <div class="center"> <img src="class_h_m_q_v___domain.png" usemap="#HMQV_5FDomain_3C_20GROUP_5FPARAMETERS_2C_20COFACTOR_5FOPTION_2C_20HASH_20_3E_map" alt=""/> <map id="HMQV_5FDomain_3C_20GROUP_5FPARAMETERS_2C_20COFACTOR_5FOPTION_2C_20HASH_20_3E_map" name="HMQV_5FDomain_3C_20GROUP_5FPARAMETERS_2C_20COFACTOR_5FOPTION_2C_20HASH_20_3E_map"> <area href="class_authenticated_key_agreement_domain.html" title="Interface for domains of authenticated key agreement protocols. " alt="AuthenticatedKeyAgreementDomain" shape="rect" coords="0,224,435,248"/> <area href="class_key_agreement_algorithm.html" title="Interface for key agreement algorithms. " alt="KeyAgreementAlgorithm" shape="rect" coords="0,168,435,192"/> <area href="class_asymmetric_algorithm.html" title="Interface for asymmetric algorithms. " alt="AsymmetricAlgorithm" shape="rect" coords="0,112,435,136"/> <area href="class_algorithm.html" title="Interface for all crypto algorithms. " alt="Algorithm" shape="rect" coords="0,56,435,80"/> <area href="class_clonable.html" title="Interface for cloning objects. " alt="Clonable" shape="rect" coords="0,0,435,24"/> </map> </div></div> <table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a> Public Types</h2></td></tr> <tr class="memitem:a4f6d42f98187dab02ad03eedf3a4aa3e"><td class="memItemLeft" align="right" valign="top"><a id="a4f6d42f98187dab02ad03eedf3a4aa3e"></a> typedef GROUP_PARAMETERS </td><td class="memItemRight" valign="bottom"><b>GroupParameters</b></td></tr> <tr class="separator:a4f6d42f98187dab02ad03eedf3a4aa3e"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a1b3f9d5fcb29140c721cf2ba163a3f2e"><td class="memItemLeft" align="right" valign="top"><a id="a1b3f9d5fcb29140c721cf2ba163a3f2e"></a> typedef GroupParameters::Element </td><td class="memItemRight" valign="bottom"><b>Element</b></td></tr> <tr class="separator:a1b3f9d5fcb29140c721cf2ba163a3f2e"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a1a74b45fc0bcb42bd4b88a0382ee452b"><td class="memItemLeft" align="right" valign="top"><a id="a1a74b45fc0bcb42bd4b88a0382ee452b"></a> typedef <a class="el" href="class_h_m_q_v___domain.html">HMQV_Domain</a>< GROUP_PARAMETERS, COFACTOR_OPTION, HASH > </td><td class="memItemRight" valign="bottom"><b>Domain</b></td></tr> <tr class="separator:a1a74b45fc0bcb42bd4b88a0382ee452b"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a> Public Member Functions</h2></td></tr> <tr class="memitem:a8f44ef6378bda8971337329f8859fa77"><td class="memItemLeft" align="right" valign="top"><a id="a8f44ef6378bda8971337329f8859fa77"></a>  </td><td class="memItemRight" valign="bottom"><b>HMQV_Domain</b> (bool clientRole=true)</td></tr> <tr class="separator:a8f44ef6378bda8971337329f8859fa77"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ad5dd16e895257b3e400553f6dd3187cf"><td class="memItemLeft" align="right" valign="top"><a id="ad5dd16e895257b3e400553f6dd3187cf"></a>  </td><td class="memItemRight" valign="bottom"><b>HMQV_Domain</b> (const GroupParameters &params, bool clientRole=true)</td></tr> <tr class="separator:ad5dd16e895257b3e400553f6dd3187cf"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a78d392cd299f09328554b71de974b52b"><td class="memItemLeft" align="right" valign="top"><a id="a78d392cd299f09328554b71de974b52b"></a>  </td><td class="memItemRight" valign="bottom"><b>HMQV_Domain</b> (<a class="el" href="class_buffered_transformation.html">BufferedTransformation</a> &bt, bool clientRole=true)</td></tr> <tr class="separator:a78d392cd299f09328554b71de974b52b"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a41e13d6d047362a5f4b0e74b1d46b8ed"><td class="memTemplParams" colspan="2"><a id="a41e13d6d047362a5f4b0e74b1d46b8ed"></a> template<class T1 > </td></tr> <tr class="memitem:a41e13d6d047362a5f4b0e74b1d46b8ed"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>HMQV_Domain</b> (T1 v1, bool clientRole=true)</td></tr> <tr class="separator:a41e13d6d047362a5f4b0e74b1d46b8ed"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ac1bb02370f2b3acf2538257cdccc46e0"><td class="memTemplParams" colspan="2"><a id="ac1bb02370f2b3acf2538257cdccc46e0"></a> template<class T1 , class T2 > </td></tr> <tr class="memitem:ac1bb02370f2b3acf2538257cdccc46e0"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>HMQV_Domain</b> (T1 v1, T2 v2, bool clientRole=true)</td></tr> <tr class="separator:ac1bb02370f2b3acf2538257cdccc46e0"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a9caae174839922281fdaf8097da477d2"><td class="memTemplParams" colspan="2"><a id="a9caae174839922281fdaf8097da477d2"></a> template<class T1 , class T2 , class T3 > </td></tr> <tr class="memitem:a9caae174839922281fdaf8097da477d2"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>HMQV_Domain</b> (T1 v1, T2 v2, T3 v3, bool clientRole=true)</td></tr> <tr class="separator:a9caae174839922281fdaf8097da477d2"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:af22ccca971c6d09b44d6b26c34789dd5"><td class="memTemplParams" colspan="2"><a id="af22ccca971c6d09b44d6b26c34789dd5"></a> template<class T1 , class T2 , class T3 , class T4 > </td></tr> <tr class="memitem:af22ccca971c6d09b44d6b26c34789dd5"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><b>HMQV_Domain</b> (T1 v1, T2 v2, T3 v3, T4 v4, bool clientRole=true)</td></tr> <tr class="separator:af22ccca971c6d09b44d6b26c34789dd5"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a83426aa83d57671083afeef058d366f5"><td class="memItemLeft" align="right" valign="top"><a id="a83426aa83d57671083afeef058d366f5"></a> const GroupParameters & </td><td class="memItemRight" valign="bottom"><b>GetGroupParameters</b> () const</td></tr> <tr class="separator:a83426aa83d57671083afeef058d366f5"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a1c35042de70666ff0739569ec7dfe623"><td class="memItemLeft" align="right" valign="top"><a id="a1c35042de70666ff0739569ec7dfe623"></a> GroupParameters & </td><td class="memItemRight" valign="bottom"><b>AccessGroupParameters</b> ()</td></tr> <tr class="separator:a1c35042de70666ff0739569ec7dfe623"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a6e17a9bd0f489294987a891902b2a68e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="class_crypto_parameters.html">CryptoParameters</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="class_h_m_q_v___domain.html#a6e17a9bd0f489294987a891902b2a68e">AccessCryptoParameters</a> ()</td></tr> <tr class="memdesc:a6e17a9bd0f489294987a891902b2a68e"><td class="mdescLeft"> </td><td class="mdescRight">Retrieves a reference to Crypto Parameters. <a href="#a6e17a9bd0f489294987a891902b2a68e">More...</a><br /></td></tr> <tr class="separator:a6e17a9bd0f489294987a891902b2a68e"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ab63c64474cafb81de06b04f59c468e1c"><td class="memItemLeft" align="right" valign="top"><a id="ab63c64474cafb81de06b04f59c468e1c"></a> unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="class_h_m_q_v___domain.html#ab63c64474cafb81de06b04f59c468e1c">AgreedValueLength</a> () const</td></tr> <tr class="memdesc:ab63c64474cafb81de06b04f59c468e1c"><td class="mdescLeft"> </td><td class="mdescRight">return length of agreed value produced <br /></td></tr> <tr class="separator:ab63c64474cafb81de06b04f59c468e1c"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a9ea3d9207cb1bfbd22d1478afdb4ca2b"><td class="memItemLeft" align="right" valign="top"><a id="a9ea3d9207cb1bfbd22d1478afdb4ca2b"></a> unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="class_h_m_q_v___domain.html#a9ea3d9207cb1bfbd22d1478afdb4ca2b">StaticPrivateKeyLength</a> () const</td></tr> <tr class="memdesc:a9ea3d9207cb1bfbd22d1478afdb4ca2b"><td class="mdescLeft"> </td><td class="mdescRight">return length of static private keys in this domain <br /></td></tr> <tr class="separator:a9ea3d9207cb1bfbd22d1478afdb4ca2b"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aca01fa98db1675423953049dc7288fc7"><td class="memItemLeft" align="right" valign="top"><a id="aca01fa98db1675423953049dc7288fc7"></a> unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="class_h_m_q_v___domain.html#aca01fa98db1675423953049dc7288fc7">StaticPublicKeyLength</a> () const</td></tr> <tr class="memdesc:aca01fa98db1675423953049dc7288fc7"><td class="mdescLeft"> </td><td class="mdescRight">return length of static public keys in this domain <br /></td></tr> <tr class="separator:aca01fa98db1675423953049dc7288fc7"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a3c283a1124242a10243d9f2fa55e4ebc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_h_m_q_v___domain.html#a3c283a1124242a10243d9f2fa55e4ebc">GenerateStaticPrivateKey</a> (<a class="el" href="class_random_number_generator.html">RandomNumberGenerator</a> &rng, byte *privateKey) const</td></tr> <tr class="memdesc:a3c283a1124242a10243d9f2fa55e4ebc"><td class="mdescLeft"> </td><td class="mdescRight">generate static private key <a href="#a3c283a1124242a10243d9f2fa55e4ebc">More...</a><br /></td></tr> <tr class="separator:a3c283a1124242a10243d9f2fa55e4ebc"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ac89aea97b86688d190ce29a638e80c5c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_h_m_q_v___domain.html#ac89aea97b86688d190ce29a638e80c5c">GenerateStaticPublicKey</a> (<a class="el" href="class_random_number_generator.html">RandomNumberGenerator</a> &rng, const byte *privateKey, byte *publicKey) const</td></tr> <tr class="memdesc:ac89aea97b86688d190ce29a638e80c5c"><td class="mdescLeft"> </td><td class="mdescRight">generate static public key <a href="#ac89aea97b86688d190ce29a638e80c5c">More...</a><br /></td></tr> <tr class="separator:ac89aea97b86688d190ce29a638e80c5c"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ac288ec5ed6e6f793fdc44af246358727"><td class="memItemLeft" align="right" valign="top">unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="class_h_m_q_v___domain.html#ac288ec5ed6e6f793fdc44af246358727">EphemeralPrivateKeyLength</a> () const</td></tr> <tr class="memdesc:ac288ec5ed6e6f793fdc44af246358727"><td class="mdescLeft"> </td><td class="mdescRight">Provides the size of ephemeral private key. <a href="#ac288ec5ed6e6f793fdc44af246358727">More...</a><br /></td></tr> <tr class="separator:ac288ec5ed6e6f793fdc44af246358727"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ad26c33a539bdc3b31718f6cfe26bf9ea"><td class="memItemLeft" align="right" valign="top">unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="class_h_m_q_v___domain.html#ad26c33a539bdc3b31718f6cfe26bf9ea">EphemeralPublicKeyLength</a> () const</td></tr> <tr class="memdesc:ad26c33a539bdc3b31718f6cfe26bf9ea"><td class="mdescLeft"> </td><td class="mdescRight">Provides the size of ephemeral public key. <a href="#ad26c33a539bdc3b31718f6cfe26bf9ea">More...</a><br /></td></tr> <tr class="separator:ad26c33a539bdc3b31718f6cfe26bf9ea"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a37b468af095df8fd85ee7dad8ff07b09"><td class="memItemLeft" align="right" valign="top"><a id="a37b468af095df8fd85ee7dad8ff07b09"></a> void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_h_m_q_v___domain.html#a37b468af095df8fd85ee7dad8ff07b09">GenerateEphemeralPrivateKey</a> (<a class="el" href="class_random_number_generator.html">RandomNumberGenerator</a> &rng, byte *privateKey) const</td></tr> <tr class="memdesc:a37b468af095df8fd85ee7dad8ff07b09"><td class="mdescLeft"> </td><td class="mdescRight">return length of ephemeral private keys in this domain <br /></td></tr> <tr class="separator:a37b468af095df8fd85ee7dad8ff07b09"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a555c19cf2475e0afc4a911f16d65375c"><td class="memItemLeft" align="right" valign="top"><a id="a555c19cf2475e0afc4a911f16d65375c"></a> void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_h_m_q_v___domain.html#a555c19cf2475e0afc4a911f16d65375c">GenerateEphemeralPublicKey</a> (<a class="el" href="class_random_number_generator.html">RandomNumberGenerator</a> &rng, const byte *privateKey, byte *publicKey) const</td></tr> <tr class="memdesc:a555c19cf2475e0afc4a911f16d65375c"><td class="mdescLeft"> </td><td class="mdescRight">return length of ephemeral public keys in this domain <br /></td></tr> <tr class="separator:a555c19cf2475e0afc4a911f16d65375c"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ab162ce29c3f9e76a10bf04230a0960ca"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_h_m_q_v___domain.html#ab162ce29c3f9e76a10bf04230a0960ca">Agree</a> (byte *agreedValue, const byte *staticPrivateKey, const byte *ephemeralPrivateKey, const byte *staticOtherPublicKey, const byte *ephemeralOtherPublicKey, bool validateStaticOtherPublicKey=true) const</td></tr> <tr class="memdesc:ab162ce29c3f9e76a10bf04230a0960ca"><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="#ab162ce29c3f9e76a10bf04230a0960ca">More...</a><br /></td></tr> <tr class="separator:ab162ce29c3f9e76a10bf04230a0960ca"><td class="memSeparator" colspan="2"> </td></tr> <tr class="inherit_header pub_methods_class_authenticated_key_agreement_domain"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_authenticated_key_agreement_domain')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="class_authenticated_key_agreement_domain.html">AuthenticatedKeyAgreementDomain</a></td></tr> <tr class="memitem:aec9aa2db0d67020eb381ba0a18b30aed inherit pub_methods_class_authenticated_key_agreement_domain"><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#aec9aa2db0d67020eb381ba0a18b30aed">GenerateStaticKeyPair</a> (<a class="el" href="class_random_number_generator.html">RandomNumberGenerator</a> &rng, byte *privateKey, byte *publicKey) const</td></tr> <tr class="memdesc:aec9aa2db0d67020eb381ba0a18b30aed inherit pub_methods_class_authenticated_key_agreement_domain"><td class="mdescLeft"> </td><td class="mdescRight">Generate a static private/public key pair. <a href="class_authenticated_key_agreement_domain.html#aec9aa2db0d67020eb381ba0a18b30aed">More...</a><br /></td></tr> <tr class="separator:aec9aa2db0d67020eb381ba0a18b30aed inherit pub_methods_class_authenticated_key_agreement_domain"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ade1b25546d6f8d2572a9a810164360da inherit pub_methods_class_authenticated_key_agreement_domain"><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#ade1b25546d6f8d2572a9a810164360da">GenerateEphemeralKeyPair</a> (<a class="el" href="class_random_number_generator.html">RandomNumberGenerator</a> &rng, byte *privateKey, byte *publicKey) const</td></tr> <tr class="memdesc:ade1b25546d6f8d2572a9a810164360da inherit pub_methods_class_authenticated_key_agreement_domain"><td class="mdescLeft"> </td><td class="mdescRight">Generate private/public key pair. <a href="class_authenticated_key_agreement_domain.html#ade1b25546d6f8d2572a9a810164360da">More...</a><br /></td></tr> <tr class="separator:ade1b25546d6f8d2572a9a810164360da inherit pub_methods_class_authenticated_key_agreement_domain"><td class="memSeparator" colspan="2"> </td></tr> <tr class="inherit_header pub_methods_class_key_agreement_algorithm"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_key_agreement_algorithm')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="class_key_agreement_algorithm.html">KeyAgreementAlgorithm</a></td></tr> <tr class="memitem:ab9c52198ff0dd877243c9520d96beaaa inherit pub_methods_class_key_agreement_algorithm"><td class="memItemLeft" align="right" valign="top"><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 class="memdesc:ab9c52198ff0dd877243c9520d96beaaa inherit pub_methods_class_key_agreement_algorithm"><td class="mdescLeft"> </td><td class="mdescRight">Retrieves a reference to Crypto Parameters. <a href="class_key_agreement_algorithm.html#ab9c52198ff0dd877243c9520d96beaaa">More...</a><br /></td></tr> <tr class="separator:ab9c52198ff0dd877243c9520d96beaaa inherit pub_methods_class_key_agreement_algorithm"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a3a1eb8e141b2f26a21efed7a1d7744c9 inherit pub_methods_class_key_agreement_algorithm"><td class="memItemLeft" align="right" valign="top">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#a3a1eb8e141b2f26a21efed7a1d7744c9">GetMaterial</a> () const</td></tr> <tr class="memdesc:a3a1eb8e141b2f26a21efed7a1d7744c9 inherit pub_methods_class_key_agreement_algorithm"><td class="mdescLeft"> </td><td class="mdescRight">Retrieves a reference to Crypto Parameters. <a href="class_key_agreement_algorithm.html#a3a1eb8e141b2f26a21efed7a1d7744c9">More...</a><br /></td></tr> <tr class="separator:a3a1eb8e141b2f26a21efed7a1d7744c9 inherit pub_methods_class_key_agreement_algorithm"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a5b0e622b88d0b8d319c23e4aefef414d inherit pub_methods_class_key_agreement_algorithm"><td class="memItemLeft" align="right" valign="top">virtual const <a class="el" href="class_crypto_parameters.html">CryptoParameters</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="class_key_agreement_algorithm.html#a5b0e622b88d0b8d319c23e4aefef414d">GetCryptoParameters</a> () const</td></tr> <tr class="memdesc:a5b0e622b88d0b8d319c23e4aefef414d inherit pub_methods_class_key_agreement_algorithm"><td class="mdescLeft"> </td><td class="mdescRight">Retrieves a reference to Crypto Parameters. <a href="class_key_agreement_algorithm.html#a5b0e622b88d0b8d319c23e4aefef414d">More...</a><br /></td></tr> <tr class="separator:a5b0e622b88d0b8d319c23e4aefef414d inherit pub_methods_class_key_agreement_algorithm"><td class="memSeparator" colspan="2"> </td></tr> <tr class="inherit_header pub_methods_class_algorithm"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_algorithm')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="class_algorithm.html">Algorithm</a></td></tr> <tr class="memitem:a1c77f5117ca2cd881baf26a364cfc606 inherit pub_methods_class_algorithm"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="class_algorithm.html#a1c77f5117ca2cd881baf26a364cfc606">Algorithm</a> (bool checkSelfTestStatus=true)</td></tr> <tr class="memdesc:a1c77f5117ca2cd881baf26a364cfc606 inherit pub_methods_class_algorithm"><td class="mdescLeft"> </td><td class="mdescRight">Interface for all crypto algorithms. <a href="class_algorithm.html#a1c77f5117ca2cd881baf26a364cfc606">More...</a><br /></td></tr> <tr class="separator:a1c77f5117ca2cd881baf26a364cfc606 inherit pub_methods_class_algorithm"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a4f31510a192d1121856efe8ad0a9b844 inherit pub_methods_class_algorithm"><td class="memItemLeft" align="right" valign="top">virtual std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="class_algorithm.html#a4f31510a192d1121856efe8ad0a9b844">AlgorithmName</a> () const</td></tr> <tr class="memdesc:a4f31510a192d1121856efe8ad0a9b844 inherit pub_methods_class_algorithm"><td class="mdescLeft"> </td><td class="mdescRight">Provides the name of this algorithm. <a href="class_algorithm.html#a4f31510a192d1121856efe8ad0a9b844">More...</a><br /></td></tr> <tr class="separator:a4f31510a192d1121856efe8ad0a9b844 inherit pub_methods_class_algorithm"><td class="memSeparator" colspan="2"> </td></tr> <tr class="inherit_header pub_methods_class_clonable"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_clonable')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="class_clonable.html">Clonable</a></td></tr> <tr class="memitem:ad0016ba2d505c23aa85aad49e6c19bb7 inherit pub_methods_class_clonable"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="class_clonable.html">Clonable</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="class_clonable.html#ad0016ba2d505c23aa85aad49e6c19bb7">Clone</a> () const</td></tr> <tr class="memdesc:ad0016ba2d505c23aa85aad49e6c19bb7 inherit pub_methods_class_clonable"><td class="mdescLeft"> </td><td class="mdescRight">Copies this object. <a href="class_clonable.html#ad0016ba2d505c23aa85aad49e6c19bb7">More...</a><br /></td></tr> <tr class="separator:ad0016ba2d505c23aa85aad49e6c19bb7 inherit pub_methods_class_clonable"><td class="memSeparator" colspan="2"> </td></tr> </table> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <div class="textblock"><h3>template<class GROUP_PARAMETERS, class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption, class HASH = SHA512><br /> class HMQV_Domain< GROUP_PARAMETERS, COFACTOR_OPTION, HASH ></h3> <p>Hashed Menezes-Qu-Vanstone in GF(p) </p> <p>This implementation follows Hugo Krawczyk's <a href="http://eprint.iacr.org/2005/176">HMQV: A High-Performance Secure Diffie-Hellman Protocol</a>. Note: this implements HMQV only. HMQV-C with Key Confirmation is not provided. </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="mqv_8h.html#a55efec2ab777263bc0d165afa0c3fe3b" title="Menezes-Qu-Vanstone in GF(p) with key validation, AKA MQV ">MQV</a>, <a class="el" href="hmqv_8h.html#a7e819fbd915da58cb3391be3a0c96bf7" title="Hashed Menezes-Qu-Vanstone in GF(p) ">HMQV</a>, <a class="el" href="fhmqv_8h.html#a7cdbb4ab473eb13fab56921103f833df" title="Fully Hashed Menezes-Qu-Vanstone in GF(p) ">FHMQV</a>, and <a class="el" href="class_authenticated_key_agreement_domain.html" title="Interface for domains of authenticated key agreement protocols. ">AuthenticatedKeyAgreementDomain</a> </dd></dl> <dl class="section since"><dt>Since</dt><dd>Crypto++ 5.6.4 </dd></dl> <p class="definition">Definition at line <a class="el" href="hmqv_8h_source.html#l00023">23</a> of file <a class="el" href="hmqv_8h_source.html">hmqv.h</a>.</p> </div><h2 class="groupheader">Member Function Documentation</h2> <a id="a6e17a9bd0f489294987a891902b2a68e"></a> <h2 class="memtitle"><span class="permalink"><a href="#a6e17a9bd0f489294987a891902b2a68e">◆ </a></span>AccessCryptoParameters()</h2> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption, class HASH = SHA512> </div> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname"><a class="el" href="class_crypto_parameters.html">CryptoParameters</a>& <a class="el" href="class_h_m_q_v___domain.html">HMQV_Domain</a>< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >::AccessCryptoParameters </td> <td>(</td> <td class="paramname"></td><td>)</td> <td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Retrieves a reference to Crypto Parameters. </p> <dl class="section return"><dt>Returns</dt><dd>a reference the crypto parameters </dd></dl> <p>Implements <a class="el" href="class_key_agreement_algorithm.html#abbe709ef84c668901d9e6cf09167d9c9">KeyAgreementAlgorithm</a>.</p> <p class="definition">Definition at line <a class="el" href="hmqv_8h_source.html#l00066">66</a> of file <a class="el" href="hmqv_8h_source.html">hmqv.h</a>.</p> </div> </div> <a id="a3c283a1124242a10243d9f2fa55e4ebc"></a> <h2 class="memtitle"><span class="permalink"><a href="#a3c283a1124242a10243d9f2fa55e4ebc">◆ </a></span>GenerateStaticPrivateKey()</h2> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption, class HASH = SHA512> </div> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">void <a class="el" href="class_h_m_q_v___domain.html">HMQV_Domain</a>< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >::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> </tr> <tr> <td></td> <td>)</td> <td></td><td> const</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>generate static private key </p> <dl class="section pre"><dt>Precondition</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 class="definition">Definition at line <a class="el" href="hmqv_8h_source.html#l00077">77</a> of file <a class="el" href="hmqv_8h_source.html">hmqv.h</a>.</p> </div> </div> <a id="ac89aea97b86688d190ce29a638e80c5c"></a> <h2 class="memtitle"><span class="permalink"><a href="#ac89aea97b86688d190ce29a638e80c5c">◆ </a></span>GenerateStaticPublicKey()</h2> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption, class HASH = SHA512> </div> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">void <a class="el" href="class_h_m_q_v___domain.html">HMQV_Domain</a>< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >::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> </tr> <tr> <td></td> <td>)</td> <td></td><td> const</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>generate static public key </p> <dl class="section pre"><dt>Precondition</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 class="definition">Definition at line <a class="el" href="hmqv_8h_source.html#l00085">85</a> of file <a class="el" href="hmqv_8h_source.html">hmqv.h</a>.</p> </div> </div> <a id="ac288ec5ed6e6f793fdc44af246358727"></a> <h2 class="memtitle"><span class="permalink"><a href="#ac288ec5ed6e6f793fdc44af246358727">◆ </a></span>EphemeralPrivateKeyLength()</h2> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption, class HASH = SHA512> </div> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">unsigned int <a class="el" href="class_h_m_q_v___domain.html">HMQV_Domain</a>< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >::EphemeralPrivateKeyLength </td> <td>(</td> <td class="paramname"></td><td>)</td> <td> const</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Provides the size of ephemeral private key. </p> <dl class="section return"><dt>Returns</dt><dd>the size of ephemeral private key in this domain </dd></dl> <p>Implements <a class="el" href="class_authenticated_key_agreement_domain.html#a449deae54019f6dfc9677e721a193004">AuthenticatedKeyAgreementDomain</a>.</p> <p class="definition">Definition at line <a class="el" href="hmqv_8h_source.html#l00094">94</a> of file <a class="el" href="hmqv_8h_source.html">hmqv.h</a>.</p> </div> </div> <a id="ad26c33a539bdc3b31718f6cfe26bf9ea"></a> <h2 class="memtitle"><span class="permalink"><a href="#ad26c33a539bdc3b31718f6cfe26bf9ea">◆ </a></span>EphemeralPublicKeyLength()</h2> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption, class HASH = SHA512> </div> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">unsigned int <a class="el" href="class_h_m_q_v___domain.html">HMQV_Domain</a>< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >::EphemeralPublicKeyLength </td> <td>(</td> <td class="paramname"></td><td>)</td> <td> const</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Provides the size of ephemeral public key. </p> <dl class="section return"><dt>Returns</dt><dd>the size of ephemeral public key in this domain </dd></dl> <p>Implements <a class="el" href="class_authenticated_key_agreement_domain.html#a3dbef507ea4fd300ad8b2afb4d7afbe9">AuthenticatedKeyAgreementDomain</a>.</p> <p class="definition">Definition at line <a class="el" href="hmqv_8h_source.html#l00095">95</a> of file <a class="el" href="hmqv_8h_source.html">hmqv.h</a>.</p> </div> </div> <a id="ab162ce29c3f9e76a10bf04230a0960ca"></a> <h2 class="memtitle"><span class="permalink"><a href="#ab162ce29c3f9e76a10bf04230a0960ca">◆ </a></span>Agree()</h2> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class GROUP_PARAMETERS , class COFACTOR_OPTION = typename GROUP_PARAMETERS::DefaultCofactorOption, class HASH = SHA512> </div> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">bool <a class="el" href="class_h_m_q_v___domain.html">HMQV_Domain</a>< GROUP_PARAMETERS, COFACTOR_OPTION, HASH >::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> </tr> <tr> <td></td> <td>)</td> <td></td><td> const</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </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="section note"><dt>Note</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="section pre"><dt>Precondition</dt><dd>size of agreedValue == <a class="el" href="class_h_m_q_v___domain.html#ab63c64474cafb81de06b04f59c468e1c" title="return length of agreed value produced ">AgreedValueLength()</a> </dd> <dd> length of staticPrivateKey == <a class="el" href="class_h_m_q_v___domain.html#a9ea3d9207cb1bfbd22d1478afdb4ca2b" title="return length of static private keys in this domain ">StaticPrivateKeyLength()</a> </dd> <dd> length of ephemeralPrivateKey == <a class="el" href="class_h_m_q_v___domain.html#ac288ec5ed6e6f793fdc44af246358727" title="Provides the size of ephemeral private key. ">EphemeralPrivateKeyLength()</a> </dd> <dd> length of staticOtherPublicKey == <a class="el" href="class_h_m_q_v___domain.html#aca01fa98db1675423953049dc7288fc7" title="return length of static public keys in this domain ">StaticPublicKeyLength()</a> </dd> <dd> length of ephemeralOtherPublicKey == <a class="el" href="class_h_m_q_v___domain.html#ad26c33a539bdc3b31718f6cfe26bf9ea" title="Provides the size of ephemeral public key. ">EphemeralPublicKeyLength()</a> </dd></dl> <p>Implements <a class="el" href="class_authenticated_key_agreement_domain.html#ac9808fb56eacee0c08a9bbd22fe2c98e">AuthenticatedKeyAgreementDomain</a>.</p> <p class="definition">Definition at line <a class="el" href="hmqv_8h_source.html#l00123">123</a> of file <a class="el" href="hmqv_8h_source.html">hmqv.h</a>.</p> </div> </div> <hr/>The documentation for this class was generated from the following file:<ul> <li><a class="el" href="hmqv_8h_source.html">hmqv.h</a></li> </ul> </div><!-- contents --> <!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated on Sun Sep 16 2018 07:58:38 for Crypto++ by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> </a> 1.8.14 </small></address> </body> </html>