From 863acb4a094c92d10ad30e54759ba249636130f3 Mon Sep 17 00:00:00 2001 From: wigy Date: Fri, 9 Jul 2021 13:40:49 +0200 Subject: [PATCH] Add some missing bindings to WASM and FFI --- keyvault-wasm/src/id.rs | 6 ++++++ sdk-ffi/src/hydra/private.rs | 2 +- sdk-ffi/src/keyvault/secp/id.rs | 34 +++++++++++++++++++++++++++++++++ sdk-ffi/src/keyvault/secp/pk.rs | 10 ++++++---- 4 files changed, 47 insertions(+), 5 deletions(-) diff --git a/keyvault-wasm/src/id.rs b/keyvault-wasm/src/id.rs index f16d602..3550fc4 100644 --- a/keyvault-wasm/src/id.rs +++ b/keyvault-wasm/src/id.rs @@ -58,6 +58,12 @@ impl JsSecpKeyId { let inner = SecpKeyId::from_p2pkh_addr(address, network).map_err_to_js()?; Ok(inner.into()) } + + #[wasm_bindgen(js_name=toAddress)] + pub fn to_p2pkh_addr(&self, network: &str) -> Result { + let network = Networks::by_name(network).map_err_to_js()?; + Ok(self.inner.to_p2pkh_addr(network.p2pkh_addr())) + } } impl From for JsSecpKeyId { diff --git a/sdk-ffi/src/hydra/private.rs b/sdk-ffi/src/hydra/private.rs index 87203e7..a2368e2 100644 --- a/sdk-ffi/src/hydra/private.rs +++ b/sdk-ffi/src/hydra/private.rs @@ -75,7 +75,7 @@ pub extern "C" fn HydraPrivate_key( ) -> CPtrResult> { let fun = || { let private = unsafe { convert::borrow_mut_in(private) }; - let key = private.key(idx)?; + let key = private.key_mut(idx)?; Ok(convert::move_out(key)) }; cresult(fun()) diff --git a/sdk-ffi/src/keyvault/secp/id.rs b/sdk-ffi/src/keyvault/secp/id.rs index f90132c..0225fc9 100644 --- a/sdk-ffi/src/keyvault/secp/id.rs +++ b/sdk-ffi/src/keyvault/secp/id.rs @@ -4,3 +4,37 @@ use super::*; pub extern "C" fn delete_SecpKeyId(secp_id: *mut SecpKeyId) { delete(secp_id) } + +#[no_mangle] +pub extern "C" fn SecpKeyId_from_address( + address: *mut raw::c_char, network: *mut raw::c_char, +) -> CPtrResult { + let fun = || { + let address = unsafe { convert::str_in(address)? }; + let network = unsafe { convert::str_in(network)? }; + + let network = Networks::by_name(network)?; + let id = SecpKeyId::from_p2pkh_addr(address, network)?; + + let id = convert::move_out(id); + Ok(id) + }; + cresult(fun()) +} + +#[no_mangle] +pub extern "C" fn SecpKeyId_to_address( + secp_id: *const SecpKeyId, network: *const raw::c_char, +) -> CPtrResult { + let secp_id = unsafe { convert::borrow_in(secp_id) }; + let fun = || { + let network = unsafe { convert::str_in(network)? }; + + let network = Networks::by_name(network)?; + let address = secp_id.to_p2pkh_addr(network.p2pkh_addr()); + + let address = convert::string_out(address); + Ok(address) + }; + cresult(fun()) +} diff --git a/sdk-ffi/src/keyvault/secp/pk.rs b/sdk-ffi/src/keyvault/secp/pk.rs index c11b8a3..8adaf5f 100644 --- a/sdk-ffi/src/keyvault/secp/pk.rs +++ b/sdk-ffi/src/keyvault/secp/pk.rs @@ -6,7 +6,7 @@ pub extern "C" fn delete_SecpPublicKey(secp_pk: *mut SecpPublicKey) { } #[no_mangle] -pub extern "C" fn SecpPublicKey_fromString(hex: *mut raw::c_char) -> CPtrResult { +pub extern "C" fn SecpPublicKey_fromString(hex: *const raw::c_char) -> CPtrResult { let fun = || { let hex = unsafe { convert::str_in(hex) }?; let secp_pk = SecpPublicKey::from_str(hex)?; @@ -16,7 +16,9 @@ pub extern "C" fn SecpPublicKey_fromString(hex: *mut raw::c_char) -> CPtrResult< } #[no_mangle] -pub extern "C" fn SecpPublicKey_to_string(secp_pk: *mut SecpPublicKey) -> CPtrResult { +pub extern "C" fn SecpPublicKey_to_string( + secp_pk: *const SecpPublicKey, +) -> CPtrResult { let secp_pk = unsafe { convert::borrow_in(secp_pk) }; let fun = || { let hex = secp_pk.to_string(); @@ -26,13 +28,13 @@ pub extern "C" fn SecpPublicKey_to_string(secp_pk: *mut SecpPublicKey) -> CPtrRe } #[no_mangle] -pub extern "C" fn SecpPublicKey_key_id(secp_pk: *mut SecpPublicKey) -> *mut SecpKeyId { +pub extern "C" fn SecpPublicKey_key_id(secp_pk: *const SecpPublicKey) -> *mut SecpKeyId { let secp_pk = unsafe { convert::borrow_in(secp_pk) }; convert::move_out(secp_pk.key_id()) } #[no_mangle] -pub extern "C" fn SecpPublicKey_ark_key_id(secp_pk: *mut SecpPublicKey) -> *mut SecpKeyId { +pub extern "C" fn SecpPublicKey_ark_key_id(secp_pk: *const SecpPublicKey) -> *mut SecpKeyId { let secp_pk = unsafe { convert::borrow_in(secp_pk) }; convert::move_out(secp_pk.ark_key_id()) }