diff --git a/src/crypto/keypair.rs b/src/crypto/keypair.rs index 1e5454b30..ef4761a8b 100644 --- a/src/crypto/keypair.rs +++ b/src/crypto/keypair.rs @@ -76,6 +76,16 @@ impl PublicKey { self.0.to_bytes() } + /// Tries to create a `PublicKey` instance from a base58 encoded string. + pub fn from_str(encoded: &str) -> Result { + let decoded = bs58::decode(encoded).into_vec()?; + if decoded.len() != 32 { + return Err(Error::PublicKeyFromStr) + } + + Self::from_bytes(&decoded.try_into().unwrap()) + } + pub fn from_bytes(bytes: &[u8; 32]) -> Result { match pallas::Point::from_bytes(bytes).into() { Some(k) => Ok(Self(k)),