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

📄 gf2n_8h-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 3 页
字号:
00120 <span class="comment">                //! return coefficient for x^i</span><a name="l00121"></a><a class="code" href="class_polynomial_mod2.html#_polynomial_mod2z23_8">00121</a> <span class="comment"></span>                <span class="keywordtype">int</span> operator[](<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i)<span class="keyword"> const </span>{<span class="keywordflow">return</span> GetCoefficient(i);}00122 <span class="comment"></span>00123 <span class="comment">                //!</span>00124 <span class="comment"></span>                <span class="keywordtype">bool</span> IsZero()<span class="keyword"> const </span>{<span class="keywordflow">return</span> !*<span class="keyword">this</span>;}<span class="comment"></span>00125 <span class="comment">                //!</span>00126 <span class="comment"></span>                <span class="keywordtype">bool</span> Equals(<span class="keyword">const</span> PolynomialMod2 &amp;rhs) <span class="keyword">const</span>;<span class="comment"></span>00127 <span class="comment">        //@}</span>00128 <span class="comment"></span><span class="comment"></span>00129 <span class="comment">        //! \name MANIPULATORS</span>00130 <span class="comment"></span><span class="comment">        //@{</span>00131 <span class="comment"></span><span class="comment">                //!</span>00132 <span class="comment"></span>                PolynomialMod2&amp;  operator=(<span class="keyword">const</span> PolynomialMod2&amp; t);<span class="comment"></span>00133 <span class="comment">                //!</span>00134 <span class="comment"></span>                PolynomialMod2&amp;  operator&amp;=(<span class="keyword">const</span> PolynomialMod2&amp; t);<span class="comment"></span>00135 <span class="comment">                //!</span>00136 <span class="comment"></span>                PolynomialMod2&amp;  operator^=(<span class="keyword">const</span> PolynomialMod2&amp; t);<span class="comment"></span>00137 <span class="comment">                //!</span>00138 <span class="comment"></span>                PolynomialMod2&amp;  operator+=(<span class="keyword">const</span> PolynomialMod2&amp; t) {<span class="keywordflow">return</span> *<span class="keyword">this</span> ^= t;}<span class="comment"></span>00139 <span class="comment">                //!</span>00140 <span class="comment"></span>                PolynomialMod2&amp;  operator-=(<span class="keyword">const</span> PolynomialMod2&amp; t) {<span class="keywordflow">return</span> *<span class="keyword">this</span> ^= t;}<span class="comment"></span>00141 <span class="comment">                //!</span>00142 <span class="comment"></span>                PolynomialMod2&amp;  operator*=(<span class="keyword">const</span> PolynomialMod2&amp; t);<span class="comment"></span>00143 <span class="comment">                //!</span>00144 <span class="comment"></span>                PolynomialMod2&amp;  operator/=(<span class="keyword">const</span> PolynomialMod2&amp; t);<span class="comment"></span>00145 <span class="comment">                //!</span>00146 <span class="comment"></span>                PolynomialMod2&amp;  operator%=(<span class="keyword">const</span> PolynomialMod2&amp; t);<span class="comment"></span>00147 <span class="comment">                //!</span>00148 <span class="comment"></span>                PolynomialMod2&amp;  operator&lt;&lt;=(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>);<span class="comment"></span>00149 <span class="comment">                //!</span>00150 <span class="comment"></span>                PolynomialMod2&amp;  operator&gt;&gt;=(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>);00151 <span class="comment"></span>00152 <span class="comment">                //!</span>00153 <span class="comment"></span>                <span class="keywordtype">void</span> Randomize(<a class="code" href="class_random_number_generator.html">RandomNumberGenerator</a> &amp;rng, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bitcount);00154 <span class="comment"></span>00155 <span class="comment">                //!</span>00156 <span class="comment"></span>                <span class="keywordtype">void</span> SetBit(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i, <span class="keywordtype">int</span> value = 1);<span class="comment"></span>00157 <span class="comment">                //! set the n-th byte to value</span>00158 <span class="comment"></span>                <span class="keywordtype">void</span> SetByte(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n, byte value);00159 <span class="comment"></span>00160 <span class="comment">                //!</span>00161 <span class="comment"></span>                <span class="keywordtype">void</span> SetCoefficient(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i, <span class="keywordtype">int</span> value) {SetBit(i, value);}00162 <span class="comment"></span>00163 <span class="comment">                //!</span>00164 <span class="comment"></span>                <span class="keywordtype">void</span> swap(PolynomialMod2 &amp;a) {reg.swap(a.reg);}<span class="comment"></span>00165 <span class="comment">        //@}</span>00166 <span class="comment"></span><span class="comment"></span>00167 <span class="comment">        //! \name UNARY OPERATORS</span>00168 <span class="comment"></span><span class="comment">        //@{</span>00169 <span class="comment"></span><span class="comment">                //!</span>00170 <span class="comment"></span>                <span class="keywordtype">bool</span>                    operator!() <span class="keyword">const</span>;<span class="comment"></span>00171 <span class="comment">                //!</span>00172 <span class="comment"></span>                PolynomialMod2  operator+()<span class="keyword"> const </span>{<span class="keywordflow">return</span> *<span class="keyword">this</span>;}<span class="comment"></span>00173 <span class="comment">                //!</span>00174 <span class="comment"></span>                PolynomialMod2  operator-()<span class="keyword"> const </span>{<span class="keywordflow">return</span> *<span class="keyword">this</span>;}<span class="comment"></span>00175 <span class="comment">        //@}</span>00176 <span class="comment"></span><span class="comment"></span>00177 <span class="comment">        //! \name BINARY OPERATORS</span>00178 <span class="comment"></span><span class="comment">        //@{</span>00179 <span class="comment"></span><span class="comment">                //!</span>00180 <span class="comment"></span>                PolynomialMod2 And(<span class="keyword">const</span> PolynomialMod2 &amp;b) <span class="keyword">const</span>;<span class="comment"></span>00181 <span class="comment">                //!</span>00182 <span class="comment"></span>                PolynomialMod2 Xor(<span class="keyword">const</span> PolynomialMod2 &amp;b) <span class="keyword">const</span>;<span class="comment"></span>00183 <span class="comment">                //!</span>00184 <span class="comment"></span>                PolynomialMod2 Plus(<span class="keyword">const</span> PolynomialMod2 &amp;b)<span class="keyword"> const </span>{<span class="keywordflow">return</span> Xor(b);}<span class="comment"></span>00185 <span class="comment">                //!</span>00186 <span class="comment"></span>                PolynomialMod2 Minus(<span class="keyword">const</span> PolynomialMod2 &amp;b)<span class="keyword"> const </span>{<span class="keywordflow">return</span> Xor(b);}<span class="comment"></span>00187 <span class="comment">                //!</span>00188 <span class="comment"></span>                PolynomialMod2 Times(<span class="keyword">const</span> PolynomialMod2 &amp;b) <span class="keyword">const</span>;<span class="comment"></span>00189 <span class="comment">                //!</span>00190 <span class="comment"></span>                PolynomialMod2 DividedBy(<span class="keyword">const</span> PolynomialMod2 &amp;b) <span class="keyword">const</span>;<span class="comment"></span>00191 <span class="comment">                //!</span>00192 <span class="comment"></span>                PolynomialMod2 Modulo(<span class="keyword">const</span> PolynomialMod2 &amp;b) <span class="keyword">const</span>;00193 <span class="comment"></span>00194 <span class="comment">                //!</span>00195 <span class="comment"></span>                PolynomialMod2 operator&gt;&gt;(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n) <span class="keyword">const</span>;<span class="comment"></span>00196 <span class="comment">                //!</span>00197 <span class="comment"></span>                PolynomialMod2 operator&lt;&lt;(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n) <span class="keyword">const</span>;<span class="comment"></span>00198 <span class="comment">        //@}</span>00199 <span class="comment"></span><span class="comment"></span>00200 <span class="comment">        //! \name OTHER ARITHMETIC FUNCTIONS</span>00201 <span class="comment"></span><span class="comment">        //@{</span>00202 <span class="comment"></span><span class="comment">                //! sum modulo 2 of all coefficients</span>00203 <span class="comment"></span>                <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Parity() <span class="keyword">const</span>;00204 <span class="comment"></span>00205 <span class="comment">                //! check for irreducibility</span>00206 <span class="comment"></span>                <span class="keywordtype">bool</span> IsIrreducible() <span class="keyword">const</span>;00207 <span class="comment"></span>00208 <span class="comment">                //! is always zero since we're working modulo 2</span><a name="l00209"></a><a class="code" href="class_polynomial_mod2.html#_polynomial_mod2z31_2">00209</a> <span class="comment"></span>                PolynomialMod2 Doubled()<span class="keyword"> const </span>{<span class="keywordflow">return</span> Zero();}<span class="comment"></span>00210 <span class="comment">                //!</span>00211 <span class="comment"></span>                PolynomialMod2 Squared() <span class="keyword">const</span>;00212 <span class="comment"></span>00213 <span class="comment">                //! only 1 is a unit</span><a name="l00214"></a><a class="code" href="class_polynomial_mod2.html#_polynomial_mod2z31_4">00214</a> <span class="comment"></span>                <span class="keywordtype">bool</span> IsUnit()<span class="keyword"> const </span>{<span class="keywordflow">return</span> Equals(One());}<span class="comment"></span>00215 <span class="comment">                //! return inverse if *this is a unit, otherwise return 0</span><a name="l00216"></a><a class="code" href="class_polynomial_mod2.html#_polynomial_mod2z31_5">00216</a> <span class="comment"></span>                PolynomialMod2 MultiplicativeInverse()<span class="keyword"> const </span>{<span class="keywordflow">return</span> IsUnit() ? One() : Zero();}00217 <span class="comment"></span>00218 <span class="comment">                //! greatest common divisor</span>00219 <span class="comment"></span>                <span class="keyword">static</span> PolynomialMod2 Gcd(<span class="keyword">const</span> PolynomialMod2 &amp;a, <span class="keyword">const</span> PolynomialMod2 &amp;n);<span class="comment"></span>00220 <span class="comment">                //! calculate multiplicative inverse of *this mod n</span>00221 <span class="comment"></span>                PolynomialMod2 InverseMod(<span class="keyword">const</span> PolynomialMod2 &amp;) <span class="keyword">const</span>;00222 <span class="comment"></span>00223 <span class="comment">                //! calculate r and q such that (a == d*q + r) &amp;&amp; (deg(r) &lt; deg(d))</span>00224 <span class="comment"></span>                <span class="keyword">static</span> <span class="keywordtype">void</span> Divide(PolynomialMod2 &amp;r, PolynomialMod2 &amp;q, <span class="keyword">const</span> PolynomialMod2 &amp;a, <span class="keyword">const</span> PolynomialMod2 &amp;d);<span class="comment"></span>00225 <span class="comment">        //@}</span>00226 <span class="comment"></span><span class="comment"></span>00227 <span class="comment">        //! \name INPUT/OUTPUT</span>00228 <span class="comment"></span><span class="comment">        //@{</span>00229 <span class="comment"></span><span class="comment">                //!</span>00230 <span class="comment"></span>                <span class="keyword">friend</span> std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, <span class="keyword">const</span> PolynomialMod2 &amp;a);<span class="comment"></span>00231 <span class="comment">        //@}</span>00232 <span class="comment"></span>00233 <span class="keyword">private</span>:00234         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="class_g_f2_n_t.html">GF2NT</a>;00235 00236         <a class="code" href="class_sec_block.html">SecWordBlock</a> reg;00237 };00238 00239 CRYPTOPP_DLL_TEMPLATE_CLASS <a class="code" href="class_abstract_group.html">AbstractGroup&lt;PolynomialMod2&gt;</a>;00240 CRYPTOPP_DLL_TEMPLATE_CLASS <a class="code" href="class_abstract_ring.html">AbstractRing&lt;PolynomialMod2&gt;</a>;00241 CRYPTOPP_DLL_TEMPLATE_CLASS <a class="code" href="class_euclidean_domain_of.html">EuclideanDomainOf&lt;PolynomialMod2&gt;</a>;00242 CRYPTOPP_DLL_TEMPLATE_CLASS <a class="code" href="class_quotient_ring.html">QuotientRing&lt;EuclideanDomainOf&lt;PolynomialMod2&gt;</a> &gt;;00243 <span class="comment"></span>00244 <span class="comment">//! GF(2^n) with Polynomial Basis</span><a name="l00245"></a><a class="code" href="class_g_f2_n_p.html">00245</a> <span class="comment"></span><span class="keyword">class </span>CRYPTOPP_DLL GF2NP : <span class="keyword">public</span> <a class="code" href="class_quotient_ring.html">QuotientRing</a>&lt;EuclideanDomainOf&lt;PolynomialMod2&gt; &gt;

⌨️ 快捷键说明

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