iop_sdk_ffi/hydra/
private.rs

1use super::*;
2
3#[no_mangle]
4pub extern "C" fn delete_HydraPrivate(private: *mut Private) {
5    delete(private)
6}
7
8#[no_mangle]
9pub extern "C" fn HydraPrivate_public_get(private: *mut Private) -> CPtrResult<Public> {
10    let fun = || {
11        let private = unsafe { convert::borrow_in(private) };
12        let public = private.public();
13        Ok(convert::move_out(public))
14    };
15    cresult(fun())
16}
17
18#[no_mangle]
19pub extern "C" fn HydraPrivate_xpub_get(private: *mut Private) -> CPtrResult<raw::c_char> {
20    let private = unsafe { convert::borrow_in(private) };
21    let fun = || {
22        let xpub = private.xpub()?;
23        Ok(convert::string_out(xpub))
24    };
25    cresult(fun())
26}
27
28#[no_mangle]
29pub extern "C" fn HydraPrivate_xprv_get(private: *mut Private) -> *mut raw::c_char {
30    let private = unsafe { convert::borrow_in(private) };
31    let xprv = private.xprv();
32    convert::string_out(xprv)
33}
34
35#[no_mangle]
36pub extern "C" fn HydraPrivate_receive_keys_get(private: *mut Private) -> CPtrResult<u32> {
37    let private = unsafe { convert::borrow_in(private) };
38    let fun = || {
39        let receive_keys = private.receive_keys()?;
40        Ok(convert::move_out(receive_keys))
41    };
42    cresult(fun())
43}
44
45#[no_mangle]
46pub extern "C" fn HydraPrivate_change_keys_get(private: *mut Private) -> CPtrResult<u32> {
47    let private = unsafe { convert::borrow_in(private) };
48    let fun = || {
49        let change_keys = private.change_keys()?;
50        Ok(convert::move_out(change_keys))
51    };
52    cresult(fun())
53}
54
55// TODO consider using strong typing for tx
56#[no_mangle]
57pub extern "C" fn HydraPrivate_sign_hydra_tx(
58    private: *mut Private, hyd_addr: *const raw::c_char, unsigned_tx: *const raw::c_char,
59) -> CPtrResult<raw::c_char> {
60    let private = unsafe { convert::borrow_mut_in(private) };
61    let fun = || {
62        let hyd_addr = unsafe { convert::str_in(hyd_addr)? };
63        let tx_str = unsafe { convert::str_in(unsigned_tx)? };
64        let mut tx_data: TransactionData = serde_json::from_str(tx_str)?;
65        private.sign_hydra_transaction(hyd_addr, &mut tx_data)?;
66        let signed_tx_str = serde_json::to_string(&tx_data)?;
67        Ok(convert::string_out(signed_tx_str))
68    };
69    cresult(fun())
70}
71
72#[no_mangle]
73pub extern "C" fn HydraPrivate_key(
74    private: *mut Private, idx: i32,
75) -> CPtrResult<Bip44Key<Secp256k1>> {
76    let fun = || {
77        let private = unsafe { convert::borrow_mut_in(private) };
78        let key = private.key_mut(idx)?;
79        Ok(convert::move_out(key))
80    };
81    cresult(fun())
82}
83
84#[no_mangle]
85pub extern "C" fn HydraPrivate_key_by_pk(
86    private: *mut Private, pub_key: *mut SecpPublicKey,
87) -> CPtrResult<Bip44Key<Secp256k1>> {
88    let private = unsafe { convert::borrow_in(private) };
89    let pub_key = unsafe { convert::borrow_in(pub_key) };
90    let fun = || {
91        let key = private.key_by_pk(pub_key)?;
92        Ok(convert::move_out(key))
93    };
94    cresult(fun())
95}