Skip to main content

LogCipher

Struct LogCipher 

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

Encrypts and decrypts transaction-log record payloads for one database.

Frame lengths and CRC32C checksums stay cleartext, as do each record’s key epoch and transaction number, so frame scanning, range reads, and recovery truncation need no key. The payload — the transaction’s datoms — does not.

The key set is an immutable snapshot of already-unwrapped storage keys, the same shape EncryptedBlobStore holds: KMS access belongs on database open and key-manifest reload, not on the append path. A rotation replaces the cipher rather than mutating it.

Implementations§

Source§

impl LogCipher

Source

pub fn new( lineage: impl Into<Vec<u8>>, current_epoch: u32, keys: impl IntoIterator<Item = (u32, SecretKey)>, ) -> Result<Self, LogError>

Creates a cipher over every readable epoch, writing under current_epoch.

lineage identifies the database and is authenticated into every record, so a record cannot be moved between databases.

§Errors

Returns LogError::MissingKeyEpoch when current_epoch has no key.

Source

pub fn with_key(lineage: impl Into<Vec<u8>>, epoch: u32, key: SecretKey) -> Self

Creates a single-epoch cipher.

Source

pub fn current_epoch(&self) -> u32

Returns the epoch new records are written under.

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<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> 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.