Shamir's secret sharing method generates a number of shares, of which a threshold defines the number of shares which can be used to re-build the message.
Secret Shares in Rust in Rust |
Background
A sample run is:
Shares: 269380 258746 156735 294193 257880 203639 174738 46820 99461 117188 165679 421710 56849 417767 444565 55727 489672 30044 319063 Shares to reconstruct: [0 269380] [1 258746] [2 156735] [3 294193] [4 257880] [5 203639] [6 174738] Recovered: 5
The code used for this is:
extern crate threshold_secret_sharing as tss; use std::env; fn main() { let mut thres=8; let n_shares=20; let p= 524287; let mut secret = 1000; let args: Vec < String > = env::args().collect(); if args.len()> 1 { secret = args[1].clone().parse::().unwrap(); } if args.len()> 2 { thres= args[2].clone().parse:: ().unwrap(); } let ref tss = tss::shamir::ShamirSecretSharing { threshold: thres, share_count: n_shares, prime: p }; let shares = tss.share(secret); println!("\nShares:"); for x in 0..n_shares-1 { print!("{} ", shares[x]); } println!("\n\nShares to reconstruct:"); let recovered_index: Vec = (0..thres+1).collect(); let recovered_share: &[i64] = &shares[0..thres+1]; for x in 0..recovered_index.len() { print!("[{} {}] ", recovered_index[x],recovered_share[x]); } let recover_secret = tss.reconstruct(&recovered_index, recovered_share); print!("\n\nRecovered: {} ", recover_secret); }