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

📄 ec2n_8cpp-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 2 页
字号:
00146         <span class="keywordflow">return</span> pass;00147 }00148 00149 <span class="keywordtype">bool</span> EC2N::VerifyPoint(<span class="keyword">const</span> Point &amp;P)<span class="keyword"> const</span>00150 <span class="keyword"></span>{00151         <span class="keyword">const</span> FieldElement &amp;x = P.x, &amp;y = P.y;00152         <span class="keywordflow">return</span> P.identity || 00153                 (x.CoefficientCount() &lt;= m_field-&gt;MaxElementBitLength()00154                 &amp;&amp; y.CoefficientCount() &lt;= m_field-&gt;MaxElementBitLength()00155                 &amp;&amp; !(((x+m_a)*x*x+m_b-(x+y)*y)%m_field-&gt;GetModulus()));00156 }00157 00158 <span class="keywordtype">bool</span> EC2N::Equal(<span class="keyword">const</span> Point &amp;P, <span class="keyword">const</span> Point &amp;Q)<span class="keyword"> const</span>00159 <span class="keyword"></span>{00160         <span class="keywordflow">if</span> (P.identity &amp;&amp; Q.identity)00161                 <span class="keywordflow">return</span> <span class="keyword">true</span>;00162 00163         <span class="keywordflow">if</span> (P.identity &amp;&amp; !Q.identity)00164                 <span class="keywordflow">return</span> <span class="keyword">false</span>;00165 00166         <span class="keywordflow">if</span> (!P.identity &amp;&amp; Q.identity)00167                 <span class="keywordflow">return</span> <span class="keyword">false</span>;00168 00169         <span class="keywordflow">return</span> (m_field-&gt;Equal(P.x,Q.x) &amp;&amp; m_field-&gt;Equal(P.y,Q.y));00170 }00171 00172 <span class="keyword">const</span> <a class="code" href="struct_e_c2_n_point.html">EC2N::Point</a>&amp; EC2N::Identity()<span class="keyword"> const</span>00173 <span class="keyword"></span>{00174         <span class="keyword">static</span> <span class="keyword">const</span> Point zero;00175         <span class="keywordflow">return</span> zero;00176 }00177 00178 <span class="keyword">const</span> <a class="code" href="struct_e_c2_n_point.html">EC2N::Point</a>&amp; EC2N::Inverse(<span class="keyword">const</span> Point &amp;P)<span class="keyword"> const</span>00179 <span class="keyword"></span>{00180         <span class="keywordflow">if</span> (P.identity)00181                 <span class="keywordflow">return</span> P;00182         <span class="keywordflow">else</span>00183         {00184                 m_R.<a class="code" href="struct_e_c2_n_point.html#_e_c2_n_pointo0">identity</a> = <span class="keyword">false</span>;00185                 m_R.<a class="code" href="struct_e_c2_n_point.html#_e_c2_n_pointo2">y</a> = m_field-&gt;Add(P.x, P.y);00186                 m_R.<a class="code" href="struct_e_c2_n_point.html#_e_c2_n_pointo1">x</a> = P.x;00187                 <span class="keywordflow">return</span> m_R;00188         }00189 }00190 00191 <span class="keyword">const</span> <a class="code" href="struct_e_c2_n_point.html">EC2N::Point</a>&amp; EC2N::Add(<span class="keyword">const</span> Point &amp;P, <span class="keyword">const</span> Point &amp;Q)<span class="keyword"> const</span>00192 <span class="keyword"></span>{00193         <span class="keywordflow">if</span> (P.identity) <span class="keywordflow">return</span> Q;00194         <span class="keywordflow">if</span> (Q.identity) <span class="keywordflow">return</span> P;00195         <span class="keywordflow">if</span> (Equal(P, Q)) <span class="keywordflow">return</span> Double(P);00196         <span class="keywordflow">if</span> (m_field-&gt;Equal(P.x, Q.x) &amp;&amp; m_field-&gt;Equal(P.y, m_field-&gt;Add(Q.x, Q.y))) <span class="keywordflow">return</span> Identity();00197 00198         FieldElement t = m_field-&gt;Add(P.y, Q.y);00199         t = m_field-&gt;Divide(t, m_field-&gt;Add(P.x, Q.x));00200         FieldElement x = m_field-&gt;Square(t);00201         m_field-&gt;Accumulate(x, t);00202         m_field-&gt;Accumulate(x, Q.x);00203         m_field-&gt;Accumulate(x, m_a);00204         m_R.<a class="code" href="struct_e_c2_n_point.html#_e_c2_n_pointo2">y</a> = m_field-&gt;Add(P.y, m_field-&gt;Multiply(t, x));00205         m_field-&gt;Accumulate(x, P.x);00206         m_field-&gt;Accumulate(m_R.<a class="code" href="struct_e_c2_n_point.html#_e_c2_n_pointo2">y</a>, x);00207 00208         m_R.<a class="code" href="struct_e_c2_n_point.html#_e_c2_n_pointo1">x</a>.<a class="code" href="class_polynomial_mod2.html#_polynomial_mod2z25_14">swap</a>(x);00209         m_R.<a class="code" href="struct_e_c2_n_point.html#_e_c2_n_pointo0">identity</a> = <span class="keyword">false</span>;00210         <span class="keywordflow">return</span> m_R;00211 }00212 00213 <span class="keyword">const</span> <a class="code" href="struct_e_c2_n_point.html">EC2N::Point</a>&amp; EC2N::Double(<span class="keyword">const</span> Point &amp;P)<span class="keyword"> const</span>00214 <span class="keyword"></span>{00215         <span class="keywordflow">if</span> (P.identity) <span class="keywordflow">return</span> P;00216         <span class="keywordflow">if</span> (!m_field-&gt;IsUnit(P.x)) <span class="keywordflow">return</span> Identity();00217 00218         FieldElement t = m_field-&gt;Divide(P.y, P.x);00219         m_field-&gt;Accumulate(t, P.x);00220         m_R.<a class="code" href="struct_e_c2_n_point.html#_e_c2_n_pointo2">y</a> = m_field-&gt;Square(P.x);00221         m_R.<a class="code" href="struct_e_c2_n_point.html#_e_c2_n_pointo1">x</a> = m_field-&gt;Square(t);00222         m_field-&gt;Accumulate(m_R.<a class="code" href="struct_e_c2_n_point.html#_e_c2_n_pointo1">x</a>, t);00223         m_field-&gt;Accumulate(m_R.<a class="code" href="struct_e_c2_n_point.html#_e_c2_n_pointo1">x</a>, m_a);00224         m_field-&gt;Accumulate(m_R.<a class="code" href="struct_e_c2_n_point.html#_e_c2_n_pointo2">y</a>, m_field-&gt;Multiply(t, m_R.<a class="code" href="struct_e_c2_n_point.html#_e_c2_n_pointo1">x</a>));00225         m_field-&gt;Accumulate(m_R.<a class="code" href="struct_e_c2_n_point.html#_e_c2_n_pointo2">y</a>, m_R.<a class="code" href="struct_e_c2_n_point.html#_e_c2_n_pointo1">x</a>);00226 00227         m_R.<a class="code" href="struct_e_c2_n_point.html#_e_c2_n_pointo0">identity</a> = <span class="keyword">false</span>;00228         <span class="keywordflow">return</span> m_R;00229 }00230 00231 <span class="comment">// ********************************************************</span>00232 00233 <span class="comment">/*</span>00234 <span class="comment">EcPrecomputation&lt;EC2N&gt;&amp; EcPrecomputation&lt;EC2N&gt;::operator=(const EcPrecomputation&lt;EC2N&gt; &amp;rhs)</span>00235 <span class="comment">{</span>00236 <span class="comment">        m_ec = rhs.m_ec;</span>00237 <span class="comment">        m_ep = rhs.m_ep;</span>00238 <span class="comment">        m_ep.m_group = m_ec.get();</span>00239 <span class="comment">        return *this;</span>00240 <span class="comment">}</span>00241 <span class="comment"></span>00242 <span class="comment">void EcPrecomputation&lt;EC2N&gt;::SetCurveAndBase(const EC2N &amp;ec, const EC2N::Point &amp;base)</span>00243 <span class="comment">{</span>00244 <span class="comment">        m_ec.reset(new EC2N(ec));</span>00245 <span class="comment">        m_ep.SetGroupAndBase(*m_ec, base);</span>00246 <span class="comment">}</span>00247 <span class="comment"></span>00248 <span class="comment">void EcPrecomputation&lt;EC2N&gt;::Precompute(unsigned int maxExpBits, unsigned int storage)</span>00249 <span class="comment">{</span>00250 <span class="comment">        m_ep.Precompute(maxExpBits, storage);</span>00251 <span class="comment">}</span>00252 <span class="comment"></span>00253 <span class="comment">void EcPrecomputation&lt;EC2N&gt;::Load(BufferedTransformation &amp;bt)</span>00254 <span class="comment">{</span>00255 <span class="comment">        BERSequenceDecoder seq(bt);</span>00256 <span class="comment">        word32 version;</span>00257 <span class="comment">        BERDecodeUnsigned&lt;word32&gt;(seq, version, INTEGER, 1, 1);</span>00258 <span class="comment">        m_ep.m_exponentBase.BERDecode(seq);</span>00259 <span class="comment">        m_ep.m_windowSize = m_ep.m_exponentBase.BitCount() - 1;</span>00260 <span class="comment">        m_ep.m_bases.clear();</span>00261 <span class="comment">        while (!seq.EndReached())</span>00262 <span class="comment">                m_ep.m_bases.push_back(m_ec-&gt;BERDecodePoint(seq));</span>00263 <span class="comment">        seq.MessageEnd();</span>00264 <span class="comment">}</span>00265 <span class="comment"></span>00266 <span class="comment">void EcPrecomputation&lt;EC2N&gt;::Save(BufferedTransformation &amp;bt) const</span>00267 <span class="comment">{</span>00268 <span class="comment">        DERSequenceEncoder seq(bt);</span>00269 <span class="comment">        DEREncodeUnsigned&lt;word32&gt;(seq, 1);      // version</span>00270 <span class="comment">        m_ep.m_exponentBase.DEREncode(seq);</span>00271 <span class="comment">        for (unsigned i=0; i&lt;m_ep.m_bases.size(); i++)</span>00272 <span class="comment">                m_ec-&gt;DEREncodePoint(seq, m_ep.m_bases[i]);</span>00273 <span class="comment">        seq.MessageEnd();</span>00274 <span class="comment">}</span>00275 <span class="comment"></span>00276 <span class="comment">EC2N::Point EcPrecomputation&lt;EC2N&gt;::Exponentiate(const Integer &amp;exponent) const</span>00277 <span class="comment">{</span>00278 <span class="comment">        return m_ep.Exponentiate(exponent);</span>00279 <span class="comment">}</span>00280 <span class="comment"></span>00281 <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>00282 <span class="comment">{</span>00283 <span class="comment">        return m_ep.CascadeExponentiate(exponent, static_cast&lt;const EcPrecomputation&lt;EC2N&gt; &amp;&gt;(pc2).m_ep, exponent2);</span>00284 <span class="comment">}</span>00285 <span class="comment">*/</span>00286 00287 NAMESPACE_END00288 00289 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:13 2003 for Crypto++ by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.2 </small></address></body></html>

⌨️ 快捷键说明

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