Skip to main content

StorageEncryptionLayer

Struct StorageEncryptionLayer 

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

A pure-Rust encryption layer for block storage.

Manages a key store, an encrypted-block index, a bounded audit log, and exposes encrypt/decrypt/rotate/re-encrypt operations.

Implementations§

Source§

impl StorageEncryptionLayer

Source

pub fn new() -> Self

Create a new layer with default configuration and a randomly seeded PRNG.

Source

pub fn with_config(config: SelEncryptionConfig) -> Self

Create a new layer with the given configuration.

Source

pub fn generate_key(&mut self, seed: u64) -> KeyId

Generate a new key derived from seed via xorshift64 and add it to the key store. Returns the new KeyId.

Source

pub fn set_active_key(&mut self, key_id: KeyId) -> Result<(), SelError>

Set the active key. Returns an error if key_id is not in the store.

Source

pub fn rotate_key(&mut self, seed: u64) -> KeyId

Generate a new key (from seed) and make it active. The old key remains in the store so existing encrypted blocks can still be decrypted. Returns the new KeyId.

Source

pub fn active_key_id(&self) -> Result<KeyId, SelError>

Return the active KeyId, or an error if none is set.

Source

pub fn get_key(&self, key_id: &KeyId) -> Option<&SelEncryptionKey>

Look up a key by ID.

Source

pub fn encrypt_block( &mut self, cid: BlockCid, plaintext: &[u8], ) -> Result<Vec<u8>, SelError>

Encrypt a block identified by cid.

Stores a record in the encrypted block index so that decrypt_block can look up the key and nonce by CID.

Source

pub fn decrypt_block( &mut self, cid: BlockCid, ciphertext: &[u8], ) -> Result<Vec<u8>, SelError>

Decrypt a block identified by cid.

Looks up the key and nonce from the block index.

Source

pub fn encrypt_batch( &mut self, blocks: &[(BlockCid, Vec<u8>)], ) -> Vec<Result<Vec<u8>, SelError>>

Encrypt multiple blocks in one call. Each entry returns independently; a failure on one block does not abort the rest.

Source

pub fn re_encrypt( &mut self, cid: BlockCid, ciphertext: &[u8], new_key_id: KeyId, ) -> Result<Vec<u8>, SelError>

Re-encrypt a block with a different key.

Decrypts with the key stored in the index, then re-encrypts with new_key_id and updates the index entry.

Source

pub fn verify_mac(&mut self, cid: BlockCid, data: &[u8]) -> bool

Verify a simple FNV-1a-based MAC for a block.

The expected MAC is computed as fnv1a_64(cid || data) and compared against the FNV-1a hash of the block index entry’s encrypted CID. Returns true if and only if the MACs match.

Source

pub fn encryption_stats(&self) -> SelEncryptionStats

Return current aggregate statistics (snapshot).

Source

pub fn audit_log(&self) -> &VecDeque<EncAuditEntry>

Return a reference to the full audit log.

Source

pub fn block_index(&self) -> &HashMap<BlockCid, SelEncryptedBlockRecord>

Return a reference to the block index.

Source

pub fn key_count(&self) -> usize

Return the number of keys in the key store.

Source

pub fn cipher(&self) -> SelCipher

Return the cipher configured for this layer.

Source

pub fn remove_block(&mut self, cid: &BlockCid) -> bool

Remove the block index entry for cid, if present. Returns true if an entry was removed.

Source

pub fn delete_key(&mut self, key_id: KeyId) -> Result<(), SelError>

Delete a key from the store. Active key is cleared if it matches. Returns an error if the key is not found.

Source

pub fn list_key_ids(&self) -> Vec<KeyId>

List all key IDs in the store.

Source

pub fn clear_audit_log(&mut self)

Clear the audit log.

Trait Implementations§

Source§

impl Default for StorageEncryptionLayer

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

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

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more