Paper wallet for Hush, which you can use with no internet access while wearing a tinfoil hat inside of a Faraday cage.
https://hush.is
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.5 KiB
47 lines
1.5 KiB
|
|
use zip32::{ChildIndex, ExtendedSpendingKey};
|
|
use bech32::{Bech32, u5, ToBase32};
|
|
use rand::{OsRng, Rng};
|
|
|
|
pub fn get_address() -> (String, String) {
|
|
|
|
let mut rng = OsRng::new().expect("Error opening random number generator");
|
|
let mut seed:[u8; 32] = [0; 32];
|
|
rng.fill_bytes(&mut seed);
|
|
|
|
let spk: ExtendedSpendingKey = ExtendedSpendingKey::from_path(
|
|
&ExtendedSpendingKey::master(&seed),
|
|
&[
|
|
ChildIndex::Hardened(32),
|
|
ChildIndex::Hardened(44),
|
|
ChildIndex::Hardened(0),
|
|
],
|
|
);
|
|
|
|
let (_d, addr) = spk.default_address().expect("Cannot get result");
|
|
//println!("{:?}", d.0);
|
|
//println!("{:?}", addr.diversifier.0);
|
|
|
|
// Address
|
|
let mut v = vec![0; 43];
|
|
v.get_mut(..11).unwrap().copy_from_slice(&addr.diversifier.0);
|
|
addr.pk_d.write(v.get_mut(11..).unwrap()).expect("Cannot write!");
|
|
|
|
|
|
let checked_data: Vec<u5> = v.to_base32();
|
|
let encoded = Bech32::new("zs".into(), checked_data).expect("bech32 failed").to_string();
|
|
//println!("{}", encoded);
|
|
|
|
// Private Key
|
|
let mut vp = Vec::new();
|
|
spk.write(&mut vp).expect("Can't write private key");
|
|
//println!("Len {:?}", vp.len());
|
|
|
|
let c_d: Vec<u5> = vp.to_base32();
|
|
let encoded_pk = Bech32::new("secret-extended-key-main".into(), c_d).expect("bech32 failed").to_string();
|
|
//println!("{}", encoded_pk);
|
|
|
|
|
|
//println!("Hello, {}, {}!", encoded, encoded_pk);
|
|
return (encoded.to_string(), encoded_pk.to_string());
|
|
}
|