diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:18:25 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:18:25 +0000 |
commit | 5363f350887b1e5b5dd21a86f88c8af9d7fea6da (patch) | |
tree | 35ca005eb6e0e9a1ba3bb5dbc033209ad445dc17 /vendor/digest | |
parent | Adding debian version 1.66.0+dfsg1-1. (diff) | |
download | rustc-5363f350887b1e5b5dd21a86f88c8af9d7fea6da.tar.xz rustc-5363f350887b1e5b5dd21a86f88c8af9d7fea6da.zip |
Merging upstream version 1.67.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/digest')
-rw-r--r-- | vendor/digest/.cargo-checksum.json | 2 | ||||
-rw-r--r-- | vendor/digest/CHANGELOG.md | 23 | ||||
-rw-r--r-- | vendor/digest/Cargo.toml | 32 | ||||
-rw-r--r-- | vendor/digest/README.md | 44 | ||||
-rw-r--r-- | vendor/digest/src/core_api/ct_variable.rs | 61 | ||||
-rw-r--r-- | vendor/digest/src/core_api/wrapper.rs | 13 | ||||
-rw-r--r-- | vendor/digest/src/dev.rs | 2 | ||||
-rw-r--r-- | vendor/digest/src/dev/rng.rs | 2 | ||||
-rw-r--r-- | vendor/digest/src/digest.rs | 2 | ||||
-rw-r--r-- | vendor/digest/src/lib.rs | 6 | ||||
-rw-r--r-- | vendor/digest/src/mac.rs | 54 |
11 files changed, 188 insertions, 53 deletions
diff --git a/vendor/digest/.cargo-checksum.json b/vendor/digest/.cargo-checksum.json index 4f00e9f74..659203034 100644 --- a/vendor/digest/.cargo-checksum.json +++ b/vendor/digest/.cargo-checksum.json @@ -1 +1 @@ -{"files":{"CHANGELOG.md":"3acae7ce99b129f14148a93c55958aad7770dc6627dc0f0be2ae7114946d2c09","Cargo.toml":"f57aba9a99a19807a7313f2f7fc86c43ba0b4ab7fcc79dbcac66d1a2d95e5ccc","LICENSE-APACHE":"a9040321c3712d8fd0b09cf52b17445de04a23a10165049ae187cd39e5c86be5","LICENSE-MIT":"9e0dfd2dd4173a530e238cb6adb37aa78c34c6bc7444e0e10c1ab5d8881f63ba","README.md":"3bf6e79fb524aece1652938de1387e77cc80461d69e2e1058f609da421f641cf","src/core_api.rs":"b52728aba8a84f980f3f9cc8a94a64d3a97f1eb5f4db144904822c2f8eefb1f8","src/core_api/ct_variable.rs":"78f94f6487e1f540083c1adcc8d4e86d323876ba606229b588d7b44fece3fa81","src/core_api/rt_variable.rs":"b57f89bf3991a313e2ddde09c701375e23539e7df74d685a161707ba1fbc99e4","src/core_api/wrapper.rs":"f9fd119df19f22fc439e0e93a520fb011ba8aeaedbeff6ff04249036554550bf","src/core_api/xof_reader.rs":"f33ca7b2c17eb99d84ea460d5567af68690e4fa6c2d94069a5d6748f8c8620eb","src/dev.rs":"95046c7d95317dfdedc4d230947882770fc5602f933916ca590d7bfce858dc44","src/dev/fixed.rs":"1cbabc651645c1e781d31825791132b4e3741f426e99d7e40988e2a5ee49bddd","src/dev/mac.rs":"e8837d3b99dc8b6ddb398e7fad5731c2ed36931f851ed625d3ae59fb31244165","src/dev/rng.rs":"ff72c0d2a39a740df944d27caf4cb46b60835a4044f656876f651889d122dd5a","src/dev/variable.rs":"51939602b43f5a813fc725bc603a34246bbf76facaa7930cb7bf78c283ec94a7","src/dev/xof.rs":"b3971175e50f615247e4158cba87d77c369461eda22751d888725cec45b61985","src/digest.rs":"fd2586af06f7cd87694e0f35a9467dde7ceb577904182fc683de523d3ec20529","src/lib.rs":"969ec58f54a2bc3743d06d6aa0b3e0dfd2831390bd9d1b161f422dc260b432f6","src/mac.rs":"59ce9fa5121b1af5f762388a1f2321edacee3c112d7f488313d1b368749074b6"},"package":"f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506"}
\ No newline at end of file +{"files":{"CHANGELOG.md":"cba0482b4328c05f545e94d6fea5d068b8c2e8c27abec3851b8fb567c6a0f562","Cargo.toml":"be0df25f7235deb18a52323de163e63bd5aefe4ad91ed276022d4757ccddeece","LICENSE-APACHE":"a9040321c3712d8fd0b09cf52b17445de04a23a10165049ae187cd39e5c86be5","LICENSE-MIT":"9e0dfd2dd4173a530e238cb6adb37aa78c34c6bc7444e0e10c1ab5d8881f63ba","README.md":"edf9f16c57466b06d201b8646182b7332324c7aba28f832dde7f57d03249637d","src/core_api.rs":"b52728aba8a84f980f3f9cc8a94a64d3a97f1eb5f4db144904822c2f8eefb1f8","src/core_api/ct_variable.rs":"703bd62fb693a437e319d1192988bd674f9127a6b76f73b4c58c71afc79bc013","src/core_api/rt_variable.rs":"b57f89bf3991a313e2ddde09c701375e23539e7df74d685a161707ba1fbc99e4","src/core_api/wrapper.rs":"033777bed7d140b158e15d50fda8a6e06557ce89bd0738fcca692be2c39e8b8a","src/core_api/xof_reader.rs":"f33ca7b2c17eb99d84ea460d5567af68690e4fa6c2d94069a5d6748f8c8620eb","src/dev.rs":"cbaeab07489efcadec917d7b7bcf2fdade79e78a4839ab3c3d8ad442f8f82833","src/dev/fixed.rs":"1cbabc651645c1e781d31825791132b4e3741f426e99d7e40988e2a5ee49bddd","src/dev/mac.rs":"e8837d3b99dc8b6ddb398e7fad5731c2ed36931f851ed625d3ae59fb31244165","src/dev/rng.rs":"156f42e9eb8fb2083cd12dc4a9bff9d57a321d33367efe6cd42cdc02c17ed2dc","src/dev/variable.rs":"51939602b43f5a813fc725bc603a34246bbf76facaa7930cb7bf78c283ec94a7","src/dev/xof.rs":"b3971175e50f615247e4158cba87d77c369461eda22751d888725cec45b61985","src/digest.rs":"8beab74640774c9f6811daa6dac9b5a8867f5beeb0b552a9b5ddbc5cfc196ed0","src/lib.rs":"5128199102bf0f7638fba0bbcf42b23822e31065841fb0c4304b64f681fde961","src/mac.rs":"6303caa2c5b76513346c082dd600e007354179ad440fc83dad3d7f4240281803"},"package":"8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"}
\ No newline at end of file diff --git a/vendor/digest/CHANGELOG.md b/vendor/digest/CHANGELOG.md index 65d68311c..e03398bfc 100644 --- a/vendor/digest/CHANGELOG.md +++ b/vendor/digest/CHANGELOG.md @@ -5,6 +5,25 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 0.10.6 (2022-11-17) +### Added +- `Mac::verify_reset` and `Mac::verify_slice_reset` methods ([#1154]) + +[#1154]: https://github.com/RustCrypto/traits/pull/1154 + +## 0.10.5 (2022-09-16) +### Fixed +- MSRV build ([#1117]) + +[#1117]: https://github.com/RustCrypto/traits/pull/1117 + +## 0.10.4 (2022-09-16) +### Added +- Feature-gated implementation of the `const_oid::AssociatedOid` trait +for the core wrappers. ([#1098]) + +[#1098]: https://github.com/RustCrypto/traits/pull/1098 + ## 0.10.3 (2022-02-16) ### Fixed - Minimal versions build ([#940]) @@ -17,7 +36,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 [#849]: https://github.com/RustCrypto/traits/pull/849 -## 0.10.1 (2021-12-14) +## 0.10.1 (2021-12-14) [YANKED] ### Added - `Update::chain` and `Digest::new_with_prefix` methods. ([#846]) - `Mac::generate_key` method. ([#847]) @@ -30,7 +49,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 [#846]: https://github.com/RustCrypto/traits/pull/846 [#847]: https://github.com/RustCrypto/traits/pull/847 -## 0.10.0 (2021-12-07) +## 0.10.0 (2021-12-07) [YANKED] ### Changed - Dirty traits are removed and instead block-level traits are introduced. Variable output traits reworked and now support both run and compile time selection of output size. ([#380], [#819]) diff --git a/vendor/digest/Cargo.toml b/vendor/digest/Cargo.toml index 41a7cf971..f9c467cf7 100644 --- a/vendor/digest/Cargo.toml +++ b/vendor/digest/Cargo.toml @@ -12,18 +12,30 @@ [package] edition = "2018" name = "digest" -version = "0.10.3" +version = "0.10.6" authors = ["RustCrypto Developers"] -description = "Traits for cryptographic hash functions" +description = "Traits for cryptographic hash functions and message authentication codes" documentation = "https://docs.rs/digest" readme = "README.md" -keywords = ["digest", "crypto", "hash"] -categories = ["cryptography", "no-std"] +keywords = [ + "digest", + "crypto", + "hash", +] +categories = [ + "cryptography", + "no-std", +] license = "MIT OR Apache-2.0" repository = "https://github.com/RustCrypto/traits" + [package.metadata.docs.rs] all-features = true -rustdoc-args = ["--cfg", "docsrs"] +rustdoc-args = [ + "--cfg", + "docsrs", +] + [dependencies.blobby] version = "0.3" optional = true @@ -32,6 +44,10 @@ optional = true version = "0.10" optional = true +[dependencies.const-oid] +version = "0.9" +optional = true + [dependencies.crypto-common] version = "0.1.3" @@ -46,5 +62,9 @@ core-api = ["block-buffer"] default = ["core-api"] dev = ["blobby"] mac = ["subtle"] +oid = ["const-oid"] rand_core = ["crypto-common/rand_core"] -std = ["alloc", "crypto-common/std"] +std = [ + "alloc", + "crypto-common/std", +] diff --git a/vendor/digest/README.md b/vendor/digest/README.md index 0a43d4751..9f68559cd 100644 --- a/vendor/digest/README.md +++ b/vendor/digest/README.md @@ -28,29 +28,29 @@ done with a minor version bump. ## Usage -Let us demonstrate how to use crates in this repository using BLAKE2b as an +Let us demonstrate how to use crates in this repository using Sha256 as an example. -First add `blake2` crate to your `Cargo.toml`: +First add the `sha2` crate to your `Cargo.toml`: ```toml [dependencies] -blake2 = "0.8" +sha2 = "0.10" ``` -`blake2` and other crates re-export `digest` crate and `Digest` trait for +`sha2` and other crates re-export `digest` crate and `Digest` trait for convenience, so you don't have to add `digest` crate as an explicit dependency. Now you can write the following code: ```rust -use blake2::{Blake2b, Digest}; +use sha2::{Sha256, Digest}; -let mut hasher = Blake2b::new(); +let mut hasher = Sha256::new(); let data = b"Hello world!"; -hasher.input(data); +hasher.update(data); // `input` can be called repeatedly and is generic over `AsRef<[u8]>` -hasher.input("String data"); +hasher.update("String data"); // Note that calling `finalize()` consumes hasher let hash = hasher.finalize(); println!("Result: {:x}", hash); @@ -63,18 +63,18 @@ Alternatively you can use chained approach, which is equivalent to the previous example: ```rust -let hash = Blake2b::new() - .chain(b"Hello world!") - .chain("String data") +let hash = Sha256::new() + .chain_update(b"Hello world!") + .chain_update("String data") .finalize(); println!("Result: {:x}", hash); ``` -If the whole message is available you also can use convinience `digest` method: +If the whole message is available you also can use convenience `digest` method: ```rust -let hash = Blake2b::digest(b"my message"); +let hash = Sha256::digest(b"my message"); println!("Result: {:x}", hash); ``` @@ -84,11 +84,11 @@ If you want to hash data from [`Read`][3] trait (e.g. from file) you can rely on implementation of [`Write`][4] trait (requires enabled-by-default `std` feature): ```rust -use blake2::{Blake2b, Digest}; +use sha2::{Sha256, Digest}; use std::{fs, io}; let mut file = fs::File::open(&path)?; -let mut hasher = Blake2b::new(); +let mut hasher = Sha256::new(); let n = io::copy(&mut file, &mut hasher)?; let hash = hasher.finalize(); @@ -109,17 +109,17 @@ use digest::Digest; // Instead use crates from: https://github.com/RustCrypto/password-hashing fn hash_password<D: Digest>(password: &str, salt: &str, output: &mut [u8]) { let mut hasher = D::new(); - hasher.input(password.as_bytes()); - hasher.input(b"$"); - hasher.input(salt.as_bytes()); + hasher.update(password.as_bytes()); + hasher.update(b"$"); + hasher.update(salt.as_bytes()); output.copy_from_slice(hasher.finalize().as_slice()) } -use blake2::Blake2b; -use sha2::Sha256; +let mut buf1 = [0u8; 32]; +let mut buf2 = [0u8; 64]; -hash_password::<Blake2b>("my_password", "abcd", &mut buf); -hash_password::<Sha256>("my_password", "abcd", &mut buf); +hash_password::<sha2::Sha256>("my_password", "abcd", &mut buf1); +hash_password::<sha2::Sha512>("my_password", "abcd", &mut buf2); ``` If you want to use hash functions with trait objects, use `digest::DynDigest` diff --git a/vendor/digest/src/core_api/ct_variable.rs b/vendor/digest/src/core_api/ct_variable.rs index 40efff65c..7ee1bed0a 100644 --- a/vendor/digest/src/core_api/ct_variable.rs +++ b/vendor/digest/src/core_api/ct_variable.rs @@ -5,6 +5,8 @@ use super::{ use crate::HashMarker; #[cfg(feature = "mac")] use crate::MacMarker; +#[cfg(feature = "oid")] +use const_oid::{AssociatedOid, ObjectIdentifier}; use core::{fmt, marker::PhantomData}; use crypto_common::{ generic_array::{ArrayLength, GenericArray}, @@ -12,10 +14,15 @@ use crypto_common::{ Block, BlockSizeUser, OutputSizeUser, }; +/// Dummy type used with [`CtVariableCoreWrapper`] in cases when +/// resulting hash does not have a known OID. +#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)] +pub struct NoOid; + /// Wrapper around [`VariableOutputCore`] which selects output size /// at compile time. #[derive(Clone)] -pub struct CtVariableCoreWrapper<T, OutSize> +pub struct CtVariableCoreWrapper<T, OutSize, O = NoOid> where T: VariableOutputCore, OutSize: ArrayLength<u8> + IsLessOrEqual<T::OutputSize>, @@ -24,10 +31,10 @@ where Le<T::BlockSize, U256>: NonZero, { inner: T, - _out: PhantomData<OutSize>, + _out: PhantomData<(OutSize, O)>, } -impl<T, OutSize> HashMarker for CtVariableCoreWrapper<T, OutSize> +impl<T, OutSize, O> HashMarker for CtVariableCoreWrapper<T, OutSize, O> where T: VariableOutputCore + HashMarker, OutSize: ArrayLength<u8> + IsLessOrEqual<T::OutputSize>, @@ -38,7 +45,7 @@ where } #[cfg(feature = "mac")] -impl<T, OutSize> MacMarker for CtVariableCoreWrapper<T, OutSize> +impl<T, OutSize, O> MacMarker for CtVariableCoreWrapper<T, OutSize, O> where T: VariableOutputCore + MacMarker, OutSize: ArrayLength<u8> + IsLessOrEqual<T::OutputSize>, @@ -48,7 +55,7 @@ where { } -impl<T, OutSize> BlockSizeUser for CtVariableCoreWrapper<T, OutSize> +impl<T, OutSize, O> BlockSizeUser for CtVariableCoreWrapper<T, OutSize, O> where T: VariableOutputCore, OutSize: ArrayLength<u8> + IsLessOrEqual<T::OutputSize>, @@ -59,7 +66,7 @@ where type BlockSize = T::BlockSize; } -impl<T, OutSize> UpdateCore for CtVariableCoreWrapper<T, OutSize> +impl<T, OutSize, O> UpdateCore for CtVariableCoreWrapper<T, OutSize, O> where T: VariableOutputCore, OutSize: ArrayLength<u8> + IsLessOrEqual<T::OutputSize>, @@ -73,7 +80,7 @@ where } } -impl<T, OutSize> OutputSizeUser for CtVariableCoreWrapper<T, OutSize> +impl<T, OutSize, O> OutputSizeUser for CtVariableCoreWrapper<T, OutSize, O> where T: VariableOutputCore, OutSize: ArrayLength<u8> + IsLessOrEqual<T::OutputSize> + 'static, @@ -84,7 +91,7 @@ where type OutputSize = OutSize; } -impl<T, OutSize> BufferKindUser for CtVariableCoreWrapper<T, OutSize> +impl<T, OutSize, O> BufferKindUser for CtVariableCoreWrapper<T, OutSize, O> where T: VariableOutputCore, OutSize: ArrayLength<u8> + IsLessOrEqual<T::OutputSize>, @@ -95,7 +102,7 @@ where type BufferKind = T::BufferKind; } -impl<T, OutSize> FixedOutputCore for CtVariableCoreWrapper<T, OutSize> +impl<T, OutSize, O> FixedOutputCore for CtVariableCoreWrapper<T, OutSize, O> where T: VariableOutputCore, OutSize: ArrayLength<u8> + IsLessOrEqual<T::OutputSize> + 'static, @@ -120,7 +127,7 @@ where } } -impl<T, OutSize> Default for CtVariableCoreWrapper<T, OutSize> +impl<T, OutSize, O> Default for CtVariableCoreWrapper<T, OutSize, O> where T: VariableOutputCore, OutSize: ArrayLength<u8> + IsLessOrEqual<T::OutputSize>, @@ -137,7 +144,7 @@ where } } -impl<T, OutSize> Reset for CtVariableCoreWrapper<T, OutSize> +impl<T, OutSize, O> Reset for CtVariableCoreWrapper<T, OutSize, O> where T: VariableOutputCore, OutSize: ArrayLength<u8> + IsLessOrEqual<T::OutputSize>, @@ -151,7 +158,7 @@ where } } -impl<T, OutSize> AlgorithmName for CtVariableCoreWrapper<T, OutSize> +impl<T, OutSize, O> AlgorithmName for CtVariableCoreWrapper<T, OutSize, O> where T: VariableOutputCore + AlgorithmName, OutSize: ArrayLength<u8> + IsLessOrEqual<T::OutputSize>, @@ -165,3 +172,33 @@ where write!(f, "{}", OutSize::USIZE) } } + +#[cfg(feature = "oid")] +#[cfg_attr(docsrs, doc(cfg(feature = "oid")))] +impl<T, OutSize, O> AssociatedOid for CtVariableCoreWrapper<T, OutSize, O> +where + T: VariableOutputCore, + O: AssociatedOid, + OutSize: ArrayLength<u8> + IsLessOrEqual<T::OutputSize>, + LeEq<OutSize, T::OutputSize>: NonZero, + T::BlockSize: IsLess<U256>, + Le<T::BlockSize, U256>: NonZero, +{ + const OID: ObjectIdentifier = O::OID; +} + +/// Implement dummy type with hidden docs which is used to "carry" hasher +/// OID for [`CtVariableCoreWrapper`]. +#[macro_export] +macro_rules! impl_oid_carrier { + ($name:ident, $oid:literal) => { + #[doc(hidden)] + #[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)] + pub struct $name; + + #[cfg(feature = "oid")] + impl AssociatedOid for $name { + const OID: ObjectIdentifier = ObjectIdentifier::new_unwrap($oid); + } + }; +} diff --git a/vendor/digest/src/core_api/wrapper.rs b/vendor/digest/src/core_api/wrapper.rs index 4ad0f7eea..ca977381e 100644 --- a/vendor/digest/src/core_api/wrapper.rs +++ b/vendor/digest/src/core_api/wrapper.rs @@ -14,6 +14,8 @@ use crypto_common::{ #[cfg(feature = "mac")] use crate::MacMarker; +#[cfg(feature = "oid")] +use const_oid::{AssociatedOid, ObjectIdentifier}; /// Wrapper around [`BufferKindUser`]. /// @@ -227,6 +229,17 @@ where } } +#[cfg(feature = "oid")] +#[cfg_attr(docsrs, doc(cfg(feature = "oid")))] +impl<T> AssociatedOid for CoreWrapper<T> +where + T: BufferKindUser + AssociatedOid, + T::BlockSize: IsLess<U256>, + Le<T::BlockSize, U256>: NonZero, +{ + const OID: ObjectIdentifier = T::OID; +} + #[cfg(feature = "std")] #[cfg_attr(docsrs, doc(cfg(feature = "std")))] impl<T> std::io::Write for CoreWrapper<T> diff --git a/vendor/digest/src/dev.rs b/vendor/digest/src/dev.rs index 2b68bdd4d..438089574 100644 --- a/vendor/digest/src/dev.rs +++ b/vendor/digest/src/dev.rs @@ -71,7 +71,7 @@ pub fn feed_rand_16mib<D: crate::Update>(d: &mut D) { for _ in 0..n { rng.fill(buf); d.update(buf); - // additional byte, so size of feeded data + // additional byte, so size of fed data // will not be multiple of block size d.update(&[42]); } diff --git a/vendor/digest/src/dev/rng.rs b/vendor/digest/src/dev/rng.rs index 8b233aafb..d34a1cf31 100644 --- a/vendor/digest/src/dev/rng.rs +++ b/vendor/digest/src/dev/rng.rs @@ -2,7 +2,7 @@ use core::num::Wrapping; /// Initial RNG state used in tests. -// choosen by fair dice roll. guaranteed to be random. +// chosen by fair dice roll. guaranteed to be random. pub(crate) const RNG: XorShiftRng = XorShiftRng { x: Wrapping(0x0787_3B4A), y: Wrapping(0xFAAB_8FFE), diff --git a/vendor/digest/src/digest.rs b/vendor/digest/src/digest.rs index bd9fd62e4..9373550ca 100644 --- a/vendor/digest/src/digest.rs +++ b/vendor/digest/src/digest.rs @@ -7,7 +7,7 @@ use alloc::boxed::Box; /// Marker trait for cryptographic hash functions. pub trait HashMarker {} -/// Convinience wrapper trait covering functionality of cryptographic hash +/// Convenience wrapper trait covering functionality of cryptographic hash /// functions with fixed output size. /// /// This trait wraps [`Update`], [`FixedOutput`], [`Default`], and diff --git a/vendor/digest/src/lib.rs b/vendor/digest/src/lib.rs index c2edb40ee..fc82e2e3a 100644 --- a/vendor/digest/src/lib.rs +++ b/vendor/digest/src/lib.rs @@ -27,8 +27,7 @@ #![forbid(unsafe_code)] #![doc( html_logo_url = "https://raw.githubusercontent.com/RustCrypto/media/6ee8e381/logo.svg", - html_favicon_url = "https://raw.githubusercontent.com/RustCrypto/media/6ee8e381/logo.svg", - html_root_url = "https://docs.rs/digest/0.10.3" + html_favicon_url = "https://raw.githubusercontent.com/RustCrypto/media/6ee8e381/logo.svg" )] #![warn(missing_docs, rust_2018_idioms)] @@ -60,6 +59,9 @@ mod mac; #[cfg(feature = "core-api")] #[cfg_attr(docsrs, doc(cfg(feature = "core-api")))] pub use block_buffer; +#[cfg(feature = "oid")] +#[cfg_attr(docsrs, doc(cfg(feature = "oid")))] +pub use const_oid; pub use crypto_common; pub use crate::digest::{Digest, DynDigest, HashMarker}; diff --git a/vendor/digest/src/mac.rs b/vendor/digest/src/mac.rs index 76f8df2c9..1c31359ea 100644 --- a/vendor/digest/src/mac.rs +++ b/vendor/digest/src/mac.rs @@ -11,7 +11,7 @@ use subtle::{Choice, ConstantTimeEq}; #[cfg_attr(docsrs, doc(cfg(feature = "mac")))] pub trait MacMarker {} -/// Convinience wrapper trait covering functionality of Message Authentication algorithms. +/// Convenience wrapper trait covering functionality of Message Authentication algorithms. /// /// This trait wraps [`KeyInit`], [`Update`], [`FixedOutput`], and [`MacMarker`] /// traits and provides additional convenience methods. @@ -59,6 +59,12 @@ pub trait Mac: OutputSizeUser + Sized { /// Check if tag/code value is correct for the processed input. fn verify(self, tag: &Output<Self>) -> Result<(), MacError>; + /// Check if tag/code value is correct for the processed input and reset + /// [`Mac`] instance. + fn verify_reset(&mut self, tag: &Output<Self>) -> Result<(), MacError> + where + Self: FixedOutputReset; + /// Check truncated tag correctness using all bytes /// of calculated tag. /// @@ -66,6 +72,15 @@ pub trait Mac: OutputSizeUser + Sized { /// to MAC's output. fn verify_slice(self, tag: &[u8]) -> Result<(), MacError>; + /// Check truncated tag correctness using all bytes + /// of calculated tag and reset [`Mac`] instance. + /// + /// Returns `Error` if `tag` is not valid or not equal in length + /// to MAC's output. + fn verify_slice_reset(&mut self, tag: &[u8]) -> Result<(), MacError> + where + Self: FixedOutputReset; + /// Check truncated tag correctness using left side bytes /// (i.e. `tag[..n]`) of calculated tag. /// @@ -138,13 +153,42 @@ impl<T: Update + FixedOutput + MacMarker> Mac for T { } #[inline] + fn verify_reset(&mut self, tag: &Output<Self>) -> Result<(), MacError> + where + Self: FixedOutputReset, + { + if self.finalize_reset() == tag.into() { + Ok(()) + } else { + Err(MacError) + } + } + + #[inline] fn verify_slice(self, tag: &[u8]) -> Result<(), MacError> { let n = tag.len(); if n != Self::OutputSize::USIZE { return Err(MacError); } let choice = self.finalize_fixed().ct_eq(tag); - if choice.unwrap_u8() == 1 { + if choice.into() { + Ok(()) + } else { + Err(MacError) + } + } + + #[inline] + fn verify_slice_reset(&mut self, tag: &[u8]) -> Result<(), MacError> + where + Self: FixedOutputReset, + { + let n = tag.len(); + if n != Self::OutputSize::USIZE { + return Err(MacError); + } + let choice = self.finalize_fixed_reset().ct_eq(tag); + if choice.into() { Ok(()) } else { Err(MacError) @@ -158,7 +202,7 @@ impl<T: Update + FixedOutput + MacMarker> Mac for T { } let choice = self.finalize_fixed()[..n].ct_eq(tag); - if choice.unwrap_u8() == 1 { + if choice.into() { Ok(()) } else { Err(MacError) @@ -173,7 +217,7 @@ impl<T: Update + FixedOutput + MacMarker> Mac for T { let m = Self::OutputSize::USIZE - n; let choice = self.finalize_fixed()[m..].ct_eq(tag); - if choice.unwrap_u8() == 1 { + if choice.into() { Ok(()) } else { Err(MacError) @@ -239,7 +283,7 @@ impl<T: OutputSizeUser> ConstantTimeEq for CtOutput<T> { impl<T: OutputSizeUser> PartialEq for CtOutput<T> { #[inline(always)] fn eq(&self, x: &CtOutput<T>) -> bool { - self.ct_eq(x).unwrap_u8() == 1 + self.ct_eq(x).into() } } |