From e41cb89276183a450c033d35e465649b621511e9 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: Fri, 10 Apr 2026 18:18:59 +0300 Subject: [PATCH 1/3] belt-ctr: use type alias to define `BeltCtr` --- belt-ctr/README.md | 2 +- belt-ctr/src/lib.rs | 33 +++++++++++++++++++-------------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/belt-ctr/README.md b/belt-ctr/README.md index 533f8da..841eca5 100644 --- a/belt-ctr/README.md +++ b/belt-ctr/README.md @@ -32,7 +32,7 @@ let ciphertext: &[u8; 34] = &hex!( "7D1B" ); -let mut cipher: BeltCtr = BeltCtr::new_from_slices(key, iv).unwrap(); +let mut cipher = BeltCtr::new_from_slices(key, iv).unwrap(); // encrypt in-place let mut buf = plaintext.clone(); diff --git a/belt-ctr/src/lib.rs b/belt-ctr/src/lib.rs index 9e85e73..06d4d36 100644 --- a/belt-ctr/src/lib.rs +++ b/belt-ctr/src/lib.rs @@ -20,11 +20,16 @@ use core::fmt; #[cfg(feature = "zeroize")] use cipher::zeroize::{Zeroize, ZeroizeOnDrop}; -/// Byte-level BelT CTR -pub type BeltCtr = StreamCipherCoreWrapper>; +/// Byte-level BelT CTR generic over block cipher implementation +pub type GenericBeltCtr = StreamCipherCoreWrapper>; +/// Byte-level BelT CTR +pub type BeltCtr = GenericBeltCtr; /// Block-level BelT CTR -pub struct BeltCtrCore +pub type BeltCtrCore = GenericBeltCtrCore; + +/// Block-level BelT CTR generic over block cipher implementation +pub struct GenericBeltCtrCore where C: BlockCipherEncrypt + BlockSizeUser, { @@ -33,7 +38,7 @@ where s_init: u128, } -impl StreamCipherCore for BeltCtrCore +impl StreamCipherCore for GenericBeltCtrCore where C: BlockCipherEncrypt + BlockSizeUser, { @@ -65,7 +70,7 @@ where } } -impl StreamCipherSeekCore for BeltCtrCore +impl StreamCipherSeekCore for GenericBeltCtrCore where C: BlockCipherEncrypt + BlockSizeUser, { @@ -80,28 +85,28 @@ where } } -impl BlockSizeUser for BeltCtrCore +impl BlockSizeUser for GenericBeltCtrCore where C: BlockCipherEncrypt + BlockSizeUser, { type BlockSize = C::BlockSize; } -impl IvSizeUser for BeltCtrCore +impl IvSizeUser for GenericBeltCtrCore where C: BlockCipherEncrypt + BlockSizeUser, { type IvSize = C::BlockSize; } -impl InnerUser for BeltCtrCore +impl InnerUser for GenericBeltCtrCore where C: BlockCipherEncrypt + BlockSizeUser, { type Inner = C; } -impl InnerIvInit for BeltCtrCore +impl InnerIvInit for GenericBeltCtrCore where C: BlockCipherEncrypt + BlockSizeUser, { @@ -118,7 +123,7 @@ where } } -impl IvState for BeltCtrCore +impl IvState for GenericBeltCtrCore where C: BlockCipherEncrypt + BlockCipherDecrypt + BlockSizeUser, { @@ -129,7 +134,7 @@ where } } -impl AlgorithmName for BeltCtrCore +impl AlgorithmName for GenericBeltCtrCore where C: BlockCipherEncrypt + BlockSizeUser + AlgorithmName, { @@ -140,7 +145,7 @@ where } } -impl fmt::Debug for BeltCtrCore +impl fmt::Debug for GenericBeltCtrCore where C: BlockCipherEncrypt + BlockSizeUser + AlgorithmName, { @@ -152,7 +157,7 @@ where } } -impl Drop for BeltCtrCore +impl Drop for GenericBeltCtrCore where C: BlockCipherEncrypt + BlockSizeUser, { @@ -166,7 +171,7 @@ where } #[cfg(feature = "zeroize")] -impl ZeroizeOnDrop for BeltCtrCore where +impl ZeroizeOnDrop for GenericBeltCtrCore where C: BlockCipherEncrypt + BlockSizeUser + ZeroizeOnDrop { } From 4f3c1ff9fb45ae515962a0d5729280bbd28a8a80 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: Fri, 10 Apr 2026 18:22:19 +0300 Subject: [PATCH 2/3] tweak --- belt-ctr/src/lib.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/belt-ctr/src/lib.rs b/belt-ctr/src/lib.rs index 06d4d36..70b0ca6 100644 --- a/belt-ctr/src/lib.rs +++ b/belt-ctr/src/lib.rs @@ -20,13 +20,12 @@ use core::fmt; #[cfg(feature = "zeroize")] use cipher::zeroize::{Zeroize, ZeroizeOnDrop}; -/// Byte-level BelT CTR generic over block cipher implementation -pub type GenericBeltCtr = StreamCipherCoreWrapper>; - /// Byte-level BelT CTR pub type BeltCtr = GenericBeltCtr; /// Block-level BelT CTR pub type BeltCtrCore = GenericBeltCtrCore; +/// Byte-level BelT CTR generic over block cipher implementation +pub type GenericBeltCtr = StreamCipherCoreWrapper>; /// Block-level BelT CTR generic over block cipher implementation pub struct GenericBeltCtrCore From 0abb21555c2b1ca421c19d317574ef0302e5ea66 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: Fri, 10 Apr 2026 18:26:59 +0300 Subject: [PATCH 3/3] Update changelog --- belt-ctr/CHANGELOG.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/belt-ctr/CHANGELOG.md b/belt-ctr/CHANGELOG.md index 82958b1..70629ee 100644 --- a/belt-ctr/CHANGELOG.md +++ b/belt-ctr/CHANGELOG.md @@ -5,5 +5,19 @@ 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.2.0 (UNRELEASED) +## Added +- `GenericBeltCtr` and `GenericBeltCtrCore` types ([#112]) + +## Changed +- Bump `cipher` from `0.4` to `0.5` ([#56]) +- Edition changed to 2024 and MSRV bumped to 1.85 ([#76]) +- Relax MSRV policy and allow MSRV bumps in patch releases +- Use type aliases instead of type defaults to define default `belt-block` implementation ([#112]) + +[#56]: https://github.com/RustCrypto/block-modes/pull/56 +[#76]: https://github.com/RustCrypto/block-modes/pull/76 +[#112]: https://github.com/RustCrypto/block-modes/pull/112 + ## 0.1.0 (2023-04-02) - Initial release