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§
- Schnorr
Signature - 64-byte Schnorr signature (BIP340)
- XOnly
Public Key - 32-byte x-only public key (BIP340)