diff options
author | Galen Guyer <galen@galenguyer.com> | 2023-06-05 12:27:14 -0400 |
---|---|---|
committer | Galen Guyer <galen@galenguyer.com> | 2023-06-05 12:27:14 -0400 |
commit | 56a42adc696224bfa9da01dff72664a0a3526f6a (patch) | |
tree | c43feec45c42f0150ea41d3dbfadf7d17ae204cf | |
parent | 0babbabfb23229202dbc07089ac0b2bfc4ea085b (diff) |
wg-rs: add key generation functions
-rw-r--r-- | wg-rs/src/lib.rs | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/wg-rs/src/lib.rs b/wg-rs/src/lib.rs index afe66db..e5fdc39 100644 --- a/wg-rs/src/lib.rs +++ b/wg-rs/src/lib.rs @@ -18,12 +18,53 @@ pub fn list_device_names() -> Vec<String> { interfaces } +pub fn generate_private_key() -> [u8; 32] { + let mut key = [0u8; 32]; + unsafe { + wg_sys::wg_generate_private_key(key.as_mut_ptr()); + } + key +} + +pub fn generate_public_key(mut private_key: [u8; 32]) -> [u8; 32] { + let mut public_key = [0u8; 32]; + unsafe { + wg_sys::wg_generate_public_key(public_key.as_mut_ptr(), private_key.as_mut_ptr()); + } + public_key +} + +pub fn generate_preshared_key() -> [u8; 32] { + let mut key = [0u8; 32]; + unsafe { + wg_sys::wg_generate_preshared_key(key.as_mut_ptr()); + } + key +} + +pub fn key_to_base64(mut key: [u8; 32]) -> String { + let mut encoded = [0i8; 45]; + + unsafe { + wg_sys::wg_key_to_base64(encoded.as_mut_ptr(), key.as_mut_ptr()); + CStr::from_ptr(encoded.as_ptr()) + .to_str() + .unwrap() + .to_string() + } +} + #[cfg(test)] mod tests { use super::*; #[test] fn it_works() { - dbg!(list_device_names()); + let key = generate_private_key(); + let pubkey = generate_public_key(key.clone()); + let psk = generate_preshared_key(); + dbg!(key_to_base64(key)); + dbg!(key_to_base64(pubkey)); + dbg!(key_to_base64(psk)); } } |