Crate rustywallet_signer

Crate rustywallet_signer 

Source
Expand description

§rustywallet-signer

ECDSA and Schnorr message signing and verification for Bitcoin and Ethereum.

§Features

  • Sign arbitrary messages with ECDSA secp256k1
  • Sign messages with BIP340 Schnorr signatures
  • Verify signatures against public keys
  • Bitcoin message signing (BIP-137 compatible)
  • Ethereum personal_sign (EIP-191)
  • Recoverable signatures for public key recovery

§Quick Start (ECDSA)

use rustywallet_keys::private_key::PrivateKey;
use rustywallet_signer::prelude::*;
use sha2::{Sha256, Digest};

// Generate a key
let key = PrivateKey::random();
let pubkey = key.public_key();

// Sign a message hash
let hash: [u8; 32] = Sha256::digest(b"hello world").into();
let signature = sign(&key, &hash).unwrap();

// Verify the signature
assert!(verify(&pubkey, &hash, &signature));

§Schnorr Signing (BIP340)

use rustywallet_keys::private_key::PrivateKey;
use rustywallet_signer::schnorr::{SchnorrSigner, SchnorrVerifier};
use sha2::{Sha256, Digest};

// Generate a key
let key = PrivateKey::random();

// Sign a message hash with Schnorr
let hash: [u8; 32] = Sha256::digest(b"hello world").into();
let signature = key.sign_schnorr(&hash).unwrap();

// Get x-only public key and verify
let xonly = key.x_only_public_key();
assert!(xonly.verify_schnorr(&signature, &hash));

§Bitcoin Message Signing

use rustywallet_keys::private_key::PrivateKey;
use rustywallet_signer::bitcoin::sign_bitcoin_message;

let key = PrivateKey::random();
let signature = sign_bitcoin_message(&key, "Hello Bitcoin!").unwrap();
println!("Base64 signature: {}", signature);

§Ethereum Personal Sign

use rustywallet_keys::private_key::PrivateKey;
use rustywallet_signer::ethereum::{sign_ethereum_message, public_key_to_address, format_address};

let key = PrivateKey::random();
let address = public_key_to_address(&key.public_key());
let signature = sign_ethereum_message(&key, b"Hello Ethereum!").unwrap();

println!("Address: {}", format_address(&address));
println!("Signature: {}", signature.to_ethereum_hex());

Re-exports§

pub use error::SignerError;
pub use recovery::recover_public_key;
pub use signature::RecoverableSignature;
pub use signature::Signature;
pub use signer::sign;
pub use signer::sign_recoverable;
pub use verifier::verify;
pub use verifier::verify_strict;
pub use schnorr::sign_schnorr;
pub use schnorr::verify_schnorr;
pub use schnorr::SchnorrSigner;
pub use schnorr::SchnorrVerifier;

Modules§

bitcoin
Bitcoin message signing (BIP-137 compatible)
error
Error types for rustywallet-signer
ethereum
Ethereum personal_sign (EIP-191) implementation
prelude
Common imports for rustywallet-signer
recovery
Public key recovery from signatures
schnorr
Schnorr signing and verification (BIP340)
signature
Signature types for ECDSA signatures
signer
Core signing functionality
verifier
Signature verification functionality

Structs§

SchnorrSignature
64-byte Schnorr signature (BIP340)
XOnlyPublicKey
32-byte x-only public key (BIP340)