2 releases
0.1.1 | Apr 2, 2020 |
---|---|
0.1.0 | Apr 2, 2020 |
#1488 in Math
11KB
155 lines
Shamir Secret Sharing(Rust)
Intro
A rust implementation of Shamir Secret Sharing over Finite Field.
The lib support large field charactirics prime
by taking advantage of num_bigint
.
It's not optimized for production purpose, which can be improved in several aspects:
-
replace the
extended_euclid_algo
with machine-friendlystein_algo
when calculate the modulo inverse -
add commitment scheme to make it verifiable
Example
use shamir_secret_sharing::ShamirSecretSharing as SSS;
use num_bigint::{BigInt, BigUint};
use num_bigint::Sign::*;
fn main() {
let sss = SSS {
threshold: 3,
share_amount: 5,
prime: BigInt::parse_bytes(b"fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",16).unwrap()
};
let secret = BigInt::parse_bytes(b"ffffffffffffffffffffffffffffffffffffff", 16).unwrap();
let shares = sss.split(secret.clone());
println!("shares: {:?}", shares);
assert_eq!(secret, sss.recover(&shares[0..sss.threshold as usize]));
}
Dependencies
~0.8–1.1MB
~19K SLoC