sn_consensus/
lib.rs

1pub mod consensus;
2pub mod decision;
3pub mod fault;
4pub mod mvba;
5pub mod sn_handover;
6pub mod sn_membership;
7pub mod vote;
8pub mod vote_count;
9
10#[cfg(feature = "bad_crypto")]
11pub mod bad_crypto;
12// #[cfg(feature = "blsttc")]
13// pub mod blsttc;
14#[cfg(feature = "ed25519")]
15pub mod ed25519;
16
17use blsttc::{PublicKey, PublicKeySet, Signature, SignatureShare};
18use serde::Serialize;
19
20pub use crate::consensus::{Consensus, VoteResponse};
21pub use crate::decision::Decision;
22pub use crate::fault::{Fault, FaultError};
23pub use crate::sn_handover::{Handover, UniqueSectionId};
24pub use crate::sn_membership::{Generation, Membership, Reconfig};
25pub use crate::vote::{Ballot, Proposition, SignedVote, Vote};
26pub use crate::vote_count::{Candidate, VoteCount};
27
28// #[cfg(feature = "bad_crypto")]
29// pub use crate::bad_crypto::{PublicKey, SecretKey, Signature};
30// #[cfg(feature = "blsttc")]
31// pub use crate::blsttc::{PublicKey, SecretKey, Signature};
32// #[cfg(feature = "ed25519")]
33// pub use crate::ed25519::{PublicKey, SecretKey, Signature};
34
35pub mod error;
36pub use crate::error::Error;
37pub type Result<T> = std::result::Result<T, Error>;
38pub type NodeId = u8;
39
40pub fn verify_sig_share<M: Serialize>(
41    msg: &M,
42    sig: &SignatureShare,
43    voter: NodeId,
44    voters: &PublicKeySet,
45) -> Result<()> {
46    let public_key = voters.public_key_share(voter as u64);
47    let msg_bytes = bincode::serialize(msg)?;
48    if public_key.verify(sig, msg_bytes) {
49        Ok(())
50    } else {
51        Err(Error::InvalidElderSignature)
52    }
53}
54
55pub fn verify_sig<M: Serialize>(msg: &M, sig: &Signature, public_key: &PublicKey) -> Result<()> {
56    let msg_bytes = bincode::serialize(msg)?;
57    if public_key.verify(sig, msg_bytes) {
58        Ok(())
59    } else {
60        Err(Error::InvalidElderSignature)
61    }
62}