Modular, no_std-compatible Rust toolkit for multi-chain transaction signing — 9 chains, zero hand-written cryptography.
Signer provides thin, secure wrappers around battle-tested cryptographic libraries (k256 for secp256k1, ed25519-dalek for Ed25519), exposing a unified Sign trait across Bitcoin, Ethereum, Solana, Cosmos, Tron, Sui, TON, Filecoin, and Spark. All library crates compile under no_std + alloc and zeroize sensitive material on drop.
Shell (macOS / Linux):
curl -fsSL https://sh.qntx.fun/signer | shPowerShell (Windows):
irm https://sh.qntx.fun/signer/ps | iexOr via Cargo:
cargo install signer-cli# Ethereum — EIP-191 personal_sign
signer evm sign-message -k "0x4c0883a6..." -m "Hello, Ethereum!"
# Bitcoin — message signing
signer btc sign-message -k "4c0883a6..." -m "Hello, Bitcoin!"
# Solana — Ed25519
signer svm sign -k "9d61b19d..." -m "Hello, Solana!"
# Sui — BLAKE2b intent signing
signer sui sign-tx -k "9d61b19d..." -t "0000..."
# Show address / public key
signer evm address -k "0x4c0883a6..."
# JSON output (for scripts / agents)
signer --json evm sign-message -k "0x4c0883a6..." -m "test"use signer_evm::Signer;
let signer = Signer::from_hex("4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318")?;
let out = signer.sign_message(b"hello")?;
println!("Address: {}", signer.address());
println!("Signature: {}", hex::encode(&out.signature));use signer_svm::Signer;
use ed25519_dalek::Signer as _;
let signer = Signer::random();
let sig = signer.sign(b"hello solana");
signer.verify(b"hello solana", &sig)?;
println!("Address: {}", signer.address());Enable the kobe feature to construct signers from kobe derived keys:
use kobe::Wallet;
use kobe_evm::Deriver;
use signer_evm::Signer;
let wallet = Wallet::from_mnemonic("abandon abandon ... about", None)?;
let derived = Deriver::new(&wallet).derive(0)?;
let signer = Signer::from_derived(&derived)?;
println!("Address: {}", signer.address());- 9 chains — Ethereum, Bitcoin, Solana, Cosmos, Tron, Sui, TON, Filecoin, Spark
- Zero hand-rolled crypto — secp256k1 via k256, Ed25519 via ed25519-dalek
- Unified trait —
Signtrait withsign_hash,sign_message,sign_transactionacross all chains no_std+alloc— All library crates compile withoutstd; embedded / WASM ready- Security hardened —
ZeroizeOnDrop,Debugredacted ([REDACTED]),Cloneremoved,Send + Sync - Kobe integration — Optional HD wallet bridging via
kobefeature flag - CSPRNG — Random generation via OS-provided entropy (
getrandom) - KAT-verified — Deterministic test vectors (RFC 8032, known secp256k1 keys) for all chains
- Strict linting — Clippy
pedantic+nursery+correctness(deny), zero warnings
See crates/README.md for the full crate table, dependency graph, and feature flag reference.
This library has not been independently audited. Use at your own risk.
- Private keys wrapped in
ZeroizeOnDrop— zeroed from memory on drop Debugimpl outputs[REDACTED]— no key material leaked to logsCloneintentionally removed — prevents uncontrolled key copies- Random generation uses OS-provided CSPRNG via
getrandom Signtrait requiresSend + Sync— safe for concurrent use- No key material is logged or persisted
Licensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT License (LICENSE-MIT or https://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project shall be dual-licensed as above, without any additional terms or conditions.
