pub struct SecretBuffer { /* private fields */ }Expand description
Owned sensitive bytes with redacted formatting and drop-time cleanup.
SecretBuffer is available with the alloc feature. It is intended for
decoded keys, tokens, and other values that should not be accidentally
logged. The buffer exposes contents only through explicit reveal methods.
Spare vector capacity is cleared when wrapping owned bytes. On drop, initialized bytes and vector spare capacity are cleared with the crate’s internal best-effort wipe helpers. This is data-retention reduction, not a formal zeroization guarantee, and it cannot make claims about allocator behavior or historical copies outside the wrapper.
Implementations§
Source§impl SecretBuffer
impl SecretBuffer
Sourcepub fn from_slice(bytes: &[u8]) -> Self
pub fn from_slice(bytes: &[u8]) -> Self
Copies a slice into an owned sensitive buffer.
Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns whether the buffer contains no initialized secret bytes.
Sourcepub fn expose_secret(&self) -> &[u8] ⓘ
pub fn expose_secret(&self) -> &[u8] ⓘ
Reveals the secret bytes.
This method is intentionally named to make secret access explicit at the call site.
Sourcepub fn expose_secret_utf8(&self) -> Result<&str, Utf8Error>
pub fn expose_secret_utf8(&self) -> Result<&str, Utf8Error>
Reveals the secret bytes as UTF-8 text.
This method is intentionally named to make secret access explicit at the call site. Secret material may be arbitrary binary data, so this method is fallible.
Sourcepub fn expose_secret_mut(&mut self) -> &mut [u8] ⓘ
pub fn expose_secret_mut(&mut self) -> &mut [u8] ⓘ
Reveals the secret bytes mutably.
This method is intentionally named to make secret access explicit at the call site.
Sourcepub fn into_exposed_vec(self) -> Vec<u8> ⓘ
pub fn into_exposed_vec(self) -> Vec<u8> ⓘ
Consumes the wrapper and returns the owned secret bytes.
This is an explicit escape hatch for interop with APIs that require an
owned vector. The returned Vec<u8> is no longer redacted by
formatting and will not be cleared by SecretBuffer on drop; callers
that keep handling sensitive data should arrange their own cleanup.
Sourcepub fn try_into_exposed_string(self) -> Result<String, Self>
pub fn try_into_exposed_string(self) -> Result<String, Self>
Consumes the wrapper and returns the owned secret bytes as UTF-8 text.
This is an explicit escape hatch for interop with APIs that require an
owned string. The returned String is no longer redacted by formatting
and will not be cleared by SecretBuffer on drop; callers that keep
handling sensitive data should arrange their own cleanup.
If the secret bytes are not valid UTF-8, the original redacted wrapper is returned unchanged.
Sourcepub fn constant_time_eq(&self, other: &[u8]) -> bool
pub fn constant_time_eq(&self, other: &[u8]) -> bool
Compares this secret to other without short-circuiting on the first
differing byte.
Length and the final equality result remain public. For equal-length inputs, this helper scans every byte before returning. It is constant-time-oriented best effort, not a formal cryptographic constant-time guarantee.
Trait Implementations§
Source§impl Clone for SecretBuffer
Available on crate feature alloc only.
impl Clone for SecretBuffer
alloc only.Source§impl Debug for SecretBuffer
Available on crate feature alloc only.
impl Debug for SecretBuffer
alloc only.Source§impl Display for SecretBuffer
Available on crate feature alloc only.
impl Display for SecretBuffer
alloc only.Source§impl Drop for SecretBuffer
Available on crate feature alloc only.
impl Drop for SecretBuffer
alloc only.Source§impl<const CAP: usize> From<DecodedBuffer<CAP>> for SecretBuffer
Available on crate feature alloc only.
impl<const CAP: usize> From<DecodedBuffer<CAP>> for SecretBuffer
alloc only.Source§fn from(buffer: DecodedBuffer<CAP>) -> Self
fn from(buffer: DecodedBuffer<CAP>) -> Self
Copies visible decoded bytes from a stack-backed buffer into an owned redacted buffer.
The consumed stack-backed buffer clears its backing array when it is dropped at the end of the conversion.
Source§impl<const CAP: usize> From<EncodedBuffer<CAP>> for SecretBuffer
Available on crate feature alloc only.
impl<const CAP: usize> From<EncodedBuffer<CAP>> for SecretBuffer
alloc only.Source§fn from(buffer: EncodedBuffer<CAP>) -> Self
fn from(buffer: EncodedBuffer<CAP>) -> Self
Copies visible encoded bytes from a stack-backed buffer into an owned redacted buffer.
The consumed stack-backed buffer clears its backing array when it is dropped at the end of the conversion.
Source§impl From<String> for SecretBuffer
Available on crate feature alloc only.
impl From<String> for SecretBuffer
alloc only.Source§impl PartialEq<&[u8]> for SecretBuffer
Available on crate feature alloc only.
impl PartialEq<&[u8]> for SecretBuffer
alloc only.Source§impl<const N: usize> PartialEq<&[u8; N]> for SecretBuffer
Available on crate feature alloc only.
impl<const N: usize> PartialEq<&[u8; N]> for SecretBuffer
alloc only.Source§impl PartialEq<&str> for SecretBuffer
Available on crate feature alloc only.
impl PartialEq<&str> for SecretBuffer
alloc only.Source§impl PartialEq<SecretBuffer> for &[u8]
Available on crate feature alloc only.
impl PartialEq<SecretBuffer> for &[u8]
alloc only.Source§fn eq(&self, other: &SecretBuffer) -> bool
fn eq(&self, other: &SecretBuffer) -> bool
self and other values to be equal, and is used by ==.Source§impl<const N: usize> PartialEq<SecretBuffer> for &[u8; N]
Available on crate feature alloc only.
impl<const N: usize> PartialEq<SecretBuffer> for &[u8; N]
alloc only.Source§fn eq(&self, other: &SecretBuffer) -> bool
fn eq(&self, other: &SecretBuffer) -> bool
self and other values to be equal, and is used by ==.Source§impl PartialEq<SecretBuffer> for &str
Available on crate feature alloc only.
impl PartialEq<SecretBuffer> for &str
alloc only.Source§fn eq(&self, other: &SecretBuffer) -> bool
fn eq(&self, other: &SecretBuffer) -> bool
self and other values to be equal, and is used by ==.Source§impl PartialEq<SecretBuffer> for String
Available on crate feature alloc only.
impl PartialEq<SecretBuffer> for String
alloc only.Source§fn eq(&self, other: &SecretBuffer) -> bool
fn eq(&self, other: &SecretBuffer) -> bool
self and other values to be equal, and is used by ==.Source§impl PartialEq<String> for SecretBuffer
Available on crate feature alloc only.
impl PartialEq<String> for SecretBuffer
alloc only.Source§impl PartialEq for SecretBuffer
Available on crate feature alloc only.
impl PartialEq for SecretBuffer
alloc only.Source§impl TryFrom<&[u8]> for SecretBuffer
Available on crate feature alloc only.
impl TryFrom<&[u8]> for SecretBuffer
alloc only.Source§fn try_from(input: &[u8]) -> Result<Self, Self::Error>
fn try_from(input: &[u8]) -> Result<Self, Self::Error>
Decodes strict standard padded Base64 into a redacted owned buffer.
Use Engine::decode_secret or Profile::decode_secret when a
different alphabet, padding mode, or line-wrapping profile is required.
Source§type Error = DecodeError
type Error = DecodeError
Source§impl TryFrom<&str> for SecretBuffer
Available on crate feature alloc only.
impl TryFrom<&str> for SecretBuffer
alloc only.Source§fn try_from(input: &str) -> Result<Self, Self::Error>
fn try_from(input: &str) -> Result<Self, Self::Error>
Decodes strict standard padded Base64 text into a redacted owned buffer.
Use Engine::decode_secret or Profile::decode_secret when a
different alphabet, padding mode, or line-wrapping profile is required.
Source§type Error = DecodeError
type Error = DecodeError
impl Eq for SecretBuffer
alloc only.