OLD | NEW |
1 /* This Source Code Form is subject to the terms of the Mozilla Public | 1 /* This Source Code Form is subject to the terms of the Mozilla Public |
2 * License, v. 2.0. If a copy of the MPL was not distributed with this | 2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
4 | 4 |
5 #ifdef FREEBL_NO_DEPEND | 5 #ifdef FREEBL_NO_DEPEND |
6 #include "stubs.h" | 6 #include "stubs.h" |
7 #endif | 7 #endif |
8 #include "blapit.h" | 8 #include "blapit.h" |
9 #include "blapii.h" | 9 #include "blapii.h" |
10 #include "cts.h" | 10 #include "cts.h" |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
232 if (rv != SECSuccess) { | 232 if (rv != SECSuccess) { |
233 return SECFailure; | 233 return SECFailure; |
234 } | 234 } |
235 *outlen = fullblocks; /* AES low level doesn't set outlen */ | 235 *outlen = fullblocks; /* AES low level doesn't set outlen */ |
236 inbuf += fullblocks; | 236 inbuf += fullblocks; |
237 inlen -= fullblocks; | 237 inlen -= fullblocks; |
238 if (inlen == 0) { | 238 if (inlen == 0) { |
239 return SECSuccess; | 239 return SECSuccess; |
240 } | 240 } |
241 outbuf += fullblocks; | 241 outbuf += fullblocks; |
242 maxout -= fullblocks; | |
243 | 242 |
244 /* recover the stolen text */ | 243 /* recover the stolen text */ |
245 PORT_Memset(lastBlock, 0, blocksize); | 244 PORT_Memset(lastBlock, 0, blocksize); |
246 PORT_Memcpy(lastBlock, inbuf, inlen); | 245 PORT_Memcpy(lastBlock, inbuf, inlen); |
247 PORT_Memcpy(Cn_1, inbuf, inlen); | 246 PORT_Memcpy(Cn_1, inbuf, inlen); |
248 Pn = outbuf-blocksize; | 247 Pn = outbuf-blocksize; |
249 /* inbuf points to Cn-1* in the input buffer */ | 248 /* inbuf points to Cn-1* in the input buffer */ |
250 /* NOTE: below there are 2 sections marked "make up for the out of order | 249 /* NOTE: below there are 2 sections marked "make up for the out of order |
251 * cbc decryption". You may ask, what is going on here. | 250 * cbc decryption". You may ask, what is going on here. |
252 * Short answer: CBC automatically xors the plain text with the previous | 251 * Short answer: CBC automatically xors the plain text with the previous |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
293 * only the side effect of setting the internal IV */ | 292 * only the side effect of setting the internal IV */ |
294 (void) (*cts->cipher)(cts->context, lastBlock, &tmpLen, blocksize, Cn, | 293 (void) (*cts->cipher)(cts->context, lastBlock, &tmpLen, blocksize, Cn, |
295 blocksize, blocksize); | 294 blocksize, blocksize); |
296 /* clear last block. At this point last block contains Pn xor Cn_1 xor | 295 /* clear last block. At this point last block contains Pn xor Cn_1 xor |
297 * Cn_2, both of with an attacker would know, so we need to clear this | 296 * Cn_2, both of with an attacker would know, so we need to clear this |
298 * buffer out */ | 297 * buffer out */ |
299 PORT_Memset(lastBlock, 0, blocksize); | 298 PORT_Memset(lastBlock, 0, blocksize); |
300 /* Cn, Cn_1, and Cn_2 have encrypted data, so no need to clear them */ | 299 /* Cn, Cn_1, and Cn_2 have encrypted data, so no need to clear them */ |
301 return SECSuccess; | 300 return SECSuccess; |
302 } | 301 } |
OLD | NEW |