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

📄 ecp_8h-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<a name="l00057"></a>00057 <a name="l00058"></a><a class="code" href="class_e_c_p.html#81862b8619979835884f0239012e2ce9">00058</a>         <a class="code" href="struct_e_c_p_point.html" title="Elliptical Curve Point.">Point</a> Multiply(<span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &amp;k, <span class="keyword">const</span> <a class="code" href="struct_e_c_p_point.html" title="Elliptical Curve Point.">Point</a> &amp;P)<span class="keyword"> const</span><a name="l00059"></a>00059 <span class="keyword">                </span>{<span class="keywordflow">return</span> <a class="code" href="class_abstract_group.html#c01536b91c4fa3d0e0f929917143595b">ScalarMultiply</a>(P, k);}<a name="l00060"></a><a class="code" href="class_e_c_p.html#de7d41c2b0ce5941c69b071081c2cb06">00060</a>         <a class="code" href="struct_e_c_p_point.html" title="Elliptical Curve Point.">Point</a> CascadeMultiply(<span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &amp;k1, <span class="keyword">const</span> <a class="code" href="struct_e_c_p_point.html" title="Elliptical Curve Point.">Point</a> &amp;P, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &amp;k2, <span class="keyword">const</span> <a class="code" href="struct_e_c_p_point.html" title="Elliptical Curve Point.">Point</a> &amp;Q)<span class="keyword"> const</span><a name="l00061"></a>00061 <span class="keyword">                </span>{<span class="keywordflow">return</span> <a class="code" href="class_abstract_group.html#ca3e1ca578003aff2595cc8d73522894">CascadeScalarMultiply</a>(P, k1, Q, k2);}<a name="l00062"></a>00062 <a name="l00063"></a>00063         <span class="keywordtype">bool</span> ValidateParameters(<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=3) <span class="keyword">const</span>;<a name="l00064"></a>00064         <span class="keywordtype">bool</span> VerifyPoint(<span class="keyword">const</span> Point &amp;P) <span class="keyword">const</span>;<a name="l00065"></a>00065 <a name="l00066"></a><a class="code" href="class_e_c_p.html#4273ed51110725435ddeefcac166c29d">00066</a>         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> EncodedPointSize(<span class="keywordtype">bool</span> compressed = <span class="keyword">false</span>)<span class="keyword"> const</span><a name="l00067"></a>00067 <span class="keyword">                </span>{<span class="keywordflow">return</span> 1 + (compressed?1:2)*GetField().MaxElementByteLength();}<a name="l00068"></a>00068         <span class="comment">// returns false if point is compressed and not valid (doesn't check if uncompressed)</span><a name="l00069"></a>00069         <span class="keywordtype">bool</span> DecodePoint(Point &amp;P, <a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;bt, <span class="keywordtype">size_t</span> len) <span class="keyword">const</span>;<a name="l00070"></a>00070         <span class="keywordtype">bool</span> DecodePoint(Point &amp;P, <span class="keyword">const</span> byte *encodedPoint, <span class="keywordtype">size_t</span> len) <span class="keyword">const</span>;<a name="l00071"></a>00071         <span class="keywordtype">void</span> EncodePoint(byte *encodedPoint, <span class="keyword">const</span> Point &amp;P, <span class="keywordtype">bool</span> compressed) <span class="keyword">const</span>;<a name="l00072"></a>00072         <span class="keywordtype">void</span> EncodePoint(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;bt, <span class="keyword">const</span> Point &amp;P, <span class="keywordtype">bool</span> compressed) <span class="keyword">const</span>;<a name="l00073"></a>00073 <a name="l00074"></a>00074         Point BERDecodePoint(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;bt) <span class="keyword">const</span>;<a name="l00075"></a>00075         <span class="keywordtype">void</span> DEREncodePoint(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;bt, <span class="keyword">const</span> Point &amp;P, <span class="keywordtype">bool</span> compressed) <span class="keyword">const</span>;<a name="l00076"></a>00076 <a name="l00077"></a><a class="code" href="class_e_c_p.html#b0c01cf1ebf788ba647fb8a076c6dcee">00077</a>         <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> FieldSize()<span class="keyword"> const </span>{<span class="keywordflow">return</span> GetField().GetModulus();}<a name="l00078"></a><a class="code" href="class_e_c_p.html#e996fce212244df79b83a587317f7423">00078</a>         <span class="keyword">const</span> <a class="code" href="class_modular_arithmetic.html" title="ring of congruence classes modulo n">Field</a> &amp; GetField()<span class="keyword"> const </span>{<span class="keywordflow">return</span> *m_fieldPtr;}<a name="l00079"></a><a class="code" href="class_e_c_p.html#64fd2b17f818ef8123185cd3363dc8f3">00079</a>         <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">FieldElement</a> &amp; GetA()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_a;}<a name="l00080"></a><a class="code" href="class_e_c_p.html#8117e5644de20cfa19a59372956649a4">00080</a>         <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">FieldElement</a> &amp; GetB()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_b;}<a name="l00081"></a>00081 <a name="l00082"></a><a class="code" href="class_e_c_p.html#f65e0e7074c9127a7dddc120ee1baa10">00082</a>         <span class="keywordtype">bool</span> <a class="code" href="gf2n_8h.html#22c25c181c409600aa2e4bf1067ac47a">operator==</a>(<span class="keyword">const</span> <a class="code" href="class_e_c_p.html" title="Elliptic Curve over GF(p), where p is prime.">ECP</a> &amp;rhs)<span class="keyword"> const</span><a name="l00083"></a>00083 <span class="keyword">                </span>{<span class="keywordflow">return</span> GetField() == rhs.<a class="code" href="class_e_c_p.html#e996fce212244df79b83a587317f7423">GetField</a>() &amp;&amp; m_a == rhs.<a class="code" href="class_e_c_p.html#20079b1eb4cc7648cd53deab66aef43d">m_a</a> &amp;&amp; m_b == rhs.<a class="code" href="class_e_c_p.html#7455165c1e3fc28e4f030246ac6ea6fe">m_b</a>;}<a name="l00084"></a>00084 <a name="l00085"></a>00085 <span class="keyword">private</span>:<a name="l00086"></a>00086         <a class="code" href="classclonable__ptr.html">clonable_ptr&lt;Field&gt;</a> m_fieldPtr;<a name="l00087"></a>00087         FieldElement m_a, m_b;<a name="l00088"></a>00088         <span class="keyword">mutable</span> Point m_R;<a name="l00089"></a>00089 };<a name="l00090"></a>00090 <a name="l00091"></a>00091 CRYPTOPP_DLL_TEMPLATE_CLASS <a class="code" href="class_d_l___fixed_base_precomputation_impl.html">DL_FixedBasePrecomputationImpl&lt;ECP::Point&gt;</a>;<a name="l00092"></a>00092 CRYPTOPP_DLL_TEMPLATE_CLASS <a class="code" href="class_d_l___group_precomputation.html">DL_GroupPrecomputation&lt;ECP::Point&gt;</a>;<a name="l00093"></a>00093 <a name="l00094"></a>00094 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keyword">class </span>EcPrecomputation;<a name="l00095"></a>00095 <span class="comment"></span><a name="l00096"></a>00096 <span class="comment">//! ECP precomputation</span><a name="l00097"></a><a class="code" href="class_ec_precomputation_3_01_e_c_p_01_4.html">00097</a> <span class="comment"></span><span class="keyword">template</span>&lt;&gt; <span class="keyword">class </span>EcPrecomputation&lt;<a class="code" href="class_e_c_p.html" title="Elliptic Curve over GF(p), where p is prime.">ECP</a>&gt; : <span class="keyword">public</span> <a class="code" href="class_d_l___group_precomputation.html">DL_GroupPrecomputation</a>&lt;ECP::Point&gt;<a name="l00098"></a>00098 {<a name="l00099"></a>00099 <span class="keyword">public</span>:<a name="l00100"></a><a class="code" href="class_ec_precomputation_3_01_e_c_p_01_4.html#9d3922397513fa11f1d4073d28744f54">00100</a>         <span class="keyword">typedef</span> <a class="code" href="class_e_c_p.html" title="Elliptic Curve over GF(p), where p is prime.">ECP</a> <a class="code" href="class_e_c_p.html" title="Elliptic Curve over GF(p), where p is prime.">EllipticCurve</a>;<a name="l00101"></a>00101         <a name="l00102"></a>00102         <span class="comment">// DL_GroupPrecomputation</span><a name="l00103"></a><a class="code" href="class_ec_precomputation_3_01_e_c_p_01_4.html#aa3c36266f631554e46119da76be1f5e">00103</a>         <span class="keywordtype">bool</span> <a class="code" href="class_d_l___group_precomputation.html#f06195fe5dbbf8da4491a9b7356b1293">NeedConversions</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">true</span>;}<a name="l00104"></a><a class="code" href="class_ec_precomputation_3_01_e_c_p_01_4.html#f45796cc36401086781e32f3f73d3ea9">00104</a>         <a class="code" href="struct_e_c_p_point.html" title="Elliptical Curve Point.">Element</a> <a class="code" href="class_d_l___group_precomputation.html#24cdc2b57dc2431297f24cf29c6af4a0">ConvertIn</a>(<span class="keyword">const</span> <a class="code" href="struct_e_c_p_point.html" title="Elliptical Curve Point.">Element</a> &amp;P)<span class="keyword"> const</span><a name="l00105"></a>00105 <span class="keyword">                </span>{<span class="keywordflow">return</span> P.<a class="code" href="struct_e_c_p_point.html#806dedcf077e22de7904ccfd7987bcf9">identity</a> ? P : <a class="code" href="class_e_c_p.html#99c34a437007f32af4e6c4ae275358ea">ECP::Point</a>(m_ec-&gt;GetField().ConvertIn(P.<a class="code" href="struct_e_c_p_point.html#24bbcc7eb375ebe2b46d2ac9ee6bb0a8">x</a>), m_ec-&gt;GetField().ConvertIn(P.<a class="code" href="struct_e_c_p_point.html#b47b82046f543e809bd90d78bf2c85bf">y</a>));};<a name="l00106"></a><a class="code" href="class_ec_precomputation_3_01_e_c_p_01_4.html#cb9b550d21bb553eec6804638736b744">00106</a>         <a class="code" href="struct_e_c_p_point.html" title="Elliptical Curve Point.">Element</a> <a class="code" href="class_d_l___group_precomputation.html#635d54785535b42cd9611213b6140fd0">ConvertOut</a>(<span class="keyword">const</span> <a class="code" href="struct_e_c_p_point.html" title="Elliptical Curve Point.">Element</a> &amp;P)<span class="keyword"> const</span><a name="l00107"></a>00107 <span class="keyword">                </span>{<span class="keywordflow">return</span> P.<a class="code" href="struct_e_c_p_point.html#806dedcf077e22de7904ccfd7987bcf9">identity</a> ? P : <a class="code" href="class_e_c_p.html#99c34a437007f32af4e6c4ae275358ea">ECP::Point</a>(m_ec-&gt;GetField().ConvertOut(P.<a class="code" href="struct_e_c_p_point.html#24bbcc7eb375ebe2b46d2ac9ee6bb0a8">x</a>), m_ec-&gt;GetField().ConvertOut(P.<a class="code" href="struct_e_c_p_point.html#b47b82046f543e809bd90d78bf2c85bf">y</a>));}<a name="l00108"></a><a class="code" href="class_ec_precomputation_3_01_e_c_p_01_4.html#439d3669a926c82cc7623d611cec778f">00108</a>         <span class="keyword">const</span> <a class="code" href="class_abstract_group.html" title="Abstract Group.">AbstractGroup&lt;Element&gt;</a> &amp; GetGroup()<span class="keyword"> const </span>{<span class="keywordflow">return</span> *m_ec;}<a name="l00109"></a><a class="code" href="class_ec_precomputation_3_01_e_c_p_01_4.html#c44b14e7f09e1d3133776ac5e5ca79c5">00109</a>         <a class="code" href="struct_e_c_p_point.html" title="Elliptical Curve Point.">Element</a> BERDecodeElement(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;bt)<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_ec-&gt;BERDecodePoint(bt);}<a name="l00110"></a><a class="code" href="class_ec_precomputation_3_01_e_c_p_01_4.html#7a82650f5578ae1dee691842b0030fcc">00110</a>         <span class="keywordtype">void</span> DEREncodeElement(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;bt, <span class="keyword">const</span> <a class="code" href="struct_e_c_p_point.html" title="Elliptical Curve Point.">Element</a> &amp;v)<span class="keyword"> const </span>{m_ec-&gt;DEREncodePoint(bt, v, <span class="keyword">false</span>);}<a name="l00111"></a>00111 <a name="l00112"></a>00112         <span class="comment">// non-inherited</span><a name="l00113"></a><a class="code" href="class_ec_precomputation_3_01_e_c_p_01_4.html#900bdf40eea4c90ebd4fbf52f53d3b6a">00113</a>         <span class="keywordtype">void</span> SetCurve(<span class="keyword">const</span> <a class="code" href="class_e_c_p.html" title="Elliptic Curve over GF(p), where p is prime.">ECP</a> &amp;ec)<a name="l00114"></a>00114         {<a name="l00115"></a>00115                 m_ec.reset(<span class="keyword">new</span> <a class="code" href="class_e_c_p.html" title="Elliptic Curve over GF(p), where p is prime.">ECP</a>(ec, <span class="keyword">true</span>));<a name="l00116"></a>00116                 m_ecOriginal = ec;<a name="l00117"></a>00117         }<a name="l00118"></a><a class="code" href="class_ec_precomputation_3_01_e_c_p_01_4.html#40112ff4b5a4d190a91df2bec223adf7">00118</a>         <span class="keyword">const</span> <a class="code" href="class_e_c_p.html" title="Elliptic Curve over GF(p), where p is prime.">ECP</a> &amp; GetCurve()<span class="keyword"> const </span>{<span class="keywordflow">return</span> *m_ecOriginal;}<a name="l00119"></a>00119 <a name="l00120"></a>00120 <span class="keyword">private</span>:<a name="l00121"></a>00121         <a class="code" href="classvalue__ptr.html">value_ptr&lt;ECP&gt;</a> m_ec, m_ecOriginal;<a name="l00122"></a>00122 };<a name="l00123"></a>00123 <a name="l00124"></a>00124 NAMESPACE_END<a name="l00125"></a>00125 <a name="l00126"></a>00126 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Fri Jun 1 11:11:20 2007 for Crypto++ by&nbsp;<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.2 </small></address></body></html>

⌨️ 快捷键说明

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