aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGalen Guyer <galen@galenguyer.com>2023-06-05 12:33:23 -0400
committerGalen Guyer <galen@galenguyer.com>2023-06-05 12:33:45 -0400
commit77ae9ab0bec82af5e702590adcdb8a3420125a16 (patch)
tree9c7447549c8700530c347971a579baa8006f3d6f
parent56a42adc696224bfa9da01dff72664a0a3526f6a (diff)
wg-rs: add key_from_base64 and verify it works
-rw-r--r--wg-rs/src/lib.rs19
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);
}
}