use k256::{ecdsa::{SigningKey, Signature, signature::Signer, signature::Verifier, VerifyingKey}};
use rand_core::OsRng;
use sha2::{Digest, Sha256};
use ripemd::{Ripemd160};
fn new_keys() {
    let signing_key = SigningKey::random(&mut OsRng);
    let private_key = hex::encode(signing_key.to_bytes());
    println!("private key: {:x?}", private_key);
    let verifying_key = signing_key.verifying_key();
    let public_key = hex::encode(verifying_key.to_sec1_bytes());
    println!("public key: {:x?}", public_key);
    new_address(&verifying_key);    
}   
fn new_address(verifying_key: &VerifyingKey) {
    let vk = verifying_key.to_sec1_bytes();
    let mut hasher = Sha256::new();
    hasher.update(vk);
    let hashed_sha256 = hasher.finalize();
    let mut hasher = Ripemd160::new();
    hasher.update(hashed_sha256);
    let account_id = hasher.finalize();
    let mut payload = account_id.to_vec();
    payload.insert(0, 0x00);
    let mut hasher = Sha256::new();
    hasher.update(&payload);
    let hash = hasher.finalize();
    let mut hasher = Sha256::new();
    hasher.update(hash);
    let checksum = hasher.finalize();
    payload.append(&mut checksum[0..4].to_vec());
    const ALPHABET: &str = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
    let address = base_x::encode(ALPHABET, &payload);
    println!("address: {:?}", address);
}
fn main() {
    new_keys();
}
$ cargo run
…
private key: “745aa1c916085b2e3423dc7a22792945bae57c38bd5bc1bb0426ba2156f8a39c”
public key: “029e1baf2992b44af147c306fb728f8b00e908aa7f09e25eaa0a2fed3f71ad4cf6”
address: “1E5b59jN4nyM9kpzqdXfW7MkLJ2CApAVjT”
これをWebフレームワークで表現したい。使うのはaxumかな。。。
 
					 
