#shamir-secret-sharing #secret-sharing #sharing #intro #big-uint #inverse #verifiable

shamir_secret_sharing

A rust implementation of Shamir Secret Sharing over Finite Field

2 releases

0.1.1 Apr 2, 2020
0.1.0 Apr 2, 2020

#9 in #big-uint

Download history 43/week @ 2025-01-29 65/week @ 2025-02-05 137/week @ 2025-02-12 72/week @ 2025-02-19 49/week @ 2025-02-26 148/week @ 2025-03-05 237/week @ 2025-03-12 111/week @ 2025-03-19 101/week @ 2025-03-26 10/week @ 2025-04-02 18/week @ 2025-04-09 13/week @ 2025-04-16 33/week @ 2025-04-23 2/week @ 2025-04-30 3/week @ 2025-05-07 23/week @ 2025-05-14

66 downloads per month

MIT license

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-friendly stein_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.2MB
~20K SLoC