Files
featherChat/warzone/Cargo.toml
Siavash Sameni 661de47552 v0.0.14: Ethereum-compatible identity (secp256k1 + Keccak-256)
Protocol (ethereum.rs):
- derive_eth_identity(): HKDF from seed (info="warzone-secp256k1")
- secp256k1 signing key (k256 crate)
- Ethereum address: Keccak-256(uncompressed_pubkey[1..])[-20:]
- EIP-55 checksum address formatting
- eth_sign() / eth_verify() for secp256k1 ECDSA
- EthAddress type with Display, hex parsing, checksum
- 5 tests: deterministic, format, checksum, sign/verify, uniqueness

CLI:
- `warzone eth` — show Ethereum address alongside Warzone fingerprint
- Same seed produces both identities (dual-curve)

Dual identity model:
- Ed25519 + X25519 for Warzone messaging (fast, small signatures)
- secp256k1 for Ethereum compatibility (MetaMask, ENS, Ledger/Trezor)
- Both derived from the same BIP39 seed via different HKDF paths

28/28 protocol tests pass.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 13:30:25 +04:00

83 lines
1.6 KiB
TOML

[workspace]
resolver = "2"
members = [
"crates/warzone-protocol",
"crates/warzone-server",
"crates/warzone-client",
"crates/warzone-mule",
"crates/warzone-wasm",
]
[workspace.package]
version = "0.0.14"
edition = "2021"
license = "MIT"
rust-version = "1.75"
[workspace.dependencies]
# Crypto
ed25519-dalek = { version = "2", features = ["serde", "rand_core"] }
x25519-dalek = { version = "2", features = ["serde", "static_secrets"] }
curve25519-dalek = "4"
chacha20poly1305 = "0.10"
hkdf = "0.12"
sha2 = "0.10"
argon2 = "0.5"
rand = "0.8"
# Ethereum compatibility
k256 = { version = "0.13", features = ["ecdsa", "serde"] }
tiny-keccak = { version = "2", features = ["keccak"] }
# BIP39
bip39 = "2"
# Serialization
serde = { version = "1", features = ["derive"] }
serde_json = "1"
bincode = "1"
# Async
tokio = { version = "1", features = ["full"] }
# Server
axum = { version = "0.7", features = ["ws"] }
tower = "0.4"
tower-http = { version = "0.5", features = ["cors", "trace"] }
# Client HTTP
reqwest = { version = "0.12", features = ["json"] }
# Database
sled = "0.34"
# CLI
clap = { version = "4", features = ["derive"] }
# TUI
ratatui = "0.28"
crossterm = "0.28"
# Logging
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
# Error handling
thiserror = "2"
anyhow = "1"
# Time
chrono = { version = "0.4", features = ["serde"] }
# Hex encoding
hex = "0.4"
# Base64
base64 = "0.22"
# UUID
uuid = { version = "1", features = ["v4", "serde"] }
# Zero secrets in memory
zeroize = { version = "1", features = ["derive"] }