⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eccrypto_8h-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 4 页
字号:
<a name="l00057"></a>00057 <span class="comment">        //! this implementation doesn't actually generate a curve, it just initializes the parameters with existing values</span><a name="l00058"></a>00058 <span class="comment"></span><span class="comment">        /*! parameters: (Curve, SubgroupGenerator, SubgroupOrder, Cofactor (optional)), or (GroupOID) */</span><a name="l00059"></a>00059         <span class="keywordtype">void</span> GenerateRandom(<a class="code" href="class_random_number_generator.html" title="interface for random number generators">RandomNumberGenerator</a> &amp;rng, <span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html" title="interface for retrieving values given their names">NameValuePairs</a> &amp;alg);<a name="l00060"></a>00060 <a name="l00061"></a>00061         <span class="comment">// DL_GroupParameters</span><a name="l00062"></a><a class="code" href="class_d_l___group_parameters___e_c.html#a1f2c63b588afbfda789194704e68337">00062</a>         <span class="keyword">const</span> <a class="code" href="class_d_l___fixed_base_precomputation.html">DL_FixedBasePrecomputation&lt;Element&gt;</a> &amp; GetBasePrecomputation()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this-&gt;m_gpc;}<a name="l00063"></a><a class="code" href="class_d_l___group_parameters___e_c.html#265ae70adae244ace472ef7f97052eda">00063</a>         <a class="code" href="class_d_l___fixed_base_precomputation.html">DL_FixedBasePrecomputation&lt;Element&gt;</a> &amp; AccessBasePrecomputation() {<span class="keywordflow">return</span> this-&gt;m_gpc;}<a name="l00064"></a><a class="code" href="class_d_l___group_parameters___e_c.html#731bcb118762c4147d093aff4a1c16ff">00064</a>         <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &amp; GetSubgroupOrder()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_n;}<a name="l00065"></a>00065         <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> GetCofactor() <span class="keyword">const</span>;<a name="l00066"></a>00066         <span class="keywordtype">bool</span> ValidateGroup(<a class="code" href="class_random_number_generator.html" title="interface for random number generators">RandomNumberGenerator</a> &amp;rng, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> level) <span class="keyword">const</span>;<a name="l00067"></a>00067         <span class="keywordtype">bool</span> ValidateElement(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> level, <span class="keyword">const</span> Element &amp;element, <span class="keyword">const</span> <a class="code" href="class_d_l___fixed_base_precomputation.html">DL_FixedBasePrecomputation&lt;Element&gt;</a> *precomp) <span class="keyword">const</span>;<a name="l00068"></a><a class="code" href="class_d_l___group_parameters___e_c.html#57d1fdc7007be3a6bde69547adb95031">00068</a>         <span class="keywordtype">bool</span> FastSubgroupCheckAvailable()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}<a name="l00069"></a><a class="code" href="class_d_l___group_parameters___e_c.html#72d99ea33b6163de5cfc649ba8070bd9">00069</a>         <span class="keywordtype">void</span> EncodeElement(<span class="keywordtype">bool</span> reversible, <span class="keyword">const</span> Element &amp;element, byte *encoded)<span class="keyword"> const</span><a name="l00070"></a>00070 <span class="keyword">        </span>{<a name="l00071"></a>00071                 <span class="keywordflow">if</span> (reversible)<a name="l00072"></a>00072                         GetCurve().EncodePoint(encoded, element, m_compress);<a name="l00073"></a>00073                 <span class="keywordflow">else</span><a name="l00074"></a>00074                         element.x.Encode(encoded, GetEncodedElementSize(<span class="keyword">false</span>));<a name="l00075"></a>00075         }<a name="l00076"></a><a class="code" href="class_d_l___group_parameters___e_c.html#2e2088c9a44d830835b23cce686067df">00076</a>         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetEncodedElementSize(<span class="keywordtype">bool</span> reversible)<span class="keyword"> const</span><a name="l00077"></a>00077 <span class="keyword">        </span>{<a name="l00078"></a>00078                 <span class="keywordflow">if</span> (reversible)<a name="l00079"></a>00079                         <span class="keywordflow">return</span> GetCurve().EncodedPointSize(m_compress);<a name="l00080"></a>00080                 <span class="keywordflow">else</span><a name="l00081"></a>00081                         <span class="keywordflow">return</span> GetCurve().GetField().MaxElementByteLength();<a name="l00082"></a>00082         }<a name="l00083"></a><a class="code" href="class_d_l___group_parameters___e_c.html#bb818f7defc3b7067bd30ea8e78ae453">00083</a>         Element DecodeElement(<span class="keyword">const</span> byte *encoded, <span class="keywordtype">bool</span> checkForGroupMembership)<span class="keyword"> const</span><a name="l00084"></a>00084 <span class="keyword">        </span>{<a name="l00085"></a>00085                 Point result;<a name="l00086"></a>00086                 <span class="keywordflow">if</span> (!GetCurve().DecodePoint(result, encoded, GetEncodedElementSize(<span class="keyword">true</span>)))<a name="l00087"></a>00087                         <span class="keywordflow">throw</span> <a class="code" href="class_d_l___bad_element.html" title="to be thrown by DecodeElement and AgreeWithStaticPrivateKey">DL_BadElement</a>();<a name="l00088"></a>00088                 <span class="keywordflow">if</span> (checkForGroupMembership &amp;&amp; !ValidateElement(1, result, NULL))<a name="l00089"></a>00089                         <span class="keywordflow">throw</span> <a class="code" href="class_d_l___bad_element.html" title="to be thrown by DecodeElement and AgreeWithStaticPrivateKey">DL_BadElement</a>();<a name="l00090"></a>00090                 <span class="keywordflow">return</span> result;<a name="l00091"></a>00091         }<a name="l00092"></a>00092         <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> ConvertElementToInteger(<span class="keyword">const</span> Element &amp;element) <span class="keyword">const</span>;<a name="l00093"></a><a class="code" href="class_d_l___group_parameters___e_c.html#c67b130705307b96d52154df07c3e110">00093</a>         <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> GetMaxExponent()<span class="keyword"> const </span>{<span class="keywordflow">return</span> GetSubgroupOrder()-1;}<a name="l00094"></a><a class="code" href="class_d_l___group_parameters___e_c.html#3b5b5ca00a83b0a518efd6cc4c4ad1a0">00094</a>         <span class="keywordtype">bool</span> IsIdentity(<span class="keyword">const</span> Element &amp;element)<span class="keyword"> const </span>{<span class="keywordflow">return</span> element.identity;}<a name="l00095"></a>00095         <span class="keywordtype">void</span> SimultaneousExponentiate(Element *results, <span class="keyword">const</span> Element &amp;base, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> *exponents, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> exponentsCount) <span class="keyword">const</span>;<a name="l00096"></a><a class="code" href="class_d_l___group_parameters___e_c.html#69b7bf8aeb90c94cb5d59877ec295b45">00096</a>         <span class="keyword">static</span> std::string CRYPTOPP_API StaticAlgorithmNamePrefix() {<span class="keywordflow">return</span> <span class="stringliteral">"EC"</span>;}<a name="l00097"></a>00097 <a name="l00098"></a>00098         <span class="comment">// ASN1Key</span><a name="l00099"></a>00099         <a class="code" href="class_o_i_d.html" title="Object Identifier.">OID</a> GetAlgorithmID() <span class="keyword">const</span>;<a name="l00100"></a>00100 <a name="l00101"></a>00101         <span class="comment">// used by MQV</span><a name="l00102"></a>00102         Element MultiplyElements(<span class="keyword">const</span> Element &amp;a, <span class="keyword">const</span> Element &amp;b) <span class="keyword">const</span>;<a name="l00103"></a>00103         Element CascadeExponentiate(<span class="keyword">const</span> Element &amp;element1, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &amp;exponent1, <span class="keyword">const</span> Element &amp;element2, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &amp;exponent2) <span class="keyword">const</span>;<a name="l00104"></a>00104 <a name="l00105"></a>00105         <span class="comment">// non-inherited</span><a name="l00106"></a>00106 <a name="l00107"></a>00107         <span class="comment">// enumerate OIDs for recommended parameters, use OID() to get first one</span><a name="l00108"></a>00108         <span class="keyword">static</span> <a class="code" href="class_o_i_d.html" title="Object Identifier.">OID</a> CRYPTOPP_API GetNextRecommendedParametersOID(<span class="keyword">const</span> <a class="code" href="class_o_i_d.html" title="Object Identifier.">OID</a> &amp;oid);<a name="l00109"></a>00109 <a name="l00110"></a>00110         <span class="keywordtype">void</span> BERDecode(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;bt);<a name="l00111"></a>00111         <span class="keywordtype">void</span> DEREncode(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;bt) <span class="keyword">const</span>;<a name="l00112"></a>00112 <a name="l00113"></a><a class="code" href="class_d_l___group_parameters___e_c.html#810ae195d94843707541f306c1a10854">00113</a>         <span class="keywordtype">void</span> SetPointCompression(<span class="keywordtype">bool</span> compress) {m_compress = compress;}<a name="l00114"></a><a class="code" href="class_d_l___group_parameters___e_c.html#ba904d6e76c9984e1e6c05d9b05b4e04">00114</a>         <span class="keywordtype">bool</span> GetPointCompression()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_compress;}<a name="l00115"></a>00115 <a name="l00116"></a><a class="code" href="class_d_l___group_parameters___e_c.html#f700b6b9ae38e3910836971653f616db">00116</a>         <span class="keywordtype">void</span> SetEncodeAsOID(<span class="keywordtype">bool</span> encodeAsOID) {m_encodeAsOID = encodeAsOID;}<a name="l00117"></a><a class="code" href="class_d_l___group_parameters___e_c.html#79531b0e0d0cf8d414b894cd6266268c">00117</a>         <span class="keywordtype">bool</span> GetEncodeAsOID()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_encodeAsOID;}<a name="l00118"></a>00118 <a name="l00119"></a><a class="code" href="class_d_l___group_parameters___e_c.html#1878b13f22da409ea562581823b6b5d2">00119</a>         <span class="keyword">const</span> EllipticCurve&amp; GetCurve()<span class="keyword"> const </span>{<span class="keywordflow">return</span> this-&gt;m_groupPrecomputation.GetCurve();}<a name="l00120"></a>00120 <a name="l00121"></a><a class="code" href="class_d_l___group_parameters___e_c.html#cb62f08de7d25cd3031b61800f72cb6d">00121</a>         <span class="keywordtype">bool</span> <a class="code" href="gf2n_8h.html#22c25c181c409600aa2e4bf1067ac47a">operator==</a>(<span class="keyword">const</span> ThisClass &amp;rhs)<span class="keyword"> const</span><a name="l00122"></a>00122 <span class="keyword">                </span>{<span class="keywordflow">return</span> this-&gt;m_groupPrecomputation.GetCurve() == rhs.<a class="code" href="class_d_l___group_parameters_impl.html#9b4bc35a5e9a03d1ff075abefe8d045c">m_groupPrecomputation</a>.GetCurve() &amp;&amp; this-&gt;m_gpc.GetBase(this-&gt;m_groupPrecomputation) == rhs.<a class="code" href="class_d_l___group_parameters_impl.html#187f7e42228ffcfd25ce90c35b979561">m_gpc</a>.<a class="code" href="class_d_l___fixed_base_precomputation_impl.html#d1c683d28b19854e6c61cef0c7471f55">GetBase</a>(rhs.<a class="code" href="class_d_l___group_parameters_impl.html#9b4bc35a5e9a03d1ff075abefe8d045c">m_groupPrecomputation</a>);}<a name="l00123"></a>00123 <a name="l00124"></a>00124 <span class="preprocessor">#ifdef CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY</span><a name="l00125"></a>00125 <span class="preprocessor"></span>        <span class="keyword">const</span> Point&amp; GetBasePoint()<span class="keyword"> const </span>{<span class="keywordflow">return</span> GetSubgroupGenerator();}<a name="l00126"></a>00126         <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a>&amp; GetBasePointOrder()<span class="keyword"> const </span>{<span class="keywordflow">return</span> GetSubgroupOrder();}<a name="l00127"></a>00127         <span class="keywordtype">void</span> LoadRecommendedParameters(<span class="keyword">const</span> <a class="code" href="class_o_i_d.html" title="Object Identifier.">OID</a> &amp;oid) {Initialize(oid);}<a name="l00128"></a>00128 <span class="preprocessor">#endif</span><a name="l00129"></a>00129 <span class="preprocessor"></span><a name="l00130"></a>00130 <span class="keyword">protected</span>:<a name="l00131"></a><a class="code" href="class_d_l___group_parameters___e_c.html#412c10203696291afdb22c7b2fee2112">00131</a>         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> FieldElementLength()<span class="keyword"> const </span>{<span class="keywordflow">return</span> GetCurve().GetField().MaxElementByteLength();}<a name="l00132"></a><a class="code" href="class_d_l___group_parameters___e_c.html#1fdf067a11f32ac1616b437ced145d93">00132</a>         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ExponentLength()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_n.ByteCount();}<a name="l00133"></a>00133 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -