📄 gf2n_8h-source.html
字号:
00246 {00247 <span class="keyword">public</span>:00248 GF2NP(<span class="keyword">const</span> PolynomialMod2 &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> &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> &out, <span class="keyword">const</span> Element &a) <span class="keyword">const</span>;00255 <span class="keywordtype">void</span> BERDecodeElement(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &in, Element &a) <span class="keyword">const</span>;00256 00257 <span class="keywordtype">bool</span> Equal(<span class="keyword">const</span> Element &a, <span class="keyword">const</span> Element &b)<span class="keyword"> const</span>00258 <span class="keyword"> </span>{assert(a.Degree() < m_modulus.Degree() && b.Degree() < 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 &a)<span class="keyword"> const</span>00261 <span class="keyword"> </span>{assert(a.Degree() < 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 &a) <span class="keyword">const</span>;00270 00271 Element HalfTrace(<span class="keyword">const</span> Element &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 &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 > t1 > 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> &bt) <span class="keyword">const</span>;00289 00290 <span class="keyword">const</span> Element& Multiply(<span class="keyword">const</span> Element &a, <span class="keyword">const</span> Element &b) <span class="keyword">const</span>;00291 00292 <span class="keyword">const</span> Element& <a class="code" href="class_square.html">Square</a>(<span class="keyword">const</span> Element &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& MultiplicativeInverse(<span class="keyword">const</span> Element &a) <span class="keyword">const</span>;00296 00297 <span class="keyword">private</span>:00298 <span class="keyword">const</span> Element& Reduced(<span class="keyword">const</span> Element &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 > t1 > t2 > t3 > 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> &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> &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 &a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &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 &a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &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> (<span class="keyword">const</span> CryptoPP::PolynomialMod2 &a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &b)00330 {<span class="keywordflow">return</span> a.Degree() > 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>=</a>(<span class="keyword">const</span> CryptoPP::PolynomialMod2 &a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &b)00333 {<span class="keywordflow">return</span> a.Degree() >= 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< (<span class="keyword">const</span> CryptoPP::PolynomialMod2 &a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &b)00336 {<span class="keywordflow">return</span> a.Degree() < 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<=</a>(<span class="keyword">const</span> CryptoPP::PolynomialMod2 &a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &b)00339 {<span class="keywordflow">return</span> a.Degree() <= b.Degree();}<span class="comment"></span>00340 <span class="comment">//!</span>00341 <span class="comment"></span><span class="keyword">inline</span> CryptoPP::PolynomialMod2 operator&(<span class="keyword">const</span> CryptoPP::PolynomialMod2 &a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &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 &a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &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 &a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &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 &a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &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 &a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &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 &a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &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 &a, <span class="keyword">const</span> CryptoPP::PolynomialMod2 &b) {<span class="keywordflow">return</span> a.Modulo(b);}00354 00355 NAMESPACE_END00356 00357 NAMESPACE_BEGIN(std)00358 <span class="keyword">template</span><> <span class="keyword">inline</span> <span class="keywordtype">void</span> swap(CryptoPP::PolynomialMod2 &a, CryptoPP::PolynomialMod2 &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 + -