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

📄 ec2n_8cpp-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<a name="l00190"></a><a class="code" href="class_e_c2_n.html#84c0a46b7540a13a0c1ba0d78c50265f">00190</a> <span class="keyword">const</span> <a class="code" href="struct_e_c2_n_point.html" title="Elliptic Curve Point.">EC2N::Point</a>&amp; <a class="code" href="class_e_c2_n.html#84c0a46b7540a13a0c1ba0d78c50265f">EC2N::Add</a>(<span class="keyword">const</span> <a class="code" href="struct_e_c2_n_point.html" title="Elliptic Curve Point.">Point</a> &amp;P, <span class="keyword">const</span> <a class="code" href="struct_e_c2_n_point.html" title="Elliptic Curve Point.">Point</a> &amp;Q)<span class="keyword"> const</span><a name="l00191"></a>00191 <span class="keyword"></span>{<a name="l00192"></a>00192         <span class="keywordflow">if</span> (P.<a class="code" href="struct_e_c2_n_point.html#6ded60d603c7ba5af13c7ba3da253cf7">identity</a>) <span class="keywordflow">return</span> Q;<a name="l00193"></a>00193         <span class="keywordflow">if</span> (Q.<a class="code" href="struct_e_c2_n_point.html#6ded60d603c7ba5af13c7ba3da253cf7">identity</a>) <span class="keywordflow">return</span> P;<a name="l00194"></a>00194         <span class="keywordflow">if</span> (<a class="code" href="class_e_c2_n.html#7488f2612e1fea76b6e74a2be66e9ec3">Equal</a>(P, Q)) <span class="keywordflow">return</span> <a class="code" href="class_e_c2_n.html#3b540c5596793305eaf8fe834235b03b">Double</a>(P);<a name="l00195"></a>00195         <span class="keywordflow">if</span> (m_field-&gt;Equal(P.x, Q.<a class="code" href="struct_e_c2_n_point.html#b90a3edb6b82f616b6a281315289c574">x</a>) &amp;&amp; m_field-&gt;Equal(P.y, m_field-&gt;Add(Q.<a class="code" href="struct_e_c2_n_point.html#b90a3edb6b82f616b6a281315289c574">x</a>, Q.<a class="code" href="struct_e_c2_n_point.html#0ef74f2187b87841db0c36fef978f387">y</a>))) <span class="keywordflow">return</span> <a class="code" href="class_e_c2_n.html#57b7b1ad3cc32c727d1d132ca2f2210f">Identity</a>();<a name="l00196"></a>00196 <a name="l00197"></a>00197         <a class="code" href="class_e_c2_n.html#e03206f65d1a99b107de72c7d86704c2">FieldElement</a> t = m_field-&gt;Add(P.y, Q.<a class="code" href="struct_e_c2_n_point.html#0ef74f2187b87841db0c36fef978f387">y</a>);<a name="l00198"></a>00198         t = m_field-&gt;Divide(t, m_field-&gt;Add(P.x, Q.<a class="code" href="struct_e_c2_n_point.html#b90a3edb6b82f616b6a281315289c574">x</a>));<a name="l00199"></a>00199         <a class="code" href="class_e_c2_n.html#e03206f65d1a99b107de72c7d86704c2">FieldElement</a> x = m_field-&gt;Square(t);<a name="l00200"></a>00200         m_field-&gt;Accumulate(x, t);<a name="l00201"></a>00201         m_field-&gt;Accumulate(x, Q.<a class="code" href="struct_e_c2_n_point.html#b90a3edb6b82f616b6a281315289c574">x</a>);<a name="l00202"></a>00202         m_field-&gt;Accumulate(x, m_a);<a name="l00203"></a>00203         m_R.<a class="code" href="struct_e_c2_n_point.html#0ef74f2187b87841db0c36fef978f387">y</a> = m_field-&gt;Add(P.y, m_field-&gt;Multiply(t, x));<a name="l00204"></a>00204         m_field-&gt;Accumulate(x, P.x);<a name="l00205"></a>00205         m_field-&gt;Accumulate(m_R.<a class="code" href="struct_e_c2_n_point.html#0ef74f2187b87841db0c36fef978f387">y</a>, x);<a name="l00206"></a>00206 <a name="l00207"></a>00207         m_R.<a class="code" href="struct_e_c2_n_point.html#b90a3edb6b82f616b6a281315289c574">x</a>.<a class="code" href="class_polynomial_mod2.html#21587324d54a4ae453960770b18c398d">swap</a>(x);<a name="l00208"></a>00208         m_R.<a class="code" href="struct_e_c2_n_point.html#6ded60d603c7ba5af13c7ba3da253cf7">identity</a> = <span class="keyword">false</span>;<a name="l00209"></a>00209         <span class="keywordflow">return</span> m_R;<a name="l00210"></a>00210 }<a name="l00211"></a>00211 <a name="l00212"></a><a class="code" href="class_e_c2_n.html#3b540c5596793305eaf8fe834235b03b">00212</a> <span class="keyword">const</span> <a class="code" href="struct_e_c2_n_point.html" title="Elliptic Curve Point.">EC2N::Point</a>&amp; <a class="code" href="class_e_c2_n.html#3b540c5596793305eaf8fe834235b03b">EC2N::Double</a>(<span class="keyword">const</span> <a class="code" href="struct_e_c2_n_point.html" title="Elliptic Curve Point.">Point</a> &amp;P)<span class="keyword"> const</span><a name="l00213"></a>00213 <span class="keyword"></span>{<a name="l00214"></a>00214         <span class="keywordflow">if</span> (P.<a class="code" href="struct_e_c2_n_point.html#6ded60d603c7ba5af13c7ba3da253cf7">identity</a>) <span class="keywordflow">return</span> P;<a name="l00215"></a>00215         <span class="keywordflow">if</span> (!m_field-&gt;IsUnit(P.<a class="code" href="struct_e_c2_n_point.html#b90a3edb6b82f616b6a281315289c574">x</a>)) <span class="keywordflow">return</span> <a class="code" href="class_e_c2_n.html#57b7b1ad3cc32c727d1d132ca2f2210f">Identity</a>();<a name="l00216"></a>00216 <a name="l00217"></a>00217         <a class="code" href="class_e_c2_n.html#e03206f65d1a99b107de72c7d86704c2">FieldElement</a> t = m_field-&gt;Divide(P.<a class="code" href="struct_e_c2_n_point.html#0ef74f2187b87841db0c36fef978f387">y</a>, P.<a class="code" href="struct_e_c2_n_point.html#b90a3edb6b82f616b6a281315289c574">x</a>);<a name="l00218"></a>00218         m_field-&gt;Accumulate(t, P.<a class="code" href="struct_e_c2_n_point.html#b90a3edb6b82f616b6a281315289c574">x</a>);<a name="l00219"></a>00219         m_R.<a class="code" href="struct_e_c2_n_point.html#0ef74f2187b87841db0c36fef978f387">y</a> = m_field-&gt;Square(P.<a class="code" href="struct_e_c2_n_point.html#b90a3edb6b82f616b6a281315289c574">x</a>);<a name="l00220"></a>00220         m_R.<a class="code" href="struct_e_c2_n_point.html#b90a3edb6b82f616b6a281315289c574">x</a> = m_field-&gt;Square(t);<a name="l00221"></a>00221         m_field-&gt;Accumulate(m_R.<a class="code" href="struct_e_c2_n_point.html#b90a3edb6b82f616b6a281315289c574">x</a>, t);<a name="l00222"></a>00222         m_field-&gt;Accumulate(m_R.<a class="code" href="struct_e_c2_n_point.html#b90a3edb6b82f616b6a281315289c574">x</a>, m_a);<a name="l00223"></a>00223         m_field-&gt;Accumulate(m_R.<a class="code" href="struct_e_c2_n_point.html#0ef74f2187b87841db0c36fef978f387">y</a>, m_field-&gt;Multiply(t, m_R.<a class="code" href="struct_e_c2_n_point.html#b90a3edb6b82f616b6a281315289c574">x</a>));<a name="l00224"></a>00224         m_field-&gt;Accumulate(m_R.<a class="code" href="struct_e_c2_n_point.html#0ef74f2187b87841db0c36fef978f387">y</a>, m_R.<a class="code" href="struct_e_c2_n_point.html#b90a3edb6b82f616b6a281315289c574">x</a>);<a name="l00225"></a>00225 <a name="l00226"></a>00226         m_R.<a class="code" href="struct_e_c2_n_point.html#6ded60d603c7ba5af13c7ba3da253cf7">identity</a> = <span class="keyword">false</span>;<a name="l00227"></a>00227         <span class="keywordflow">return</span> m_R;<a name="l00228"></a>00228 }<a name="l00229"></a>00229 <a name="l00230"></a>00230 <span class="comment">// ********************************************************</span><a name="l00231"></a>00231 <a name="l00232"></a>00232 <span class="comment">/*</span><a name="l00233"></a>00233 <span class="comment">EcPrecomputation&lt;EC2N&gt;&amp; EcPrecomputation&lt;EC2N&gt;::operator=(const EcPrecomputation&lt;EC2N&gt; &amp;rhs)</span><a name="l00234"></a>00234 <span class="comment">{</span><a name="l00235"></a>00235 <span class="comment">        m_ec = rhs.m_ec;</span><a name="l00236"></a>00236 <span class="comment">        m_ep = rhs.m_ep;</span><a name="l00237"></a>00237 <span class="comment">        m_ep.m_group = m_ec.get();</span><a name="l00238"></a>00238 <span class="comment">        return *this;</span><a name="l00239"></a>00239 <span class="comment">}</span><a name="l00240"></a>00240 <span class="comment"></span><a name="l00241"></a>00241 <span class="comment">void EcPrecomputation&lt;EC2N&gt;::SetCurveAndBase(const EC2N &amp;ec, const EC2N::Point &amp;base)</span><a name="l00242"></a>00242 <span class="comment">{</span><a name="l00243"></a>00243 <span class="comment">        m_ec.reset(new EC2N(ec));</span><a name="l00244"></a>00244 <span class="comment">        m_ep.SetGroupAndBase(*m_ec, base);</span><a name="l00245"></a>00245 <span class="comment">}</span><a name="l00246"></a>00246 <span class="comment"></span><a name="l00247"></a>00247 <span class="comment">void EcPrecomputation&lt;EC2N&gt;::Precompute(unsigned int maxExpBits, unsigned int storage)</span><a name="l00248"></a>00248 <span class="comment">{</span><a name="l00249"></a>00249 <span class="comment">        m_ep.Precompute(maxExpBits, storage);</span><a name="l00250"></a>00250 <span class="comment">}</span><a name="l00251"></a>00251 <span class="comment"></span><a name="l00252"></a>00252 <span class="comment">void EcPrecomputation&lt;EC2N&gt;::Load(BufferedTransformation &amp;bt)</span><a name="l00253"></a>00253 <span class="comment">{</span><a name="l00254"></a>00254 <span class="comment">        BERSequenceDecoder seq(bt);</span><a name="l00255"></a>00255 <span class="comment">        word32 version;</span><a name="l00256"></a>00256 <span class="comment">        BERDecodeUnsigned&lt;word32&gt;(seq, version, INTEGER, 1, 1);</span><a name="l00257"></a>00257 <span class="comment">        m_ep.m_exponentBase.BERDecode(seq);</span><a name="l00258"></a>00258 <span class="comment">        m_ep.m_windowSize = m_ep.m_exponentBase.BitCount() - 1;</span><a name="l00259"></a>00259 <span class="comment">        m_ep.m_bases.clear();</span><a name="l00260"></a>00260 <span class="comment">        while (!seq.EndReached())</span><a name="l00261"></a>00261 <span class="comment">                m_ep.m_bases.push_back(m_ec-&gt;BERDecodePoint(seq));</span><a name="l00262"></a>00262 <span class="comment">        seq.MessageEnd();</span><a name="l00263"></a>00263 <span class="comment">}</span><a name="l00264"></a>00264 <span class="comment"></span><a name="l00265"></a>00265 <span class="comment">void EcPrecomputation&lt;EC2N&gt;::Save(BufferedTransformation &amp;bt) const</span><a name="l00266"></a>00266 <span class="comment">{</span><a name="l00267"></a>00267 <span class="comment">        DERSequenceEncoder seq(bt);</span><a name="l00268"></a>00268 <span class="comment">        DEREncodeUnsigned&lt;word32&gt;(seq, 1);      // version</span><a name="l00269"></a>00269 <span class="comment">        m_ep.m_exponentBase.DEREncode(seq);</span><a name="l00270"></a>00270 <span class="comment">        for (unsigned i=0; i&lt;m_ep.m_bases.size(); i++)</span><a name="l00271"></a>00271 <span class="comment">                m_ec-&gt;DEREncodePoint(seq, m_ep.m_bases[i]);</span><a name="l00272"></a>00272 <span class="comment">        seq.MessageEnd();</span><a name="l00273"></a>00273 <span class="comment">}</span><a name="l00274"></a>00274 <span class="comment"></span><a name="l00275"></a>00275 <span class="comment">EC2N::Point EcPrecomputation&lt;EC2N&gt;::Exponentiate(const Integer &amp;exponent) const</span><a name="l00276"></a>00276 <span class="comment">{</span><a name="l00277"></a>00277 <span class="comment">        return m_ep.Exponentiate(exponent);</span><a name="l00278"></a>00278 <span class="comment">}</span><a name="l00279"></a>00279 <span class="comment"></span><a name="l00280"></a>00280 <span class="comment">EC2N::Point EcPrecomputation&lt;EC2N&gt;::CascadeExponentiate(const Integer &amp;exponent, const DL_FixedBasePrecomputation&lt;Element&gt; &amp;pc2, const Integer &amp;exponent2) const</span><a name="l00281"></a>00281 <span class="comment">{</span><a name="l00282"></a>00282 <span class="comment">        return m_ep.CascadeExponentiate(exponent, static_cast&lt;const EcPrecomputation&lt;EC2N&gt; &amp;&gt;(pc2).m_ep, exponent2);</span><a name="l00283"></a>00283 <span class="comment">}</span><a name="l00284"></a>00284 <span class="comment">*/</span><a name="l00285"></a>00285 <a name="l00286"></a>00286 NAMESPACE_END<a name="l00287"></a>00287 <a name="l00288"></a>00288 <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 + -