diff --git a/zeroize/src/lib.rs b/zeroize/src/lib.rs index 5006fb61..ceca6068 100644 --- a/zeroize/src/lib.rs +++ b/zeroize/src/lib.rs @@ -580,6 +580,26 @@ where } } +impl AsRef for Zeroizing +where + T: ?Sized, + Z: AsRef + Zeroize, +{ + fn as_ref(&self) -> &T { + self.0.as_ref() + } +} + +impl AsMut for Zeroizing +where + T: ?Sized, + Z: AsMut + Zeroize, +{ + fn as_mut(&mut self) -> &mut T { + self.0.as_mut() + } +} + impl Zeroize for Zeroizing where Z: Zeroize, @@ -700,6 +720,9 @@ mod tests { #[cfg(feature = "alloc")] use alloc::boxed::Box; + #[cfg(feature = "alloc")] + use alloc::vec::Vec; + #[derive(Clone, Debug, PartialEq)] struct ZeroizedOnDrop(u64); @@ -865,4 +888,16 @@ mod tests { boxed_arr.zeroize(); assert_eq!(boxed_arr.as_ref(), &[0u8; 3]); } + + #[cfg(feature = "alloc")] + #[test] + fn asref() { + let mut buffer: Zeroizing> = Default::default(); + let _asmut: &mut [u8] = buffer.as_mut(); + let _asref: &[u8] = buffer.as_ref(); + + let mut buffer: Zeroizing> = Default::default(); + let _asmut: &mut [u8] = buffer.as_mut(); + let _asref: &[u8] = buffer.as_ref(); + } }