From 6ec126d4711339c8bc4f1be242fd574283c636cd Mon Sep 17 00:00:00 2001 From: Francisco Gindre Date: Wed, 23 Dec 2020 19:57:41 -0300 Subject: [PATCH] Add derive t-addr from secret key function --- ZcashLightClientKit/zcashlc/zcashlc.h | 5 +++++ rust/src/lib.rs | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/ZcashLightClientKit/zcashlc/zcashlc.h b/ZcashLightClientKit/zcashlc/zcashlc.h index 3e485351..1a585a10 100644 --- a/ZcashLightClientKit/zcashlc/zcashlc.h +++ b/ZcashLightClientKit/zcashlc/zcashlc.h @@ -81,6 +81,11 @@ char *zcashlc_derive_shielded_address_from_seed(const uint8_t *seed, */ char *zcashlc_derive_shielded_address_from_viewing_key(const char *extfvk); +/** + * Derives a transparent address from the given seed + */ +char *zcashlc_derive_transparent_address_from_secret_key(const char *tsk); + /** * Derives a transparent address from the given seed */ diff --git a/rust/src/lib.rs b/rust/src/lib.rs index 0388f8f5..9a54634d 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -964,6 +964,29 @@ pub unsafe extern "C" fn zcashlc_derive_transparent_address_from_seed( unwrap_exc_or_null(res) } +/// Derives a transparent address from the given seed +#[no_mangle] +pub unsafe extern "C" fn zcashlc_derive_transparent_address_from_secret_key( + tsk: *const c_char, +) -> *mut c_char { + let res = catch_panic(|| { + + let tsk = CStr::from_ptr(tsk).to_str()?; + + // grab secret private key for t-funds + let sk = match secp256k1::key::SecretKey::from_str(&tsk) { + Ok(sk) => sk, + Err(e) => { + return Err(format_err!("Invalid Transparent Secret key: {}", e)); + }, + }; + + // derive the corresponding t-address + + Ok(CString::new(derive_transparent_address_from_secret_key(sk)).unwrap().into_raw()) + }); + unwrap_exc_or_null(res) +} fn derive_transparent_address_from_secret_key(secret_key: SecretKey) -> String { let secp = Secp256k1::new();