(&mut self, aes: &mut Crypter)
| 203 | } |
| 204 | |
| 205 | fn generate_one_batch(&mut self, aes: &mut Crypter) -> Result<()> { |
| 206 | let mut i_bytes = vec![0u8; self.next_buffer_size]; |
| 207 | for i in (0..i_bytes.len()).step_by(16) { |
| 208 | i_bytes[i..i + 16].copy_from_slice(&self.input.to_le_bytes()); |
| 209 | self.input = self.input.wrapping_add(1); |
| 210 | } |
| 211 | let buffer_len = self.next_buffer_size + Cipher::aes_128_cbc().block_size(); |
| 212 | if buffer_len != self.buffer.len() { |
| 213 | self.buffer.resize(buffer_len, 0); |
| 214 | } |
| 215 | let count = aes |
| 216 | .update(&i_bytes, &mut self.buffer) |
| 217 | .map_err(|_| runtime_error!("Crypter didn't manage to update"))?; |
| 218 | // finalization of Crypter is unnecessary since padding is turned off |
| 219 | // check here https://www.openssl.org/docs/manmaster/man3/EVP_CipherUpdate.html |
| 220 | if count != self.next_buffer_size { |
| 221 | return Err(runtime_error!( |
| 222 | "AES encryption returned a wrong number of bytes" |
| 223 | )); |
| 224 | } |
| 225 | self.current_buffer_size = self.next_buffer_size; |
| 226 | if self.next_buffer_size < BUFFER_SIZE { |
| 227 | self.next_buffer_size = usize::min(BUFFER_SIZE, self.next_buffer_size * 2); |
| 228 | } |
| 229 | self.next_byte = 0; |
| 230 | Ok(()) |
| 231 | } |
| 232 | |
| 233 | fn generate_random_bytes(&mut self, aes: &mut Crypter, n: u64) -> Result<Vec<u8>> { |
| 234 | let mut bytes = vec![0u8; n as usize]; |
no outgoing calls
no test coverage detected