aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGalen Guyer <galen@galenguyer.com>2023-06-05 12:27:14 -0400
committerGalen Guyer <galen@galenguyer.com>2023-06-05 12:27:14 -0400
commit56a42adc696224bfa9da01dff72664a0a3526f6a (patch)
treec43feec45c42f0150ea41d3dbfadf7d17ae204cf
parent0babbabfb23229202dbc07089ac0b2bfc4ea085b (diff)
wg-rs: add key generation functions
-rw-r--r--wg-rs/src/lib.rs43
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));
}
}