mirror of
https://github.com/vacp2p/stealth-address-kit.git
synced 2026-01-08 22:27:58 -05:00
ea27c2222eeef5bb75cbf2c19262c05b23d58dcd
stealth-address-kit
Uses the arkworks-rs suite of libraries, and utilities from rln
Existing Implementations
ark_bn254ark_bls_12_381ark_bls_12_377secp256k1secp256r1
Usage
use stealth_address_kit::{StealthAddressOnCurve};
use ark_bn254::Bn254; // or ark_bls_12_381::Bls12_381 or ark_bls_12_377::Bls12_377, stealth_address_kit::Secp256k1, stealth_address_kit::Secp256r1
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_commitment, view_tag) = Bn254::generate_stealth_commitment(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_commitment = Bn254::derive_public_key(stealth_private_key_opt.unwrap());
assert_eq!(derived_commitment, stealth_commitment);
}
Adding a new curve
- 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 - Add the curve to the
lib.rsfile, in themoddeclaration - Add the curve to the FFI API, in the
ffi.rsfile - Add the curve to the README
- Add the curve to the nightly release workflow
Building and Testing
-
Building
cargo build --release --features <bn254/bls12_381/bls12_377/secp256k1/secp256r1> -
Testing
cargo test --release --features <bn254/bls12_381/bls12_377/secp256k1/secp256r1>
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
Check out the nightly releases.
Attribution
Description
Languages
Rust
98.6%
Makefile
1.4%