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

📄 modes_8cpp-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 2 页
字号:
00115                 <span class="keywordflow">else</span>00116                 {00117                         memcpy(outString, inString, length);00118                         ProcessBlocks(outString, outString, length / s);00119                 }00120         }00121         <span class="keywordflow">else</span>00122         {00123                 <span class="keywordflow">while</span> (length)00124                 {00125                         <span class="keywordflow">if</span> (!requireAlignedInput || IsAlignedOn(inString, alignment))00126                                 ProcessBlocks(m_buffer, inString, 1);00127                         <span class="keywordflow">else</span>00128                         {00129                                 memcpy(m_buffer, inString, s);00130                                 ProcessBlocks(m_buffer, m_buffer, 1);00131                         }00132                         memcpy(outString, m_buffer, s);00133                         length -= s;00134                 }00135         }00136 }00137 00138 <span class="keywordtype">void</span> CBC_Encryption::ProcessBlocks(byte *outString, <span class="keyword">const</span> byte *inString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numberOfBlocks)00139 {00140         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> blockSize = <a class="code" href="namespace_name.html#a9">BlockSize</a>();00141         <span class="keywordflow">while</span> (numberOfBlocks--)00142         {00143                 xorbuf(m_register, inString, blockSize);00144                 m_cipher-&gt;ProcessBlock(m_register);00145                 memcpy(outString, m_register, blockSize);00146                 inString += blockSize;00147                 outString += blockSize;00148         }00149 }00150 00151 <span class="keywordtype">void</span> CBC_CTS_Encryption::ProcessLastBlock(byte *outString, <span class="keyword">const</span> byte *inString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length)00152 {00153         <span class="keywordflow">if</span> (length &lt;= <a class="code" href="namespace_name.html#a9">BlockSize</a>())00154         {00155                 <span class="keywordflow">if</span> (!m_stolenIV)00156                         <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">"CBC_Encryption: message is too short for ciphertext stealing"</span>);00157 00158                 <span class="comment">// steal from IV</span>00159                 memcpy(outString, m_register, length);00160                 outString = m_stolenIV;00161         }00162         <span class="keywordflow">else</span>00163         {00164                 <span class="comment">// steal from next to last block</span>00165                 xorbuf(m_register, inString, <a class="code" href="namespace_name.html#a9">BlockSize</a>());00166                 m_cipher-&gt;ProcessBlock(m_register);00167                 inString += <a class="code" href="namespace_name.html#a9">BlockSize</a>();00168                 length -= <a class="code" href="namespace_name.html#a9">BlockSize</a>();00169                 memcpy(outString+<a class="code" href="namespace_name.html#a9">BlockSize</a>(), m_register, length);00170         }00171 00172         <span class="comment">// output last full ciphertext block</span>00173         xorbuf(m_register, inString, length);00174         m_cipher-&gt;ProcessBlock(m_register);00175         memcpy(outString, m_register, <a class="code" href="namespace_name.html#a9">BlockSize</a>());00176 }00177 00178 <span class="keywordtype">void</span> CBC_Decryption::ProcessBlocks(byte *outString, <span class="keyword">const</span> byte *inString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numberOfBlocks)00179 {00180         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> blockSize = <a class="code" href="namespace_name.html#a9">BlockSize</a>();00181         <span class="keywordflow">while</span> (numberOfBlocks--)00182         {00183                 memcpy(m_temp, inString, blockSize);00184                 m_cipher-&gt;ProcessBlock(m_temp, outString);00185                 xorbuf(outString, m_register, blockSize);00186                 m_register.swap(m_temp);00187                 inString += blockSize;00188                 outString += blockSize;00189         }00190 }00191 00192 <span class="keywordtype">void</span> CBC_CTS_Decryption::ProcessLastBlock(byte *outString, <span class="keyword">const</span> byte *inString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length)00193 {00194         <span class="keyword">const</span> byte *pn, *pn1;00195         <span class="keywordtype">bool</span> stealIV = length &lt;= <a class="code" href="namespace_name.html#a9">BlockSize</a>();00196 00197         <span class="keywordflow">if</span> (stealIV)00198         {00199                 pn = inString;00200                 pn1 = m_register;00201         }00202         <span class="keywordflow">else</span>00203         {00204                 pn = inString + <a class="code" href="namespace_name.html#a9">BlockSize</a>();00205                 pn1 = inString;00206                 length -= <a class="code" href="namespace_name.html#a9">BlockSize</a>();00207         }00208 00209         <span class="comment">// decrypt last partial plaintext block</span>00210         memcpy(m_temp, pn1, <a class="code" href="namespace_name.html#a9">BlockSize</a>());00211         m_cipher-&gt;ProcessBlock(m_temp);00212         xorbuf(m_temp, pn, length);00213 00214         <span class="keywordflow">if</span> (stealIV)00215                 memcpy(outString, m_temp, length);00216         <span class="keywordflow">else</span>00217         {00218                 memcpy(outString+<a class="code" href="namespace_name.html#a9">BlockSize</a>(), m_temp, length);00219                 <span class="comment">// decrypt next to last plaintext block</span>00220                 memcpy(m_temp, pn, length);00221                 m_cipher-&gt;ProcessBlock(m_temp);00222                 xorbuf(outString, m_temp, m_register, <a class="code" href="namespace_name.html#a9">BlockSize</a>());00223         }00224 }00225 00226 NAMESPACE_END00227 00228 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:20 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 + -