Skip to content

Commit

Permalink
universal-hash: bump crypto-common to v0.2.0-pre; MSRV 1.65
Browse files Browse the repository at this point in the history
Replaces `generic-array` with `hybrid-array`, which is built on a
combination of `typenum` and const generics, providing a degree of
interoperability between the two systems.
  • Loading branch information
tarcieri committed Nov 12, 2023
1 parent 8b24dd9 commit a92cf0d
Show file tree
Hide file tree
Showing 6 changed files with 28 additions and 25 deletions.
13 changes: 7 additions & 6 deletions .github/workflows/universal-hash.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
strategy:
matrix:
rust:
- 1.56.0 # MSRV
- 1.65.0 # MSRV
- stable
target:
- thumbv7em-none-eabi
Expand All @@ -36,17 +36,18 @@ jobs:
targets: ${{ matrix.target }}
- run: cargo build --no-default-features --release --target ${{ matrix.target }}

minimal-versions:
uses: RustCrypto/actions/.github/workflows/minimal-versions.yml@master
with:
working-directory: ${{ github.workflow }}
# TODO(tarcieri): re-enable after next `crypto-common` release
# minimal-versions:
# uses: RustCrypto/actions/.github/workflows/minimal-versions.yml@master
# with:
# working-directory: ${{ github.workflow }}

test:
runs-on: ubuntu-latest
strategy:
matrix:
rust:
- 1.56.0 # MSRV
- 1.65.0 # MSRV
- stable
steps:
- uses: actions/checkout@v4
Expand Down
12 changes: 6 additions & 6 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ members = [
"elliptic-curve",
"kem",
"password-hash",
"universal-hash",
]
# TODO: re-add to `members` when MSRV has been bumped to 1.60+
exclude = [
"signature",
"signature/async",
"universal-hash",
]

[patch.crates-io]
Expand Down
2 changes: 1 addition & 1 deletion crypto/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ digest = { version = "0.10", optional = true, features = ["mac"] }
elliptic-curve = { version = "0.13", optional = true, path = "../elliptic-curve" }
password-hash = { version = "0.5", optional = true, path = "../password-hash" }
signature = { version = "2", optional = true, default-features = false, path = "../signature" }
universal-hash = { version = "0.5", optional = true, path = "../universal-hash" }
universal-hash = { version = "0.5", optional = true }

[features]
std = [
Expand Down
4 changes: 2 additions & 2 deletions universal-hash/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "universal-hash"
version = "0.5.1"
version = "0.6.0-pre"
description = "Traits which describe the functionality of universal hash functions (UHFs)"
authors = ["RustCrypto Developers"]
license = "MIT OR Apache-2.0"
Expand All @@ -13,7 +13,7 @@ keywords = ["crypto", "mac"]
categories = ["cryptography", "no-std"]

[dependencies]
crypto-common = "0.1.6"
crypto-common = "=0.2.0-pre"
subtle = { version = "2.4", default-features = false }

[features]
Expand Down
20 changes: 11 additions & 9 deletions universal-hash/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,16 @@
extern crate std;

pub use crypto_common::{
self, generic_array,
self, array,
typenum::{self, consts},
Block, Key, KeyInit, ParBlocks, Reset,
};

use core::slice;
use crypto_common::{BlockSizeUser, ParBlocksSizeUser};
use generic_array::{ArrayLength, GenericArray};
use crypto_common::{
array::{Array, ArraySize},
BlockSizeUser, BlockSizes, ParBlocksSizeUser,
};
use subtle::ConstantTimeEq;
use typenum::Unsigned;

Expand Down Expand Up @@ -79,15 +81,15 @@ pub trait UniversalHash: BlockSizeUser + Sized {
/// Update hash function state with the provided block.
#[inline]
fn update(&mut self, blocks: &[Block<Self>]) {
struct Ctx<'a, BS: ArrayLength<u8>> {
struct Ctx<'a, BS: BlockSizes> {
blocks: &'a [Block<Self>],
}

impl<'a, BS: ArrayLength<u8>> BlockSizeUser for Ctx<'a, BS> {
impl<'a, BS: BlockSizes> BlockSizeUser for Ctx<'a, BS> {
type BlockSize = BS;
}

impl<'a, BS: ArrayLength<u8>> UhfClosure for Ctx<'a, BS> {
impl<'a, BS: BlockSizes> UhfClosure for Ctx<'a, BS> {
#[inline(always)]
fn call<B: UhfBackend<BlockSize = BS>>(self, backend: &mut B) {
let pb = B::ParBlocksSize::USIZE;
Expand Down Expand Up @@ -123,7 +125,7 @@ pub trait UniversalHash: BlockSizeUser + Sized {
self.update(blocks);

if !tail.is_empty() {
let mut padded_block = GenericArray::default();
let mut padded_block = Array::default();
padded_block[..tail.len()].copy_from_slice(tail);
self.update(slice::from_ref(&padded_block));
}
Expand Down Expand Up @@ -177,10 +179,10 @@ impl std::error::Error for Error {}
/// Split message into slice of blocks and leftover tail.
// TODO: replace with `slice::as_chunks` on migration to const generics
#[inline(always)]
fn to_blocks<T, N: ArrayLength<T>>(data: &[T]) -> (&[GenericArray<T, N>], &[T]) {
fn to_blocks<T, N: ArraySize>(data: &[T]) -> (&[Array<T, N>], &[T]) {
let nb = data.len() / N::USIZE;
let (left, right) = data.split_at(nb * N::USIZE);
let p = left.as_ptr() as *const GenericArray<T, N>;
let p = left.as_ptr() as *const Array<T, N>;
// SAFETY: we guarantee that `blocks` does not point outside of `data`
// and `p` is valid for reads
#[allow(unsafe_code)]
Expand Down

0 comments on commit a92cf0d

Please sign in to comment.