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

📄 gf2n_8cpp-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 5 页
字号:
00694                                 temp ^= ((temp &gt;&gt; j) &amp; 1) &lt;&lt; (t1 + j);00695                 <span class="keywordflow">else</span>00696                         b[t1/WORD_BITS-1] ^= temp &lt;&lt; t1%WORD_BITS;00697 00698                 <span class="keywordflow">if</span> (t1 % WORD_BITS)00699                         b[t1/WORD_BITS] ^= temp &gt;&gt; (WORD_BITS - t1%WORD_BITS);00700 00701                 <span class="keywordflow">if</span> (t0%WORD_BITS)00702                 {00703                         b[t0/WORD_BITS-1] ^= temp &lt;&lt; t0%WORD_BITS;00704                         b[t0/WORD_BITS] ^= temp &gt;&gt; (WORD_BITS - t0%WORD_BITS);00705                 }00706                 <span class="keywordflow">else</span>00707                         b[t0/WORD_BITS-1] ^= temp;00708         }00709 00710         CopyWords(result.<a class="code" href="class_polynomial_mod2.html#_polynomial_mod2r0">reg</a>.<a class="code" href="class_sec_block.html#_sec_block_with_hinta7">begin</a>(), b, result.<a class="code" href="class_polynomial_mod2.html#_polynomial_mod2r0">reg</a>.<a class="code" href="class_sec_block.html#_sec_block_with_hinta13">size</a>());00711         <span class="keywordflow">return</span> result;00712 }00713 00714 <span class="keyword">const</span> GF2NT::Element&amp; GF2NT::Multiply(<span class="keyword">const</span> Element &amp;a, <span class="keyword">const</span> Element &amp;b)<span class="keyword"> const</span>00715 <span class="keyword"></span>{00716         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> aSize = STDMIN(a.reg.size(), result.<a class="code" href="class_polynomial_mod2.html#_polynomial_mod2r0">reg</a>.<a class="code" href="class_sec_block.html#_sec_block_with_hinta13">size</a>());00717         Element r((word)0, m);00718 00719         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=m-1; i&gt;=0; i--)00720         {00721                 <span class="keywordflow">if</span> (r[m-1])00722                 {00723                         ShiftWordsLeftByBits(r.reg.begin(), r.reg.size(), 1);00724                         XorWords(r.reg.begin(), m_modulus.reg, r.reg.size());00725                 }00726                 <span class="keywordflow">else</span>00727                         ShiftWordsLeftByBits(r.reg.begin(), r.reg.size(), 1);00728 00729                 <span class="keywordflow">if</span> (b[i])00730                         XorWords(r.reg.begin(), a.reg, aSize);00731         }00732 00733         <span class="keywordflow">if</span> (m%WORD_BITS)00734                 r.reg.begin()[r.reg.size()-1] = (word)Crop(r.reg[r.reg.size()-1], m%WORD_BITS);00735 00736         CopyWords(result.<a class="code" href="class_polynomial_mod2.html#_polynomial_mod2r0">reg</a>.<a class="code" href="class_sec_block.html#_sec_block_with_hinta7">begin</a>(), r.reg.begin(), result.<a class="code" href="class_polynomial_mod2.html#_polynomial_mod2r0">reg</a>.<a class="code" href="class_sec_block.html#_sec_block_with_hinta13">size</a>());00737         <span class="keywordflow">return</span> result;00738 }00739 00740 <span class="keyword">const</span> GF2NT::Element&amp; GF2NT::Reduced(<span class="keyword">const</span> Element &amp;a)<span class="keyword"> const</span>00741 <span class="keyword"></span>{00742         <span class="keywordflow">if</span> (t0-t1 &lt; WORD_BITS)00743                 <span class="keywordflow">return</span> m_domain.Mod(a, m_modulus);00744 00745         <a class="code" href="class_sec_block.html">SecWordBlock</a> b(a.reg);00746 00747         <span class="keywordtype">unsigned</span> i;00748         <span class="keywordflow">for</span> (i=b.size()-1; i&gt;=BitsToWords(t0); i--)00749         {00750                 word temp = b[i];00751 00752                 <span class="keywordflow">if</span> (t0%WORD_BITS)00753                 {00754                         b[i-t0/WORD_BITS] ^= temp &gt;&gt; t0%WORD_BITS;00755                         b[i-t0/WORD_BITS-1] ^= temp &lt;&lt; (WORD_BITS - t0%WORD_BITS);00756                 }00757                 <span class="keywordflow">else</span>00758                         b[i-t0/WORD_BITS] ^= temp;00759 00760                 <span class="keywordflow">if</span> ((t0-t1)%WORD_BITS)00761                 {00762                         b[i-(t0-t1)/WORD_BITS] ^= temp &gt;&gt; (t0-t1)%WORD_BITS;00763                         b[i-(t0-t1)/WORD_BITS-1] ^= temp &lt;&lt; (WORD_BITS - (t0-t1)%WORD_BITS);00764                 }00765                 <span class="keywordflow">else</span>00766                         b[i-(t0-t1)/WORD_BITS] ^= temp;00767         }00768 00769         <span class="keywordflow">if</span> (i==BitsToWords(t0)-1 &amp;&amp; t0%WORD_BITS)00770         {00771                 word mask = ((word)1&lt;&lt;(t0%WORD_BITS))-1;00772                 word temp = b[i] &amp; ~mask;00773                 b[i] &amp;= mask;00774 00775                 b[i-t0/WORD_BITS] ^= temp &gt;&gt; t0%WORD_BITS;00776 00777                 <span class="keywordflow">if</span> ((t0-t1)%WORD_BITS)00778                 {00779                         b[i-(t0-t1)/WORD_BITS] ^= temp &gt;&gt; (t0-t1)%WORD_BITS;00780                         <span class="keywordflow">if</span> ((t0-t1)%WORD_BITS &gt; t0%WORD_BITS)00781                                 b[i-(t0-t1)/WORD_BITS-1] ^= temp &lt;&lt; (WORD_BITS - (t0-t1)%WORD_BITS);00782                         <span class="keywordflow">else</span>00783                                 assert(temp &lt;&lt; (WORD_BITS - (t0-t1)%WORD_BITS) == 0);00784                 }00785                 <span class="keywordflow">else</span>00786                         b[i-(t0-t1)/WORD_BITS] ^= temp;00787         }00788 00789         SetWords(result.<a class="code" href="class_polynomial_mod2.html#_polynomial_mod2r0">reg</a>.<a class="code" href="class_sec_block.html#_sec_block_with_hinta7">begin</a>(), 0, result.<a class="code" href="class_polynomial_mod2.html#_polynomial_mod2r0">reg</a>.<a class="code" href="class_sec_block.html#_sec_block_with_hinta13">size</a>());00790         CopyWords(result.<a class="code" href="class_polynomial_mod2.html#_polynomial_mod2r0">reg</a>.<a class="code" href="class_sec_block.html#_sec_block_with_hinta7">begin</a>(), b, STDMIN(b.size(), result.<a class="code" href="class_polynomial_mod2.html#_polynomial_mod2r0">reg</a>.<a class="code" href="class_sec_block.html#_sec_block_with_hinta13">size</a>()));00791         <span class="keywordflow">return</span> result;00792 }00793 00794 <span class="keywordtype">void</span> GF2NP::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>00795 <span class="keyword"></span>{00796         a.DEREncodeAsOctetString(out, MaxElementByteLength());00797 }00798 00799 <span class="keywordtype">void</span> GF2NP::BERDecodeElement(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;in, Element &amp;a)<span class="keyword"> const</span>00800 <span class="keyword"></span>{00801         a.BERDecodeAsOctetString(in, MaxElementByteLength());00802 }00803 00804 <span class="keywordtype">void</span> GF2NT::DEREncode(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt)<span class="keyword"> const</span>00805 <span class="keyword"></span>{00806         <a class="code" href="class_d_e_r_sequence_encoder.html">DERSequenceEncoder</a> seq(bt);00807                 ASN1::characteristic_two_field().DEREncode(seq);00808                 <a class="code" href="class_d_e_r_sequence_encoder.html">DERSequenceEncoder</a> parameters(seq);00809                         DEREncodeUnsigned(parameters, m);00810                         ASN1::tpBasis().DEREncode(parameters);00811                         DEREncodeUnsigned(parameters, t1);00812                 parameters.<a class="code" href="class_d_e_r_general_encoder.html#_d_e_r_set_encodera2">MessageEnd</a>();00813         seq.<a class="code" href="class_d_e_r_general_encoder.html#_d_e_r_set_encodera2">MessageEnd</a>();00814 }00815 00816 <span class="keywordtype">void</span> GF2NPP::DEREncode(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt)<span class="keyword"> const</span>00817 <span class="keyword"></span>{00818         <a class="code" href="class_d_e_r_sequence_encoder.html">DERSequenceEncoder</a> seq(bt);00819                 ASN1::characteristic_two_field().DEREncode(seq);00820                 <a class="code" href="class_d_e_r_sequence_encoder.html">DERSequenceEncoder</a> parameters(seq);00821                         DEREncodeUnsigned(parameters, m);00822                         ASN1::ppBasis().DEREncode(parameters);00823                         <a class="code" href="class_d_e_r_sequence_encoder.html">DERSequenceEncoder</a> pentanomial(parameters);00824                                 DEREncodeUnsigned(pentanomial, t3);00825                                 DEREncodeUnsigned(pentanomial, t2);00826                                 DEREncodeUnsigned(pentanomial, t1);00827                         pentanomial.<a class="code" href="class_d_e_r_general_encoder.html#_d_e_r_set_encodera2">MessageEnd</a>();00828                 parameters.<a class="code" href="class_d_e_r_general_encoder.html#_d_e_r_set_encodera2">MessageEnd</a>();00829         seq.<a class="code" href="class_d_e_r_general_encoder.html#_d_e_r_set_encodera2">MessageEnd</a>();00830 }00831 00832 <a class="code" href="class_g_f2_n_p.html">GF2NP</a> * BERDecodeGF2NP(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;bt)00833 {00834         <span class="comment">// VC60 workaround: auto_ptr lacks reset()</span>00835         member_ptr&lt;GF2NP&gt; result;00836 00837         <a class="code" href="class_b_e_r_sequence_decoder.html">BERSequenceDecoder</a> seq(bt);00838                 <span class="keywordflow">if</span> (<a class="code" href="class_o_i_d.html">OID</a>(seq) != ASN1::characteristic_two_field())00839                         BERDecodeError();00840                 <a class="code" href="class_b_e_r_sequence_decoder.html">BERSequenceDecoder</a> parameters(seq);00841                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m;00842                         BERDecodeUnsigned(parameters, m);00843                         <a class="code" href="class_o_i_d.html">OID</a> oid(parameters);00844                         <span class="keywordflow">if</span> (oid == ASN1::tpBasis())00845                         {00846                                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> t1;00847                                 BERDecodeUnsigned(parameters, t1);00848                                 result.reset(<span class="keyword">new</span> <a class="code" href="class_g_f2_n_t.html">GF2NT</a>(m, t1, 0));00849                         }00850                         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (oid == ASN1::ppBasis())00851                         {00852                                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> t1, t2, t3;00853                                 <a class="code" href="class_b_e_r_sequence_decoder.html">BERSequenceDecoder</a> pentanomial(parameters);00854                                 BERDecodeUnsigned(pentanomial, t3);00855                                 BERDecodeUnsigned(pentanomial, t2);00856                                 BERDecodeUnsigned(pentanomial, t1);00857                                 pentanomial.<a class="code" href="class_b_e_r_general_decoder.html#_b_e_r_set_decodera9">MessageEnd</a>();00858                                 result.reset(<span class="keyword">new</span> <a class="code" href="class_g_f2_n_p_p.html">GF2NPP</a>(m, t3, t2, t1, 0));00859                         }00860                         <span class="keywordflow">else</span>00861                         {00862                                 BERDecodeError();00863                                 <span class="keywordflow">return</span> NULL;00864                         }00865                 

⌨️ 快捷键说明

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