<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.15"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title>Crypto++: ECP Class 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.15 --> <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_e_c_p-members.html">List of all members</a> </div> <div class="headertitle"> <div class="title">ECP Class Reference</div> </div> </div><!--header--> <div class="contents"> <p>Elliptic Curve over GF(p), where p is prime. <a href="class_e_c_p.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 ECP:</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_e_c_p.png" usemap="#ECP_map" alt=""/> <map id="ECP_map" name="ECP_map"> <area href="class_abstract_group.html" alt="AbstractGroup< ECPPoint >" shape="rect" coords="0,0,171,24"/> <area href="class_encoded_point.html" alt="EncodedPoint< ECPPoint >" shape="rect" coords="181,0,352,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:a746aebbc43b99972e5a647ebabbbc931"><td class="memItemLeft" align="right" valign="top"><a id="a746aebbc43b99972e5a647ebabbbc931"></a> typedef <a class="el" href="class_modular_arithmetic.html">ModularArithmetic</a> </td><td class="memItemRight" valign="bottom"><b>Field</b></td></tr> <tr class="separator:a746aebbc43b99972e5a647ebabbbc931"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a337e68ddf10edab098c55474d52c4d04"><td class="memItemLeft" align="right" valign="top"><a id="a337e68ddf10edab098c55474d52c4d04"></a> typedef <a class="el" href="class_integer.html">Integer</a> </td><td class="memItemRight" valign="bottom"><b>FieldElement</b></td></tr> <tr class="separator:a337e68ddf10edab098c55474d52c4d04"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a99c34a437007f32af4e6c4ae275358ea"><td class="memItemLeft" align="right" valign="top"><a id="a99c34a437007f32af4e6c4ae275358ea"></a> typedef <a class="el" href="struct_e_c_p_point.html">ECPPoint</a> </td><td class="memItemRight" valign="bottom"><b>Point</b></td></tr> <tr class="separator:a99c34a437007f32af4e6c4ae275358ea"><td class="memSeparator" colspan="2"> </td></tr> <tr class="inherit_header pub_types_class_abstract_group"><td colspan="2" onclick="javascript:toggleInherit('pub_types_class_abstract_group')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="class_abstract_group.html">AbstractGroup< ECPPoint ></a></td></tr> <tr class="memitem:a4a2b3308fb5c13f70fcc5746be52ba7b inherit pub_types_class_abstract_group"><td class="memItemLeft" align="right" valign="top"><a id="a4a2b3308fb5c13f70fcc5746be52ba7b"></a> typedef <a class="el" href="struct_e_c_p_point.html">ECPPoint</a> </td><td class="memItemRight" valign="bottom"><b>Element</b></td></tr> <tr class="separator:a4a2b3308fb5c13f70fcc5746be52ba7b inherit pub_types_class_abstract_group"><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:a50e65de68e93c6bf2e174c8dc2322731"><td class="memItemLeft" align="right" valign="top"><a id="a50e65de68e93c6bf2e174c8dc2322731"></a>  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_e_c_p.html#a50e65de68e93c6bf2e174c8dc2322731">ECP</a> ()</td></tr> <tr class="memdesc:a50e65de68e93c6bf2e174c8dc2322731"><td class="mdescLeft"> </td><td class="mdescRight">Construct an <a class="el" href="class_e_c_p.html" title="Elliptic Curve over GF(p), where p is prime.">ECP</a>. <br /></td></tr> <tr class="separator:a50e65de68e93c6bf2e174c8dc2322731"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a75052eac63ed5622c1e558852cd2d1a4"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="class_e_c_p.html#a75052eac63ed5622c1e558852cd2d1a4">ECP</a> (const <a class="el" href="class_e_c_p.html">ECP</a> &ecp, bool convertToMontgomeryRepresentation=false)</td></tr> <tr class="memdesc:a75052eac63ed5622c1e558852cd2d1a4"><td class="mdescLeft"> </td><td class="mdescRight">Copy construct an <a class="el" href="class_e_c_p.html" title="Elliptic Curve over GF(p), where p is prime.">ECP</a>. <a href="#a75052eac63ed5622c1e558852cd2d1a4">More...</a><br /></td></tr> <tr class="separator:a75052eac63ed5622c1e558852cd2d1a4"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a7dbe4a90840d3b7cb23412a65414f4f5"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="class_e_c_p.html#a7dbe4a90840d3b7cb23412a65414f4f5">ECP</a> (const <a class="el" href="class_integer.html">Integer</a> &modulus, const <a class="el" href="class_integer.html">FieldElement</a> &a, const <a class="el" href="class_integer.html">FieldElement</a> &b)</td></tr> <tr class="memdesc:a7dbe4a90840d3b7cb23412a65414f4f5"><td class="mdescLeft"> </td><td class="mdescRight">Construct an <a class="el" href="class_e_c_p.html" title="Elliptic Curve over GF(p), where p is prime.">ECP</a>. <a href="#a7dbe4a90840d3b7cb23412a65414f4f5">More...</a><br /></td></tr> <tr class="separator:a7dbe4a90840d3b7cb23412a65414f4f5"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aa7f09fe942958b0b0933fa9a9a55fa6d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="class_e_c_p.html#aa7f09fe942958b0b0933fa9a9a55fa6d">ECP</a> (<a class="el" href="class_buffered_transformation.html">BufferedTransformation</a> &bt)</td></tr> <tr class="memdesc:aa7f09fe942958b0b0933fa9a9a55fa6d"><td class="mdescLeft"> </td><td class="mdescRight">Construct an <a class="el" href="class_e_c_p.html" title="Elliptic Curve over GF(p), where p is prime.">ECP</a> from BER encoded parameters. <a href="#aa7f09fe942958b0b0933fa9a9a55fa6d">More...</a><br /></td></tr> <tr class="separator:aa7f09fe942958b0b0933fa9a9a55fa6d"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ad2a025bdb4caffe2ead28d3c4fee4c5a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_e_c_p.html#ad2a025bdb4caffe2ead28d3c4fee4c5a">DEREncode</a> (<a class="el" href="class_buffered_transformation.html">BufferedTransformation</a> &bt) const</td></tr> <tr class="memdesc:ad2a025bdb4caffe2ead28d3c4fee4c5a"><td class="mdescLeft"> </td><td class="mdescRight">Encode the fields fieldID and curve of the sequence ECParameters. <a href="#ad2a025bdb4caffe2ead28d3c4fee4c5a">More...</a><br /></td></tr> <tr class="separator:ad2a025bdb4caffe2ead28d3c4fee4c5a"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a60fbeaa2294171f914f1e7c6ecda776e"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_e_c_p.html#a60fbeaa2294171f914f1e7c6ecda776e">Equal</a> (const <a class="el" href="struct_e_c_p_point.html">Point</a> &P, const <a class="el" href="struct_e_c_p_point.html">Point</a> &Q) const</td></tr> <tr class="memdesc:a60fbeaa2294171f914f1e7c6ecda776e"><td class="mdescLeft"> </td><td class="mdescRight">Compare two elements for equality. <a href="#a60fbeaa2294171f914f1e7c6ecda776e">More...</a><br /></td></tr> <tr class="separator:a60fbeaa2294171f914f1e7c6ecda776e"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a8a6ea0e6a710a7ff118ce5c9fa48c55e"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="struct_e_c_p_point.html">Point</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="class_e_c_p.html#a8a6ea0e6a710a7ff118ce5c9fa48c55e">Identity</a> () const</td></tr> <tr class="memdesc:a8a6ea0e6a710a7ff118ce5c9fa48c55e"><td class="mdescLeft"> </td><td class="mdescRight">Provides the Identity element. <a href="#a8a6ea0e6a710a7ff118ce5c9fa48c55e">More...</a><br /></td></tr> <tr class="separator:a8a6ea0e6a710a7ff118ce5c9fa48c55e"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a235a3931b7f4611fa7a1a3d5a95036ce"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="struct_e_c_p_point.html">Point</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="class_e_c_p.html#a235a3931b7f4611fa7a1a3d5a95036ce">Inverse</a> (const <a class="el" href="struct_e_c_p_point.html">Point</a> &P) const</td></tr> <tr class="memdesc:a235a3931b7f4611fa7a1a3d5a95036ce"><td class="mdescLeft"> </td><td class="mdescRight">Inverts the element in the group. <a href="#a235a3931b7f4611fa7a1a3d5a95036ce">More...</a><br /></td></tr> <tr class="separator:a235a3931b7f4611fa7a1a3d5a95036ce"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a0031a4a3a18999fda3942713da554697"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_e_c_p.html#a0031a4a3a18999fda3942713da554697">InversionIsFast</a> () const</td></tr> <tr class="memdesc:a0031a4a3a18999fda3942713da554697"><td class="mdescLeft"> </td><td class="mdescRight">Determine if inversion is fast. <a href="#a0031a4a3a18999fda3942713da554697">More...</a><br /></td></tr> <tr class="separator:a0031a4a3a18999fda3942713da554697"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ae02a3946666ba03470a346270d6f8820"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="struct_e_c_p_point.html">Point</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="class_e_c_p.html#ae02a3946666ba03470a346270d6f8820">Add</a> (const <a class="el" href="struct_e_c_p_point.html">Point</a> &P, const <a class="el" href="struct_e_c_p_point.html">Point</a> &Q) const</td></tr> <tr class="memdesc:ae02a3946666ba03470a346270d6f8820"><td class="mdescLeft"> </td><td class="mdescRight">Adds elements in the group. <a href="#ae02a3946666ba03470a346270d6f8820">More...</a><br /></td></tr> <tr class="separator:ae02a3946666ba03470a346270d6f8820"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a9528bc2c3075fff6c03e257846958497"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="struct_e_c_p_point.html">Point</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="class_e_c_p.html#a9528bc2c3075fff6c03e257846958497">Double</a> (const <a class="el" href="struct_e_c_p_point.html">Point</a> &P) const</td></tr> <tr class="memdesc:a9528bc2c3075fff6c03e257846958497"><td class="mdescLeft"> </td><td class="mdescRight">Doubles an element in the group. <a href="#a9528bc2c3075fff6c03e257846958497">More...</a><br /></td></tr> <tr class="separator:a9528bc2c3075fff6c03e257846958497"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a3a2b80bdd5e9c39229962c8b87e7023a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct_e_c_p_point.html">Point</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="class_e_c_p.html#a3a2b80bdd5e9c39229962c8b87e7023a">ScalarMultiply</a> (const <a class="el" href="struct_e_c_p_point.html">Point</a> &P, const <a class="el" href="class_integer.html">Integer</a> &k) const</td></tr> <tr class="memdesc:a3a2b80bdd5e9c39229962c8b87e7023a"><td class="mdescLeft"> </td><td class="mdescRight">Performs a scalar multiplication. <a href="#a3a2b80bdd5e9c39229962c8b87e7023a">More...</a><br /></td></tr> <tr class="separator:a3a2b80bdd5e9c39229962c8b87e7023a"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a905ca5e76a69b26efba70c46be3576fb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct_e_c_p_point.html">Point</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="class_e_c_p.html#a905ca5e76a69b26efba70c46be3576fb">CascadeScalarMultiply</a> (const <a class="el" href="struct_e_c_p_point.html">Point</a> &P, const <a class="el" href="class_integer.html">Integer</a> &k1, const <a class="el" href="struct_e_c_p_point.html">Point</a> &Q, const <a class="el" href="class_integer.html">Integer</a> &k2) const</td></tr> <tr class="memdesc:a905ca5e76a69b26efba70c46be3576fb"><td class="mdescLeft"> </td><td class="mdescRight">TODO. <a href="#a905ca5e76a69b26efba70c46be3576fb">More...</a><br /></td></tr> <tr class="separator:a905ca5e76a69b26efba70c46be3576fb"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:af6f7bcfb3ff89c7d6ba1265640f95d03"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_e_c_p.html#af6f7bcfb3ff89c7d6ba1265640f95d03">SimultaneousMultiply</a> (<a class="el" href="struct_e_c_p_point.html">Point</a> *results, const <a class="el" href="struct_e_c_p_point.html">Point</a> &base, const <a class="el" href="class_integer.html">Integer</a> *exponents, unsigned int exponentsCount) const</td></tr> <tr class="memdesc:af6f7bcfb3ff89c7d6ba1265640f95d03"><td class="mdescLeft"> </td><td class="mdescRight">Multiplies a base to multiple exponents in a group. <a href="#af6f7bcfb3ff89c7d6ba1265640f95d03">More...</a><br /></td></tr> <tr class="separator:af6f7bcfb3ff89c7d6ba1265640f95d03"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aeccb64bdf37b5afc05e1cdc2ef29cc13"><td class="memItemLeft" align="right" valign="top"><a id="aeccb64bdf37b5afc05e1cdc2ef29cc13"></a> <a class="el" href="struct_e_c_p_point.html">Point</a> </td><td class="memItemRight" valign="bottom"><b>Multiply</b> (const <a class="el" href="class_integer.html">Integer</a> &k, const <a class="el" href="struct_e_c_p_point.html">Point</a> &P) const</td></tr> <tr class="separator:aeccb64bdf37b5afc05e1cdc2ef29cc13"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ad12db3bd68abbaf920fe8c95e6f5cd98"><td class="memItemLeft" align="right" valign="top"><a id="ad12db3bd68abbaf920fe8c95e6f5cd98"></a> <a class="el" href="struct_e_c_p_point.html">Point</a> </td><td class="memItemRight" valign="bottom"><b>CascadeMultiply</b> (const <a class="el" href="class_integer.html">Integer</a> &k1, const <a class="el" href="struct_e_c_p_point.html">Point</a> &P, const <a class="el" href="class_integer.html">Integer</a> &k2, const <a class="el" href="struct_e_c_p_point.html">Point</a> &Q) const</td></tr> <tr class="separator:ad12db3bd68abbaf920fe8c95e6f5cd98"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:af27a13aecaad131bcff279e6707e0b9e"><td class="memItemLeft" align="right" valign="top"><a id="af27a13aecaad131bcff279e6707e0b9e"></a> bool </td><td class="memItemRight" valign="bottom"><b>ValidateParameters</b> (<a class="el" href="class_random_number_generator.html">RandomNumberGenerator</a> &rng, unsigned int level=3) const</td></tr> <tr class="separator:af27a13aecaad131bcff279e6707e0b9e"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a84825919705740161c1bd28b07cbd209"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_e_c_p.html#a84825919705740161c1bd28b07cbd209">VerifyPoint</a> (const <a class="el" href="struct_e_c_p_point.html">Point</a> &P) const</td></tr> <tr class="memdesc:a84825919705740161c1bd28b07cbd209"><td class="mdescLeft"> </td><td class="mdescRight">Verifies points on elliptic curve. <a href="#a84825919705740161c1bd28b07cbd209">More...</a><br /></td></tr> <tr class="separator:a84825919705740161c1bd28b07cbd209"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aa8b38e2d453f1173923c6fd8e9880606"><td class="memItemLeft" align="right" valign="top">unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="class_e_c_p.html#aa8b38e2d453f1173923c6fd8e9880606">EncodedPointSize</a> (bool compressed=false) const</td></tr> <tr class="memdesc:aa8b38e2d453f1173923c6fd8e9880606"><td class="mdescLeft"> </td><td class="mdescRight">Determines encoded point size. <a href="#aa8b38e2d453f1173923c6fd8e9880606">More...</a><br /></td></tr> <tr class="separator:aa8b38e2d453f1173923c6fd8e9880606"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aac188a1e14a4f7807720f45e3aa30768"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_e_c_p.html#aac188a1e14a4f7807720f45e3aa30768">DecodePoint</a> (<a class="el" href="struct_e_c_p_point.html">Point</a> &P, <a class="el" href="class_buffered_transformation.html">BufferedTransformation</a> &bt, size_t len) const</td></tr> <tr class="memdesc:aac188a1e14a4f7807720f45e3aa30768"><td class="mdescLeft"> </td><td class="mdescRight">Decodes an elliptic curve point. <a href="#aac188a1e14a4f7807720f45e3aa30768">More...</a><br /></td></tr> <tr class="separator:aac188a1e14a4f7807720f45e3aa30768"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ac1d2920f888a7fb778fd4f468a464404"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_e_c_p.html#ac1d2920f888a7fb778fd4f468a464404">DecodePoint</a> (<a class="el" href="struct_e_c_p_point.html">Point</a> &P, const byte *encodedPoint, size_t len) const</td></tr> <tr class="memdesc:ac1d2920f888a7fb778fd4f468a464404"><td class="mdescLeft"> </td><td class="mdescRight">Decodes an elliptic curve point. <a href="#ac1d2920f888a7fb778fd4f468a464404">More...</a><br /></td></tr> <tr class="separator:ac1d2920f888a7fb778fd4f468a464404"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a4d0d3344902b48260d0b5dacca2073b1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_e_c_p.html#a4d0d3344902b48260d0b5dacca2073b1">EncodePoint</a> (byte *encodedPoint, const <a class="el" href="struct_e_c_p_point.html">Point</a> &P, bool compressed) const</td></tr> <tr class="memdesc:a4d0d3344902b48260d0b5dacca2073b1"><td class="mdescLeft"> </td><td class="mdescRight">Encodes an elliptic curve point. <a href="#a4d0d3344902b48260d0b5dacca2073b1">More...</a><br /></td></tr> <tr class="separator:a4d0d3344902b48260d0b5dacca2073b1"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a4cf289c71b832211eddfb3b0608ebaab"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_e_c_p.html#a4cf289c71b832211eddfb3b0608ebaab">EncodePoint</a> (<a class="el" href="class_buffered_transformation.html">BufferedTransformation</a> &bt, const <a class="el" href="struct_e_c_p_point.html">Point</a> &P, bool compressed) const</td></tr> <tr class="memdesc:a4cf289c71b832211eddfb3b0608ebaab"><td class="mdescLeft"> </td><td class="mdescRight">Encodes an elliptic curve point. <a href="#a4cf289c71b832211eddfb3b0608ebaab">More...</a><br /></td></tr> <tr class="separator:a4cf289c71b832211eddfb3b0608ebaab"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a9e97f700fa09b811ea9b0e91e3fbf88f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct_e_c_p_point.html">Point</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="class_e_c_p.html#a9e97f700fa09b811ea9b0e91e3fbf88f">BERDecodePoint</a> (<a class="el" href="class_buffered_transformation.html">BufferedTransformation</a> &bt) const</td></tr> <tr class="memdesc:a9e97f700fa09b811ea9b0e91e3fbf88f"><td class="mdescLeft"> </td><td class="mdescRight">BER Decodes an elliptic curve point. <a href="#a9e97f700fa09b811ea9b0e91e3fbf88f">More...</a><br /></td></tr> <tr class="separator:a9e97f700fa09b811ea9b0e91e3fbf88f"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a6ab1727c66563a593880d1fb3b595fb5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_e_c_p.html#a6ab1727c66563a593880d1fb3b595fb5">DEREncodePoint</a> (<a class="el" href="class_buffered_transformation.html">BufferedTransformation</a> &bt, const <a class="el" href="struct_e_c_p_point.html">Point</a> &P, bool compressed) const</td></tr> <tr class="memdesc:a6ab1727c66563a593880d1fb3b595fb5"><td class="mdescLeft"> </td><td class="mdescRight">DER Encodes an elliptic curve point. <a href="#a6ab1727c66563a593880d1fb3b595fb5">More...</a><br /></td></tr> <tr class="separator:a6ab1727c66563a593880d1fb3b595fb5"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ab0c01cf1ebf788ba647fb8a076c6dcee"><td class="memItemLeft" align="right" valign="top"><a id="ab0c01cf1ebf788ba647fb8a076c6dcee"></a> <a class="el" href="class_integer.html">Integer</a> </td><td class="memItemRight" valign="bottom"><b>FieldSize</b> () const</td></tr> <tr class="separator:ab0c01cf1ebf788ba647fb8a076c6dcee"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ae996fce212244df79b83a587317f7423"><td class="memItemLeft" align="right" valign="top"><a id="ae996fce212244df79b83a587317f7423"></a> const <a class="el" href="class_modular_arithmetic.html">Field</a> & </td><td class="memItemRight" valign="bottom"><b>GetField</b> () const</td></tr> <tr class="separator:ae996fce212244df79b83a587317f7423"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a64fd2b17f818ef8123185cd3363dc8f3"><td class="memItemLeft" align="right" valign="top"><a id="a64fd2b17f818ef8123185cd3363dc8f3"></a> const <a class="el" href="class_integer.html">FieldElement</a> & </td><td class="memItemRight" valign="bottom"><b>GetA</b> () const</td></tr> <tr class="separator:a64fd2b17f818ef8123185cd3363dc8f3"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a8117e5644de20cfa19a59372956649a4"><td class="memItemLeft" align="right" valign="top"><a id="a8117e5644de20cfa19a59372956649a4"></a> const <a class="el" href="class_integer.html">FieldElement</a> & </td><td class="memItemRight" valign="bottom"><b>GetB</b> () const</td></tr> <tr class="separator:a8117e5644de20cfa19a59372956649a4"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a4bb9299daf0f8d551e11fad9766e7141"><td class="memItemLeft" align="right" valign="top"><a id="a4bb9299daf0f8d551e11fad9766e7141"></a> bool </td><td class="memItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="class_e_c_p.html">ECP</a> &rhs) const</td></tr> <tr class="separator:a4bb9299daf0f8d551e11fad9766e7141"><td class="memSeparator" colspan="2"> </td></tr> <tr class="inherit_header pub_methods_class_abstract_group"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_abstract_group')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="class_abstract_group.html">AbstractGroup< ECPPoint ></a></td></tr> <tr class="memitem:aa19e1bef00198fb30eb01df3f7076717 inherit pub_methods_class_abstract_group"><td class="memItemLeft" align="right" valign="top">virtual const <a class="el" href="struct_e_c_p_point.html">Element</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="class_abstract_group.html#aa19e1bef00198fb30eb01df3f7076717">Subtract</a> (const <a class="el" href="struct_e_c_p_point.html">Element</a> &a, const <a class="el" href="struct_e_c_p_point.html">Element</a> &b) const</td></tr> <tr class="memdesc:aa19e1bef00198fb30eb01df3f7076717 inherit pub_methods_class_abstract_group"><td class="mdescLeft"> </td><td class="mdescRight">Subtracts elements in the group. <a href="class_abstract_group.html#aa19e1bef00198fb30eb01df3f7076717">More...</a><br /></td></tr> <tr class="separator:aa19e1bef00198fb30eb01df3f7076717 inherit pub_methods_class_abstract_group"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ab03cc0a23f23c6aa1c003e11f9abb8c5 inherit pub_methods_class_abstract_group"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="struct_e_c_p_point.html">Element</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="class_abstract_group.html#ab03cc0a23f23c6aa1c003e11f9abb8c5">Accumulate</a> (<a class="el" href="struct_e_c_p_point.html">Element</a> &a, const <a class="el" href="struct_e_c_p_point.html">Element</a> &b) const</td></tr> <tr class="memdesc:ab03cc0a23f23c6aa1c003e11f9abb8c5 inherit pub_methods_class_abstract_group"><td class="mdescLeft"> </td><td class="mdescRight">TODO. <a href="class_abstract_group.html#ab03cc0a23f23c6aa1c003e11f9abb8c5">More...</a><br /></td></tr> <tr class="separator:ab03cc0a23f23c6aa1c003e11f9abb8c5 inherit pub_methods_class_abstract_group"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a40f7de55eddc193e07a7c3b5acad781a inherit pub_methods_class_abstract_group"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="struct_e_c_p_point.html">Element</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="class_abstract_group.html#a40f7de55eddc193e07a7c3b5acad781a">Reduce</a> (<a class="el" href="struct_e_c_p_point.html">Element</a> &a, const <a class="el" href="struct_e_c_p_point.html">Element</a> &b) const</td></tr> <tr class="memdesc:a40f7de55eddc193e07a7c3b5acad781a inherit pub_methods_class_abstract_group"><td class="mdescLeft"> </td><td class="mdescRight">Reduces an element in the congruence class. <a href="class_abstract_group.html#a40f7de55eddc193e07a7c3b5acad781a">More...</a><br /></td></tr> <tr class="separator:a40f7de55eddc193e07a7c3b5acad781a inherit pub_methods_class_abstract_group"><td class="memSeparator" colspan="2"> </td></tr> </table> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <div class="textblock"><p>Elliptic Curve over GF(p), where p is prime. </p> <p class="definition">Definition at line <a class="el" href="ecp_8h_source.html#l00026">26</a> of file <a class="el" href="ecp_8h_source.html">ecp.h</a>.</p> </div><h2 class="groupheader">Constructor & Destructor Documentation</h2> <a id="a75052eac63ed5622c1e558852cd2d1a4"></a> <h2 class="memtitle"><span class="permalink"><a href="#a75052eac63ed5622c1e558852cd2d1a4">◆ </a></span>ECP() <span class="overload">[1/3]</span></h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">ECP::ECP </td> <td>(</td> <td class="paramtype">const <a class="el" href="class_e_c_p.html">ECP</a> & </td> <td class="paramname"><em>ecp</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">bool </td> <td class="paramname"><em>convertToMontgomeryRepresentation</em> = <code>false</code> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Copy construct an <a class="el" href="class_e_c_p.html" title="Elliptic Curve over GF(p), where p is prime.">ECP</a>. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">ecp</td><td>the other <a class="el" href="class_e_c_p.html" title="Elliptic Curve over GF(p), where p is prime.">ECP</a> object </td></tr> <tr><td class="paramname">convertToMontgomeryRepresentation</td><td>flag indicating if the curve should be converted to a <a class="el" href="class_montgomery_representation.html" title="Performs modular arithmetic in Montgomery representation for increased speed.">MontgomeryRepresentation</a> </td></tr> </table> </dd> </dl> <dl class="section see"><dt>See also</dt><dd><a class="el" href="class_modular_arithmetic.html" title="Ring of congruence classes modulo n.">ModularArithmetic</a>, <a class="el" href="class_montgomery_representation.html" title="Performs modular arithmetic in Montgomery representation for increased speed.">MontgomeryRepresentation</a> </dd></dl> </div> </div> <a id="a7dbe4a90840d3b7cb23412a65414f4f5"></a> <h2 class="memtitle"><span class="permalink"><a href="#a7dbe4a90840d3b7cb23412a65414f4f5">◆ </a></span>ECP() <span class="overload">[2/3]</span></h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">ECP::ECP </td> <td>(</td> <td class="paramtype">const <a class="el" href="class_integer.html">Integer</a> & </td> <td class="paramname"><em>modulus</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="class_integer.html">FieldElement</a> & </td> <td class="paramname"><em>a</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="class_integer.html">FieldElement</a> & </td> <td class="paramname"><em>b</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">inline</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Construct an <a class="el" href="class_e_c_p.html" title="Elliptic Curve over GF(p), where p is prime.">ECP</a>. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">modulus</td><td>the prime modulus </td></tr> <tr><td class="paramname">a</td><td>Field::Element </td></tr> <tr><td class="paramname">b</td><td>Field::Element </td></tr> </table> </dd> </dl> <p class="definition">Definition at line <a class="el" href="ecp_8h_source.html#l00048">48</a> of file <a class="el" href="ecp_8h_source.html">ecp.h</a>.</p> </div> </div> <a id="aa7f09fe942958b0b0933fa9a9a55fa6d"></a> <h2 class="memtitle"><span class="permalink"><a href="#aa7f09fe942958b0b0933fa9a9a55fa6d">◆ </a></span>ECP() <span class="overload">[3/3]</span></h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">ECP::ECP </td> <td>(</td> <td class="paramtype"><a class="el" href="class_buffered_transformation.html">BufferedTransformation</a> & </td> <td class="paramname"><em>bt</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Construct an <a class="el" href="class_e_c_p.html" title="Elliptic Curve over GF(p), where p is prime.">ECP</a> from BER encoded parameters. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">bt</td><td><a class="el" href="class_buffered_transformation.html" title="Interface for buffered transformations.">BufferedTransformation</a> derived object</td></tr> </table> </dd> </dl> <p>This constructor will decode and extract the the fields fieldID and curve of the sequence ECParameters </p> </div> </div> <h2 class="groupheader">Member Function Documentation</h2> <a id="ad2a025bdb4caffe2ead28d3c4fee4c5a"></a> <h2 class="memtitle"><span class="permalink"><a href="#ad2a025bdb4caffe2ead28d3c4fee4c5a">◆ </a></span>DEREncode()</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void ECP::DEREncode </td> <td>(</td> <td class="paramtype"><a class="el" href="class_buffered_transformation.html">BufferedTransformation</a> & </td> <td class="paramname"><em>bt</em></td><td>)</td> <td> const</td> </tr> </table> </div><div class="memdoc"> <p>Encode the fields fieldID and curve of the sequence ECParameters. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">bt</td><td><a class="el" href="class_buffered_transformation.html" title="Interface for buffered transformations.">BufferedTransformation</a> derived object </td></tr> </table> </dd> </dl> </div> </div> <a id="a60fbeaa2294171f914f1e7c6ecda776e"></a> <h2 class="memtitle"><span class="permalink"><a href="#a60fbeaa2294171f914f1e7c6ecda776e">◆ </a></span>Equal()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">bool ECP::Equal </td> <td>(</td> <td class="paramtype">const <a class="el" href="struct_e_c_p_point.html">Point</a> & </td> <td class="paramname"><em>a</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="struct_e_c_p_point.html">Point</a> & </td> <td class="paramname"><em>b</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">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Compare two elements for equality. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">a</td><td>first element </td></tr> <tr><td class="paramname">b</td><td>second element </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>true if the elements are equal, false otherwise</dd></dl> <p><a class="el" href="class_e_c_p.html#a60fbeaa2294171f914f1e7c6ecda776e" title="Compare two elements for equality.">Equal()</a> tests the elements for equality using <code>a==b</code> </p> <p>Implements <a class="el" href="class_abstract_group.html#a0d72cb663566b7c056f846a561547bec">AbstractGroup< ECPPoint ></a>.</p> </div> </div> <a id="a8a6ea0e6a710a7ff118ce5c9fa48c55e"></a> <h2 class="memtitle"><span class="permalink"><a href="#a8a6ea0e6a710a7ff118ce5c9fa48c55e">◆ </a></span>Identity()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">const <a class="el" href="struct_e_c_p_point.html">Point</a>& ECP::Identity </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">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Provides the Identity element. </p> <dl class="section return"><dt>Returns</dt><dd>the Identity element </dd></dl> <p>Implements <a class="el" href="class_abstract_group.html#a929ba4e6a7d7d80344946efad0456d5b">AbstractGroup< ECPPoint ></a>.</p> </div> </div> <a id="a235a3931b7f4611fa7a1a3d5a95036ce"></a> <h2 class="memtitle"><span class="permalink"><a href="#a235a3931b7f4611fa7a1a3d5a95036ce">◆ </a></span>Inverse()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">const <a class="el" href="struct_e_c_p_point.html">Point</a>& ECP::Inverse </td> <td>(</td> <td class="paramtype">const <a class="el" href="struct_e_c_p_point.html">Point</a> & </td> <td class="paramname"><em>a</em></td><td>)</td> <td> const</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Inverts the element in the group. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">a</td><td>first element </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>the inverse of the element </dd></dl> <p>Implements <a class="el" href="class_abstract_group.html#ab22563bc0dcb544399d7e22b3589e165">AbstractGroup< ECPPoint ></a>.</p> </div> </div> <a id="a0031a4a3a18999fda3942713da554697"></a> <h2 class="memtitle"><span class="permalink"><a href="#a0031a4a3a18999fda3942713da554697">◆ </a></span>InversionIsFast()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">bool ECP::InversionIsFast </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>Determine if inversion is fast. </p> <dl class="section return"><dt>Returns</dt><dd>true if inversion is fast, false otherwise </dd></dl> <p>Reimplemented from <a class="el" href="class_abstract_group.html#a257836994abefe25b80293f4c6b10f60">AbstractGroup< ECPPoint ></a>.</p> <p class="definition">Definition at line <a class="el" href="ecp_8h_source.html#l00063">63</a> of file <a class="el" href="ecp_8h_source.html">ecp.h</a>.</p> </div> </div> <a id="ae02a3946666ba03470a346270d6f8820"></a> <h2 class="memtitle"><span class="permalink"><a href="#ae02a3946666ba03470a346270d6f8820">◆ </a></span>Add()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">const <a class="el" href="struct_e_c_p_point.html">Point</a>& ECP::Add </td> <td>(</td> <td class="paramtype">const <a class="el" href="struct_e_c_p_point.html">Point</a> & </td> <td class="paramname"><em>a</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="struct_e_c_p_point.html">Point</a> & </td> <td class="paramname"><em>b</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">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Adds elements in the group. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">a</td><td>first element </td></tr> <tr><td class="paramname">b</td><td>second element </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>the sum of <code>a</code> and <code>b</code> </dd></dl> <p>Implements <a class="el" href="class_abstract_group.html#aa813430d9e4244de24c487d090eb5797">AbstractGroup< ECPPoint ></a>.</p> </div> </div> <a id="a9528bc2c3075fff6c03e257846958497"></a> <h2 class="memtitle"><span class="permalink"><a href="#a9528bc2c3075fff6c03e257846958497">◆ </a></span>Double()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">const <a class="el" href="struct_e_c_p_point.html">Point</a>& ECP::Double </td> <td>(</td> <td class="paramtype">const <a class="el" href="struct_e_c_p_point.html">Point</a> & </td> <td class="paramname"><em>a</em></td><td>)</td> <td> const</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Doubles an element in the group. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">a</td><td>the element </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>the element doubled </dd></dl> <p>Reimplemented from <a class="el" href="class_abstract_group.html#afaceaf9c9c24606efc38d30fd8aff5ee">AbstractGroup< ECPPoint ></a>.</p> </div> </div> <a id="a3a2b80bdd5e9c39229962c8b87e7023a"></a> <h2 class="memtitle"><span class="permalink"><a href="#a3a2b80bdd5e9c39229962c8b87e7023a">◆ </a></span>ScalarMultiply()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname"><a class="el" href="struct_e_c_p_point.html">Point</a> ECP::ScalarMultiply </td> <td>(</td> <td class="paramtype">const <a class="el" href="struct_e_c_p_point.html">Point</a> & </td> <td class="paramname"><em>a</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="class_integer.html">Integer</a> & </td> <td class="paramname"><em>e</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">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Performs a scalar multiplication. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">a</td><td>multiplicand </td></tr> <tr><td class="paramname">e</td><td>multiplier </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>the product </dd></dl> <p>Reimplemented from <a class="el" href="class_abstract_group.html#ac01536b91c4fa3d0e0f929917143595b">AbstractGroup< ECPPoint ></a>.</p> </div> </div> <a id="a905ca5e76a69b26efba70c46be3576fb"></a> <h2 class="memtitle"><span class="permalink"><a href="#a905ca5e76a69b26efba70c46be3576fb">◆ </a></span>CascadeScalarMultiply()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname"><a class="el" href="struct_e_c_p_point.html">Point</a> ECP::CascadeScalarMultiply </td> <td>(</td> <td class="paramtype">const <a class="el" href="struct_e_c_p_point.html">Point</a> & </td> <td class="paramname"><em>x</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="class_integer.html">Integer</a> & </td> <td class="paramname"><em>e1</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="struct_e_c_p_point.html">Point</a> & </td> <td class="paramname"><em>y</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="class_integer.html">Integer</a> & </td> <td class="paramname"><em>e2</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">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>TODO. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">x</td><td>first multiplicand </td></tr> <tr><td class="paramname">e1</td><td>the first multiplier </td></tr> <tr><td class="paramname">y</td><td>second multiplicand </td></tr> <tr><td class="paramname">e2</td><td>the second multiplier </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>TODO </dd></dl> <p>Reimplemented from <a class="el" href="class_abstract_group.html#a89bd24f1a83e62ac8cc5ad014cb5883e">AbstractGroup< ECPPoint ></a>.</p> </div> </div> <a id="af6f7bcfb3ff89c7d6ba1265640f95d03"></a> <h2 class="memtitle"><span class="permalink"><a href="#af6f7bcfb3ff89c7d6ba1265640f95d03">◆ </a></span>SimultaneousMultiply()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">void ECP::SimultaneousMultiply </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_e_c_p_point.html">Point</a> * </td> <td class="paramname"><em>results</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="struct_e_c_p_point.html">Point</a> & </td> <td class="paramname"><em>base</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="class_integer.html">Integer</a> * </td> <td class="paramname"><em>exponents</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">unsigned int </td> <td class="paramname"><em>exponentsCount</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">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Multiplies a base to multiple exponents in a group. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">results</td><td>an array of Elements </td></tr> <tr><td class="paramname">base</td><td>the base to raise to the exponents </td></tr> <tr><td class="paramname">exponents</td><td>an array of exponents </td></tr> <tr><td class="paramname">exponentsCount</td><td>the number of exponents in the array</td></tr> </table> </dd> </dl> <p><a class="el" href="class_e_c_p.html#af6f7bcfb3ff89c7d6ba1265640f95d03" title="Multiplies a base to multiple exponents in a group.">SimultaneousMultiply()</a> multiplies the base to each exponent in the exponents array and stores the result at the respective position in the results array.</p> <p><a class="el" href="class_e_c_p.html#af6f7bcfb3ff89c7d6ba1265640f95d03" title="Multiplies a base to multiple exponents in a group.">SimultaneousMultiply()</a> must be implemented in a derived class. </p><dl class="section pre"><dt>Precondition</dt><dd><code><a class="el" href="misc_8h.html#a2d7e4464ea73d6393ebe78f952253426" title="Counts elements in an array.">COUNTOF(results)</a> == exponentsCount</code> </dd> <dd> <code><a class="el" href="misc_8h.html#a2d7e4464ea73d6393ebe78f952253426" title="Counts elements in an array.">COUNTOF(exponents)</a> == exponentsCount</code> </dd></dl> <p>Reimplemented from <a class="el" href="class_abstract_group.html#a9c73ab688612e76786f43e311376eb8d">AbstractGroup< ECPPoint ></a>.</p> </div> </div> <a id="a84825919705740161c1bd28b07cbd209"></a> <h2 class="memtitle"><span class="permalink"><a href="#a84825919705740161c1bd28b07cbd209">◆ </a></span>VerifyPoint()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">bool ECP::VerifyPoint </td> <td>(</td> <td class="paramtype">const <a class="el" href="struct_e_c_p_point.html">Point</a> & </td> <td class="paramname"><em>P</em></td><td>)</td> <td> const</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Verifies points on elliptic curve. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">P</td><td>point to verify </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>true if the point is valid, false otherwise </dd></dl> <p>Implements <a class="el" href="class_encoded_point.html#a3811a1f1385f673a1663df614c87c001">EncodedPoint< ECPPoint ></a>.</p> </div> </div> <a id="aa8b38e2d453f1173923c6fd8e9880606"></a> <h2 class="memtitle"><span class="permalink"><a href="#aa8b38e2d453f1173923c6fd8e9880606">◆ </a></span>EncodedPointSize()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">unsigned int ECP::EncodedPointSize </td> <td>(</td> <td class="paramtype">bool </td> <td class="paramname"><em>compressed</em> = <code>false</code></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>Determines encoded point size. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">compressed</td><td>flag indicating if the point is compressed </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>the minimum number of bytes required to encode the point </dd></dl> <p>Implements <a class="el" href="class_encoded_point.html#a1b4f38ed795723db0773af1b30874e46">EncodedPoint< ECPPoint ></a>.</p> <p class="definition">Definition at line <a class="el" href="ecp_8h_source.html#l00078">78</a> of file <a class="el" href="ecp_8h_source.html">ecp.h</a>.</p> </div> </div> <a id="aac188a1e14a4f7807720f45e3aa30768"></a> <h2 class="memtitle"><span class="permalink"><a href="#aac188a1e14a4f7807720f45e3aa30768">◆ </a></span>DecodePoint() <span class="overload">[1/2]</span></h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">bool ECP::DecodePoint </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_e_c_p_point.html">Point</a> & </td> <td class="paramname"><em>P</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="class_buffered_transformation.html">BufferedTransformation</a> & </td> <td class="paramname"><em>bt</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>len</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">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Decodes an elliptic curve point. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">P</td><td>point which is decoded </td></tr> <tr><td class="paramname">bt</td><td>source <a class="el" href="class_buffered_transformation.html" title="Interface for buffered transformations.">BufferedTransformation</a> </td></tr> <tr><td class="paramname">len</td><td>number of bytes to read from the <a class="el" href="class_buffered_transformation.html" title="Interface for buffered transformations.">BufferedTransformation</a> </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>true if a point was decoded, false otherwise </dd></dl> <p>Implements <a class="el" href="class_encoded_point.html#a844fcbf759f55bca8fc2ae13bda5569f">EncodedPoint< ECPPoint ></a>.</p> </div> </div> <a id="ac1d2920f888a7fb778fd4f468a464404"></a> <h2 class="memtitle"><span class="permalink"><a href="#ac1d2920f888a7fb778fd4f468a464404">◆ </a></span>DecodePoint() <span class="overload">[2/2]</span></h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">bool ECP::DecodePoint </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_e_c_p_point.html">Point</a> & </td> <td class="paramname"><em>P</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const byte * </td> <td class="paramname"><em>encodedPoint</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>len</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">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Decodes an elliptic curve point. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">P</td><td>point which is decoded </td></tr> <tr><td class="paramname">encodedPoint</td><td>byte array with the encoded point </td></tr> <tr><td class="paramname">len</td><td>the size of the array </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>true if a point was decoded, false otherwise </dd></dl> <p>Implements <a class="el" href="class_encoded_point.html#a0e51d9cd778655c08db4d63f1b58b09f">EncodedPoint< ECPPoint ></a>.</p> </div> </div> <a id="a4d0d3344902b48260d0b5dacca2073b1"></a> <h2 class="memtitle"><span class="permalink"><a href="#a4d0d3344902b48260d0b5dacca2073b1">◆ </a></span>EncodePoint() <span class="overload">[1/2]</span></h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">void ECP::EncodePoint </td> <td>(</td> <td class="paramtype">byte * </td> <td class="paramname"><em>encodedPoint</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="struct_e_c_p_point.html">Point</a> & </td> <td class="paramname"><em>P</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">bool </td> <td class="paramname"><em>compressed</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">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Encodes an elliptic curve point. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">P</td><td>point which is decoded </td></tr> <tr><td class="paramname">encodedPoint</td><td>byte array for the encoded point </td></tr> <tr><td class="paramname">compressed</td><td>flag indicating if the point is compressed</td></tr> </table> </dd> </dl> <p><code>encodedPoint</code> must be at least <a class="el" href="class_e_c_p.html#aa8b38e2d453f1173923c6fd8e9880606" title="Determines encoded point size.">EncodedPointSize()</a> in length </p> <p>Implements <a class="el" href="class_encoded_point.html#a38676be5408ca8d5b76864d0d05871cc">EncodedPoint< ECPPoint ></a>.</p> </div> </div> <a id="a4cf289c71b832211eddfb3b0608ebaab"></a> <h2 class="memtitle"><span class="permalink"><a href="#a4cf289c71b832211eddfb3b0608ebaab">◆ </a></span>EncodePoint() <span class="overload">[2/2]</span></h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">void ECP::EncodePoint </td> <td>(</td> <td class="paramtype"><a class="el" href="class_buffered_transformation.html">BufferedTransformation</a> & </td> <td class="paramname"><em>bt</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="struct_e_c_p_point.html">Point</a> & </td> <td class="paramname"><em>P</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">bool </td> <td class="paramname"><em>compressed</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">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Encodes an elliptic curve point. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">bt</td><td>target <a class="el" href="class_buffered_transformation.html" title="Interface for buffered transformations.">BufferedTransformation</a> </td></tr> <tr><td class="paramname">P</td><td>point which is encoded </td></tr> <tr><td class="paramname">compressed</td><td>flag indicating if the point is compressed </td></tr> </table> </dd> </dl> <p>Implements <a class="el" href="class_encoded_point.html#ad40e267748b7c3882b5e2940c6582877">EncodedPoint< ECPPoint ></a>.</p> </div> </div> <a id="a9e97f700fa09b811ea9b0e91e3fbf88f"></a> <h2 class="memtitle"><span class="permalink"><a href="#a9e97f700fa09b811ea9b0e91e3fbf88f">◆ </a></span>BERDecodePoint()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname"><a class="el" href="struct_e_c_p_point.html">Point</a> ECP::BERDecodePoint </td> <td>(</td> <td class="paramtype"><a class="el" href="class_buffered_transformation.html">BufferedTransformation</a> & </td> <td class="paramname"><em>bt</em></td><td>)</td> <td> const</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>BER Decodes an elliptic curve point. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">bt</td><td>source <a class="el" href="class_buffered_transformation.html" title="Interface for buffered transformations.">BufferedTransformation</a> </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>the decoded elliptic curve point </dd></dl> <p>Implements <a class="el" href="class_encoded_point.html#aeac00b790920c54c03fcec814c3d35a1">EncodedPoint< ECPPoint ></a>.</p> </div> </div> <a id="a6ab1727c66563a593880d1fb3b595fb5"></a> <h2 class="memtitle"><span class="permalink"><a href="#a6ab1727c66563a593880d1fb3b595fb5">◆ </a></span>DEREncodePoint()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">void ECP::DEREncodePoint </td> <td>(</td> <td class="paramtype"><a class="el" href="class_buffered_transformation.html">BufferedTransformation</a> & </td> <td class="paramname"><em>bt</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="struct_e_c_p_point.html">Point</a> & </td> <td class="paramname"><em>P</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">bool </td> <td class="paramname"><em>compressed</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">virtual</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>DER Encodes an elliptic curve point. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">bt</td><td>target <a class="el" href="class_buffered_transformation.html" title="Interface for buffered transformations.">BufferedTransformation</a> </td></tr> <tr><td class="paramname">P</td><td>point which is encoded </td></tr> <tr><td class="paramname">compressed</td><td>flag indicating if the point is compressed </td></tr> </table> </dd> </dl> <p>Implements <a class="el" href="class_encoded_point.html#a81265b6ace320959d2dbc13a4438fcc1">EncodedPoint< ECPPoint ></a>.</p> </div> </div> <hr/>The documentation for this class was generated from the following file:<ul> <li><a class="el" href="ecp_8h_source.html">ecp.h</a></li> </ul> </div><!-- contents --> <!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated on Wed Nov 27 2019 15:04:13 for Crypto++ by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> </a> 1.8.15 </small></address> </body> </html>