Implemented Schemes¶
This section contains documentation for all cryptographic schemes implemented in Charm. Schemes are organized by type: attribute-based encryption (ABE), public-key encryption, public-key signatures, identity-based encryption, threshold signatures, and more. Each scheme includes implementation details, security assumptions, and usage examples.
Threshold Signatures¶
Charm provides three production-ready threshold ECDSA implementations for MPC-based distributed signing. These enable t-of-n signing where any t parties can collaboratively produce a valid signature without reconstructing the private key.
Scheme |
Description |
Reference |
|---|---|---|
GG18 |
Classic Paillier-based threshold ECDSA (4-round interactive signing) |
|
CGGMP21 |
UC-secure with identifiable aborts and presigning |
|
DKLS23 |
OT-based MtA with non-interactive presigning |
All schemes support secp256k1 (Bitcoin, XRPL) and other elliptic curves. See Threshold ECDSA for detailed documentation, API reference, and usage examples.
Quick Example (GG18):
from charm.toolbox.ecgroup import ECGroup
from charm.toolbox.eccurve import secp256k1
from charm.schemes.threshold import GG18
group = ECGroup(secp256k1)
gg18 = GG18(group, threshold=2, num_parties=3)
key_shares, public_key = gg18.keygen()
signature = gg18.sign(key_shares[:2], b"message")
assert gg18.verify(public_key, b"message", signature)
Other Schemes¶
- aggrsign_bls
- aggrsign_MuSig
- blindsig_ps16
- chamhash_adm05
- chamhash_rsa_hw09
- encap_bchk05
- joye_scheme
- lem_scheme
- pk_vrf
- pre_mg07
- protocol_a01
- protocol_ao00
- protocol_cns07
- protocol_schnorr91
- sigma1
- sigma2
- sigma3
- abenc_accountability_jyjxgd20
- abenc_bsw07
- abenc_ca_cpabe_ar17
- abenc_dacmacs_yj14
- abenc_lsw08
- abenc_maabe_rw15
- abenc_maabe_yj14
- abenc_tbpre_lww14
- abenc_unmcpabe_yahk14
- abenc_waters09
- abenc_yct14
- abenc_yllc15
- ac17
- bsw07
- cgw15
- dabe_aw11
- dfa_fe12
- pk_hve08
- waters11
- pkenc_cs98
- pkenc_elgamal85
- pkenc_gm82
- pkenc_paillier99
- pkenc_rabin
- pkenc_rsa
- pksig_bls04
- pksig_boyen
- pksig_chch
- pksig_chp
- pksig_cl03
- pksig_cl04
- pksig_cllww12_z
- pksig_CW13_z
- pksig_cyh
- pksig_dsa
- pksig_ecdsa
- pksig_hess
- pksig_hw
- pksig_lamport
- pksig_ps01
- pksig_ps02
- pksig_ps03
- pksig_rsa_hw09
- pksig_schnorr91
- pksig_waters
- pksig_waters05
- pksig_waters09