Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion digest/src/core_api/ct_variable.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use super::{
};
#[cfg(feature = "mac")]
use crate::MacMarker;
use crate::{CustomizedInit, HashMarker, VarOutputCustomized};
use crate::{CollisionResistance, CustomizedInit, HashMarker, VarOutputCustomized};
use core::{
fmt,
marker::PhantomData,
Expand Down Expand Up @@ -46,6 +46,15 @@ where
{
}

impl<T, OutSize> CollisionResistance for CtVariableCoreWrapper<T, OutSize>
where
T: VariableOutputCore + CollisionResistance,
OutSize: ArraySize + IsLessOrEqual<T::OutputSize>,
LeEq<OutSize, T::OutputSize>: NonZero,
{
type CollisionResistance = T::CollisionResistance;
}

impl<T, OutSize> BlockSizeUser for CtVariableCoreWrapper<T, OutSize>
where
T: VariableOutputCore,
Expand Down
6 changes: 5 additions & 1 deletion digest/src/core_api/rt_variable.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use super::{AlgorithmName, BlockSizeUser, TruncSide, VariableOutputCore};
#[cfg(feature = "mac")]
use crate::MacMarker;
use crate::{HashMarker, InvalidBufferSize};
use crate::{CollisionResistance, HashMarker, InvalidBufferSize};
use crate::{InvalidOutputSize, Reset, Update, VariableOutput, VariableOutputReset};
use block_buffer::BlockBuffer;
use core::{
Expand Down Expand Up @@ -56,6 +56,10 @@ impl<T: VariableOutputCore + HashMarker> HashMarker for RtVariableCoreWrapper<T>
#[cfg(feature = "mac")]
impl<T: VariableOutputCore + MacMarker> MacMarker for RtVariableCoreWrapper<T> {}

impl<T: VariableOutputCore + CollisionResistance> CollisionResistance for RtVariableCoreWrapper<T> {
type CollisionResistance = T::CollisionResistance;
}

impl<T: VariableOutputCore> BlockSizeUser for RtVariableCoreWrapper<T> {
type BlockSize = T::BlockSize;
}
Expand Down
8 changes: 6 additions & 2 deletions digest/src/core_api/wrapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ use super::{
UpdateCore, XofReaderCoreWrapper,
};
use crate::{
CustomizedInit, ExtendableOutput, ExtendableOutputReset, FixedOutput, FixedOutputReset,
HashMarker, Update,
CollisionResistance, CustomizedInit, ExtendableOutput, ExtendableOutputReset, FixedOutput,
FixedOutputReset, HashMarker, Update,
};
use block_buffer::BlockBuffer;
use core::{
Expand Down Expand Up @@ -36,6 +36,10 @@ impl<T: BufferKindUser + HashMarker> HashMarker for CoreWrapper<T> {}
#[cfg(feature = "mac")]
impl<T: BufferKindUser + MacMarker> MacMarker for CoreWrapper<T> {}

impl<T: BufferKindUser + CollisionResistance> CollisionResistance for CoreWrapper<T> {
type CollisionResistance = T::CollisionResistance;
}

// this blanket impl is needed for HMAC
impl<T: BufferKindUser + HashMarker> BlockSizeUser for CoreWrapper<T> {
type BlockSize = T::BlockSize;
Expand Down
9 changes: 9 additions & 0 deletions digest/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ pub use mac::{CtOutput, Mac, MacError, MacMarker};
pub use xof_fixed::XofFixedWrapper;

use core::fmt;
use crypto_common::typenum::Unsigned;

/// Types which consume data with byte granularity.
pub trait Update {
Expand Down Expand Up @@ -282,6 +283,14 @@ pub trait VarOutputCustomized: Sized {
fn new_customized(customization: &[u8], output_size: usize) -> Self;
}

/// Types with a certain collision resistance.
pub trait CollisionResistance {
/// Collision resistance in bytes. This applies to an output size of `CollisionResistance * 2`.
/// The collision resistance with a smaller output size is not defined by this trait and is at
/// least the given collision resistance with a bigger output.
type CollisionResistance: Unsigned;
}

/// The error type used in variable hash traits.
#[derive(Clone, Copy, Debug, Default)]
pub struct InvalidOutputSize;
Expand Down
10 changes: 8 additions & 2 deletions digest/src/xof_fixed.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ use crypto_common::hazmat::SerializableState;
use crypto_common::{BlockSizeUser, KeyInit, KeySizeUser, OutputSizeUser, Reset};

use crate::{
CustomizedInit, ExtendableOutput, ExtendableOutputReset, FixedOutput, FixedOutputReset,
HashMarker, Update,
CollisionResistance, CustomizedInit, ExtendableOutput, ExtendableOutputReset, FixedOutput,
FixedOutputReset, HashMarker, Update,
};

/// Wrapper around [`ExtendableOutput`] types adding [`OutputSizeUser`] with the given size of `S`.
Expand Down Expand Up @@ -51,6 +51,12 @@ impl<T: ExtendableOutput + crate::MacMarker, S: ArraySize> crate::MacMarker
{
}

impl<T: ExtendableOutput + CollisionResistance, S: ArraySize> CollisionResistance
for XofFixedWrapper<T, S>
{
type CollisionResistance = T::CollisionResistance;
}

// this blanket impl is needed for HMAC
impl<T: ExtendableOutput + BlockSizeUser, S: ArraySize> BlockSizeUser for XofFixedWrapper<T, S> {
type BlockSize = T::BlockSize;
Expand Down