pub struct KeyStore { /* private fields */ }Expand description
Key store for managing Ed25519 keypairs
Uses the OS keyring for secure storage when available, with automatic
fallback to encrypted file-based storage in ~/.aion/keys/.
Implementations§
Source§impl KeyStore
impl KeyStore
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a new key store
Automatically detects whether OS keyring is available and falls back to file-based storage if not.
Sourcepub fn file_based() -> Self
pub fn file_based() -> Self
Create a key store that always uses file-based storage
Useful for testing or environments where keyring access is restricted.
Sourcepub const fn with_storage_dir(storage_dir: PathBuf) -> Self
pub const fn with_storage_dir(storage_dir: PathBuf) -> Self
Create a key store with a custom storage directory
Useful for testing with isolated storage.
Sourcepub fn generate_keypair(
&self,
author_id: AuthorId,
) -> Result<(SigningKey, VerifyingKey)>
pub fn generate_keypair( &self, author_id: AuthorId, ) -> Result<(SigningKey, VerifyingKey)>
Sourcepub fn store_signing_key(
&self,
author_id: AuthorId,
key: &SigningKey,
) -> Result<()>
pub fn store_signing_key( &self, author_id: AuthorId, key: &SigningKey, ) -> Result<()>
Store a signing key
Uses OS keyring when available, otherwise falls back to encrypted file storage.
§Errors
Returns error if storage fails
Sourcepub fn load_signing_key(&self, author_id: AuthorId) -> Result<SigningKey>
pub fn load_signing_key(&self, author_id: AuthorId) -> Result<SigningKey>
Load a signing key
Uses OS keyring when available, otherwise loads from encrypted file storage.
§Errors
Returns error if key not found or access fails
Sourcepub fn delete_signing_key(&self, author_id: AuthorId) -> Result<()>
pub fn delete_signing_key(&self, author_id: AuthorId) -> Result<()>
Sourcepub fn has_signing_key(&self, author_id: AuthorId) -> bool
pub fn has_signing_key(&self, author_id: AuthorId) -> bool
Check if a signing key exists
Sourcepub fn list_keys(&self) -> Result<Vec<AuthorId>>
pub fn list_keys(&self) -> Result<Vec<AuthorId>>
List all stored key IDs (file-based storage only)
Returns author IDs for all keys stored in the keys directory. For keyring-based storage, returns an empty list.
Sourcepub fn export_encrypted(
&self,
author_id: AuthorId,
password: &str,
) -> Result<Vec<u8>>
pub fn export_encrypted( &self, author_id: AuthorId, password: &str, ) -> Result<Vec<u8>>
Export a signing key with password encryption
Returns encrypted bytes that can be written to a file for backup. Format: MAGIC (4) + VERSION (1) + SALT (16) + NONCE (12) + CIPHERTEXT (32+16)
Uses Argon2id for password-based key derivation (memory-hard, resistant to GPU/ASIC attacks) and ChaCha20-Poly1305 for authenticated encryption.
§Errors
Returns error if key not found or encryption fails
Sourcepub fn import_encrypted(
&self,
author_id: AuthorId,
password: &str,
encrypted_data: &[u8],
) -> Result<SigningKey>
pub fn import_encrypted( &self, author_id: AuthorId, password: &str, encrypted_data: &[u8], ) -> Result<SigningKey>
Import a signing key from password-encrypted bytes
Decrypts a key file created by export_encrypted and stores the key
in the OS keyring.
§Errors
Returns error if:
- File format is invalid (wrong magic, unsupported version)
- Decryption fails (wrong password, corrupted data)
- Key storage fails
Trait Implementations§
Auto Trait Implementations§
impl Freeze for KeyStore
impl RefUnwindSafe for KeyStore
impl Send for KeyStore
impl Sync for KeyStore
impl Unpin for KeyStore
impl UnsafeUnpin for KeyStore
impl UnwindSafe for KeyStore
Blanket Implementations§
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
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 more