pub struct EntryEncryptor { /* private fields */ }Expand description
Encrypts and decrypts Raft log entry payloads using AES-256-GCM.
The AES key and nonce for each entry are deterministically derived from the master key and the entry index via HKDF-SHA256, ensuring unique key material per entry without the need for a random nonce.
Internally backed by an Arc<RwLock<KeyManager>> so that key rotation
is supported transparently. EntryEncryptor::new wraps a single key
in a 1-version KeyManager; EntryEncryptor::with_key_manager takes
a shared KeyManager for the rotation-aware path.
Implementations§
Source§impl EntryEncryptor
impl EntryEncryptor
Sourcepub fn new(key: LogEncryptionKey) -> Self
pub fn new(key: LogEncryptionKey) -> Self
Create a new EntryEncryptor backed by a single fixed key.
Convenience constructor: wraps key in a one-version
KeyManager internally. Equivalent to
EntryEncryptor::with_key_manager(Arc::new(RwLock::new(KeyManager::new(key, 1)))).
Sourcepub fn with_key_manager(keys: Arc<RwLock<KeyManager>>) -> Self
pub fn with_key_manager(keys: Arc<RwLock<KeyManager>>) -> Self
Create an EntryEncryptor backed by a shared, rotation-aware
KeyManager.
Both encryption and decryption read through the manager. Encryption always uses the manager’s current key (and tags the resulting payload with that version); decryption looks up the version stored in the payload.
Sourcepub fn key_manager(&self) -> &Arc<RwLock<KeyManager>> ⓘ
pub fn key_manager(&self) -> &Arc<RwLock<KeyManager>> ⓘ
Borrow the inner KeyManager handle for callers that want to
drive rotation directly.
Sourcepub fn encrypt(
&self,
entry_index: u64,
plaintext: &[u8],
) -> RaftResult<EncryptedPayload>
pub fn encrypt( &self, entry_index: u64, plaintext: &[u8], ) -> RaftResult<EncryptedPayload>
Encrypt plaintext associated with entry_index using the current
key version.
The returned EncryptedPayload contains the GCM ciphertext (with auth tag),
the nonce that was used, and the KeyVersion of the master key.
§Errors
Returns RaftError::StorageError on any cryptographic failure.
Sourcepub fn decrypt(
&self,
entry_index: u64,
payload: &EncryptedPayload,
) -> RaftResult<Vec<u8>>
pub fn decrypt( &self, entry_index: u64, payload: &EncryptedPayload, ) -> RaftResult<Vec<u8>>
Decrypt payload associated with entry_index.
The AES key is re-derived from the master key whose version is
recorded in payload.key_version (looked up in the
KeyManager). The nonce stored in the payload is used for
decryption.
§Errors
Returns RaftError::StorageError when the recorded key version
has been pruned from the KeyManager history, when key
derivation fails, or when GCM authentication fails (including
tampered ciphertext).
Auto Trait Implementations§
impl !RefUnwindSafe for EntryEncryptor
impl !UnwindSafe for EntryEncryptor
impl Freeze for EntryEncryptor
impl Send for EntryEncryptor
impl Sync for EntryEncryptor
impl Unpin for EntryEncryptor
impl UnsafeUnpin for EntryEncryptor
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.