From 6147b45a368036ce14e42ec5a4f43c2e19f3bb97 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: Wed, 28 May 2025 14:41:24 +0300 Subject: [PATCH] hmac: move `EagerHash` to the crate root --- hmac/src/block_api.rs | 32 +++----------------------------- hmac/src/lib.rs | 2 +- hmac/src/utils.rs | 32 ++++++++++++++++++++++++++++++-- 3 files changed, 34 insertions(+), 32 deletions(-) diff --git a/hmac/src/block_api.rs b/hmac/src/block_api.rs index bb69945..a9177ce 100644 --- a/hmac/src/block_api.rs +++ b/hmac/src/block_api.rs @@ -1,41 +1,15 @@ -use crate::utils::{IPAD, OPAD, get_der_key}; +use crate::utils::{EagerHash, IPAD, OPAD, get_der_key}; use core::{fmt, slice}; use digest::{ - Digest, HashMarker, InvalidLength, KeyInit, MacMarker, Output, Reset, + InvalidLength, KeyInit, MacMarker, Output, Reset, block_api::{ - AlgorithmName, Block, BlockSizeUser, Buffer, BufferKindUser, CoreProxy, FixedOutputCore, + AlgorithmName, Block, BlockSizeUser, Buffer, BufferKindUser, FixedOutputCore, OutputSizeUser, UpdateCore, }, block_buffer::Eager, crypto_common::{Key, KeySizeUser}, }; -/// Trait implemented by eager hashes which expose their block-level core. -pub trait EagerHash: BlockSizeUser + Digest { - /// Block-level core type of the hash. - type Core: HashMarker - + UpdateCore - + FixedOutputCore - + BlockSizeUser::BlockSize> - + BufferKindUser - + Default - + Clone; -} - -impl EagerHash for T -where - T: CoreProxy + BlockSizeUser + Digest, - ::Core: HashMarker - + UpdateCore - + FixedOutputCore - + BlockSizeUser::BlockSize> - + BufferKindUser - + Default - + Clone, -{ - type Core = T::Core; -} - /// Generic core HMAC instance, which operates over blocks. pub struct HmacCore { digest: D::Core, diff --git a/hmac/src/lib.rs b/hmac/src/lib.rs index 3389646..430945c 100644 --- a/hmac/src/lib.rs +++ b/hmac/src/lib.rs @@ -106,8 +106,8 @@ mod utils; pub use simple::SimpleHmac; pub use simple_reset::SimpleHmacReset; +pub use utils::EagerHash; -use block_api::EagerHash; use core::fmt; use digest::block_api::{AlgorithmName, CoreProxy}; diff --git a/hmac/src/utils.rs b/hmac/src/utils.rs index 833108c..bffb77f 100644 --- a/hmac/src/utils.rs +++ b/hmac/src/utils.rs @@ -1,6 +1,8 @@ use digest::{ - Digest, - block_api::{Block, BlockSizeUser}, + Digest, HashMarker, + block_api::{ + Block, BlockSizeUser, BufferKindUser, CoreProxy, Eager, FixedOutputCore, UpdateCore, + }, }; pub(crate) const IPAD: u8 = 0x36; @@ -30,3 +32,29 @@ pub(crate) fn get_der_key(key: &[u8]) -> Block { } der_key } + +/// Trait implemented by eager hashes which expose their block-level core. +pub trait EagerHash: BlockSizeUser + Digest { + /// Block-level core type of the hash. + type Core: HashMarker + + UpdateCore + + FixedOutputCore + + BlockSizeUser::BlockSize> + + BufferKindUser + + Default + + Clone; +} + +impl EagerHash for T +where + T: CoreProxy + BlockSizeUser + Digest, + ::Core: HashMarker + + UpdateCore + + FixedOutputCore + + BlockSizeUser::BlockSize> + + BufferKindUser + + Default + + Clone, +{ + type Core = T::Core; +}