snarkvm_synthesizer_snark/verifying_key/
parse.rs1use super::*;
17
18static VERIFYING_KEY: &str = "verifier";
19
20impl<N: Network> Parser for VerifyingKey<N> {
21 #[inline]
23 fn parse(string: &str) -> ParserResult<Self> {
24 let parse_key = recognize(pair(
26 pair(tag(VERIFYING_KEY), tag("1")),
27 many1(terminated(one_of("qpzry9x8gf2tvdw0s3jn54khce6mua7l"), many0(char('_')))),
28 ));
29
30 map_res(parse_key, |key: &str| -> Result<_, Error> { Self::from_str(&key.replace('_', "")) })(string)
32 }
33}
34
35impl<N: Network> FromStr for VerifyingKey<N> {
36 type Err = Error;
37
38 fn from_str(key: &str) -> Result<Self, Self::Err> {
40 let (hrp, data, variant) = bech32::decode(key)?;
42 if hrp != VERIFYING_KEY {
43 bail!("Failed to decode verifying key: '{hrp}' is an invalid prefix")
44 } else if data.is_empty() {
45 bail!("Failed to decode verifying key: data field is empty")
46 } else if variant != bech32::Variant::Bech32m {
47 bail!("Found a verifying key that is not bech32m encoded: {key}");
48 }
49 Ok(Self::read_le(&Vec::from_base32(&data)?[..])?)
51 }
52}
53
54impl<N: Network> Debug for VerifyingKey<N> {
55 fn fmt(&self, f: &mut Formatter) -> fmt::Result {
56 Display::fmt(self, f)
57 }
58}
59
60impl<N: Network> Display for VerifyingKey<N> {
61 fn fmt(&self, f: &mut Formatter) -> fmt::Result {
63 let bytes = self.to_bytes_le().map_err(|_| fmt::Error)?;
65 let string =
67 bech32::encode(VERIFYING_KEY, bytes.to_base32(), bech32::Variant::Bech32m).map_err(|_| fmt::Error)?;
68 Display::fmt(&string, f)
70 }
71}