Skip to main content

SecretVec

Struct SecretVec 

Source
pub struct SecretVec { /* private fields */ }
Expand description

Variable-size secret vector that wipes storage it owns

This type provides:

  • Automatic zeroization on drop
  • Secure cloning that preserves security properties
  • Dynamic sizing with secure memory management

Implementations§

Source§

impl SecretVec

Source

pub fn new(data: Vec<u8>) -> Self

Create a new secret vector with the given data.

The current allocation and its spare capacity become protected by this type. Allocations the caller freed before passing this Vec cannot be recovered or retroactively wiped.

Source

pub fn from_slice(slice: &[u8]) -> Self

Create a secret vector from a slice

Source

pub fn empty() -> Self

Create an empty secret vector

Source

pub fn with_capacity(capacity: usize) -> Self

Create a secret vector with the specified capacity

Source

pub fn len(&self) -> usize

Get the length of the vector

Source

pub fn is_empty(&self) -> bool

Check if the vector is empty

Source

pub fn as_slice(&self) -> &[u8]

Get a reference to the inner data

Source

pub fn as_mut_slice(&mut self) -> &mut [u8]

Get a mutable reference to the inner data

Source

pub fn capacity(&self) -> usize

Get the allocation capacity.

Source

pub fn extend_from_slice(&mut self, slice: &[u8])

Extend the vector with additional data

Source

pub fn resize(&mut self, new_len: usize, value: u8)

Resize the vector to the specified length

Source

pub fn truncate(&mut self, len: usize)

Truncate the vector to the specified length

Source

pub fn clear(&mut self)

Remove all bytes while retaining a fully zeroed allocation.

Source

pub fn push(&mut self, value: u8)

Append one byte, securely replacing the allocation when it is full.

Source

pub fn pop(&mut self) -> Option<u8>

Remove and return the last byte, wiping its allocation slot first.

Source

pub fn reserve(&mut self, additional: usize)

Reserve room for at least additional more bytes.

Unlike Vec::reserve, this never asks the allocator to resize the live secret allocation. It copies into a new allocation and wipes the old allocation before releasing it.

Source

pub fn shrink_to_fit(&mut self)

Reduce capacity to the current length while wiping the old allocation.

Trait Implementations§

Source§

impl AsMut<[u8]> for SecretVec

Available on crate feature alloc only.
Source§

fn as_mut(&mut self) -> &mut [u8]

Converts this type into a mutable reference of the (usually inferred) input type.
Source§

impl AsRef<[u8]> for SecretVec

Available on crate feature alloc only.
Source§

fn as_ref(&self) -> &[u8]

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl Clone for SecretVec

Available on crate feature alloc only.
Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SecretVec

Available on crate feature alloc only.
Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Drop for SecretVec

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more
Source§

impl From<Vec<u8>> for SecretVec

Available on crate feature alloc only.
Source§

fn from(data: Vec<u8>) -> Self

Converts to this type from the input type.
Source§

impl SecureZeroingType for SecretVec

Available on crate feature alloc only.
Source§

fn zeroed() -> Self

Create a zeroed instance
Source§

fn secure_clone(&self) -> Self

Create a secure clone that preserves security properties Read more
Source§

impl Zeroize for SecretVec

Source§

fn zeroize(&mut self)

Zero out this object from memory using Rust intrinsics which ensure the zeroization operation is not “optimized away” by the compiler.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> ConstantTimeEquals for T
where T: AsRef<[u8]>,

Source§

fn ct_equals(&self, other: &T) -> bool

Compare two values in constant time
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V