private keyを複数のシェアに分割して、それをrestoreして元のprivate keyに戻すということは割と簡単にできそうではある。
shamirsecretsharing = “0.1.5”
use shamirsecretsharing::*;
async fn main() {
let private_key = "i3HdSBYb5fmuD4RxAf77VnYbyAy6b8ab5LEddfQLM2VaYrUUFNNp6Pk22dsTAibj".to_string();
let data = private_key.into_bytes();
println!("{:?}", data);
let count = 3;
let treshold = 2;
let mut shares = create_shares(&data, count, treshold).unwrap();
for share in shares.clone() {
print_base_encode(share);
}
let restored = combine_shares(&shares.clone()).unwrap();
println!("{:?}", String::from_utf8(restored.unwrap()).unwrap());
}
fn print_base_encode(s: Vec<u8>) {
// println!("{:?}", s.clone());
let base64_encoded = base64::encode(&s);
println!("base64 encoded: {}", base64_encoded);
// println!("{:?}", BASE64_STANDARD.decode(base64_encoded).unwrap());
}
base64 encoded: AZv7eBLYhiBxgjpD3kI0YbLnnC88DnTWPghszvPWHLt4D+dFwsC4CE7R2mlSAlDsuituyPlTHSzE7rSNJylQvj1kn7sHEhEDqxC5b0qEj0SjfkVoaPcgdXdHOmX8rhOjO+xy9n5qlHpAcLJDHLcj2hA=
base64 encoded: AhM+urNxZnzJsekDjygSpCqresvZz1Kg/zFE8/zdbLkWD+dFwsC4CE7R2mlSAlDsuituyPlTHSzE7rSNJylQvj1kn7sHEhEDqxC5b0qEj0SjfkVoaPcgdXdHOmX8rhOjO+xy9n5qlHpAcLJDHLcj2hA=
base64 encoded: A2t9DSUWz0ihoFHKSQ7556tm0Zdzebl7SSZcEfkttU7FD+dFwsC4CE7R2mlSAlDsuituyPlTHSzE7rSNJylQvj1kn7sHEhEDqxC5b0qEj0SjfkVoaPcgdXdHOmX8rhOjO+xy9n5qlHpAcLJDHLcj2hA=
“i3HdSBYb5fmuD4RxAf77VnYbyAy6b8ab5LEddfQLM2VaYrUUFNNp6Pk22dsTAibj”