use age::{Decryptor, Encryptor, x25519};
use ppvss::{KeyPair, PPVSS, Party};
use num_bigint::BigUint;
use std::fmt::format;
use std::fs;
use std::io::{Read, Write};
use std::path::Path;
fn main() {
let N: u8 = 5;
let T: u8 = 3;
for i in 0..N as usize {
let kp = KeyPair::generate();
let _ = kp.save_private_key(format! {"./examples/asder/pvt/_{}.sk",i});
let _ = kp.save_public_key(format! {"./examples/asder/pub/_{}.pk",i});
}
let mut parties = vec![];
for i in 0..N as usize {
parties.push(Party::new(format! {"./examples/asder/pub/_{}.pk",i})); }
let ppvss_instance = PPVSS::new(N, T, parties).unwrap();
let message = BigUint::from(234324u32);
let (shares, proof) = ppvss_instance.share(message);
for i in 0..N as usize {
println!("Share -> {} {}\n", i, shares[i].y());
}
println!("{}", proof);
let mut vec_kp = vec![];
for i in 0..2 as usize {
vec_kp.push(
KeyPair::load_from_private_key(format! {"./examples/asder/pvt/_{}.sk",i}).unwrap(),
);
}
let recon_msg = ppvss_instance.reconstruct(shares, vec_kp).unwrap();
println!("{}", recon_msg);
}