| Crates.io | shamir_secret_sharing |
| lib.rs | shamir_secret_sharing |
| version | 0.1.1 |
| created_at | 2020-04-02 12:53:13.767508+00 |
| updated_at | 2020-04-02 12:59:45.124798+00 |
| description | A rust implementation of Shamir Secret Sharing over Finite Field. |
| homepage | |
| repository | https://github.com/bitrocks/shamir-secret-sharing |
| max_upload_size | |
| id | 225504 |
| size | 10,041 |
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-friendly stein_algo when calculate the modulo inverse
add commitment scheme to make it verifiable
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]));
}