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

📄 gf2n_8cpp-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00194"></a>00194 <span class="keyword"></span>{<a name="l00195"></a>00195         <span class="keywordtype">unsigned</span> wordCount = <a class="code" href="class_polynomial_mod2.html#88292d16af59aaed460503b6339145b3" title="number of significant words = ceiling(ByteCount()/sizeof(word))">WordCount</a>();<a name="l00196"></a>00196         <span class="keywordflow">if</span> (wordCount)<a name="l00197"></a>00197                 <span class="keywordflow">return</span> (wordCount-1)*WORD_BITS + BitPrecision(reg[wordCount-1]);<a name="l00198"></a>00198         <span class="keywordflow">else</span><a name="l00199"></a>00199                 <span class="keywordflow">return</span> 0;<a name="l00200"></a>00200 }<a name="l00201"></a>00201 <a name="l00202"></a><a class="code" href="class_polynomial_mod2.html#c2821c87852466235b4e1a2f4cc01334">00202</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_polynomial_mod2.html#c2821c87852466235b4e1a2f4cc01334" title="sum modulo 2 of all coefficients">PolynomialMod2::Parity</a>()<span class="keyword"> const</span><a name="l00203"></a>00203 <span class="keyword"></span>{<a name="l00204"></a>00204         <span class="keywordtype">unsigned</span> i;<a name="l00205"></a>00205         word temp=0;<a name="l00206"></a>00206         <span class="keywordflow">for</span> (i=0; i&lt;reg.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>(); i++)<a name="l00207"></a>00207                 temp ^= reg[i];<a name="l00208"></a>00208         <span class="keywordflow">return</span> CryptoPP::Parity(temp);<a name="l00209"></a>00209 }<a name="l00210"></a>00210 <a name="l00211"></a><a class="code" href="class_polynomial_mod2.html#cb7a27cfd427af99b60e67503db0b6d6">00211</a> <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a>&amp; <a class="code" href="class_polynomial_mod2.html#cb7a27cfd427af99b60e67503db0b6d6">PolynomialMod2::operator=</a>(<span class="keyword">const</span> <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a>&amp; t)<a name="l00212"></a>00212 {<a name="l00213"></a>00213         reg.<a class="code" href="class_sec_block.html#2cf5dc5e31c63eb927f935af6104f36a" title="set contents and size">Assign</a>(t.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>);<a name="l00214"></a>00214         <span class="keywordflow">return</span> *<span class="keyword">this</span>;<a name="l00215"></a>00215 }<a name="l00216"></a>00216 <a name="l00217"></a><a class="code" href="class_polynomial_mod2.html#46d95294f13b9b537868389d741b41a8">00217</a> <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a>&amp; <a class="code" href="class_polynomial_mod2.html#46d95294f13b9b537868389d741b41a8">PolynomialMod2::operator^=</a>(<span class="keyword">const</span> <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a>&amp; t)<a name="l00218"></a>00218 {<a name="l00219"></a>00219         reg.<a class="code" href="class_sec_block.html#4ef9516e973051e6afa38bba526da3e9" title="change size only if newSize &gt; current size. contents are preserved and additional...">CleanGrow</a>(t.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>());<a name="l00220"></a>00220         XorWords(reg, t.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>, t.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>());<a name="l00221"></a>00221         <span class="keywordflow">return</span> *<span class="keyword">this</span>;<a name="l00222"></a>00222 }<a name="l00223"></a>00223 <a name="l00224"></a><a class="code" href="class_polynomial_mod2.html#c39e5aa475ea75149c09aeace922734d">00224</a> <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> <a class="code" href="class_polynomial_mod2.html#c39e5aa475ea75149c09aeace922734d">PolynomialMod2::Xor</a>(<span class="keyword">const</span> <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> &amp;b)<span class="keyword"> const</span><a name="l00225"></a>00225 <span class="keyword"></span>{<a name="l00226"></a>00226         <span class="keywordflow">if</span> (b.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>() &gt;= reg.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>())<a name="l00227"></a>00227         {<a name="l00228"></a>00228                 <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> result((word)0, b.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>()*WORD_BITS);<a name="l00229"></a>00229                 XorWords(result.reg, reg, b.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>, reg.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>());<a name="l00230"></a>00230                 CopyWords(result.reg+reg.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>(), b.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>+reg.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>(), b.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>()-reg.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>());<a name="l00231"></a>00231                 <span class="keywordflow">return</span> result;<a name="l00232"></a>00232         }<a name="l00233"></a>00233         <span class="keywordflow">else</span><a name="l00234"></a>00234         {<a name="l00235"></a>00235                 <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> result((word)0, reg.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>()*WORD_BITS);<a name="l00236"></a>00236                 XorWords(result.reg, reg, b.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>, b.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>());<a name="l00237"></a>00237                 CopyWords(result.reg+b.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>(), reg+b.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>(), reg.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>()-b.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>());<a name="l00238"></a>00238                 <span class="keywordflow">return</span> result;<a name="l00239"></a>00239         }<a name="l00240"></a>00240 }<a name="l00241"></a>00241 <a name="l00242"></a><a class="code" href="class_polynomial_mod2.html#99e2b908f82147116bfe631ef84755b5">00242</a> <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> <a class="code" href="class_polynomial_mod2.html#99e2b908f82147116bfe631ef84755b5">PolynomialMod2::And</a>(<span class="keyword">const</span> <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> &amp;b)<span class="keyword"> const</span><a name="l00243"></a>00243 <span class="keyword"></span>{<a name="l00244"></a>00244         <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> result((word)0, WORD_BITS*STDMIN(reg.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>(), b.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>()));<a name="l00245"></a>00245         AndWords(result.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>, reg, b.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>, result.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>());<a name="l00246"></a>00246         <span class="keywordflow">return</span> result;<a name="l00247"></a>00247 }<a name="l00248"></a>00248 <a name="l00249"></a><a class="code" href="class_polynomial_mod2.html#9eb57375ba2c0b403a76008195c50299">00249</a> <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> <a class="code" href="class_polynomial_mod2.html#9eb57375ba2c0b403a76008195c50299">PolynomialMod2::Times</a>(<span class="keyword">const</span> <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> &amp;b)<span class="keyword"> const</span><a name="l00250"></a>00250 <span class="keyword"></span>{<a name="l00251"></a>00251         <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> result((word)0, <a class="code" href="class_polynomial_mod2.html#86f4e8502eacf95345d18a6240a217b2" title="number of significant bits = Degree() + 1">BitCount</a>() + b.<a class="code" href="class_polynomial_mod2.html#86f4e8502eacf95345d18a6240a217b2" title="number of significant bits = Degree() + 1">BitCount</a>());<a name="l00252"></a>00252 <a name="l00253"></a>00253         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=b.<a class="code" href="class_polynomial_mod2.html#2d0e58a23b81b33ab3ccf9b7aa498603" title="the zero polynomial will return a degree of -1">Degree</a>(); i&gt;=0; i--)<a name="l00254"></a>00254         {<a name="l00255"></a>00255                 result &lt;&lt;= 1;<a name="l00256"></a>00256                 <span class="keywordflow">if</span> (b[i])<a name="l00257"></a>00257                         XorWords(result.reg, reg, reg.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>());<a name="l00258"></a>00258         }<a name="l00259"></a>00259         <span class="keywordflow">return</span> result;<a name="l00260"></a>00260 }<a name="l00261"></a>00261 <a name="l00262"></a><a class="code" href="class_polynomial_mod2.html#ebb432d1ab5e16d056165e316254b258">00262</a> <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> <a class="code" href="class_polynomial_mod2.html#ebb432d1ab5e16d056165e316254b258">PolynomialMod2::Squared</a>()<span class="keyword"> const</span><a name="l00263"></a>00263 <span class="keyword"></span>{<a name="l00264"></a>00264         <span class="keyword">static</span> <span class="keyword">const</span> word map[16] = {0, 1, 4, 5, 16, 17, 20, 21, 64, 65, 68, 69, 80, 81, 84, 85};<a name="l00265"></a>00265 <a name="l00266"></a>00266         <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> result((word)0, 2*reg.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>()*WORD_BITS);<a name="l00267"></a>00267 <a name="l00268"></a>00268         <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i=0; i&lt;reg.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>(); i++)<a name="l00269"></a>00269         {<a name="l00270"></a>00270                 <span class="keywordtype">unsigned</span> j;<a name="l00271"></a>00271 <a name="l00272"></a>00272                 <span class="keywordflow">for</span> (j=0; j&lt;WORD_BITS; j+=8)<a name="l00273"></a>00273                         result.reg[2*i] |= map[(reg[i] &gt;&gt; (j/2)) % 16] &lt;&lt; j;<a name="l00274"></a>00274 <a name="l00275"></a>00275                 for (j=0; j&lt;WORD_BITS; j+=8)<a name="l00276"></a>00276                         result.reg[2*i+1] |= map[(reg[i] &gt;&gt; (j/2 + WORD_BITS/2)) % 16] &lt;&lt; j;<a name="l00277"></a>00277         }<a name="l00278"></a>00278 <a name="l00279"></a>00279         <span class="keywordflow">return</span> result;<a name="l00280"></a>00280 }<a name="l00281"></a>00281 <a name="l00282"></a><a class="code" href="class_polynomial_mod2.html#73d92da2ee829619041eca82567b87bc">00282</a> <span class="keywordtype">void</span> <a class="code" href="class_polynomial_mod2.html#73d92da2ee829619041eca82567b87bc" title="calculate r and q such that (a == d*q + r) &amp;&amp; (deg(r) &lt; deg(d))">PolynomialMod2::Divide</a>(<a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> &amp;remainder, <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> &amp;quotient,<a name="l00283"></a>00283                                    <span class="keyword">const</span> <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> &amp;dividend, <span class="keyword">const</span> <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> &amp;divisor)<a name="l00284"></a>00284 {<a name="l00285"></a>00285         <span class="keywordflow">if</span> (!divisor)<a name="l00286"></a>00286                 <span class="keywordflow">throw</span> <a class="code" href="class_polynomial_mod2_1_1_divide_by_zero.html" title="divide by zero exception">PolynomialMod2::DivideByZero</a>();<a name="l00287"></a>00287 <a name="l00288"></a>00288         <span class="keywordtype">int</span> degree = divisor.<a class="code" href="class_polynomial_mod2.html#2d0e58a23b81b33ab3ccf9b7aa498603" title="the zero polynomial will return a degree of -1">Degree</a>();<a name="l00289"></a>00289         remainder.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>.<a class="code" href="class_sec_block.html#2d78e75002fd02e5b89bd72a9e65e769" title="change size and set contents to 0">CleanNew</a>(BitsToWords(degree+1));<a name="l00290"></a>00290         <span class="keywordflow">if</span> (dividend.<a class="code" href="class_polynomial_mod2.html#86f4e8502eacf95345d18a6240a217b2" title="number of significant bits = Degree() + 1">BitCount</a>() &gt;= divisor.<a class="code" href="class_polynomial_mod2.html#86f4e8502eacf95345d18a6240a217b2" title="number of significant bits = Degree() + 1">BitCount</a>())<a name="l00291"></a>00291                 quotient.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>.<a class="code" href="class_sec_block.html#2d78e75002fd02e5b89bd72a9e65e769" title="change size and set contents to 0">CleanNew</a>(BitsToWords(dividend.<a class="code" href="class_polynomial_mod2.html#86f4e8502eacf95345d18a6240a217b2" title="number of significant bits = Degree() + 1">BitCount</a>() - divisor.<a class="code" href="class_polynomial_mod2.html#86f4e8502eacf95345d18a6240a217b2" title="number of significant bits = Degree() + 1">BitCount</a>() + 1));<a name="l00292"></a>00292         <span class="keywordflow">else</span><a name="l00293"></a>00293                 quotient.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>.<a class="code" href="class_sec_block.html#2d78e75002fd02e5b89bd72a9e65e769" title="change size and set contents to 0">CleanNew</a>(0);<a name="l00294"></a>00294 <a name="l00295"></a>00295         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=dividend.<a class="code" href="class_polynomial_mod2.html#2d0e58a23b81b33ab3ccf9b7aa498603" title="the zero polynomial will return a degree of -1">Degree</a>(); i&gt;=0; i--)<a name="l00296"></a>00296         {<a name="l00297"></a>00297                 remainder &lt;&lt;= 1;<a name="l00298"></a>00298                 remainder.<a class="code" href="class_polynomial_mod2.html#68853b1b5d6d0361cd0b16f1889466a4">reg</a>[0] |= dividend[i];<a name="l00299"></a>00299                 <span class="keywordflow">if</span> (remainder[degree])<a name="l00300"></a>00300                 {

⌨️ 快捷键说明

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