Crates.io | encrypted-sled |
lib.rs | encrypted-sled |
version | 0.2.0 |
source | src |
created_at | 2021-07-27 18:34:29.125335 |
updated_at | 2022-02-23 16:38:08.99338 |
description | provides encryption wrappers to a sled database |
homepage | |
repository | https://github.com/jpopesculian/encrypted-sled |
max_upload_size | |
id | 428057 |
size | 52,485 |
encrypted-sled
is an (almost) drop in replacement / wrapper around the amazing
sled
embedded database. Just configure with an encryption
and use normally.
let cipher = {
use chacha20poly1305::{ChaCha20Poly1305, Key, Nonce};
let mut key = Key::default();
key.copy_from_slice(b"an example very very secret key.");
encrypted_sled::EncryptionCipher::<ChaCha20Poly1305, _>::new(
key,
encrypted_sled::RandNonce::new(rand::thread_rng()),
encrypted_sled::EncryptionMode::default(),
)
};
let db = encrypted_sled::open("my_db", cipher).unwrap();
// insert and get
db.insert(b"yo!", b"v1");
assert_eq!(&db.get(b"yo!").unwrap().unwrap(), b"v1");
// Atomic compare-and-swap.
db.compare_and_swap(
b"yo!", // key
Some(b"v1"), // old value, None for not present
Some(b"v2"), // new value, None for delete
)
.unwrap();
// Iterates over key-value pairs, starting at the given key.
let scan_key: &[u8] = b"a non-present key before yo!";
let mut iter = db.range(scan_key..).unwrap();
assert_eq!(&iter.next().unwrap().unwrap().0, b"yo!");
assert_eq!(iter.next(), None);
db.remove(b"yo!");
assert_eq!(db.get(b"yo!"), Ok(None));
let other_tree = db.open_tree(b"cool db facts").unwrap();
other_tree.insert(
b"k1",
&b"a Db acts like a Tree due to implementing Deref<Target = Tree>"[..]
).unwrap();
A few things are still not implemented:
TransactionalTrees
(e.g. performing a transaction on multiple trees at the same time)A few functions don't handle encryption/decryption gracefully and therefore may cause corrupted data, so please use at your own risk! Encrypted keys will most likely break these
update_and_fetch
and fetch_and_update
License: MIT