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”