From e3815e3198f358486b581ef0416e92f7eeb8d5d5 Mon Sep 17 00:00:00 2001 From: shimunn <> Date: Wed, 3 Apr 2019 13:51:49 +0200 Subject: [PATCH] added convesion from and to hex [CI SKIP] --- wg-event-gen/src/model.rs | 40 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/wg-event-gen/src/model.rs b/wg-event-gen/src/model.rs index 6d95dde..b3357e7 100644 --- a/wg-event-gen/src/model.rs +++ b/wg-event-gen/src/model.rs @@ -1,4 +1,5 @@ use base64::{decode, encode}; +use hex; use std::error::Error; use std::fmt; use std::hash::{Hash, Hasher}; @@ -21,6 +22,31 @@ impl fmt::Display for ECCKey { } } +pub trait HexBackend { + fn from_bytes(bytes: Vec) -> Self; + fn bytes(&self) -> &Vec; + fn from_hex>(key: I) -> io::Result + where + Self: Sized, + { + Ok(Self::from_bytes(hex::decode(key.as_ref()).map_err( + |_| io::Error::new(io::ErrorKind::InvalidData, "Failed to decode hexstring"), + )?)) + } + fn as_hex(&self) -> io::Result { + Ok(hex::encode(&self.bytes())) + } +} + +impl HexBackend for T { + fn from_bytes(bytes: Vec) -> Self { + ::from_bytes(bytes) + } + fn bytes(&self) -> &Vec { + ::bytes(self) + } +} + pub trait Base64Backed { fn from_bytes(bytes: Vec) -> Self; fn bytes(&self) -> &Vec; @@ -34,7 +60,7 @@ pub trait Base64Backed { return Err(io::Error::new( io::ErrorKind::InvalidData, "Failed to decode base64", - )) + )); } }; /*.map_err(|err| { @@ -203,3 +229,15 @@ pub trait WireguardController { fn update_peer(&mut self, peer: &Peer) -> io::Result<()>; } + +#[cfg(test)] +mod test { + + use super::*; + #[test] + fn key_encoding() { + let key_encoded = "08df3bebd54217eb769d607f8673e1c3c53bb55d6ac689348a9227c8c4dd8857"; + let key = ECCKey::from_hex(key_encoded).unwrap(); + assert_eq!(&key.as_hex().unwrap(), key_encoded); + } +}