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

📄 gf2n_8cpp-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00087"></a><a class="code" href="class_polynomial_mod2.html#87949fb32436e1f2f96d7b813405c032">00087</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#87949fb32436e1f2f96d7b813405c032" title="return x^i">PolynomialMod2::Monomial</a>(<span class="keywordtype">size_t</span> i) <a name="l00088"></a>00088 {<a name="l00089"></a>00089         <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> r((word)0, i+1); <a name="l00090"></a>00090         r.<a class="code" href="class_polynomial_mod2.html#b3855a5f77e9bbc7d82a4239ccf59329">SetBit</a>(i); <a name="l00091"></a>00091         <span class="keywordflow">return</span> r;<a name="l00092"></a>00092 }<a name="l00093"></a>00093 <a name="l00094"></a><a class="code" href="class_polynomial_mod2.html#6d843c32a41885cb33d0aec19e40dda6">00094</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#6d843c32a41885cb33d0aec19e40dda6" title="return x^t0 + x^t1 + x^t2">PolynomialMod2::Trinomial</a>(<span class="keywordtype">size_t</span> t0, <span class="keywordtype">size_t</span> t1, <span class="keywordtype">size_t</span> t2) <a name="l00095"></a>00095 {<a name="l00096"></a>00096         <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> r((word)0, t0+1);<a name="l00097"></a>00097         r.<a class="code" href="class_polynomial_mod2.html#b3855a5f77e9bbc7d82a4239ccf59329">SetBit</a>(t0);<a name="l00098"></a>00098         r.<a class="code" href="class_polynomial_mod2.html#b3855a5f77e9bbc7d82a4239ccf59329">SetBit</a>(t1);<a name="l00099"></a>00099         r.<a class="code" href="class_polynomial_mod2.html#b3855a5f77e9bbc7d82a4239ccf59329">SetBit</a>(t2);<a name="l00100"></a>00100         <span class="keywordflow">return</span> r;<a name="l00101"></a>00101 }<a name="l00102"></a>00102 <a name="l00103"></a><a class="code" href="class_polynomial_mod2.html#507094d47020af3d23a9fd68cc4b527d">00103</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#507094d47020af3d23a9fd68cc4b527d" title="return x^t0 + x^t1 + x^t2 + x^t3 + x^t4">PolynomialMod2::Pentanomial</a>(<span class="keywordtype">size_t</span> t0, <span class="keywordtype">size_t</span> t1, <span class="keywordtype">size_t</span> t2, <span class="keywordtype">size_t</span> t3, <span class="keywordtype">size_t</span> t4)<a name="l00104"></a>00104 {<a name="l00105"></a>00105         <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> r((word)0, t0+1);<a name="l00106"></a>00106         r.<a class="code" href="class_polynomial_mod2.html#b3855a5f77e9bbc7d82a4239ccf59329">SetBit</a>(t0);<a name="l00107"></a>00107         r.<a class="code" href="class_polynomial_mod2.html#b3855a5f77e9bbc7d82a4239ccf59329">SetBit</a>(t1);<a name="l00108"></a>00108         r.<a class="code" href="class_polynomial_mod2.html#b3855a5f77e9bbc7d82a4239ccf59329">SetBit</a>(t2);<a name="l00109"></a>00109         r.<a class="code" href="class_polynomial_mod2.html#b3855a5f77e9bbc7d82a4239ccf59329">SetBit</a>(t3);<a name="l00110"></a>00110         r.<a class="code" href="class_polynomial_mod2.html#b3855a5f77e9bbc7d82a4239ccf59329">SetBit</a>(t4);<a name="l00111"></a>00111         <span class="keywordflow">return</span> r;<a name="l00112"></a>00112 }<a name="l00113"></a>00113 <a name="l00114"></a>00114 <span class="keyword">template</span> &lt;word i&gt;<a name="l00115"></a><a class="code" href="struct_new_polynomial_mod2.html">00115</a> <span class="keyword">struct </span><a class="code" href="struct_new_polynomial_mod2.html">NewPolynomialMod2</a><a name="l00116"></a>00116 {<a name="l00117"></a><a class="code" href="struct_new_polynomial_mod2.html#3ea37b8065b86a973f454a53538000b0">00117</a>         <a class="code" href="class_polynomial_mod2.html" title="Polynomial with Coefficients in GF(2).">PolynomialMod2</a> * operator()()<span class="keyword"> const</span><a name="l00118"></a>00118 <span class="keyword">        </span>{<a name="l00119"></a>00119                 <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="class_polynomial_mod2.html#c67d4fb61b199c101f5de08d3aa2e782" title="creates the zero polynomial">PolynomialMod2</a>(i);<a name="l00120"></a>00120         }<a name="l00121"></a>00121 };<a name="l00122"></a>00122 <a name="l00123"></a><a class="code" href="class_polynomial_mod2.html#11c7e95fb64a071952df785bb4036437">00123</a> <span class="keyword">const</span> <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#11c7e95fb64a071952df785bb4036437">PolynomialMod2::Zero</a>()<a name="l00124"></a>00124 {<a name="l00125"></a>00125         <span class="keywordflow">return</span> <a class="code" href="class_singleton.html">Singleton&lt;PolynomialMod2&gt;</a>().Ref();<a name="l00126"></a>00126 }<a name="l00127"></a>00127 <a name="l00128"></a><a class="code" href="class_polynomial_mod2.html#6d96db42fd089c139d6af6da6d6bc331">00128</a> <span class="keyword">const</span> <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#6d96db42fd089c139d6af6da6d6bc331">PolynomialMod2::One</a>()<a name="l00129"></a>00129 {<a name="l00130"></a>00130         <span class="keywordflow">return</span> <a class="code" href="class_singleton.html">Singleton&lt;PolynomialMod2, NewPolynomialMod2&lt;1&gt;</a> &gt;().Ref();<a name="l00131"></a>00131 }<a name="l00132"></a>00132 <a name="l00133"></a><a class="code" href="class_polynomial_mod2.html#dc611fe09c3a9b919dce7b8b45cec29d">00133</a> <span class="keywordtype">void</span> <a class="code" href="class_polynomial_mod2.html#dc611fe09c3a9b919dce7b8b45cec29d">PolynomialMod2::Decode</a>(<span class="keyword">const</span> byte *input, <span class="keywordtype">size_t</span> inputLen)<a name="l00134"></a>00134 {<a name="l00135"></a>00135         <a class="code" href="class_string_store.html" title="string-based implementation of Store interface">StringStore</a> store(input, inputLen);<a name="l00136"></a>00136         <a class="code" href="class_polynomial_mod2.html#dc611fe09c3a9b919dce7b8b45cec29d">Decode</a>(store, inputLen);<a name="l00137"></a>00137 }<a name="l00138"></a>00138 <a name="l00139"></a><a class="code" href="class_polynomial_mod2.html#1f444d22084163c2b69b5ade313aef14">00139</a> <span class="keywordtype">void</span> <a class="code" href="class_polynomial_mod2.html#1f444d22084163c2b69b5ade313aef14" title="encode in big-endian format">PolynomialMod2::Encode</a>(byte *output, <span class="keywordtype">size_t</span> outputLen)<span class="keyword"> const</span><a name="l00140"></a>00140 <span class="keyword"></span>{<a name="l00141"></a>00141         <a class="code" href="class_array_sink.html" title="Copy input to a memory buffer.">ArraySink</a> sink(output, outputLen);<a name="l00142"></a>00142         <a class="code" href="class_polynomial_mod2.html#1f444d22084163c2b69b5ade313aef14" title="encode in big-endian format">Encode</a>(sink, outputLen);<a name="l00143"></a>00143 }<a name="l00144"></a>00144 <a name="l00145"></a><a class="code" href="class_polynomial_mod2.html#60ed7031782a3e3051278ce5dfa1c099">00145</a> <span class="keywordtype">void</span> <a class="code" href="class_polynomial_mod2.html#dc611fe09c3a9b919dce7b8b45cec29d">PolynomialMod2::Decode</a>(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;bt, <span class="keywordtype">size_t</span> inputLen)<a name="l00146"></a>00146 {<a name="l00147"></a>00147         reg.<a class="code" href="class_sec_block.html#2d78e75002fd02e5b89bd72a9e65e769" title="change size and set contents to 0">CleanNew</a>(BytesToWords(inputLen));<a name="l00148"></a>00148 <a name="l00149"></a>00149         <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=inputLen; i &gt; 0; i--)<a name="l00150"></a>00150         {<a name="l00151"></a>00151                 byte b;<a name="l00152"></a>00152                 bt.<a class="code" href="class_buffered_transformation.html#9e1ad913c8fe697d269f408a7d5928fc" title="try to retrieve a single byte">Get</a>(b);<a name="l00153"></a>00153                 reg[(i-1)/WORD_SIZE] |= word(b) &lt;&lt; ((i-1)%WORD_SIZE)*8;<a name="l00154"></a>00154         }<a name="l00155"></a>00155 }<a name="l00156"></a>00156 <a name="l00157"></a><a class="code" href="class_polynomial_mod2.html#8bc634e489af8451856f5614748fb9c6">00157</a> <span class="keywordtype">void</span> <a class="code" href="class_polynomial_mod2.html#1f444d22084163c2b69b5ade313aef14" title="encode in big-endian format">PolynomialMod2::Encode</a>(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;bt, <span class="keywordtype">size_t</span> outputLen)<span class="keyword"> const</span><a name="l00158"></a>00158 <span class="keyword"></span>{<a name="l00159"></a>00159         <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=outputLen; i &gt; 0; i--)<a name="l00160"></a>00160                 bt.<a class="code" href="class_buffered_transformation.html#e70658b0d271f8e114ac6c3cc9774ede" title="input a byte for processing">Put</a>(<a class="code" href="class_polynomial_mod2.html#7a24a5ec904f384e4285d133dbe07757" title="return the n-th byte">GetByte</a>(i-1));<a name="l00161"></a>00161 }<a name="l00162"></a>00162 <a name="l00163"></a><a class="code" href="class_polynomial_mod2.html#700d15948c49f52c01d0ad1bd25c1a3d">00163</a> <span class="keywordtype">void</span> <a class="code" href="class_polynomial_mod2.html#700d15948c49f52c01d0ad1bd25c1a3d" title="encode value as big-endian octet string">PolynomialMod2::DEREncodeAsOctetString</a>(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;bt, <span class="keywordtype">size_t</span> length)<span class="keyword"> const</span><a name="l00164"></a>00164 <span class="keyword"></span>{<a name="l00165"></a>00165         <a class="code" href="class_d_e_r_general_encoder.html" title="DER General Encoder.">DERGeneralEncoder</a> enc(bt, OCTET_STRING);<a name="l00166"></a>00166         <a class="code" href="class_polynomial_mod2.html#1f444d22084163c2b69b5ade313aef14" title="encode in big-endian format">Encode</a>(enc, length);<a name="l00167"></a>00167         enc.<a class="code" href="class_d_e_r_general_encoder.html#cb5f1a94ba97027c603b019bd5228510">MessageEnd</a>();<a name="l00168"></a>00168 }<a name="l00169"></a>00169 <a name="l00170"></a><a class="code" href="class_polynomial_mod2.html#69c7853e0d24f1056be18112ee4f5a8e">00170</a> <span class="keywordtype">void</span> <a class="code" href="class_polynomial_mod2.html#69c7853e0d24f1056be18112ee4f5a8e" title="decode value as big-endian octet string">PolynomialMod2::BERDecodeAsOctetString</a>(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;bt, <span class="keywordtype">size_t</span> length)<a name="l00171"></a>00171 {<a name="l00172"></a>00172         <a class="code" href="class_b_e_r_general_decoder.html" title="BER General Decoder.">BERGeneralDecoder</a> dec(bt, OCTET_STRING);<a name="l00173"></a>00173         <span class="keywordflow">if</span> (!dec.<a class="code" href="class_b_e_r_general_decoder.html#0de13dec710ab2fa27b41cdef5da2bab">IsDefiniteLength</a>() || dec.<a class="code" href="class_b_e_r_general_decoder.html#0a404a30dc03b914c4f2eb0ebfcde74c">RemainingLength</a>() != length)<a name="l00174"></a>00174                 BERDecodeError();<a name="l00175"></a>00175         <a class="code" href="class_polynomial_mod2.html#dc611fe09c3a9b919dce7b8b45cec29d">Decode</a>(dec, length);<a name="l00176"></a>00176         dec.<a class="code" href="class_b_e_r_general_decoder.html#40b14625c98ac7febb8ca218d02358ad">MessageEnd</a>();<a name="l00177"></a>00177 }<a name="l00178"></a>00178 <a name="l00179"></a><a class="code" href="class_polynomial_mod2.html#88292d16af59aaed460503b6339145b3">00179</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_polynomial_mod2.html#88292d16af59aaed460503b6339145b3" title="number of significant words = ceiling(ByteCount()/sizeof(word))">PolynomialMod2::WordCount</a>()<span class="keyword"> const</span><a name="l00180"></a>00180 <span class="keyword"></span>{<a name="l00181"></a>00181         <span class="keywordflow">return</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)CountWords(reg, reg.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>());<a name="l00182"></a>00182 }<a name="l00183"></a>00183 <a name="l00184"></a><a class="code" href="class_polynomial_mod2.html#d22cb6a5fcb0a78646059cf0005d2f6b">00184</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_polynomial_mod2.html#d22cb6a5fcb0a78646059cf0005d2f6b" title="number of significant bytes = ceiling(BitCount()/8)">PolynomialMod2::ByteCount</a>()<span class="keyword"> const</span><a name="l00185"></a>00185 <span class="keyword"></span>{<a name="l00186"></a>00186         <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="l00187"></a>00187         <span class="keywordflow">if</span> (wordCount)<a name="l00188"></a>00188                 <span class="keywordflow">return</span> (wordCount-1)*WORD_SIZE + BytePrecision(reg[wordCount-1]);<a name="l00189"></a>00189         <span class="keywordflow">else</span><a name="l00190"></a>00190                 <span class="keywordflow">return</span> 0;<a name="l00191"></a>00191 }<a name="l00192"></a>00192 <a name="l00193"></a><a class="code" href="class_polynomial_mod2.html#86f4e8502eacf95345d18a6240a217b2">00193</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_polynomial_mod2.html#86f4e8502eacf95345d18a6240a217b2" title="number of significant bits = Degree() + 1">PolynomialMod2::BitCount</a>()<span class="keyword"> const</span>

⌨️ 快捷键说明

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