2020-03-13 14:37:02 -07:00
|
|
|
//! Transparent key trait impls, around secp256k1::PublicKey
|
|
|
|
//!
|
|
|
|
//! We don't impl Arbitrary for PublicKey since it's being pulled in
|
|
|
|
//! from secp256k1 and we don't want to wrap it.
|
|
|
|
|
2020-02-28 10:07:01 -08:00
|
|
|
use std::io;
|
|
|
|
|
|
|
|
use secp256k1::PublicKey;
|
|
|
|
|
2020-03-02 15:24:31 -08:00
|
|
|
use crate::serialization::{SerializationError, ZcashDeserialize, ZcashSerialize};
|
2020-02-28 10:07:01 -08:00
|
|
|
|
|
|
|
impl ZcashSerialize for PublicKey {
|
|
|
|
fn zcash_serialize<W: io::Write>(&self, mut writer: W) -> Result<(), io::Error> {
|
|
|
|
writer.write_all(&self.serialize())?;
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl ZcashDeserialize for PublicKey {
|
2020-03-13 12:36:29 -07:00
|
|
|
fn zcash_deserialize<R: io::Read>(mut reader: R) -> Result<Self, SerializationError> {
|
|
|
|
let mut bytes = [0; 33];
|
|
|
|
reader.read_exact(&mut bytes[..])?;
|
|
|
|
Self::from_slice(&bytes[..])
|
2020-03-27 02:32:53 -07:00
|
|
|
.map_err(|_| SerializationError::Parse("invalid secp256k1 compressed public key"))
|
2020-02-28 10:07:01 -08:00
|
|
|
}
|
|
|
|
}
|