4 releases (2 breaking)

0.3.0 May 31, 2023
0.2.1 Oct 15, 2019
0.2.0 Sep 28, 2019
0.1.0 Mar 28, 2019

#19 in #drop-in

Download history 14/week @ 2024-11-16 31/week @ 2024-11-23 38/week @ 2024-11-30 73/week @ 2024-12-07 36/week @ 2024-12-14 1/week @ 2024-12-21 8/week @ 2024-12-28 15/week @ 2025-01-04 69/week @ 2025-01-11 41/week @ 2025-01-18 32/week @ 2025-01-25 29/week @ 2025-02-01 29/week @ 2025-02-08 31/week @ 2025-02-15 28/week @ 2025-02-22 19/week @ 2025-03-01

115 downloads per month
Used in 2 crates (via ethsign)

GPL-3.0 license

9KB
148 lines

ethsign

A library to read JSON keyfiles and sign Ethereum stuff.

Usage:

use ethsign::{Protected, KeyFile};

fn main() {
    let file = std::fs::File::open("./res/wallet.json").unwrap();
    let key: KeyFile = serde_json::from_reader(file).unwrap();
    let password: Protected = "".into();
    let secret = key.to_secret_key(&password).unwrap();
    let message = [1_u8; 32];

    // Sign the message
    let signature = secret.sign(&message).unwrap();
    println!("{:?}", signature);

    // Recover the signer
    let public = signature.recover(&message).unwrap();
    println!("{:?}", public);

    // Verify the signature
    let res = public.verify(&signature, &message).unwrap();
    println!("{}", if res { "signature correct" } else { "invalid signature" });
}

A higher-level lib ethkey facilitates managing key files and exposes ethsign:

[dependencies]
ethkey = "0.3"
use ethkey::prelude::*;

fn main() {
    let key = EthAccount::load_or_generate("/tmp/path/to/keystore", "passwd")
        .expect("should load or generate new eth key");

    println!("{:?}", key.address());

    let message = [7_u8; 32];

    // sign the message
    let signature = key.sign(&message).unwrap();

    // verify the signature
    let result = key.verify(&signature, &message).unwrap();
    println!("{}", if result {"verification ok"} else {"wrong signature"});
}


lib.rs:

Pure Rust drop-in replacement for the parity-crypto crate.

Dependencies

~2.5MB
~54K SLoC