confium_tc_gg18/lib.rs
1#![allow(rustdoc::broken_intra_doc_links)]
2#![allow(rustdoc::bare_urls)]
3#![allow(rustdoc::redundant_explicit_links)]
4#![allow(rustdoc::private_intra_doc_links)]
5#![allow(rustdoc::invalid_html_tags)]
6
7//! GG18 threshold ECDSA over P-256 (Gennaro & Goldfeder 2018, eprint 2019/114).
8//!
9//! Wired as a [`confium_tc::registry::TcScheme`] plugin with two scheme
10//! names registered through [`confium_tc::register_tc_scheme!`]:
11//!
12//! - `GG18-ECDSA-P256` (DKG via Feldman VSS) — produces per-party
13//! [`Gg18Share`] + shared public key.
14//! - `GG18-ECDSA-P256-SIGN` — produces a standard 64-byte `(r, s)`
15//! ECDSA signature verifiable with the `p256` crate.
16//!
17//! See the module-level docs of [`keygen`], [`sign`], [`vss`], [`mta`]
18//! for what is implemented and what is omitted. In short: the Feldman
19//! VSS, Lagrange interpolation, and threshold-ECDSA combine are all
20//! real; the MtA sub-round is a simplified in-process stub (nonce
21//! reveal in the clear) rather than a Paillier-based homomorphic MtA.
22
23pub mod error;
24pub mod inprocess;
25pub mod keygen;
26pub mod lagrange;
27pub mod mta;
28pub mod scheme;
29pub mod share;
30pub mod sign;
31pub mod vss;
32
33pub use scheme::{Gg18EcdsaP256, Gg18EcdsaP256Sign};
34pub use share::Gg18Share;
35
36/// Canonical scheme name for GG18 DKG over P-256.
37pub const DKG_SCHEME_NAME: &str = "GG18-ECDSA-P256";
38
39/// Canonical scheme name for GG18 signing over P-256.
40pub const SIGN_SCHEME_NAME: &str = "GG18-ECDSA-P256-SIGN";