Skip to main content

devops_armory/crypt/
keystore.rs

1use libsodium_rs::{self, ensure_init};
2use libsodium_rs::crypto_box;
3
4use std::fs;
5use std::path::Path;
6
7/// Keystore function
8/// Create and store keys as u8 bytes. Keys can be used to crypt/decrypt data
9pub fn keystore(
10    server_pub_key_path: &Path,
11    server_priv_key_path: &Path,
12    client_pub_key: &Path,
13    client_priv_key: &Path,
14    nonce_key: &Path
15) {
16    // Initialize libsodium
17    ensure_init().expect("Failed to initialize libsodium");
18
19    let server_keypair = crypto_box::KeyPair::generate();
20    let server_pk = server_keypair.public_key;
21    let server_sk = server_keypair.secret_key;
22    let client_keypair = crypto_box::KeyPair::generate();
23    let client_pk = client_keypair.public_key;
24    let client_sk = client_keypair.secret_key;
25
26    // Write Server Keypair into files
27    let a = server_pk.as_bytes();
28    let b = server_sk.as_bytes();
29    fs::write(server_pub_key_path, a).unwrap();
30    fs::write(server_priv_key_path, b).unwrap();
31
32    // Write Client Keypair into files
33    let c = client_pk.as_bytes();
34    let d = client_sk.as_bytes();
35    fs::write(client_pub_key, c).unwrap();
36    fs::write(client_priv_key, d).unwrap();
37
38    // Generate a random nonce
39    let nonce = crypto_box::Nonce::generate();
40    fs::write(nonce_key, &nonce).unwrap();
41
42}