📄 modes_8cpp-source.html
字号:
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->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 <= <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->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->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->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 <= <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->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->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 + -