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

📄 fipsalgt_8cpp-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00198"></a>00198                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m_algorithm == <span class="stringliteral">"TDES"</span> &amp;&amp; t == KEY_T &amp;&amp; m_typeToName[KEY_T].empty())<a name="l00199"></a>00199                 {<a name="l00200"></a>00200                         output += <span class="stringliteral">"KEY1 = "</span>;<a name="l00201"></a>00201                         output += data.substr(0, 16);<a name="l00202"></a>00202                         output += <span class="stringliteral">"\nKEY2 = "</span>;<a name="l00203"></a>00203                         output += data.size() &gt; 16 ? data.substr(16, 16) : data.substr(0, 16);<a name="l00204"></a>00204                         output += <span class="stringliteral">"\nKEY3 = "</span>;<a name="l00205"></a>00205                         output += data.size() &gt; 32 ? data.substr(32, 16) : data.substr(0, 16);<a name="l00206"></a>00206                         output += <span class="stringliteral">"\n"</span>;<a name="l00207"></a>00207                 }<a name="l00208"></a>00208                 <span class="keywordflow">else</span><a name="l00209"></a>00209                 {<a name="l00210"></a>00210                         output += m_typeToName[t];<a name="l00211"></a>00211                         output += <span class="stringliteral">" = "</span>;<a name="l00212"></a>00212                         output += data;<a name="l00213"></a>00213                         output += <span class="stringliteral">"\n"</span>;<a name="l00214"></a>00214                 }<a name="l00215"></a>00215         }<a name="l00216"></a>00216 <a name="l00217"></a>00217         <span class="keywordtype">void</span> OutputData(std::string &amp;output, DataType t, <span class="keywordtype">int</span> i)<a name="l00218"></a>00218         {<a name="l00219"></a>00219                 OutputData(output, t, IntToString(i));<a name="l00220"></a>00220         }<a name="l00221"></a>00221 <a name="l00222"></a>00222         <span class="keywordtype">void</span> OutputData(std::string &amp;output, DataType t, <span class="keyword">const</span> <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> &amp;data)<a name="l00223"></a>00223         {<a name="l00224"></a>00224                 std::string hexData;<a name="l00225"></a>00225                 <a class="code" href="class_string_source.html" title="string-based implementation of Source interface">StringSource</a>(data.<a class="code" href="class_sec_block.html#11a05906688172579cd3520816799446">begin</a>(), data.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>(), <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_hex_encoder.html" title="Converts given data to base 16.">HexEncoder</a>(<span class="keyword">new</span> <a class="code" href="class_string_sink_template.html" title="Append input to a string object.">StringSink</a>(hexData), <span class="keyword">false</span>));<a name="l00226"></a>00226                 OutputData(output, t, hexData);<a name="l00227"></a>00227         }<a name="l00228"></a>00228 <a name="l00229"></a>00229         <span class="keywordtype">void</span> OutputGivenData(std::string &amp;output, DataType t, <span class="keywordtype">bool</span> optional = <span class="keyword">false</span>)<a name="l00230"></a>00230         {<a name="l00231"></a>00231                 <span class="keywordflow">if</span> (m_data.find(m_typeToName[t]) == m_data.end())<a name="l00232"></a>00232                 {<a name="l00233"></a>00233                         <span class="keywordflow">if</span> (optional)<a name="l00234"></a>00234                                 <span class="keywordflow">return</span>;<a name="l00235"></a>00235                         <span class="keywordflow">throw</span> <a class="code" href="class_exception.html" title="base class for all exceptions thrown by Crypto++">Exception</a>(<a class="code" href="class_exception.html#8e53909d979479380e0274807c074c0a27d9ee7704100a88e4ae4adcc4072015" title="some error not belong to any of the above categories">Exception::OTHER_ERROR</a>, <span class="stringliteral">"TestDataParser: key not found: "</span> + m_typeToName[t]);<a name="l00236"></a>00236                 }<a name="l00237"></a>00237 <a name="l00238"></a>00238                 OutputData(output, t, m_data[m_typeToName[t]]);<a name="l00239"></a>00239         }<a name="l00240"></a>00240 <a name="l00241"></a>00241         <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;<a name="l00242"></a>00242                 <a class="code" href="class_block_cipher.html" title="interface for one direction (encryption or decryption) of a block cipher">BlockCipher</a> * NewBT(T *)<a name="l00243"></a>00243         {<a name="l00244"></a>00244                 <span class="keywordflow">if</span> (!m_encrypt &amp;&amp; (m_mode == <span class="stringliteral">"ECB"</span> || m_mode == <span class="stringliteral">"CBC"</span>))<a name="l00245"></a>00245                         <span class="keywordflow">return</span> <span class="keyword">new</span> <span class="keyword">typename</span> T::Decryption;<a name="l00246"></a>00246                 <span class="keywordflow">else</span><a name="l00247"></a>00247                         <span class="keywordflow">return</span> <span class="keyword">new</span> <span class="keyword">typename</span> T::Encryption;<a name="l00248"></a>00248         }<a name="l00249"></a>00249 <a name="l00250"></a>00250         <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;<a name="l00251"></a>00251                 <a class="code" href="class_symmetric_cipher.html" title="interface for one direction (encryption or decryption) of a stream cipher or cipher...">SymmetricCipher</a> * NewMode(T *, <a class="code" href="class_block_cipher.html" title="interface for one direction (encryption or decryption) of a block cipher">BlockCipher</a> &amp;bt, <span class="keyword">const</span> byte *iv)<a name="l00252"></a>00252         {<a name="l00253"></a>00253                 <span class="keywordflow">if</span> (!m_encrypt)<a name="l00254"></a>00254                         <span class="keywordflow">return</span> <span class="keyword">new</span> <span class="keyword">typename</span> T::Decryption(bt, iv, m_feedbackSize/8);<a name="l00255"></a>00255                 <span class="keywordflow">else</span><a name="l00256"></a>00256                         <span class="keywordflow">return</span> <span class="keyword">new</span> <span class="keyword">typename</span> T::Encryption(bt, iv, m_feedbackSize/8);<a name="l00257"></a>00257         }<a name="l00258"></a>00258 <a name="l00259"></a>00259         <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> Xor(<a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> &amp;z, <span class="keyword">const</span> <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> &amp;x, <span class="keyword">const</span> <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> &amp;y)<a name="l00260"></a>00260         {<a name="l00261"></a>00261                 assert(x.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>() == y.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>());<a name="l00262"></a>00262                 z.<a class="code" href="class_sec_block.html#f9e98d3f4a7af1156fcf3e6e68f4ae5a" title="change size and preserve contents">resize</a>(x.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>());<a name="l00263"></a>00263                 xorbuf(z, x, y, x.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>());<a name="l00264"></a>00264         }<a name="l00265"></a>00265 <a name="l00266"></a>00266         <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> UpdateKey(<a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> key, <span class="keyword">const</span> <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> *text)<a name="l00267"></a>00267         {<a name="l00268"></a>00268                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> innerCount = (m_algorithm == <span class="stringliteral">"AES"</span>) ? 1000 : 10000;<a name="l00269"></a>00269                 <span class="keywordtype">int</span> keySize = key.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>(), blockSize = text[0].<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>();<a name="l00270"></a>00270                 <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> x(keySize);<a name="l00271"></a>00271                 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k=0; k&lt;keySize;)<a name="l00272"></a>00272                 {<a name="l00273"></a>00273                         <span class="keywordtype">int</span> pos = innerCount * blockSize - keySize + k;<a name="l00274"></a>00274                         memcpy(x + k, text[pos / blockSize] + pos % blockSize, blockSize - pos % blockSize);<a name="l00275"></a>00275                         k += blockSize - pos % blockSize;<a name="l00276"></a>00276                 }<a name="l00277"></a>00277 <a name="l00278"></a>00278                 <span class="keywordflow">if</span> (m_algorithm == <span class="stringliteral">"TDES"</span> || m_algorithm == <span class="stringliteral">"DES"</span>)<a name="l00279"></a>00279                 {<a name="l00280"></a>00280                         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i&lt;keySize; i+=8)<a name="l00281"></a>00281                         {<a name="l00282"></a>00282                                 xorbuf(key+i, x+keySize-8-i, 8);<a name="l00283"></a>00283                                 <a class="code" href="class_d_e_s.html#b4b48b141706addb33c955c694dd9ead" title="correct DES key parity bits">DES::CorrectKeyParityBits</a>(key+i);<a name="l00284"></a>00284                         }<a name="l00285"></a>00285                 }<a name="l00286"></a>00286                 <span class="keywordflow">else</span><a name="l00287"></a>00287                         xorbuf(key, x, keySize);<a name="l00288"></a>00288 <a name="l00289"></a>00289                 <span class="keywordflow">return</span> key;<a name="l00290"></a>00290         }<a name="l00291"></a>00291 <a name="l00292"></a>00292         <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> AssignLeftMostBits(<a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> &amp;z, <span class="keyword">const</span> <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> &amp;x, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> K)<a name="l00293"></a>00293         {<a name="l00294"></a>00294                 z.<a class="code" href="class_sec_block.html#2cf5dc5e31c63eb927f935af6104f36a" title="set contents and size">Assign</a>(x, K/8);<a name="l00295"></a>00295         }<a name="l00296"></a>00296 <a name="l00297"></a>00297         <span class="keyword">template</span> &lt;<span class="keyword">class</span> EC&gt;<a name="l00298"></a>00298         <span class="keywordtype">void</span> EC_KeyPair(<span class="keywordtype">string</span> &amp;output, <span class="keywordtype">int</span> n, <span class="keyword">const</span> <a class="code" href="class_o_i_d.html" title="Object Identifier.">OID</a> &amp;oid)<a name="l00299"></a>00299         {<a name="l00300"></a>00300                 <a class="code" href="class_d_l___group_parameters___e_c.html" title="Elliptic Curve Parameters.">DL_GroupParameters_EC&lt;EC&gt;</a> params(oid);<a name="l00301"></a>00301                 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i&lt;n; i++)<a name="l00302"></a>00302                 {<a name="l00303"></a>00303                         <a class="code" href="class_d_l___private_key___e_c.html" title="EC private key.">DL_PrivateKey_EC&lt;EC&gt;</a> priv;<a name="l00304"></a>00304                         <a class="code" href="class_d_l___public_key___e_c.html" title="EC public key.">DL_PublicKey_EC&lt;EC&gt;</a> pub;<a name="l00305"></a>00305                         priv.Initialize(m_rng, params);<a name="l00306"></a>00306                         priv.MakePublicKey(pub);

⌨️ 快捷键说明

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