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 = "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
28pub 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}