Skip to main content

molpha_verifier/
lib.rs

1//! Molpha attestation aggregate-Schnorr verification.
2//!
3//! A framework-agnostic library (no Anchor / Pinocchio dependency): the downstream program owns the
4//! registry account types and reads them, then passes plain data in. Verify a Molpha
5//! [`Attestation`] either from already-resolved signer pubkeys ([`verify_attestation`]) or from
6//! parsed registry entries plus a [`RegistryView`] ([`verify_attestation_resolved`]).
7//!
8//! # Usage
9//! ```ignore
10//! use molpha_verifier::{verify_attestation, Attestation};
11//!
12//! // `ordered_signers` are the signing nodes' (x, y) pubkeys in ascending signers_bitmap bit order.
13//! verify_attestation(&attestation, node_count, redundancy_buffer, &ordered_signers)?;
14//! ```
15
16pub mod bitmap;
17pub mod coalition;
18pub mod error;
19pub mod message;
20pub mod onchain;
21pub mod payload;
22pub mod scalar;
23pub mod selection;
24pub mod state;
25pub mod verify;
26
27pub use error::AttestationError;
28pub use onchain::*;
29pub use payload::Attestation;
30pub use payload::AttestationPayload;
31pub use payload::SchnorrSignature;
32pub use state::*;
33
34// High-level verification API.
35pub use verify::{
36    reconstruct_coalition_key, reconstruct_coalition_key_compressed, verify_aggregate_over_hash,
37    verify_attestation, verify_attestation_compressed, SignerXy,
38};
39
40// Primitives commonly composed by on-chain callers.
41pub use bitmap::{
42    bitmap_is_subset_u256, bitmap_load, derive_group_bitmap, effective_selection_size,
43    for_each_set_bit_u256,
44};
45pub use coalition::CoalitionAccumulator;
46pub use message::{compute_message_hash, MESSAGE_PREFIX};
47pub use scalar::{
48    eth_address_from_uncompressed_pubkey, evm_schnorr_ecdsa_inputs,
49    secp256k1_scalar_is_valid_nonzero,
50};
51pub use selection::{derive_selection_bitmap, SELECTION_SEED_PREFIX};