use holo_hash::AgentPubKey;
use holochain_serialized_bytes::prelude::*;
#[derive(Debug, PartialEq, Serialize, Deserialize, SerializedBytes, Clone)]
pub struct Sign {
pub key: holo_hash::AgentPubKey,
#[serde(with = "serde_bytes")]
pub data: Vec<u8>,
}
impl Sign {
pub fn new<S>(key: holo_hash::AgentPubKey, input: S) -> Result<Self, SerializedBytesError>
where
S: Serialize + std::fmt::Debug,
{
Ok(Self {
key,
data: holochain_serialized_bytes::encode(&input)?,
})
}
pub fn new_raw(key: holo_hash::AgentPubKey, data: Vec<u8>) -> Self {
Self { key, data }
}
pub fn key(&self) -> &AgentPubKey {
&self.key
}
pub fn data(&self) -> &[u8] {
&self.data
}
}
#[derive(Clone, Serialize, Deserialize, SerializedBytes, Hash, PartialEq, Eq, PartialOrd, Ord)]
pub struct Signature(#[serde(with = "serde_bytes")] pub Vec<u8>);
impl From<Vec<u8>> for Signature {
fn from(bytes: Vec<u8>) -> Self {
Self(bytes)
}
}
impl AsRef<[u8]> for Signature {
fn as_ref(&self) -> &[u8] {
&self.0
}
}
impl std::fmt::Debug for Signature {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_fmt(format_args!("Signature(0x"))?;
for byte in &self.0 {
f.write_fmt(format_args!("{:02x}", byte))?;
}
f.write_fmt(format_args!(")"))?;
Ok(())
}
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, SerializedBytes)]
pub struct VerifySignature {
pub key: holo_hash::AgentPubKey,
pub signature: Signature,
#[serde(with = "serde_bytes")]
pub data: Vec<u8>,
}
impl AsRef<Signature> for VerifySignature {
fn as_ref(&self) -> &Signature {
&self.signature
}
}
impl AsRef<holo_hash::AgentPubKey> for VerifySignature {
fn as_ref(&self) -> &AgentPubKey {
&self.key
}
}
impl VerifySignature {
pub fn as_data_ref(&self) -> &[u8] {
&self.data.as_ref()
}
pub fn as_signature_ref(&self) -> &Signature {
&self.as_ref()
}
pub fn as_key_ref(&self) -> &holo_hash::AgentPubKey {
&self.as_ref()
}
pub fn new<D>(
key: holo_hash::AgentPubKey,
signature: Signature,
data: D,
) -> Result<Self, SerializedBytesError>
where
D: serde::Serialize + std::fmt::Debug,
{
Ok(Self {
key,
signature,
data: holochain_serialized_bytes::encode(&data)?,
})
}
pub fn new_raw(key: holo_hash::AgentPubKey, signature: Signature, data: Vec<u8>) -> Self {
Self {
key,
signature,
data,
}
}
}