#libsodium #holochain #api-access #holo #nacl #private-key

sodoken

libsodium wrapper providing tokio safe memory secure api access

33 releases

0.0.11 Mar 1, 2024
0.0.9 Apr 24, 2023
0.0.8 Feb 6, 2023
0.0.7 Dec 13, 2022
0.0.1-alpha.2 Dec 18, 2020

#85 in Cryptography

Download history 174/week @ 2023-12-25 199/week @ 2024-01-01 736/week @ 2024-01-08 695/week @ 2024-01-15 1022/week @ 2024-01-22 828/week @ 2024-01-29 982/week @ 2024-02-05 357/week @ 2024-02-12 528/week @ 2024-02-19 787/week @ 2024-02-26 937/week @ 2024-03-04 751/week @ 2024-03-11 1611/week @ 2024-03-18 670/week @ 2024-03-25 800/week @ 2024-04-01 768/week @ 2024-04-08

3,897 downloads per month
Used in 47 crates (9 directly)

MIT/Apache

205KB
4.5K SLoC

sodoken

lib SOdium + haDOKEN = SODOKEN!

libsodium wrapper providing tokio safe memory secure api access.

Project Forum Chat

License: MIT License: Apache-2.0

This crate-level documentation mainly describes how to work with the sodoken buffer types. Please see the individual module-level documentation for usage examples and descriptions of individual crypto functions.

Sodoken Buffers

Sodoken buffers provide implementors with the ability to optionally use secured memory (mlock + mprotect) to mitigate some secret exposure channels like disk swapping. Buffers created with new_mem_locked are secured, buffers created with new_no_lock are not.

Please note that on most systems, locked memory is a finite resource, so you should use it for private keys, but not everything.

All buffers are shallow-cloned by default, so buf.clone() or any of the buf.to_*() apis will give you a reference to the same buffer. You can deep clone the buffers with the buf.deep_clone_mem_locked() or buf.deep_clone_no_lock() apis.

In general, the steps for working with sodoken apis are:

  • create a writable buffer
  • shallow clone that buffer into an api
  • translate that buffer into a read-only version for future use
Buffer Example
// create a writable buffer
let salt: sodoken::BufWriteSized<{ sodoken::hash::argon2id::SALTBYTES }> =
    sodoken::BufWriteSized::new_no_lock();

// shallow clone that buffer into an api
sodoken::random::bytes_buf(salt.clone()).await.unwrap();

// translate that buffer into a read-only version for future use
let salt = salt.to_read_sized();

License: MIT OR Apache-2.0

Dependencies

~5–14MB
~107K SLoC