From e3c2455f636b54267aa3b155bfff5ac4033489b1 Mon Sep 17 00:00:00 2001 From: Michael Rosenberg Date: Tue, 8 Jul 2025 15:06:07 -0400 Subject: [PATCH] x: Remove Zeroize impl for secret types (#782) --- x25519-dalek/CHANGELOG.md | 4 ++++ x25519-dalek/src/x25519.rs | 28 ---------------------------- 2 files changed, 4 insertions(+), 28 deletions(-) diff --git a/x25519-dalek/CHANGELOG.md b/x25519-dalek/CHANGELOG.md index 10e1a54..6695492 100644 --- a/x25519-dalek/CHANGELOG.md +++ b/x25519-dalek/CHANGELOG.md @@ -2,6 +2,10 @@ Entries are listed in reverse chronological order. +## Unreleased + +* Remove `Zeroize` impl for `x25519::{EphemeralSecret, ReusableSecret, SharedSecret, StaticSecret}` to prevent misuse. These are now only zeroized on drop. + # 2.x Series * Note: All `x255919-dalek` 2.x releases are in sync with the underlying `curve25519-dalek` 4.x releases. diff --git a/x25519-dalek/src/x25519.rs b/x25519-dalek/src/x25519.rs index c1f8281..2d155f0 100644 --- a/x25519-dalek/src/x25519.rs +++ b/x25519-dalek/src/x25519.rs @@ -111,13 +111,6 @@ impl<'a> From<&'a EphemeralSecret> for PublicKey { impl Drop for EphemeralSecret { fn drop(&mut self) { #[cfg(feature = "zeroize")] - self.zeroize(); - } -} - -#[cfg(feature = "zeroize")] -impl Zeroize for EphemeralSecret { - fn zeroize(&mut self) { self.0.zeroize(); } } @@ -182,13 +175,6 @@ impl<'a> From<&'a ReusableSecret> for PublicKey { impl Drop for ReusableSecret { fn drop(&mut self) { #[cfg(feature = "zeroize")] - self.zeroize(); - } -} - -#[cfg(all(feature = "reusable_secrets", feature = "zeroize"))] -impl Zeroize for ReusableSecret { - fn zeroize(&mut self) { self.0.zeroize(); } } @@ -279,13 +265,6 @@ impl AsRef<[u8]> for StaticSecret { impl Drop for StaticSecret { fn drop(&mut self) { #[cfg(feature = "zeroize")] - self.zeroize(); - } -} - -#[cfg(all(feature = "static_secrets", feature = "zeroize"))] -impl Zeroize for StaticSecret { - fn zeroize(&mut self) { self.0.zeroize(); } } @@ -362,13 +341,6 @@ impl AsRef<[u8]> for SharedSecret { impl Drop for SharedSecret { fn drop(&mut self) { #[cfg(feature = "zeroize")] - self.zeroize(); - } -} - -#[cfg(feature = "zeroize")] -impl Zeroize for SharedSecret { - fn zeroize(&mut self) { self.0.zeroize(); } }