diff options
| -rw-r--r-- | talpid-types/src/net/wireguard.rs | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/talpid-types/src/net/wireguard.rs b/talpid-types/src/net/wireguard.rs index 1c92052762..c5bde3547e 100644 --- a/talpid-types/src/net/wireguard.rs +++ b/talpid-types/src/net/wireguard.rs @@ -160,6 +160,10 @@ impl<'de> Deserialize<'de> for PrivateKey { #[derive(Clone)] pub struct PublicKey(x25519_dalek::PublicKey); +/// Error returned if a base64 string represents an invalid key +#[derive(Debug)] +pub struct InvalidKeyError(()); + impl PublicKey { /// Get the public key as bytes pub fn as_bytes(&self) -> &[u8; 32] { @@ -169,6 +173,16 @@ impl PublicKey { pub fn to_base64(&self) -> String { base64::encode(self.as_bytes()) } + + pub fn from_base64(key: &str) -> Result<Self, InvalidKeyError> { + let bytes = base64::decode(key).map_err(|_| InvalidKeyError(()))?; + if bytes.len() != 32 { + return Err(InvalidKeyError(())); + } + let mut key = [0u8; 32]; + key.copy_from_slice(&bytes); + Ok(From::from(key)) + } } |
