diff options
| author | David Lönnhager <david.l@mullvad.net> | 2021-07-06 16:30:39 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2021-07-09 12:50:53 +0200 |
| commit | baeecd17503b7d3fbd3717698e6a6b2a187fde0f (patch) | |
| tree | 54a0cf6e21df7764e68540e3983ff7a32a960935 | |
| parent | 94da0b212fc0af4a451d1bcff46d2970f0b190d7 (diff) | |
| download | mullvadvpn-baeecd17503b7d3fbd3717698e6a6b2a187fde0f.tar.xz mullvadvpn-baeecd17503b7d3fbd3717698e6a6b2a187fde0f.zip | |
Add from_base64 method to PublicKey type
| -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)) + } } |
