📄 ecp_8h-source.html
字号:
<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> &k, <span class="keyword">const</span> <a class="code" href="struct_e_c_p_point.html" title="Elliptical Curve Point.">Point</a> &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> &k1, <span class="keyword">const</span> <a class="code" href="struct_e_c_p_point.html" title="Elliptical Curve Point.">Point</a> &P, <span class="keyword">const</span> <a class="code" href="class_integer.html" title="multiple precision integer and basic arithmetics">Integer</a> &k2, <span class="keyword">const</span> <a class="code" href="struct_e_c_p_point.html" title="Elliptical Curve Point.">Point</a> &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> &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 &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 &P, <a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &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 &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 &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> &bt, <span class="keyword">const</span> Point &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> &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> &bt, <span class="keyword">const</span> Point &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> & 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> & 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> & 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> &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>() && m_a == rhs.<a class="code" href="class_e_c_p.html#20079b1eb4cc7648cd53deab66aef43d">m_a</a> && 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<Field></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<ECP::Point></a>;<a name="l00092"></a>00092 CRYPTOPP_DLL_TEMPLATE_CLASS <a class="code" href="class_d_l___group_precomputation.html">DL_GroupPrecomputation<ECP::Point></a>;<a name="l00093"></a>00093 <a name="l00094"></a>00094 <span class="keyword">template</span> <<span class="keyword">class</span> T> <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><> <span class="keyword">class </span>EcPrecomputation<<a class="code" href="class_e_c_p.html" title="Elliptic Curve over GF(p), where p is prime.">ECP</a>> : <span class="keyword">public</span> <a class="code" href="class_d_l___group_precomputation.html">DL_GroupPrecomputation</a><ECP::Point><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> &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->GetField().ConvertIn(P.<a class="code" href="struct_e_c_p_point.html#24bbcc7eb375ebe2b46d2ac9ee6bb0a8">x</a>), m_ec->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> &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->GetField().ConvertOut(P.<a class="code" href="struct_e_c_p_point.html#24bbcc7eb375ebe2b46d2ac9ee6bb0a8">x</a>), m_ec->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<Element></a> & 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> &bt)<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_ec->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> &bt, <span class="keyword">const</span> <a class="code" href="struct_e_c_p_point.html" title="Elliptical Curve Point.">Element</a> &v)<span class="keyword"> const </span>{m_ec->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> &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> & 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<ECP></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 <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 + -