pub struct DecodedBuffer<const CAP: usize> { /* private fields */ }Expand description
Stack-backed decoded Base64 output.
This type is intended for short decoded values where heap allocation would be unnecessary but manually sizing and passing a separate output slice is noisy. Decoded data may be binary or secret-bearing, so formatting is redacted and contents are exposed only through explicit byte accessors.
The backing array is cleared when the value is dropped. This is best-effort data-retention reduction and is not a formal zeroization guarantee.
On wasm32 targets, the wipe barrier uses only a compiler fence. The wasm
runtime JIT may still optimize or retain cleared bytes in ways this crate
cannot control. wasm32 builds fail closed by default; enable
allow-wasm32-best-effort-wipe only when the deployment explicitly accepts
this limitation and applies its own memory strategy around stack-backed
buffers.
Implementations§
Source§impl<const CAP: usize> DecodedBuffer<CAP>
impl<const CAP: usize> DecodedBuffer<CAP>
Sourcepub const fn is_full(&self) -> bool
pub const fn is_full(&self) -> bool
Returns whether the visible decoded bytes fill the stack backing array.
Sourcepub const fn remaining_capacity(&self) -> usize
pub const fn remaining_capacity(&self) -> usize
Returns the number of unused bytes in the stack backing array.
Sourcepub fn as_utf8(&self) -> Result<&str, Utf8Error>
pub fn as_utf8(&self) -> Result<&str, Utf8Error>
Returns the visible decoded bytes as UTF-8 text.
Decoded Base64 output is arbitrary bytes, so this method is fallible.
Use Self::as_bytes when the decoded payload is binary or when text
validation belongs to a higher protocol layer.
Sourcepub fn constant_time_eq_public_len(&self, other: &[u8]) -> bool
pub fn constant_time_eq_public_len(&self, other: &[u8]) -> bool
Compares this decoded output to other without short-circuiting on the
first differing byte.
Length and the final equality result remain public. Different lengths
return false immediately; use this helper only when the compared
lengths are public protocol facts or have been normalized by the
caller. 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. This comparison is deliberately
explicit: redacted buffer types do not implement PartialEq because
== would make a best-effort helper look like a formal token/MAC
comparison primitive.
Do not use this helper as the sole MAC, bearer-token, password-hash, or
authentication-secret comparison primitive in high-assurance systems.
Applications that can admit dependencies should use a reviewed
constant-time comparison primitive, such as subtle, at the protocol
boundary.
Sourcepub fn into_exposed_array(self) -> ExposedDecodedArray<CAP>
pub fn into_exposed_array(self) -> ExposedDecodedArray<CAP>
Consumes the wrapper and returns the backing array plus visible length inside a drop-wiping exposed wrapper.
This is an explicit escape hatch for no-alloc interop with APIs that
require ownership of a fixed array. The returned
ExposedDecodedArray remains redacted by formatting and clears its
backing array on drop.
Sourcepub fn clear_tail(&mut self)
pub fn clear_tail(&mut self)
Clears bytes after the visible prefix.
Trait Implementations§
Source§impl<const CAP: usize> Clone for DecodedBuffer<CAP>
impl<const CAP: usize> Clone for DecodedBuffer<CAP>
Source§fn clone(&self) -> Self
fn clone(&self) -> Self
Clones the visible decoded bytes into a second stack-backed buffer.
Security note: cloning duplicates decoded bytes in memory. Both the
original and the clone must be dropped or explicitly cleared before the
duplicated bytes are gone on the crate’s best-effort cleanup path. The
compiler may also create temporary stack copies while performing the
copy; those intermediates are outside this crate’s cleanup boundary. For
high-assurance applications, avoid cloning decoded key material and use
SecretBuffer for heap-owned secrets without a Clone implementation.
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<const CAP: usize> Debug for DecodedBuffer<CAP>
impl<const CAP: usize> Debug for DecodedBuffer<CAP>
Source§impl<const CAP: usize> Default for DecodedBuffer<CAP>
impl<const CAP: usize> Default for DecodedBuffer<CAP>
Source§impl<const CAP: usize> Drop for DecodedBuffer<CAP>
impl<const CAP: usize> Drop for DecodedBuffer<CAP>
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> FromStr for DecodedBuffer<CAP>
impl<const CAP: usize> FromStr for DecodedBuffer<CAP>
Source§fn from_str(input: &str) -> Result<Self, Self::Err>
fn from_str(input: &str) -> Result<Self, Self::Err>
Decodes strict standard padded Base64 text into a stack-backed buffer.
Use crate::Engine::decode_buffer or crate::Profile::decode_buffer
when a different alphabet, padding mode, or line-wrapping profile is
required. These conversions always use crate::STANDARD; URL-safe,
bcrypt, crypt, MIME, PEM, and custom alphabets must use an explicit
engine or profile.
§Security
This idiomatic conversion uses the strict standard decoder, not the
constant-time-oriented decoder. It may branch or return early on
malformed input and reports exact DecodeError positions. For
secret-bearing tokens or key material where malformed-input timing
matters, use crate::ct::CtEngine::decode_buffer through
crate::ct::STANDARD instead.
Source§type Err = DecodeError
type Err = DecodeError
Source§impl<const CAP: usize, const N: usize> TryFrom<&[u8; N]> for DecodedBuffer<CAP>
impl<const CAP: usize, const N: usize> TryFrom<&[u8; N]> for DecodedBuffer<CAP>
Source§fn try_from(input: &[u8; N]) -> Result<Self, Self::Error>
fn try_from(input: &[u8; N]) -> Result<Self, Self::Error>
Decodes a strict standard padded Base64 byte array into a stack-backed buffer.
Use crate::Engine::decode_buffer or crate::Profile::decode_buffer
when a different alphabet, padding mode, or line-wrapping profile is
required. These conversions always use crate::STANDARD; URL-safe,
bcrypt, crypt, MIME, PEM, and custom alphabets must use an explicit
engine or profile.
§Security
This idiomatic conversion uses the strict standard decoder, not the
constant-time-oriented decoder. It may branch or return early on
malformed input and reports exact DecodeError positions. For
secret-bearing tokens or key material where malformed-input timing
matters, use crate::ct::CtEngine::decode_buffer through
crate::ct::STANDARD instead.
Source§type Error = DecodeError
type Error = DecodeError
Source§impl<const CAP: usize> TryFrom<&[u8]> for DecodedBuffer<CAP>
impl<const CAP: usize> TryFrom<&[u8]> for DecodedBuffer<CAP>
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 stack-backed buffer.
Use crate::Engine::decode_buffer or crate::Profile::decode_buffer
when a different alphabet, padding mode, or line-wrapping profile is
required. These conversions always use crate::STANDARD; URL-safe,
bcrypt, crypt, MIME, PEM, and custom alphabets must use an explicit
engine or profile.
§Security
This idiomatic conversion uses the strict standard decoder, not the
constant-time-oriented decoder. It may branch or return early on
malformed input and reports exact DecodeError positions. For
secret-bearing tokens or key material where malformed-input timing
matters, use crate::ct::CtEngine::decode_buffer through
crate::ct::STANDARD instead.
Source§type Error = DecodeError
type Error = DecodeError
Source§impl<const CAP: usize> TryFrom<&str> for DecodedBuffer<CAP>
impl<const CAP: usize> TryFrom<&str> for DecodedBuffer<CAP>
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 stack-backed buffer.
Use crate::Engine::decode_buffer or crate::Profile::decode_buffer
when a different alphabet, padding mode, or line-wrapping profile is
required. These conversions always use crate::STANDARD; URL-safe,
bcrypt, crypt, MIME, PEM, and custom alphabets must use an explicit
engine or profile.
§Security
This idiomatic conversion uses the strict standard decoder, not the
constant-time-oriented decoder. It may branch or return early on
malformed input and reports exact DecodeError positions. For
secret-bearing tokens or key material where malformed-input timing
matters, use crate::ct::CtEngine::decode_buffer through
crate::ct::STANDARD instead.