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

📄 gf2n_8h-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 3 页
字号:
00246 {00247 <span class="keyword">public</span>:00248         GF2NP(<span class="keyword">const</span> PolynomialMod2 &amp;modulus);00249 00250         <span class="keyword">virtual</span> GF2NP * Clone()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">new</span> GF2NP(*<span class="keyword">this</span>);}00251         <span class="keyword">virtual</span> <span class="keywordtype">void</span> DEREncode(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt)<span class="keyword"> const</span>00252 <span class="keyword">                </span>{assert(<span class="keyword">false</span>);}        <span class="comment">// no ASN.1 syntax yet for general polynomial basis</span>00253 00254         <span class="keywordtype">void</span> DEREncodeElement(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;out, <span class="keyword">const</span> Element &amp;a) <span class="keyword">const</span>;00255         <span class="keywordtype">void</span> BERDecodeElement(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;in, Element &amp;a) <span class="keyword">const</span>;00256 00257         <span class="keywordtype">bool</span> Equal(<span class="keyword">const</span> Element &amp;a, <span class="keyword">const</span> Element &amp;b)<span class="keyword"> const</span>00258 <span class="keyword">                </span>{assert(a.Degree() &lt; m_modulus.Degree() &amp;&amp; b.Degree() &lt; m_modulus.Degree()); <span class="keywordflow">return</span> a.Equals(b);}00259 00260         <span class="keywordtype">bool</span> IsUnit(<span class="keyword">const</span> Element &amp;a)<span class="keyword"> const</span>00261 <span class="keyword">                </span>{assert(a.Degree() &lt; m_modulus.Degree()); <span class="keywordflow">return</span> !!a;}00262 00263         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> MaxElementBitLength()<span class="keyword"> const</span>00264 <span class="keyword">                </span>{<span class="keywordflow">return</span> m;}00265 00266         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> MaxElementByteLength()<span class="keyword"> const</span>00267 <span class="keyword">                </span>{<span class="keywordflow">return</span> BitsToBytes(MaxElementBitLength());}00268 00269         Element SquareRoot(<span class="keyword">const</span> Element &amp;a) <span class="keyword">const</span>;00270 00271         Element HalfTrace(<span class="keyword">const</span> Element &amp;a) <span class="keyword">const</span>;00272 00273         <span class="comment">// returns z such that z^2 + z == a</span>00274         Element SolveQuadraticEquation(<span class="keyword">const</span> Element &amp;a) <span class="keyword">const</span>;00275 00276 <span class="keyword">protected</span>:00277         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m;00278 };00279 <span class="comment"></span>00280 <span class="comment">//! GF(2^n) with Trinomial Basis</span><a name="l00281"></a><a class="code" href="class_g_f2_n_t.html">00281</a> <span class="comment"></span><span class="keyword">class </span>CRYPTOPP_DLL GF2NT : <span class="keyword">public</span> GF2NP00282 {00283 <span class="keyword">public</span>:00284         <span class="comment">// polynomial modulus = x^t0 + x^t1 + x^t2, t0 &gt; t1 &gt; t2</span>00285         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);00286 00287         GF2NP * Clone()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">new</span> GF2NT(*<span class="keyword">this</span>);}00288         <span class="keywordtype">void</span> DEREncode(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt) <span class="keyword">const</span>;00289 00290         <span class="keyword">const</span> Element&amp; Multiply(<span class="keyword">const</span> Element &amp;a, <span class="keyword">const</span> Element &amp;b) <span class="keyword">const</span>;00291 00292         <span class="keyword">const</span> Element&amp; <a class="code" href="class_square.html">Square</a>(<span class="keyword">const</span> Element &amp;a)<span class="keyword"> const</span>00293 <span class="keyword">                </span>{<span class="keywordflow">return</span> Reduced(a.Squared());}00294 00295         <span class="keyword">const</span> Element&amp; MultiplicativeInverse(<span class="keyword">const</span> Element &amp;a) <span class="keyword">const</span>;00296 00297 <span class="keyword">private</span>:00298         <span class="keyword">const</span> Element&amp; Reduced(<span class="keyword">const</span> Element &amp;a) <span class="keyword">const</span>;00299 00300         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> t0, t1;00301         <span class="keyword">mutable</span> PolynomialMod2 result;00302 };00303 <span class="comment"></span>00304 <span class="comment">//! GF(2^n) with Pentanomial Basis</span><a name="l00305"></a><a class="code" href="class_g_f2_n_p_p.html">00305</a> <span class="comment"></span><span class="keyword">class </span>CRYPTOPP_DLL GF2NPP : <span class="keyword">public</span> GF2NP00306 {00307 <span class="keyword">public</span>:00308         <span class="comment">// polynomial modulus = x^t0 + x^t1 + x^t2 + x^t3 + x^t4, t0 &gt; t1 &gt; t2 &gt; t3 &gt; t4</span>00309         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)00310                 : GF2NP(<a class="code" href="class_polynomial_mod2.html#_polynomial_mod2z19_8">PolynomialMod2::Pentanomial</a>(t0, t1, t2, t3, t4)), t0(t0), t1(t1), t2(t2), t3(t3) {}00311 00312         GF2NP * Clone()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">new</span> GF2NPP(*<span class="keyword">this</span>);}00313         <span class="keywordtype">void</span> DEREncode(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt) <span class="keyword">const</span>;00314 00315 <span class="keyword">private</span>:00316         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> t0, t1, t2, t3;00317 };00318 00319 <span class="comment">// construct new GF2NP from the ASN.1 sequence Characteristic-two</span>00320 CRYPTOPP_DLL GF2NP * BERDecodeGF2NP(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt);00321 <span class="comment"></span>00322 <span class="comment">//!</span>00323 <span class="comment"></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;b)00324         {<span class="keywordflow">return</span> a.Equals(b);}<span class="comment"></span>00325 <span class="comment">//!</span>00326 <span class="comment"></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;b)00327         {<span class="keywordflow">return</span> !(a==b);}<span class="comment"></span>00328 <span class="comment">//! compares degree</span><a name="l00329"></a><a class="code" href="gf2n_8h.html#a3">00329</a> <span class="comment"></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> operator&gt; (<span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;b)00330         {<span class="keywordflow">return</span> a.Degree() &gt; b.Degree();}<span class="comment"></span>00331 <span class="comment">//! compares degree</span><a name="l00332"></a><a class="code" href="gf2n_8h.html#a4">00332</a> <span class="comment"></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="gf2n_8h.html#a4">operator&gt;=</a>(<span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;b)00333         {<span class="keywordflow">return</span> a.Degree() &gt;= b.Degree();}<span class="comment"></span>00334 <span class="comment">//! compares degree</span><a name="l00335"></a><a class="code" href="gf2n_8h.html#a5">00335</a> <span class="comment"></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> operator&lt; (<span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;b)00336         {<span class="keywordflow">return</span> a.Degree() &lt; b.Degree();}<span class="comment"></span>00337 <span class="comment">//! compares degree</span><a name="l00338"></a><a class="code" href="gf2n_8h.html#a6">00338</a> <span class="comment"></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="gf2n_8h.html#a6">operator&lt;=</a>(<span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;b)00339         {<span class="keywordflow">return</span> a.Degree() &lt;= b.Degree();}<span class="comment"></span>00340 <span class="comment">//!</span>00341 <span class="comment"></span><span class="keyword">inline</span> CryptoPP::PolynomialMod2 operator&amp;(<span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;b) {<span class="keywordflow">return</span> a.And(b);}<span class="comment"></span>00342 <span class="comment">//!</span>00343 <span class="comment"></span><span class="keyword">inline</span> CryptoPP::PolynomialMod2 operator^(<span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;b) {<span class="keywordflow">return</span> a.Xor(b);}<span class="comment"></span>00344 <span class="comment">//!</span>00345 <span class="comment"></span><span class="keyword">inline</span> CryptoPP::PolynomialMod2 operator+(<span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;b) {<span class="keywordflow">return</span> a.Plus(b);}<span class="comment"></span>00346 <span class="comment">//!</span>00347 <span class="comment"></span><span class="keyword">inline</span> CryptoPP::PolynomialMod2 operator-(<span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;b) {<span class="keywordflow">return</span> a.Minus(b);}<span class="comment"></span>00348 <span class="comment">//!</span>00349 <span class="comment"></span><span class="keyword">inline</span> CryptoPP::PolynomialMod2 operator*(<span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;b) {<span class="keywordflow">return</span> a.Times(b);}<span class="comment"></span>00350 <span class="comment">//!</span>00351 <span class="comment"></span><span class="keyword">inline</span> CryptoPP::PolynomialMod2 operator/(<span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;b) {<span class="keywordflow">return</span> a.DividedBy(b);}<span class="comment"></span>00352 <span class="comment">//!</span>00353 <span class="comment"></span><span class="keyword">inline</span> CryptoPP::PolynomialMod2 operator%(<span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &amp;b) {<span class="keywordflow">return</span> a.Modulo(b);}00354 00355 NAMESPACE_END00356 00357 NAMESPACE_BEGIN(std)00358 <span class="keyword">template</span>&lt;&gt; <span class="keyword">inline</span> <span class="keywordtype">void</span> swap(CryptoPP::PolynomialMod2 &amp;a, CryptoPP::PolynomialMod2 &amp;b)00359 {00360         a.swap(b);00361 }00362 NAMESPACE_END00363 00364 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:16 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 + -