#key #keychain #key-store #integration #securely #storing #linux

keystore-rs

A Rust library for securely generating, storing, and managing cryptographic keys with support for macOS and Linux keychain integration

5 releases

0.3.1 Feb 7, 2025
0.3.0 Jan 16, 2025
0.1.2 Oct 9, 2024
0.1.1 Oct 9, 2024
0.1.0 Jul 17, 2024

#497 in Cryptography

Download history 9/week @ 2024-11-13 126/week @ 2024-11-20 69/week @ 2024-11-27 113/week @ 2024-12-04 218/week @ 2024-12-11 115/week @ 2024-12-18 18/week @ 2024-12-25 47/week @ 2025-01-01 119/week @ 2025-01-08 297/week @ 2025-01-15 169/week @ 2025-01-22 221/week @ 2025-01-29 303/week @ 2025-02-05 284/week @ 2025-02-12 146/week @ 2025-02-19 144/week @ 2025-02-26

942 downloads per month

MIT license

15KB
260 lines

keystore

Keystore-rs is a Rust library for securely storing and managing cryptographic keys.

Features

  • Secure ED25519 key generation
  • Key storage and retrieval
  • Supports macOS and Linux keychain integration

Installation

Add the following to your Cargo.toml:

[dependencies]
keystore-rs = "0.3.0"

or

cargo add keystore-rs

Usage

The library provides two main storage implementations:

  • FileStore: Encrypted file-based storage using AES-256-GCM
  • KeyChain: System keychain integration (macOS/Linux)

File-based Storage

use keystore_rs::{create_signing_key, KeyStore, FileStore};
use anyhow::Result;

fn main() -> Result<()> {
    // Set up symmetric key for file encryption (required for FileStore)
    std::env::set_var("SYMMETRIC_KEY", "your-32-byte-hex-encoded-key");
    
    // Create a file-based keystore
    let file_store = FileStore::new("~/.keystore/keys.json")?;

    // Create and store a new signing key
    let signing_key = create_signing_key();
    file_store.add_signing_key("my-key-1", &signing_key)?;

    // Retrieve the signing key (will return an error if it doesnt exist)
    let retrieved_key = file_store.get_signing_key("my-key-1")?;

    // Get or create a key (creates the key if it doesn't exist)
    let key = file_store.get_or_create_signing_key("my-key-2")?;
    
    Ok(())
}

System Keychain

use keystore_rs::{create_signing_key, KeyStore, KeyChain};
use anyhow::Result;

fn main() -> Result<()> {
    let keychain = KeyChain;
    
    // Create and store a new signing key
    let signing_key = create_signing_key();
    keychain.add_signing_key("my-key-1", &signing_key)?;

    // Retrieve the signing key
    let retrieved_key = keychain.get_signing_key("my-key-1")?;

    // Get or create a key (creates if doesn't exist)
    let key = keychain.get_or_create_signing_key("my-key-2")?;
    
    Ok(())
}

Contributing

Contributions are welcome! Please feel free to get in touch.

License

This project is licensed under the MIT License.

Dependencies

~4–12MB
~150K SLoC