summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2015-04-06 03:18:43 -0400
committerJesse Luehrs <doy@tozt.net>2015-04-06 03:18:43 -0400
commit6833c6891dedf36d8bce00a3637d6dabc3daa91e (patch)
treec4a986ebc55e7387dee086e381456ce935f24b84
parent22416261173457f261328d5f347f04a93e493bf5 (diff)
downloadmatasano-6833c6891dedf36d8bce00a3637d6dabc3daa91e.tar.gz
matasano-6833c6891dedf36d8bce00a3637d6dabc3daa91e.zip
allow encrypting in ctr mode from a given starting counter
-rw-r--r--src/aes.rs6
-rw-r--r--src/lib.rs1
2 files changed, 6 insertions, 1 deletions
diff --git a/src/aes.rs b/src/aes.rs
index 19a47cc..ffd40d9 100644
--- a/src/aes.rs
+++ b/src/aes.rs
@@ -52,10 +52,14 @@ pub fn encrypt_aes_128_cbc (bytes: &[u8], key: &[u8], iv: &[u8]) -> Vec<u8> {
}
pub fn aes_128_ctr (bytes: &[u8], key: &[u8], nonce: u64) -> Vec<u8> {
+ aes_128_ctr_with_counter(bytes, key, nonce, 0)
+}
+
+pub fn aes_128_ctr_with_counter (bytes: &[u8], key: &[u8], nonce: u64, counter_start: u64) -> Vec<u8> {
let nonce_array: [u8; 8] = unsafe {
::std::mem::transmute(nonce.to_le())
};
- let mut counter = 0u64;
+ let mut counter = counter_start;
let mut ret = vec![];
for block in bytes.chunks(16) {
let counter_array: [u8; 8] = unsafe {
diff --git a/src/lib.rs b/src/lib.rs
index eeb3278..2d6ebeb 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -16,6 +16,7 @@ pub use aes::decrypt_aes_128_cbc;
pub use aes::encrypt_aes_128_ecb;
pub use aes::encrypt_aes_128_cbc;
pub use aes::aes_128_ctr;
+pub use aes::aes_128_ctr_with_counter;
pub use base64::to_base64;
pub use http::parse_query_string;
pub use http::create_query_string;