mod errors;
pub use errors::SchnorrError;
mod tools;
pub use tools::SigningContext;
pub mod keys;
pub mod signature;
pub use signature::{Signature, SIGNATURE_LENGTH};
mod ecdh;
pub use crate::ecdh::{diffie_hellman, SharedSecret};
mod multimessage;
pub use multimessage::Multimessage;
mod multisignature;
pub use multisignature::Multisignature;
pub use crate::keys::*;
mod batch;
pub use batch::{BatchVerification, BatchVerifier, SingleVerifier};
mod context;
pub use context::MuSigContext;
pub(crate) mod counterparty;
mod signer;
pub use signer::{
Signer, SignerAwaitingCommitments, SignerAwaitingPrecommitments, SignerAwaitingShares,
};
pub mod feldman_vss;
pub mod threshold;
#[cfg(test)]
mod threshold_test;
#[cfg(test)]
mod musig_test;
macro_rules! serde_boilerplate { ($t:ty) => {
impl ::serde::Serialize for $t {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: ::serde::Serializer {
serializer.serialize_bytes(&self.to_bytes()[..])
}
}
impl<'d> ::serde::Deserialize<'d> for $t {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: ::serde::Deserializer<'d> {
struct MyVisitor;
impl<'d> ::serde::de::Visitor<'d> for MyVisitor {
type Value = $t;
fn expecting(&self, formatter: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
formatter.write_str("SERDE ERROR")
}
fn visit_bytes<E>(self, bytes: &[u8]) -> Result<$t, E> where E: ::serde::de::Error {
Self::Value::from_bytes(bytes).map_err(crate::errors::serde_error_from_signature_error)
}
}
deserializer.deserialize_bytes(MyVisitor)
}
}
} }
serde_boilerplate!(Signature);
serde_boilerplate!(PublicKey);
serde_boilerplate!(SecretKey);
serde_boilerplate!(Keypair);