From a4a049f5d7419216909de5b966e0dc98bf71bac7 Mon Sep 17 00:00:00 2001 From: Steve Fan <29133953+stevefan1999-personal@users.noreply.github.com> Date: Wed, 28 May 2025 14:26:16 +0800 Subject: [PATCH 1/3] make zeroize optional --- Cargo.toml | 5 +++-- src/strobe.rs | 11 +++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 5842c6b..7baeae0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ features = ["nightly"] [dependencies] keccak = { version = "0.1.0", default-features = false } byteorder = { version = "1.2.4", default-features = false } -zeroize = { version = "1", default-features = false, features = ["zeroize_derive"] } +zeroize = { version = "1", optional = true, default-features = false, features = ["zeroize_derive"] } rand_core = { version = "0.5", default-features = false } hex = {version = "0.3", default-features = false, optional = true} @@ -30,7 +30,8 @@ curve25519-dalek = "2" rand_chacha = "0.2" [features] -default = ["std"] +default = ["std", "zeroize"] nightly = [] debug-transcript = ["hex"] std = ["rand_core/std", "byteorder/std"] +zeroize = ["dep:zeroize"] \ No newline at end of file diff --git a/src/strobe.rs b/src/strobe.rs index ff0436f..7ca65c1 100644 --- a/src/strobe.rs +++ b/src/strobe.rs @@ -3,7 +3,9 @@ use core::ops::{Deref, DerefMut}; use keccak; -use zeroize::Zeroize; + +#[cfg(feature = "zeroize")] +use zeroize::{Zeroize, ZeroizeOnDrop}; /// Strobe R value; security level 128 is hardcoded const STROBE_R: u8 = 166; @@ -22,15 +24,16 @@ fn transmute_state(st: &mut AlignedKeccakState) -> &mut [u64; 25] { /// This is a wrapper around 200-byte buffer that's always 8-byte aligned /// to make pointers to it safely convertible to pointers to [u64; 25] /// (since u64 words must be 8-byte aligned) -#[derive(Clone, Zeroize)] -#[zeroize(drop)] +#[derive(Clone)] +#[cfg_attr(feature = "zeroize", derive(Zeroize, ZeroizeOnDrop))] #[repr(align(8))] struct AlignedKeccakState([u8; 200]); /// A Strobe context for the 128-bit security level. /// /// Only `meta-AD`, `AD`, `KEY`, and `PRF` operations are supported. -#[derive(Clone, Zeroize)] +#[derive(Clone)] +#[cfg_attr(feature = "zeroize", derive(Zeroize, ZeroizeOnDrop))] pub struct Strobe128 { state: AlignedKeccakState, pos: u8, From 9e4dd8c9393d9e4b0448f2ad13eeb94ac4109f90 Mon Sep 17 00:00:00 2001 From: Steve Fan <29133953+stevefan1999-personal@users.noreply.github.com> Date: Wed, 28 May 2025 14:29:43 +0800 Subject: [PATCH 2/3] fixup! make zeroize optional --- src/transcript.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/transcript.rs b/src/transcript.rs index 9b72f48..d605066 100644 --- a/src/transcript.rs +++ b/src/transcript.rs @@ -1,5 +1,6 @@ use rand_core; -use zeroize::Zeroize; +#[cfg(feature = "zeroize")] +use zeroize::{Zeroize, ZeroizeOnDrop}; use crate::strobe::Strobe128; @@ -50,7 +51,8 @@ fn encode_usize_as_u32(x: usize) -> [u8; 4] { /// implement a proof system, see the documentation at /// [merlin.cool](https://merlin.cool), particularly the [Using /// Merlin](https://merlin.cool/use/index.html) section. -#[derive(Clone, Zeroize)] +#[derive(Clone)] +#[cfg_attr(feature = "zeroize", derive(Zeroize, ZeroizeOnDrop))] pub struct Transcript { strobe: Strobe128, } From e9b9078ed87e4f61a919f26f2f59c9c7087e9f1a Mon Sep 17 00:00:00 2001 From: Steve Fan <29133953+stevefan1999-personal@users.noreply.github.com> Date: Wed, 28 May 2025 14:33:28 +0800 Subject: [PATCH 3/3] Update Cargo.toml --- Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 7baeae0..d695987 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -30,8 +30,8 @@ curve25519-dalek = "2" rand_chacha = "0.2" [features] -default = ["std", "zeroize"] +default = ["std"] nightly = [] debug-transcript = ["hex"] std = ["rand_core/std", "byteorder/std"] -zeroize = ["dep:zeroize"] \ No newline at end of file +zeroize = ["dep:zeroize"]