Skip to content

Commit 1491f8b

Browse files
committed
[WIP] Migrate to hybrid-array; MSRV 1.65
Builds on RustCrypto/traits#1319. Migrates the following crates away from using `generic-array` to using `hybrid-array` instead: - `block-buffer` - `block-padding` - `dbl` - `inout`
1 parent 2e78c4b commit 1491f8b

15 files changed

Lines changed: 134 additions & 148 deletions

File tree

Cargo.lock

Lines changed: 8 additions & 27 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,7 @@ members = [
1919

2020
[profile.dev]
2121
opt-level = 2
22+
23+
[patch.crates-io]
24+
crypto-common = { git = "https://github.com/RustCrypto/traits", branch = "crypto-common/hybrid-array" }
25+
hybrid-array = { path = "hybrid-array" }

block-buffer/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ readme = "README.md"
1313

1414
[dependencies]
1515
crypto-common = "0.2.0-pre"
16-
generic-array = "0.14"
1716

1817
[dev-dependencies]
1918
hex-literal = "0.3.3"

block-buffer/src/lib.rs

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,22 @@
66
)]
77
#![warn(missing_docs, rust_2018_idioms)]
88

9-
pub use generic_array;
9+
pub use crypto_common::{array, Block};
1010

11-
use core::{fmt, ops::Add, slice};
12-
pub use crypto_common::Block;
13-
use crypto_common::{BlockSizeUser, BlockSizes};
14-
use generic_array::{
11+
use array::{
1512
typenum::{Add1, B1},
16-
ArrayLength, GenericArray,
13+
Array, ArraySize,
1714
};
15+
use core::{fmt, ops::Add, slice};
16+
use crypto_common::{BlockSizeUser, BlockSizes};
1817

1918
mod read;
2019
mod sealed;
2120

2221
pub use read::ReadBuffer;
2322

2423
/// Block with additional one byte
25-
type BlockP1<BlockSize> = GenericArray<u8, Add1<BlockSize>>;
24+
type BlockP1<BlockSize> = Array<u8, Add1<BlockSize>>;
2625

2726
/// Trait for buffer kinds.
2827
pub trait BufferKind: sealed::Sealed {}
@@ -304,7 +303,7 @@ impl<BS: BlockSizes> BlockBuffer<BS, Lazy> {
304303
pub fn serialize(&self) -> BlockP1<BS>
305304
where
306305
BS: Add<B1>,
307-
Add1<BS>: ArrayLength<u8>,
306+
Add1<BS>: ArraySize,
308307
{
309308
let mut res = BlockP1::<BS>::default();
310309
res[0] = self.pos;
@@ -318,7 +317,7 @@ impl<BS: BlockSizes> BlockBuffer<BS, Lazy> {
318317
pub fn deserialize(buffer: &BlockP1<BS>) -> Result<Self, Error>
319318
where
320319
BS: Add<B1>,
321-
Add1<BS>: ArrayLength<u8>,
320+
Add1<BS>: ArraySize,
322321
{
323322
let pos = buffer[0];
324323
if !<Lazy as sealed::Sealed>::invariant(pos as usize, BS::USIZE) {
@@ -327,9 +326,7 @@ impl<BS: BlockSizes> BlockBuffer<BS, Lazy> {
327326
if buffer[1..][pos as usize..].iter().any(|&b| b != 0) {
328327
return Err(Error);
329328
}
330-
Ok(Self {
331-
buffer: GenericArray::clone_from_slice(&buffer[1..]),
332-
pos,
333-
})
329+
let buffer = Array::clone_from_slice(&buffer[1..]);
330+
Ok(Self { buffer, pos })
334331
}
335332
}

block-buffer/src/sealed.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1+
use crate::array::{Array, ArraySize};
12
use core::slice;
2-
use generic_array::{ArrayLength, GenericArray};
33

44
/// Sealed trait for buffer kinds.
55
pub trait Sealed {
@@ -14,7 +14,7 @@ pub trait Sealed {
1414
fn invariant(pos: usize, block_size: usize) -> bool;
1515

1616
/// Split input data into slice of blocks and tail.
17-
fn split_blocks<N: ArrayLength<u8>>(data: &[u8]) -> (&[GenericArray<u8, N>], &[u8]);
17+
fn split_blocks<N: ArraySize>(data: &[u8]) -> (&[Array<u8, N>], &[u8]);
1818
}
1919

2020
impl Sealed for super::Eager {
@@ -35,14 +35,14 @@ impl Sealed for super::Eager {
3535
}
3636

3737
#[inline(always)]
38-
fn split_blocks<N: ArrayLength<u8>>(data: &[u8]) -> (&[GenericArray<u8, N>], &[u8]) {
38+
fn split_blocks<N: ArraySize>(data: &[u8]) -> (&[Array<u8, N>], &[u8]) {
3939
let nb = data.len() / N::USIZE;
4040
let blocks_len = nb * N::USIZE;
4141
let tail_len = data.len() - blocks_len;
4242
// SAFETY: we guarantee that created slices do not point
4343
// outside of `data`
4444
unsafe {
45-
let blocks_ptr = data.as_ptr() as *const GenericArray<u8, N>;
45+
let blocks_ptr = data.as_ptr() as *const Array<u8, N>;
4646
let tail_ptr = data.as_ptr().add(blocks_len);
4747
(
4848
slice::from_raw_parts(blocks_ptr, nb),
@@ -70,7 +70,7 @@ impl Sealed for super::Lazy {
7070
}
7171

7272
#[inline(always)]
73-
fn split_blocks<N: ArrayLength<u8>>(data: &[u8]) -> (&[GenericArray<u8, N>], &[u8]) {
73+
fn split_blocks<N: ArraySize>(data: &[u8]) -> (&[Array<u8, N>], &[u8]) {
7474
if data.is_empty() {
7575
return (&[], &[]);
7676
}
@@ -84,7 +84,7 @@ impl Sealed for super::Lazy {
8484
// SAFETY: we guarantee that created slices do not point
8585
// outside of `data`
8686
unsafe {
87-
let blocks_ptr = data.as_ptr() as *const GenericArray<u8, N>;
87+
let blocks_ptr = data.as_ptr() as *const Array<u8, N>;
8888
let tail_ptr = data.as_ptr().add(blocks_len);
8989
(
9090
slice::from_raw_parts(blocks_ptr, nb),

block-buffer/tests/mod.rs

Lines changed: 37 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use block_buffer::{
2-
generic_array::{
2+
array::{
33
typenum::{U10, U16, U24, U4, U8},
4-
GenericArray,
4+
Array,
55
},
66
Block, EagerBuffer, LazyBuffer, ReadBuffer,
77
};
@@ -203,17 +203,17 @@ fn test_eager_serialize() {
203203
assert_eq!(buf3.serialize(), ser3);
204204

205205
// Invalid position
206-
let buf = GenericArray::from_slice(&[0, 0, 0, 4]);
207-
assert!(Buf::deserialize(buf).is_err());
208-
let buf = GenericArray::from_slice(&[0, 0, 0, 10]);
209-
assert!(Buf::deserialize(buf).is_err());
206+
let buf = Array([0, 0, 0, 4]);
207+
assert!(Buf::deserialize(&buf).is_err());
208+
let buf = Array([0, 0, 0, 10]);
209+
assert!(Buf::deserialize(&buf).is_err());
210210
// "Garbage" bytes are not zeroized
211-
let buf = GenericArray::from_slice(&[1, 0, 0, 0]);
212-
assert!(Buf::deserialize(buf).is_err());
213-
let buf = GenericArray::from_slice(&[0, 1, 0, 1]);
214-
assert!(Buf::deserialize(buf).is_err());
215-
let buf = GenericArray::from_slice(&[0, 0, 1, 2]);
216-
assert!(Buf::deserialize(buf).is_err());
211+
let buf = Array([1, 0, 0, 0]);
212+
assert!(Buf::deserialize(&buf).is_err());
213+
let buf = Array([0, 1, 0, 1]);
214+
assert!(Buf::deserialize(&buf).is_err());
215+
let buf = Array([0, 0, 1, 2]);
216+
assert!(Buf::deserialize(&buf).is_err());
217217
}
218218

219219
#[test]
@@ -223,6 +223,7 @@ fn test_lazy_serialize() {
223223
let mut buf1 = Buf::default();
224224
let ser0 = buf1.serialize();
225225
assert_eq!(&ser0[..], &[0, 0, 0, 0, 0]);
226+
Buf::deserialize(&ser0).unwrap();
226227
assert_eq!(Buf::deserialize(&ser0).unwrap().serialize(), ser0);
227228

228229
buf1.digest_blocks(&[41, 42], |_| {});
@@ -262,19 +263,19 @@ fn test_lazy_serialize() {
262263
assert_eq!(buf3.serialize(), ser4);
263264

264265
// Invalid position
265-
let buf = GenericArray::from_slice(&[10, 0, 0, 0, 0]);
266-
assert!(Buf::deserialize(buf).is_err());
267-
let buf = GenericArray::from_slice(&[5, 0, 0, 0, 0]);
268-
assert!(Buf::deserialize(buf).is_err());
266+
let buf = Array([10, 0, 0, 0, 0]);
267+
assert!(Buf::deserialize(&buf).is_err());
268+
let buf = Array([5, 0, 0, 0, 0]);
269+
assert!(Buf::deserialize(&buf).is_err());
269270
// "Garbage" bytes are not zeroized
270-
let buf = GenericArray::from_slice(&[0, 1, 0, 0, 0]);
271-
assert!(Buf::deserialize(buf).is_err());
272-
let buf = GenericArray::from_slice(&[1, 0, 1, 0, 0]);
273-
assert!(Buf::deserialize(buf).is_err());
274-
let buf = GenericArray::from_slice(&[2, 0, 0, 1, 0]);
275-
assert!(Buf::deserialize(buf).is_err());
276-
let buf = GenericArray::from_slice(&[3, 0, 0, 0, 1]);
277-
assert!(Buf::deserialize(buf).is_err());
271+
let buf = Array([0, 1, 0, 0, 0]);
272+
assert!(Buf::deserialize(&buf).is_err());
273+
let buf = Array([1, 0, 1, 0, 0]);
274+
assert!(Buf::deserialize(&buf).is_err());
275+
let buf = Array([2, 0, 0, 1, 0]);
276+
assert!(Buf::deserialize(&buf).is_err());
277+
let buf = Array([3, 0, 0, 0, 1]);
278+
assert!(Buf::deserialize(&buf).is_err());
278279
}
279280

280281
#[test]
@@ -332,17 +333,17 @@ fn test_read_serialize() {
332333
assert_eq!(&buf3.serialize()[..], &[1, 55, 56, 57]);
333334

334335
// Invalid position
335-
let buf = GenericArray::from_slice(&[0, 0, 0, 0]);
336-
assert!(Buf::deserialize(buf).is_err());
337-
let buf = GenericArray::from_slice(&[5, 0, 0, 0]);
338-
assert!(Buf::deserialize(buf).is_err());
339-
let buf = GenericArray::from_slice(&[10, 0, 0, 0]);
340-
assert!(Buf::deserialize(buf).is_err());
336+
let buf = Array([0, 0, 0, 0]);
337+
assert!(Buf::deserialize(&buf).is_err());
338+
let buf = Array([5, 0, 0, 0]);
339+
assert!(Buf::deserialize(&buf).is_err());
340+
let buf = Array([10, 0, 0, 0]);
341+
assert!(Buf::deserialize(&buf).is_err());
341342
// "Garbage" bytes are not zeroized
342-
let buf = GenericArray::from_slice(&[2, 1, 0, 0]);
343-
assert!(Buf::deserialize(buf).is_err());
344-
let buf = GenericArray::from_slice(&[3, 0, 1, 0]);
345-
assert!(Buf::deserialize(buf).is_err());
346-
let buf = GenericArray::from_slice(&[4, 0, 0, 1]);
347-
assert!(Buf::deserialize(buf).is_err());
343+
let buf = Array([2, 1, 0, 0]);
344+
assert!(Buf::deserialize(&buf).is_err());
345+
let buf = Array([3, 0, 1, 0]);
346+
assert!(Buf::deserialize(&buf).is_err());
347+
let buf = Array([4, 0, 0, 1]);
348+
assert!(Buf::deserialize(&buf).is_err());
348349
}

block-padding/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "block-padding"
3-
version = "0.3.3"
3+
version = "0.4.0-pre"
44
description = "Padding and unpadding of messages divided into blocks."
55
authors = ["RustCrypto Developers"]
66
license = "MIT OR Apache-2.0"
@@ -12,7 +12,7 @@ keywords = ["padding", "pkcs7", "ansix923", "iso7816"]
1212
categories = ["cryptography", "no-std"]
1313

1414
[dependencies]
15-
generic-array = "0.14"
15+
hybrid-array = "=0.2.0-pre.3"
1616

1717
[features]
1818
std = []

0 commit comments

Comments
 (0)