1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
//! # rustywallet-multisig
//!
//! Bitcoin multi-signature wallet utilities with Shamir Secret Sharing and MuSig2 support.
//!
//! ## Features
//!
//! - Create M-of-N multisig wallets (up to 15-of-15)
//! - Generate P2SH, P2WSH, and P2SH-P2WSH addresses
//! - Sign and combine multisig transactions
//! - PSBT integration for hardware wallet interoperability
//! - MuSig2 key aggregation for Schnorr multisig
//! - Shamir Secret Sharing for key backup
//!
//! ## Quick Start
//!
//! ```rust
//! use rustywallet_multisig::prelude::*;
//! use rustywallet_keys::prelude::PrivateKey;
//!
//! // Generate 3 keys
//! let key1 = PrivateKey::random();
//! let key2 = PrivateKey::random();
//! let key3 = PrivateKey::random();
//!
//! let pubkeys = vec![
//! key1.public_key().to_compressed(),
//! key2.public_key().to_compressed(),
//! key3.public_key().to_compressed(),
//! ];
//!
//! // Create 2-of-3 multisig wallet
//! let wallet = MultisigWallet::from_pubkeys(2, pubkeys, Network::Mainnet).unwrap();
//!
//! println!("P2SH address: {}", wallet.address_p2sh);
//! println!("P2WSH address: {}", wallet.address_p2wsh);
//! println!("P2SH-P2WSH address: {}", wallet.address_p2sh_p2wsh);
//! ```
//!
//! ## PSBT Integration
//!
//! ```rust
//! use rustywallet_multisig::{MultisigWallet, MultisigPsbtBuilder, Network};
//! use rustywallet_keys::prelude::PrivateKey;
//!
//! let key1 = PrivateKey::random();
//! let key2 = PrivateKey::random();
//! let pubkeys = vec![
//! key1.public_key().to_compressed(),
//! key2.public_key().to_compressed(),
//! ];
//!
//! let wallet = MultisigWallet::from_pubkeys(2, pubkeys, Network::Mainnet).unwrap();
//! let mut builder = MultisigPsbtBuilder::new(wallet, 1);
//!
//! // Each party signs
//! let sighash = [0u8; 32]; // Compute actual sighash
//! builder.sign_input(0, &sighash, &key1).unwrap();
//! builder.sign_input(0, &sighash, &key2).unwrap();
//!
//! // Build final witness
//! let witness = builder.build_witness(0).unwrap();
//! ```
//!
//! ## MuSig2 Key Aggregation
//!
//! ```rust
//! use rustywallet_multisig::{MuSigKeyAgg, musig_to_p2tr_address, Network};
//! use rustywallet_keys::prelude::PrivateKey;
//!
//! let key1 = PrivateKey::random();
//! let key2 = PrivateKey::random();
//! let pubkeys = vec![
//! key1.public_key().to_compressed(),
//! key2.public_key().to_compressed(),
//! ];
//!
//! // Aggregate keys for n-of-n Schnorr multisig
//! let key_agg = MuSigKeyAgg::new(pubkeys).unwrap();
//!
//! // Get P2TR address
//! let address = musig_to_p2tr_address(&key_agg, Network::Mainnet).unwrap();
//! println!("MuSig P2TR address: {}", address);
//! ```
//!
//! ## Shamir Secret Sharing
//!
//! ```rust
//! use rustywallet_multisig::{split_secret, combine_shares};
//!
//! // Split a 32-byte secret into 5 shares, requiring 3 to recover
//! let secret = [0x42u8; 32];
//! let shares = split_secret(&secret, 3, 5).unwrap();
//!
//! // Recover with any 3 shares
//! let recovered = combine_shares(&shares[0..3]).unwrap();
//! assert_eq!(recovered, secret);
//! ```
pub use ;
pub use MultisigConfig;
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;
/// Prelude module for convenient imports.