diff options
author | Galen Guyer <galen@galenguyer.com> | 2023-06-05 12:33:23 -0400 |
---|---|---|
committer | Galen Guyer <galen@galenguyer.com> | 2023-06-05 12:33:45 -0400 |
commit | 77ae9ab0bec82af5e702590adcdb8a3420125a16 (patch) | |
tree | 9c7447549c8700530c347971a579baa8006f3d6f | |
parent | 56a42adc696224bfa9da01dff72664a0a3526f6a (diff) |
wg-rs: add key_from_base64 and verify it works
-rw-r--r-- | wg-rs/src/lib.rs | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/wg-rs/src/lib.rs b/wg-rs/src/lib.rs index e5fdc39..a5ad22e 100644 --- a/wg-rs/src/lib.rs +++ b/wg-rs/src/lib.rs @@ -54,17 +54,24 @@ pub fn key_to_base64(mut key: [u8; 32]) -> String { } } +pub fn key_from_base64(encoded: &str) -> Result<[u8; 32], String> { + let mut key = [0u8; 32]; + let cstr = std::ffi::CString::new(encoded).unwrap(); + let res = unsafe { wg_sys::wg_key_from_base64(key.as_mut_ptr(), cstr.into_raw()) }; + if res == 0 { + Ok(key) + } else { + Err("Invalid base64 string".to_string()) + } +} + #[cfg(test)] mod tests { use super::*; #[test] - fn it_works() { + fn base64_translations() { 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)); + assert!(key_from_base64(&key_to_base64(key)).unwrap() == key); } } |