mirror of
https://github.com/vacp2p/stealth-address-kit.git
synced 2026-01-09 13:38:01 -05:00
97a5b065300839e05a874bc34eb450c55f6649d8
Stealth Address Kit
The Stealth Address Kit leverages the arkworks-rs suite of libraries to provide a robust implementation of stealth addresses.
Supported Curves
The following curves are currently supported:
ark_bn254ark_bls_12_381ark_bls_12_377secp256k1secp256r1pallasvestabw6_761baby_jub_jub
Usage Example
Below is an example demonstrating how to use the Stealth Address Kit with the ark_bn254 curve:
use stealth_address_kit::StealthAddressOnCurve;
use ark_bn254::Bn254;
fn main() {
let (spending_key, spending_public_key) = Bn254::random_keypair();
let (viewing_key, viewing_public_key) = Bn254::random_keypair();
// Generate ephemeral keypair
let (ephemeral_private_key, ephemeral_public_key) = Bn254::random_keypair();
let (stealth_address, view_tag) = Bn254::generate_stealth_address(viewing_public_key, spending_public_key, ephemeral_private_key);
let stealth_private_key_opt = Bn254::generate_stealth_private_key(ephemeral_public_key, viewing_key, spending_key, view_tag);
if stealth_private_key_opt.is_none() {
panic!("View tags did not match");
}
let derived_stealth_address = Bn254::derive_public_key(&stealth_private_key_opt.unwrap());
assert_eq!(derived_stealth_address, stealth_address);
}
Adding a New Curve
To add support for a new curve, follow these steps:
- Add the curve to the
Cargo.tomlfile as a feature. - Create a new module in the
srcdirectory with the curve name, suffixed by_impl.rs. - Implement the
StealthAddressOnCurvetrait for the curve. - Define the macro
define_curve_ffi. - Add the curve to the
lib.rsfile in themoddeclaration, and re-export if required. - Update the README to include the new curve.
- Add the curve to the nightly release workflow.
Building and Testing
Building
To build the project, use the following command:
cargo build --release --features <bn254/bls12_381/bls12_377/secp256k1/secp256r1/etc>
Testing
To run tests, use the following command:
cargo test --release --features <bn254/bls12_381/bls12_377/secp256k1/secp256r1/etc>
FFI API
The exposed FFI API supports all curves, prefixed by the curve name. Ensure that the correct feature is enabled when building the library.
Precompiled Libraries
Precompiled libraries are available in the nightly releases.
Acknowledgements
This project is inspired by the ERC-5564 EIP and the proof of concept by Nerolation.
Description
Releases
5
Languages
Rust
98.6%
Makefile
1.4%