From 8305e6d5b811a35cea169b4c1cc0f20413250472 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC=20=D0=9F=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2=20=5BArtyom=20Pavlov=5D?= Date: Tue, 7 Jul 2020 09:43:06 +0300 Subject: [PATCH 1/6] add blank impl for &BlockCipher --- block-cipher/src/lib.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/block-cipher/src/lib.rs b/block-cipher/src/lib.rs index caa9c2973..d98fc2558 100644 --- a/block-cipher/src/lib.rs +++ b/block-cipher/src/lib.rs @@ -128,3 +128,28 @@ impl BlockCipherMut for Alg { ::decrypt_block(self, block); } } + +impl BlockCipher for &Alg { + type BlockSize = Alg::BlockSize; + type ParBlocks = Alg::ParBlocks; + + #[inline] + fn encrypt_block(&self, block: &mut Block) { + Alg::encrypt_block(*self, block); + } + + #[inline] + fn decrypt_block(&self, block: &mut Block) { + Alg::decrypt_block(*self, block); + } + + #[inline] + fn encrypt_blocks(&self, blocks: &mut ParBlocks) { + Alg::encrypt_blocks(*self, blocks); + } + + #[inline] + fn decrypt_blocks(&self, blocks: &mut ParBlocks) { + Alg::decrypt_blocks(*self, blocks); + } +} From 608f6b8f7f6cf89420893f70721ccaac5b7d1f56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC=20=D0=9F=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2=20=5BArtyom=20Pavlov=5D?= Date: Tue, 7 Jul 2020 09:59:51 +0300 Subject: [PATCH 2/6] add blanket impl for SyncStreamCipher --- stream-cipher/src/lib.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/stream-cipher/src/lib.rs b/stream-cipher/src/lib.rs index 86ed54d05..80184d0d3 100644 --- a/stream-cipher/src/lib.rs +++ b/stream-cipher/src/lib.rs @@ -125,6 +125,18 @@ impl StreamCipher for C { } } +impl SyncStreamCipher for &mut C { + #[inline] + fn apply_keystream(&mut self, data: &mut [u8]) { + C::apply_keystream(self, data); + } + + #[inline] + fn try_apply_keystream(&mut self, data: &mut [u8]) -> Result<(), LoopError> { + C::try_apply_keystream(self, data) + } +} + /// Trait for initializing a stream cipher from a block cipher #[cfg(feature = "block-cipher")] #[cfg_attr(docsrs, doc(cfg(feature = "block-cipher")))] From e3c579dda0c459f249e23bbb6174295d95053002 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC=20=D0=9F=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2=20=5BArtyom=20Pavlov=5D?= Date: Tue, 7 Jul 2020 10:05:56 +0300 Subject: [PATCH 3/6] remove unnecessary dereference and docs --- block-cipher/src/lib.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/block-cipher/src/lib.rs b/block-cipher/src/lib.rs index d98fc2558..18aefa627 100644 --- a/block-cipher/src/lib.rs +++ b/block-cipher/src/lib.rs @@ -118,12 +118,12 @@ pub trait BlockCipherMut { impl BlockCipherMut for Alg { type BlockSize = Alg::BlockSize; - /// Encrypt block in-place + #[inline] fn encrypt_block(&mut self, block: &mut GenericArray) { ::encrypt_block(self, block); } - /// Decrypt block in-place + #[inline] fn decrypt_block(&mut self, block: &mut GenericArray) { ::decrypt_block(self, block); } @@ -135,21 +135,21 @@ impl BlockCipher for &Alg { #[inline] fn encrypt_block(&self, block: &mut Block) { - Alg::encrypt_block(*self, block); + Alg::encrypt_block(self, block); } #[inline] fn decrypt_block(&self, block: &mut Block) { - Alg::decrypt_block(*self, block); + Alg::decrypt_block(self, block); } #[inline] fn encrypt_blocks(&self, blocks: &mut ParBlocks) { - Alg::encrypt_blocks(*self, blocks); + Alg::encrypt_blocks(self, blocks); } #[inline] fn decrypt_blocks(&self, blocks: &mut ParBlocks) { - Alg::decrypt_blocks(*self, blocks); + Alg::decrypt_blocks(self, blocks); } } From 51c11a9aea89f22275bdb783f7d6b00bd2d73b60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC=20=D0=9F=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2?= Date: Fri, 10 Jul 2020 15:36:59 +0300 Subject: [PATCH 4/6] bump minor versions --- Cargo.lock | 4 ++-- block-cipher/Cargo.toml | 2 +- cryptography/Cargo.toml | 4 ++-- stream-cipher/Cargo.toml | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 155efe447..bccc22d96 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -43,7 +43,7 @@ dependencies = [ [[package]] name = "block-cipher" -version = "0.7.1" +version = "0.8.0" dependencies = [ "blobby 0.2.0", "generic-array 0.14.2", @@ -252,7 +252,7 @@ checksum = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" [[package]] name = "stream-cipher" -version = "0.5.0" +version = "0.6.0" dependencies = [ "blobby 0.2.0", "block-cipher", diff --git a/block-cipher/Cargo.toml b/block-cipher/Cargo.toml index 30027d71d..d32023371 100644 --- a/block-cipher/Cargo.toml +++ b/block-cipher/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "block-cipher" description = "Traits for description of block ciphers" -version = "0.7.1" +version = "0.8.0" authors = ["RustCrypto Developers"] license = "MIT OR Apache-2.0" readme = "README.md" diff --git a/cryptography/Cargo.toml b/cryptography/Cargo.toml index 580f0ca9a..403f66880 100644 --- a/cryptography/Cargo.toml +++ b/cryptography/Cargo.toml @@ -13,11 +13,11 @@ edition = "2018" [dependencies] aead = { version = "0.3", optional = true, path = "../aead" } -block-cipher = { version = "0.7", optional = true, path = "../block-cipher" } +block-cipher = { version = "0.8", optional = true, path = "../block-cipher" } digest = { version = "0.9", optional = true, path = "../digest" } mac = { version = "0.8", package = "crypto-mac", optional = true, path = "../crypto-mac" } signature = { version = "1.1.0", optional = true, default-features = false, path = "../signature" } -stream-cipher = { version = "0.5", optional = true, path = "../stream-cipher" } +stream-cipher = { version = "0.6", optional = true, path = "../stream-cipher" } universal-hash = { version = "0.4", optional = true, path = "../universal-hash" } [package.metadata.docs.rs] diff --git a/stream-cipher/Cargo.toml b/stream-cipher/Cargo.toml index d336127e1..1731fb9d2 100644 --- a/stream-cipher/Cargo.toml +++ b/stream-cipher/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "stream-cipher" description = "Stream cipher traits" -version = "0.5.0" +version = "0.6.0" authors = ["RustCrypto Developers"] license = "MIT OR Apache-2.0" readme = "README.md" @@ -16,7 +16,7 @@ generic-array = "0.14" blobby = { version = "0.2", optional = true } [dependencies.block-cipher] -version = "0.7" +version = "0.8" optional = true path = "../block-cipher" From a6e99d6bfb76352ddb7f462c67453c363c531f25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC=20=D0=9F=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2?= Date: Fri, 10 Jul 2020 15:50:18 +0300 Subject: [PATCH 5/6] update to blobby v0.3 --- Cargo.lock | 4 ++-- block-cipher/Cargo.toml | 2 +- block-cipher/src/dev.rs | 12 +++++------- stream-cipher/Cargo.toml | 2 +- stream-cipher/src/dev.rs | 41 ++++++++++++++++------------------------ 5 files changed, 25 insertions(+), 36 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bccc22d96..2e23d426a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -45,7 +45,7 @@ dependencies = [ name = "block-cipher" version = "0.8.0" dependencies = [ - "blobby 0.2.0", + "blobby 0.3.0", "generic-array 0.14.2", ] @@ -254,7 +254,7 @@ checksum = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" name = "stream-cipher" version = "0.6.0" dependencies = [ - "blobby 0.2.0", + "blobby 0.3.0", "block-cipher", "generic-array 0.14.2", ] diff --git a/block-cipher/Cargo.toml b/block-cipher/Cargo.toml index d32023371..cd3cc79a2 100644 --- a/block-cipher/Cargo.toml +++ b/block-cipher/Cargo.toml @@ -13,7 +13,7 @@ categories = ["cryptography", "no-std"] [dependencies] generic-array = "0.14" -blobby = { version = "0.2", optional = true } +blobby = { version = "0.3", optional = true } [features] std = [] diff --git a/block-cipher/src/dev.rs b/block-cipher/src/dev.rs index eeaee9ac7..11c570c1a 100644 --- a/block-cipher/src/dev.rs +++ b/block-cipher/src/dev.rs @@ -73,30 +73,28 @@ macro_rules! new_test { let pb = <$cipher as BlockCipher>::ParBlocks::to_usize(); let data = include_bytes!(concat!("data/", $test_name, ".blb")); for (i, row) in Blob3Iterator::new(data).unwrap().enumerate() { - let key = row[0]; - let plaintext = row[1]; - let ciphertext = row[2]; - if !run_test(key, plaintext, ciphertext) { + let [key, pt, ct] = row.unwrap(); + if !run_test(key, pt, ct) { panic!( "\n\ Failed test №{}\n\ key:\t{:?}\n\ plaintext:\t{:?}\n\ ciphertext:\t{:?}\n", - i, key, plaintext, ciphertext, + i, key, pt, ct, ); } // test parallel blocks encryption/decryption if pb != 1 { - if !run_par_test(key, plaintext) { + if !run_par_test(key, pt) { panic!( "\n\ Failed parallel test №{}\n\ key:\t{:?}\n\ plaintext:\t{:?}\n\ ciphertext:\t{:?}\n", - i, key, plaintext, ciphertext, + i, key, pt, ct, ); } } diff --git a/stream-cipher/Cargo.toml b/stream-cipher/Cargo.toml index 1731fb9d2..fd5e77799 100644 --- a/stream-cipher/Cargo.toml +++ b/stream-cipher/Cargo.toml @@ -13,7 +13,7 @@ categories = ["cryptography", "no-std"] [dependencies] generic-array = "0.14" -blobby = { version = "0.2", optional = true } +blobby = { version = "0.3", optional = true } [dependencies.block-cipher] version = "0.8" diff --git a/stream-cipher/src/dev.rs b/stream-cipher/src/dev.rs index cd5e080e3..b03861e2d 100644 --- a/stream-cipher/src/dev.rs +++ b/stream-cipher/src/dev.rs @@ -15,25 +15,22 @@ macro_rules! new_sync_test { let data = include_bytes!(concat!("data/", $test_name, ".blb")); for (i, row) in Blob4Iterator::new(data).unwrap().enumerate() { - let key = row[0]; - let iv = row[1]; - let plaintext = row[2]; - let ciphertext = row[3]; + let [key, iv, pt, ct] = row.unwrap(); for chunk_n in 1..256 { let mut mode = <$cipher>::new_var(key, iv).unwrap(); - let mut pt = plaintext.to_vec(); + let mut pt = pt.to_vec(); for chunk in pt.chunks_mut(chunk_n) { mode.apply_keystream(chunk); } - if pt != &ciphertext[..] { + if pt != &ct[..] { panic!( "Failed main test №{}, chunk size: {}\n\ - key:\t{:?}\n\ - iv:\t{:?}\n\ - plaintext:\t{:?}\n\ - ciphertext:\t{:?}\n", - i, chunk_n, key, iv, plaintext, ciphertext, + key:\t{:?}\n\ + iv:\t{:?}\n\ + plaintext:\t{:?}\n\ + ciphertext:\t{:?}\n", + i, chunk_n, key, iv, pt, ct, ); } } @@ -57,26 +54,23 @@ macro_rules! new_seek_test { let data = include_bytes!(concat!("data/", $test_name, ".blb")); for (i, row) in Blob4Iterator::new(data).unwrap().enumerate() { - let key = row[0]; - let iv = row[1]; - let plaintext = row[2]; - let ciphertext = row[3]; + let [key, iv ,pt, ct] = row.unwrap(); let mut mode = <$cipher>::new_var(key, iv).unwrap(); - let pl = plaintext.len(); + let pl = pt.len(); let n = if pl > MAX_SEEK { MAX_SEEK } else { pl }; for seek_n in 0..n { - let mut pt = plaintext[seek_n..].to_vec(); + let mut pt = pt[seek_n..].to_vec(); mode.seek(seek_n as u64); mode.apply_keystream(&mut pt); - if pt != &ciphertext[seek_n..] { + if pt != &ct[seek_n..] { panic!( "Failed seek test №{}, seek pos: {}\n\ key:\t{:?}\n\ iv:\t{:?}\n\ plaintext:\t{:?}\n\ ciphertext:\t{:?}\n", - i, seek_n, key, iv, plaintext, ciphertext, + i, seek_n, key, iv, pt, ct, ); } } @@ -130,11 +124,8 @@ macro_rules! new_async_test { let data = include_bytes!(concat!("data/", $test_name, ".blb")); for (i, row) in Blob4Iterator::new(data).unwrap().enumerate() { - let key = row[0]; - let iv = row[1]; - let plaintext = row[2]; - let ciphertext = row[3]; - if let Some(desc) = run_test(key, iv, plaintext, ciphertext) { + let [key, iv, pt, ct] = row.unwrap(); + if let Some(desc) = run_test(key, iv, pt, ct) { panic!( "\n\ Failed test №{}: {}\n\ @@ -142,7 +133,7 @@ macro_rules! new_async_test { iv:\t{:?}\n\ plaintext:\t{:?}\n\ ciphertext:\t{:?}\n", - i, desc, key, iv, plaintext, ciphertext, + i, desc, key, iv, pt, ct, ); } } From ffcf1ab14b503e0e9e6f98b6793289562e56f011 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC=20=D0=9F=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2?= Date: Fri, 10 Jul 2020 15:53:57 +0300 Subject: [PATCH 6/6] fmt --- stream-cipher/src/dev.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stream-cipher/src/dev.rs b/stream-cipher/src/dev.rs index b03861e2d..741cf3005 100644 --- a/stream-cipher/src/dev.rs +++ b/stream-cipher/src/dev.rs @@ -54,7 +54,7 @@ macro_rules! new_seek_test { let data = include_bytes!(concat!("data/", $test_name, ".blb")); for (i, row) in Blob4Iterator::new(data).unwrap().enumerate() { - let [key, iv ,pt, ct] = row.unwrap(); + let [key, iv, pt, ct] = row.unwrap(); let mut mode = <$cipher>::new_var(key, iv).unwrap(); let pl = pt.len();