📄 gf2n_8h-source.html
字号:
<a name="l00277"></a>00277 CRYPTOPP_DLL_TEMPLATE_CLASS <a class="code" href="class_euclidean_domain_of.html" title="EuclideanDomainOf.">EuclideanDomainOf<PolynomialMod2></a>;<a name="l00278"></a>00278 CRYPTOPP_DLL_TEMPLATE_CLASS <a class="code" href="class_quotient_ring.html" title="Quotient Ring.">QuotientRing<EuclideanDomainOf<PolynomialMod2></a> >;<a name="l00279"></a>00279 <span class="comment"></span><a name="l00280"></a>00280 <span class="comment">//! GF(2^n) with Polynomial Basis</span><a name="l00281"></a><a class="code" href="class_g_f2_n_p.html">00281</a> <span class="comment"></span><span class="keyword">class </span>CRYPTOPP_DLL <a class="code" href="class_g_f2_n_p.html" title="GF(2^n) with Polynomial Basis.">GF2NP</a> : <span class="keyword">public</span> <a class="code" href="class_quotient_ring.html" title="Quotient Ring.">QuotientRing</a><EuclideanDomainOf<PolynomialMod2> ><a name="l00282"></a>00282 {<a name="l00283"></a>00283 <span class="keyword">public</span>:<a name="l00284"></a>00284 <a class="code" href="class_g_f2_n_p.html" title="GF(2^n) with Polynomial Basis.">GF2NP</a>(<span class="keyword">const</span> <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> &modulus);<a name="l00285"></a>00285 <a name="l00286"></a><a class="code" href="class_g_f2_n_p.html#a882b0e903bc9a92ec35f81ef8c9e3ff">00286</a> <span class="keyword">virtual</span> <a class="code" href="class_g_f2_n_p.html" title="GF(2^n) with Polynomial Basis.">GF2NP</a> * Clone()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="class_g_f2_n_p.html" title="GF(2^n) with Polynomial Basis.">GF2NP</a>(*<span class="keyword">this</span>);}<a name="l00287"></a><a class="code" href="class_g_f2_n_p.html#c29895f70ffbceeaa3f9460cdaae3685">00287</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> DEREncode(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &bt)<span class="keyword"> const</span><a name="l00288"></a>00288 <span class="keyword"> </span>{assert(<span class="keyword">false</span>);} <span class="comment">// no ASN.1 syntax yet for general polynomial basis</span><a name="l00289"></a>00289 <a name="l00290"></a>00290 <span class="keywordtype">void</span> DEREncodeElement(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &out, <span class="keyword">const</span> Element &a) <span class="keyword">const</span>;<a name="l00291"></a>00291 <span class="keywordtype">void</span> BERDecodeElement(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &in, Element &a) <span class="keyword">const</span>;<a name="l00292"></a>00292 <a name="l00293"></a><a class="code" href="class_g_f2_n_p.html#6e1d77aefacee1a620dee8f1299cee9b">00293</a> <span class="keywordtype">bool</span> <a class="code" href="class_quotient_ring.html#95a675aaca290e8cc05a56361c7d56f3">Equal</a>(<span class="keyword">const</span> Element &a, <span class="keyword">const</span> Element &b)<span class="keyword"> const</span><a name="l00294"></a>00294 <span class="keyword"> </span>{assert(a.Degree() < m_modulus.Degree() && b.Degree() < m_modulus.Degree()); <span class="keywordflow">return</span> a.Equals(b);}<a name="l00295"></a>00295 <a name="l00296"></a><a class="code" href="class_g_f2_n_p.html#4eb48ee2cd703818c84d531308e47546">00296</a> <span class="keywordtype">bool</span> <a class="code" href="class_quotient_ring.html#f8732f66da8d4cef1932d2738a5583ad">IsUnit</a>(<span class="keyword">const</span> Element &a)<span class="keyword"> const</span><a name="l00297"></a>00297 <span class="keyword"> </span>{assert(a.Degree() < m_modulus.Degree()); <span class="keywordflow">return</span> !!a;}<a name="l00298"></a>00298 <a name="l00299"></a><a class="code" href="class_g_f2_n_p.html#e4a472d5d24354f4130428dece8aa726">00299</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> MaxElementBitLength()<span class="keyword"> const</span><a name="l00300"></a>00300 <span class="keyword"> </span>{<span class="keywordflow">return</span> m;}<a name="l00301"></a>00301 <a name="l00302"></a><a class="code" href="class_g_f2_n_p.html#9db342e042aa64b3528e877c8d7210de">00302</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> MaxElementByteLength()<span class="keyword"> const</span><a name="l00303"></a>00303 <span class="keyword"> </span>{<span class="keywordflow">return</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)BitsToBytes(MaxElementBitLength());}<a name="l00304"></a>00304 <a name="l00305"></a>00305 Element SquareRoot(<span class="keyword">const</span> Element &a) <span class="keyword">const</span>;<a name="l00306"></a>00306 <a name="l00307"></a>00307 Element HalfTrace(<span class="keyword">const</span> Element &a) <span class="keyword">const</span>;<a name="l00308"></a>00308 <a name="l00309"></a>00309 <span class="comment">// returns z such that z^2 + z == a</span><a name="l00310"></a>00310 Element SolveQuadraticEquation(<span class="keyword">const</span> Element &a) <span class="keyword">const</span>;<a name="l00311"></a>00311 <a name="l00312"></a>00312 <span class="keyword">protected</span>:<a name="l00313"></a><a class="code" href="class_g_f2_n_p.html#de49365898ce399a879beb3f409b4e5b">00313</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m;<a name="l00314"></a>00314 };<a name="l00315"></a>00315 <span class="comment"></span><a name="l00316"></a>00316 <span class="comment">//! GF(2^n) with Trinomial Basis</span><a name="l00317"></a><a class="code" href="class_g_f2_n_t.html">00317</a> <span class="comment"></span><span class="keyword">class </span>CRYPTOPP_DLL GF2NT : <span class="keyword">public</span> <a class="code" href="class_g_f2_n_p.html" title="GF(2^n) with Polynomial Basis.">GF2NP</a><a name="l00318"></a>00318 {<a name="l00319"></a>00319 <span class="keyword">public</span>:<a name="l00320"></a>00320 <span class="comment">// polynomial modulus = x^t0 + x^t1 + x^t2, t0 > t1 > t2</span><a name="l00321"></a>00321 GF2NT(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> t0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> t1, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> t2);<a name="l00322"></a>00322 <a name="l00323"></a><a class="code" href="class_g_f2_n_t.html#65e3e844c193d683a46f413fa51cb7dd">00323</a> <a class="code" href="class_g_f2_n_p.html" title="GF(2^n) with Polynomial Basis.">GF2NP</a> * <a class="code" href="class_g_f2_n_p.html#a882b0e903bc9a92ec35f81ef8c9e3ff">Clone</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">new</span> GF2NT(*<span class="keyword">this</span>);}<a name="l00324"></a>00324 <span class="keywordtype">void</span> <a class="code" href="class_g_f2_n_p.html#c29895f70ffbceeaa3f9460cdaae3685">DEREncode</a>(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &bt) <span class="keyword">const</span>;<a name="l00325"></a>00325 <a name="l00326"></a>00326 <span class="keyword">const</span> Element& <a class="code" href="class_quotient_ring.html#e4dc3dd42c8bc2bd37eff95e8a001f1a">Multiply</a>(<span class="keyword">const</span> Element &a, <span class="keyword">const</span> Element &b) <span class="keyword">const</span>;<a name="l00327"></a>00327 <a name="l00328"></a><a class="code" href="class_g_f2_n_t.html#0a97afdc31def30b42ab35ac3439a67c">00328</a> <span class="keyword">const</span> Element& <a class="code" href="class_quotient_ring.html#a4b1b1638b50483bf4904fc909f54883">Square</a>(<span class="keyword">const</span> Element &a)<span class="keyword"> const</span><a name="l00329"></a>00329 <span class="keyword"> </span>{<span class="keywordflow">return</span> Reduced(a.Squared());}<a name="l00330"></a>00330 <a name="l00331"></a>00331 <span class="keyword">const</span> Element& <a class="code" href="class_quotient_ring.html#c4188ae1dccb83f17c118748afd60df8">MultiplicativeInverse</a>(<span class="keyword">const</span> Element &a) <span class="keyword">const</span>;<a name="l00332"></a>00332 <a name="l00333"></a>00333 <span class="keyword">private</span>:<a name="l00334"></a>00334 <span class="keyword">const</span> Element& Reduced(<span class="keyword">const</span> Element &a) <span class="keyword">const</span>;<a name="l00335"></a>00335 <a name="l00336"></a>00336 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> t0, t1;<a name="l00337"></a>00337 <span class="keyword">mutable</span> <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> result;<a name="l00338"></a>00338 };<a name="l00339"></a>00339 <span class="comment"></span><a name="l00340"></a>00340 <span class="comment">//! GF(2^n) with Pentanomial Basis</span><a name="l00341"></a><a class="code" href="class_g_f2_n_p_p.html">00341</a> <span class="comment"></span><span class="keyword">class </span>CRYPTOPP_DLL GF2NPP : <span class="keyword">public</span> <a class="code" href="class_g_f2_n_p.html" title="GF(2^n) with Polynomial Basis.">GF2NP</a><a name="l00342"></a>00342 {<a name="l00343"></a>00343 <span class="keyword">public</span>:<a name="l00344"></a>00344 <span class="comment">// polynomial modulus = x^t0 + x^t1 + x^t2 + x^t3 + x^t4, t0 > t1 > t2 > t3 > t4</span><a name="l00345"></a><a class="code" href="class_g_f2_n_p_p.html#6d42a20e16bee4bd4f36245686becd94">00345</a> GF2NPP(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> t0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> t1, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> t2, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> t3, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> t4)<a name="l00346"></a>00346 : <a class="code" href="class_g_f2_n_p.html" title="GF(2^n) with Polynomial Basis.">GF2NP</a>(<a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a>::Pentanomial(t0, t1, t2, t3, t4)), t0(t0), t1(t1), t2(t2), t3(t3) {}<a name="l00347"></a>00347 <a name="l00348"></a><a class="code" href="class_g_f2_n_p_p.html#045406246511516af953e8d43af8c6ef">00348</a> <a class="code" href="class_g_f2_n_p.html" title="GF(2^n) with Polynomial Basis.">GF2NP</a> * <a class="code" href="class_g_f2_n_p.html#a882b0e903bc9a92ec35f81ef8c9e3ff">Clone</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">new</span> GF2NPP(*<span class="keyword">this</span>);}<a name="l00349"></a>00349 <span class="keywordtype">void</span> <a class="code" href="class_g_f2_n_p.html#c29895f70ffbceeaa3f9460cdaae3685">DEREncode</a>(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &bt) <span class="keyword">const</span>;<a name="l00350"></a>00350 <a name="l00351"></a>00351 <span class="keyword">private</span>:<a name="l00352"></a>00352 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> t0, t1, t2, t3;<a name="l00353"></a>00353 };<a name="l00354"></a>00354 <a name="l00355"></a>00355 <span class="comment">// construct new GF2NP from the ASN.1 sequence Characteristic-two</span><a name="l00356"></a>00356 CRYPTOPP_DLL <a class="code" href="class_g_f2_n_p.html" title="GF(2^n) with Polynomial Basis.">GF2NP</a> * CRYPTOPP_API BERDecodeGF2NP(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &bt);<a name="l00357"></a>00357 <a name="l00358"></a>00358 NAMESPACE_END<a name="l00359"></a>00359 <a name="l00360"></a>00360 NAMESPACE_BEGIN(std)<a name="l00361"></a><a class="code" href="gf2n_8h.html#cd9c045f0b5c2a7595a8a0872dc80f59">00361</a> template<> inline <span class="keywordtype">void</span> <a class="code" href="gf2n_8h.html#cd9c045f0b5c2a7595a8a0872dc80f59">swap</a>(CryptoPP::<a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> &a, CryptoPP::<a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> &b)<a name="l00362"></a>00362 {<a name="l00363"></a>00363 a.swap(b);<a name="l00364"></a>00364 }<a name="l00365"></a>00365 NAMESPACE_END<a name="l00366"></a>00366 <a name="l00367"></a>00367 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Fri Jun 1 11:11:21 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 + -