📄 gf2n_8h-source.html
字号:
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 &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& operator=(<span class="keyword">const</span> PolynomialMod2& t);<span class="comment"></span>00133 <span class="comment"> //!</span>00134 <span class="comment"></span> PolynomialMod2& operator&=(<span class="keyword">const</span> PolynomialMod2& t);<span class="comment"></span>00135 <span class="comment"> //!</span>00136 <span class="comment"></span> PolynomialMod2& operator^=(<span class="keyword">const</span> PolynomialMod2& t);<span class="comment"></span>00137 <span class="comment"> //!</span>00138 <span class="comment"></span> PolynomialMod2& operator+=(<span class="keyword">const</span> PolynomialMod2& 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& operator-=(<span class="keyword">const</span> PolynomialMod2& 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& operator*=(<span class="keyword">const</span> PolynomialMod2& t);<span class="comment"></span>00143 <span class="comment"> //!</span>00144 <span class="comment"></span> PolynomialMod2& operator/=(<span class="keyword">const</span> PolynomialMod2& t);<span class="comment"></span>00145 <span class="comment"> //!</span>00146 <span class="comment"></span> PolynomialMod2& operator%=(<span class="keyword">const</span> PolynomialMod2& t);<span class="comment"></span>00147 <span class="comment"> //!</span>00148 <span class="comment"></span> PolynomialMod2& operator<<=(<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& operator>>=(<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> &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 &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 &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 &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 &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 &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 &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 &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 &b) <span class="keyword">const</span>;00193 <span class="comment"></span>00194 <span class="comment"> //!</span>00195 <span class="comment"></span> PolynomialMod2 operator>>(<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<<(<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 &a, <span class="keyword">const</span> PolynomialMod2 &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 &) <span class="keyword">const</span>;00222 <span class="comment"></span>00223 <span class="comment"> //! calculate r and q such that (a == d*q + r) && (deg(r) < deg(d))</span>00224 <span class="comment"></span> <span class="keyword">static</span> <span class="keywordtype">void</span> Divide(PolynomialMod2 &r, PolynomialMod2 &q, <span class="keyword">const</span> PolynomialMod2 &a, <span class="keyword">const</span> PolynomialMod2 &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& operator<<(std::ostream& out, <span class="keyword">const</span> PolynomialMod2 &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<PolynomialMod2></a>;00240 CRYPTOPP_DLL_TEMPLATE_CLASS <a class="code" href="class_abstract_ring.html">AbstractRing<PolynomialMod2></a>;00241 CRYPTOPP_DLL_TEMPLATE_CLASS <a class="code" href="class_euclidean_domain_of.html">EuclideanDomainOf<PolynomialMod2></a>;00242 CRYPTOPP_DLL_TEMPLATE_CLASS <a class="code" href="class_quotient_ring.html">QuotientRing<EuclideanDomainOf<PolynomialMod2></a> >;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><EuclideanDomainOf<PolynomialMod2> >
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -