diff --git a/Cargo.lock b/Cargo.lock index 71ba591..f6d7cd4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -40,9 +40,9 @@ checksum = "89af0b093cc13baa4e51e64e65ec2422f7e73aea0e612e5ad3872986671622f1" [[package]] name = "block-buffer" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96eb4cdd6cf1b31d671e9efe75c5d1ec614776856cefbe109ca373554a6d514f" +checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" dependencies = [ "hybrid-array", "zeroize", @@ -67,9 +67,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cipher" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64727038c8c5e2bb503a15b9f5b9df50a1da9a33e83e1f93067d914f2c6604a5" +checksum = "e34d8227fe1ba289043aeb13792056ff80fd6de1a9f49137a5f499de8e8c78ea" dependencies = [ "block-buffer", "crypto-common", @@ -114,9 +114,9 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "211f05e03c7d03754740fd9e585de910a095d6b99f8bcfffdef8319fa02a8331" +checksum = "77727bb15fa921304124b128af125e7e3b968275d1b108b379190264f4423710" dependencies = [ "hybrid-array", ] @@ -150,9 +150,9 @@ dependencies = [ [[package]] name = "digest" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8bf3682cdec91817be507e4aa104314898b95b84d74f3d43882210101a545b6" +checksum = "285743a676ccb6b3e116bc14cc69319b957867930ae9c4822f8e0f54509d7243" dependencies = [ "blobby", "block-buffer", @@ -210,9 +210,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.180" +version = "0.2.182" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" +checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" [[package]] name = "magma" diff --git a/belt-mac/src/block_api.rs b/belt-mac/src/block_api.rs index 3974f11..f090593 100644 --- a/belt-mac/src/block_api.rs +++ b/belt-mac/src/block_api.rs @@ -6,9 +6,10 @@ use digest::{ array::{Array, ArraySize}, block_api::{ AlgorithmName, Block, BlockSizeUser, Buffer, BufferKindUser, FixedOutputCore, Lazy, - UpdateCore, + SmallBlockSizeUser, UpdateCore, }, - common::{BlockSizes, InnerInit, InnerUser}, + block_buffer::BlockSizes, + common::{InnerInit, InnerUser}, }; #[cfg(feature = "zeroize")] @@ -18,7 +19,7 @@ use digest::zeroize::{Zeroize, ZeroizeOnDrop}; #[derive(Clone)] pub struct BeltMacCore where - C: BlockCipherEncrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone, { cipher: C, state: Block, @@ -27,30 +28,30 @@ where impl BlockSizeUser for BeltMacCore where - C: BlockCipherEncrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone, { type BlockSize = C::BlockSize; } impl OutputSizeUser for BeltMacCore where - C: BlockCipherEncrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone, { type OutputSize = C::BlockSize; } impl InnerUser for BeltMacCore where - C: BlockCipherEncrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone, { type Inner = C; } -impl MacMarker for BeltMacCore where C: BlockCipherEncrypt + Clone {} +impl MacMarker for BeltMacCore where C: BlockCipherEncrypt + SmallBlockSizeUser + Clone {} impl InnerInit for BeltMacCore where - C: BlockCipherEncrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone, { #[inline] fn inner_init(cipher: C) -> Self { @@ -63,14 +64,14 @@ where impl BufferKindUser for BeltMacCore where - C: BlockCipherEncrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone, { type BufferKind = Lazy; } impl UpdateCore for BeltMacCore where - C: BlockCipherEncrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone, { #[inline] fn update_blocks(&mut self, blocks: &[Block]) { @@ -100,7 +101,7 @@ where impl Reset for BeltMacCore where - C: BlockCipherEncrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone, { #[inline(always)] fn reset(&mut self) { @@ -110,7 +111,7 @@ where impl FixedOutputCore for BeltMacCore where - C: BlockCipherEncrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone, { #[inline] fn finalize_fixed_core(&mut self, buffer: &mut Buffer, out: &mut Output) { @@ -147,7 +148,7 @@ where impl AlgorithmName for BeltMacCore where - C: BlockCipherEncrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone, { fn write_alg_name(f: &mut fmt::Formatter<'_>) -> fmt::Result { f.write_str("BeltMac") @@ -156,7 +157,7 @@ where impl fmt::Debug for BeltMacCore where - C: BlockCipherEncrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone, { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.write_str("BeltMacCore { ... }") @@ -166,7 +167,7 @@ where #[cfg(feature = "zeroize")] impl Drop for BeltMacCore where - C: BlockCipherEncrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone, { fn drop(&mut self) { self.state.zeroize(); @@ -174,7 +175,10 @@ where } #[cfg(feature = "zeroize")] -impl ZeroizeOnDrop for BeltMacCore where C: BlockCipherEncrypt + Clone + ZeroizeOnDrop {} +impl ZeroizeOnDrop for BeltMacCore where + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone + ZeroizeOnDrop +{ +} #[inline(always)] fn xor(buf: &mut Array, data: &Array) { diff --git a/belt-mac/src/lib.rs b/belt-mac/src/lib.rs index 53bec4e..0077725 100644 --- a/belt-mac/src/lib.rs +++ b/belt-mac/src/lib.rs @@ -14,10 +14,11 @@ pub use digest::{self, KeyInit, Mac}; pub mod block_api; use cipher::BlockCipherEncrypt; +use digest::block_api::SmallBlockSizeUser; digest::buffer_fixed!( /// BeltMac instance generic over block cipher. - pub struct GenericBeltMac(block_api::BeltMacCore); + pub struct GenericBeltMac(block_api::BeltMacCore); impl: ResetMacTraits AlgorithmName InnerInit; ); diff --git a/cbc-mac/src/block_api.rs b/cbc-mac/src/block_api.rs index ffbdca7..e16a11d 100644 --- a/cbc-mac/src/block_api.rs +++ b/cbc-mac/src/block_api.rs @@ -5,9 +5,10 @@ use digest::{ array::{Array, ArraySize}, block_api::{ AlgorithmName, Block, BlockSizeUser, Buffer, BufferKindUser, Eager, FixedOutputCore, - UpdateCore, + SmallBlockSizeUser, UpdateCore, }, - common::{BlockSizes, InnerInit, InnerUser}, + block_buffer::BlockSizes, + common::{InnerInit, InnerUser}, }; #[cfg(feature = "zeroize")] @@ -17,7 +18,7 @@ use digest::zeroize::{Zeroize, ZeroizeOnDrop}; #[derive(Clone)] pub struct CbcMacCore where - C: BlockCipherEncrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone, { cipher: C, state: Block, @@ -25,30 +26,30 @@ where impl BlockSizeUser for CbcMacCore where - C: BlockCipherEncrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone, { type BlockSize = C::BlockSize; } impl OutputSizeUser for CbcMacCore where - C: BlockCipherEncrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone, { type OutputSize = C::BlockSize; } impl InnerUser for CbcMacCore where - C: BlockCipherEncrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone, { type Inner = C; } -impl MacMarker for CbcMacCore where C: BlockCipherEncrypt + Clone {} +impl MacMarker for CbcMacCore where C: BlockCipherEncrypt + SmallBlockSizeUser + Clone {} impl InnerInit for CbcMacCore where - C: BlockCipherEncrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone, { #[inline] fn inner_init(cipher: C) -> Self { @@ -59,14 +60,14 @@ where impl BufferKindUser for CbcMacCore where - C: BlockCipherEncrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone, { type BufferKind = Eager; } impl UpdateCore for CbcMacCore where - C: BlockCipherEncrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone, { #[inline] fn update_blocks(&mut self, blocks: &[Block]) { @@ -96,7 +97,7 @@ where impl Reset for CbcMacCore where - C: BlockCipherEncrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone, { #[inline(always)] fn reset(&mut self) { @@ -106,7 +107,7 @@ where impl FixedOutputCore for CbcMacCore where - C: BlockCipherEncrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone, { #[inline] fn finalize_fixed_core(&mut self, buffer: &mut Buffer, out: &mut Output) { @@ -122,7 +123,7 @@ where impl AlgorithmName for CbcMacCore where - C: BlockCipherEncrypt + Clone + AlgorithmName, + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone + AlgorithmName, { fn write_alg_name(f: &mut fmt::Formatter<'_>) -> fmt::Result { f.write_str("CbcMac<")?; @@ -133,7 +134,7 @@ where impl fmt::Debug for CbcMacCore where - C: BlockCipherEncrypt + Clone + AlgorithmName, + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone + AlgorithmName, { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.write_str("CbcMacCore<")?; @@ -145,7 +146,7 @@ where #[cfg(feature = "zeroize")] impl Drop for CbcMacCore where - C: BlockCipherEncrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone, { fn drop(&mut self) { self.state.zeroize(); @@ -153,7 +154,10 @@ where } #[cfg(feature = "zeroize")] -impl ZeroizeOnDrop for CbcMacCore where C: BlockCipherEncrypt + Clone + ZeroizeOnDrop {} +impl ZeroizeOnDrop for CbcMacCore where + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone + ZeroizeOnDrop +{ +} #[inline(always)] fn xor(buf: &mut Array, data: &Array) { diff --git a/cbc-mac/src/lib.rs b/cbc-mac/src/lib.rs index 16f7e07..3607d6d 100644 --- a/cbc-mac/src/lib.rs +++ b/cbc-mac/src/lib.rs @@ -8,7 +8,7 @@ #![forbid(unsafe_code)] #![warn(missing_docs)] -pub use digest::{self, KeyInit, Mac}; +pub use digest::{self, KeyInit, Mac, block_api::SmallBlockSizeUser}; mod block_api; @@ -18,13 +18,13 @@ use digest::block_api::CoreProxy; digest::buffer_fixed!( /// Generic CBC-MAC instance. - pub struct CbcMac(block_api::CbcMacCore); + pub struct CbcMac(block_api::CbcMacCore); impl: ResetMacTraits InnerInit; ); impl AlgorithmName for CbcMac where - C: BlockCipherEncrypt + Clone + AlgorithmName, + C: BlockCipherEncrypt + SmallBlockSizeUser + Clone + AlgorithmName, { fn write_alg_name(f: &mut fmt::Formatter<'_>) -> fmt::Result { ::Core::write_alg_name(f) diff --git a/cmac/src/block_api.rs b/cmac/src/block_api.rs index 6719766..bb54652 100644 --- a/cmac/src/block_api.rs +++ b/cmac/src/block_api.rs @@ -6,9 +6,10 @@ use digest::{ array::{Array, ArraySize}, block_api::{ AlgorithmName, Block, BlockSizeUser, Buffer, BufferKindUser, FixedOutputCore, Lazy, - UpdateCore, + SmallBlockSizeUser, UpdateCore, }, - common::{BlockSizes, InnerInit, InnerUser}, + block_buffer::BlockSizes, + common::{InnerInit, InnerUser}, }; #[cfg(feature = "zeroize")] @@ -139,14 +140,14 @@ fn xor(buf: &mut Array, data: &Array) { } /// Helper trait implemented for cipher supported by CMAC -pub trait CmacCipher: BlockSizeUser + BlockCipherEncrypt + Clone { +pub trait CmacCipher: SmallBlockSizeUser + BlockCipherEncrypt + Clone { /// Double block. See the [`Dbl`] trait docs for more information. fn dbl(block: Block) -> Block; } impl CmacCipher for C where - Self: BlockSizeUser + BlockCipherEncrypt + Clone, + Self: SmallBlockSizeUser + BlockCipherEncrypt + Clone, Block: Dbl, { fn dbl(block: Block) -> Block { diff --git a/pmac/src/block_api.rs b/pmac/src/block_api.rs index 0f46fc0..0978492 100644 --- a/pmac/src/block_api.rs +++ b/pmac/src/block_api.rs @@ -6,7 +6,7 @@ use digest::{ array::{Array, ArraySize}, block_api::{ AlgorithmName, Block, BlockSizeUser, Buffer, BufferKindUser, FixedOutputCore, Lazy, - UpdateCore, + SmallBlockSizeUser, UpdateCore, }, common::{InnerInit, InnerUser}, typenum::Unsigned, @@ -217,7 +217,7 @@ fn xor(buf: &mut Array, data: &Array) { /// /// Currently this trait is implemented for all block cipher encryptors /// with block size equal to 64 and 128 bits. -pub trait PmacCipher: BlockSizeUser + BlockCipherEncrypt + Clone { +pub trait PmacCipher: SmallBlockSizeUser + BlockCipherEncrypt + Clone { /// Double block. See the [`Dbl`] trait docs for more information. fn dbl(block: Block) -> Block; /// Reverse double block.. See the [`Dbl`] trait docs for more information. @@ -226,7 +226,7 @@ pub trait PmacCipher: BlockSizeUser + BlockCipherEncrypt + Clone { impl PmacCipher for C where - Self: BlockSizeUser + BlockCipherEncrypt + Clone, + Self: SmallBlockSizeUser + BlockCipherEncrypt + Clone, Block: Dbl, { fn dbl(block: Block) -> Block { diff --git a/retail-mac/src/block_api.rs b/retail-mac/src/block_api.rs index 1320387..9a8f4ca 100644 --- a/retail-mac/src/block_api.rs +++ b/retail-mac/src/block_api.rs @@ -8,9 +8,9 @@ use digest::{ array::{Array, ArraySize}, block_api::{ AlgorithmName, Block, BlockSizeUser, Buffer, BufferKindUser, Eager, FixedOutputCore, - UpdateCore, + SmallBlockSizeUser, UpdateCore, }, - common::BlockSizes, + block_buffer::BlockSizes, typenum::{Prod, U2}, }; @@ -21,7 +21,7 @@ use cipher::zeroize::{Zeroize, ZeroizeOnDrop}; #[derive(Clone)] pub struct RetailMacCore where - C: BlockCipherEncrypt + BlockCipherDecrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + BlockCipherDecrypt + Clone, { cipher: C, cipher_prime: C, @@ -30,41 +30,44 @@ where impl BlockSizeUser for RetailMacCore where - C: BlockCipherEncrypt + BlockCipherDecrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + BlockCipherDecrypt + Clone, { type BlockSize = C::BlockSize; } impl OutputSizeUser for RetailMacCore where - C: BlockCipherEncrypt + BlockCipherDecrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + BlockCipherDecrypt + Clone, { type OutputSize = C::BlockSize; } impl KeySizeUser for RetailMacCore where - C: BlockCipherEncrypt + BlockCipherDecrypt + Clone, - ::BlockSize: Mul, - Prod<::BlockSize, U2>: ArraySize, + C: BlockCipherEncrypt + SmallBlockSizeUser + BlockCipherDecrypt + Clone, + ::_BlockSize: Mul, + Prod<::_BlockSize, U2>: ArraySize, { - type KeySize = Prod<::BlockSize, U2>; + type KeySize = Prod<::_BlockSize, U2>; } -impl MacMarker for RetailMacCore where C: BlockCipherEncrypt + BlockCipherDecrypt + Clone {} +impl MacMarker for RetailMacCore where + C: BlockCipherEncrypt + SmallBlockSizeUser + BlockCipherDecrypt + Clone +{ +} impl BufferKindUser for RetailMacCore where - C: BlockCipherEncrypt + BlockCipherDecrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + BlockCipherDecrypt + Clone, { type BufferKind = Eager; } impl KeyInit for RetailMacCore where - C: BlockCipherEncrypt + BlockCipherDecrypt + Clone + KeyInit, - ::BlockSize: Mul, - Prod<::BlockSize, U2>: ArraySize, + C: BlockCipherEncrypt + SmallBlockSizeUser + BlockCipherDecrypt + Clone + KeyInit, + ::_BlockSize: Mul, + Prod<::_BlockSize, U2>: ArraySize, { #[inline(always)] fn new(key: &Key) -> Self { @@ -85,7 +88,7 @@ where impl UpdateCore for RetailMacCore where - C: BlockCipherEncrypt + BlockCipherDecrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + BlockCipherDecrypt + Clone, { #[inline] fn update_blocks(&mut self, blocks: &[Block]) { @@ -115,7 +118,7 @@ where impl Reset for RetailMacCore where - C: BlockCipherEncrypt + BlockCipherDecrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + BlockCipherDecrypt + Clone, { #[inline(always)] fn reset(&mut self) { @@ -125,7 +128,7 @@ where impl FixedOutputCore for RetailMacCore where - C: BlockCipherEncrypt + BlockCipherDecrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + BlockCipherDecrypt + Clone, { #[inline] fn finalize_fixed_core(&mut self, buffer: &mut Buffer, out: &mut Output) { @@ -147,7 +150,7 @@ where impl AlgorithmName for RetailMacCore where - C: BlockCipherEncrypt + BlockCipherDecrypt + Clone + AlgorithmName, + C: BlockCipherEncrypt + SmallBlockSizeUser + BlockCipherDecrypt + Clone + AlgorithmName, { fn write_alg_name(f: &mut fmt::Formatter<'_>) -> fmt::Result { f.write_str("RetailMac<")?; @@ -158,7 +161,7 @@ where impl fmt::Debug for RetailMacCore where - C: BlockCipherEncrypt + BlockCipherDecrypt + Clone + AlgorithmName, + C: BlockCipherEncrypt + SmallBlockSizeUser + BlockCipherDecrypt + Clone + AlgorithmName, { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.write_str("RetailMacCore<")?; @@ -170,7 +173,7 @@ where #[cfg(feature = "zeroize")] impl Drop for RetailMacCore where - C: BlockCipherEncrypt + BlockCipherDecrypt + Clone, + C: BlockCipherEncrypt + SmallBlockSizeUser + BlockCipherDecrypt + Clone, { fn drop(&mut self) { self.state.zeroize(); @@ -179,7 +182,7 @@ where #[cfg(feature = "zeroize")] impl ZeroizeOnDrop for RetailMacCore where - C: BlockCipherEncrypt + BlockCipherDecrypt + Clone + ZeroizeOnDrop + C: BlockCipherEncrypt + SmallBlockSizeUser + BlockCipherDecrypt + Clone + ZeroizeOnDrop { } diff --git a/retail-mac/src/lib.rs b/retail-mac/src/lib.rs index 5d3eca8..a445bfb 100644 --- a/retail-mac/src/lib.rs +++ b/retail-mac/src/lib.rs @@ -14,35 +14,36 @@ pub use digest::{self, Key, KeyInit, Mac}; pub mod block_api; use block_api::RetailMacCore; -use cipher::{AlgorithmName, BlockCipherDecrypt, BlockCipherEncrypt, BlockSizeUser, KeySizeUser}; +use cipher::{AlgorithmName, BlockCipherDecrypt, BlockCipherEncrypt, KeySizeUser}; use core::{fmt, ops::Mul}; use digest::{ InvalidLength, array::ArraySize, block_api::CoreProxy, + block_api::SmallBlockSizeUser, typenum::{Prod, U2}, }; digest::buffer_fixed!( /// Generic Retail MAC instance. - pub struct RetailMac(RetailMacCore); + pub struct RetailMac(RetailMacCore); impl: ResetMacTraits; ); impl KeySizeUser for RetailMac where - C: BlockCipherEncrypt + BlockCipherDecrypt + Clone, - ::BlockSize: Mul, - Prod<::BlockSize, U2>: ArraySize, + C: BlockCipherEncrypt + BlockCipherDecrypt + SmallBlockSizeUser + Clone, + ::_BlockSize: Mul, + Prod<::_BlockSize, U2>: ArraySize, { - type KeySize = Prod<::BlockSize, U2>; + type KeySize = Prod<::_BlockSize, U2>; } impl KeyInit for RetailMac where - C: BlockCipherEncrypt + BlockCipherDecrypt + Clone + KeyInit, - ::BlockSize: Mul, - Prod<::BlockSize, U2>: ArraySize, + C: BlockCipherEncrypt + BlockCipherDecrypt + SmallBlockSizeUser + Clone + KeyInit, + ::_BlockSize: Mul, + Prod<::_BlockSize, U2>: ArraySize, { #[inline(always)] fn new(key: &Key) -> Self { @@ -63,7 +64,7 @@ where impl AlgorithmName for RetailMac where - C: BlockCipherEncrypt + BlockCipherDecrypt + Clone + AlgorithmName, + C: BlockCipherEncrypt + BlockCipherDecrypt + SmallBlockSizeUser + Clone + AlgorithmName, { fn write_alg_name(f: &mut fmt::Formatter<'_>) -> fmt::Result { ::Core::write_alg_name(f)