use std::{ffi::CStr, os::raw::c_char};
use ergo_lib_c_core::derivation_path::{ConstDerivationPathPtr, DerivationPathPtr};
use ergo_lib_c_core::ext_secret_key::{
ext_secret_key_derive, ext_secret_key_get_secret_key, ext_secret_key_path,
ext_secret_key_public_key,
};
use ergo_lib_c_core::secret_key::SecretKeyPtr;
use ergo_lib_c_core::{
ext_pub_key::ExtPubKeyPtr,
ext_secret_key::{
ext_secret_key_child, ext_secret_key_derive_master, ext_secret_key_new,
ConstExtSecretKeyPtr, ExtSecretKeyPtr,
},
Error,
};
use crate::{delete_ptr, ErrorPtr};
#[no_mangle]
pub unsafe extern "C" fn ergo_lib_ext_secret_key_new(
secret_key_bytes_ptr: *const u8,
chain_code_ptr: *const u8,
derivation_path_ptr: ConstDerivationPathPtr,
ext_secret_key_out: *mut ExtSecretKeyPtr,
) -> ErrorPtr {
let res = ext_secret_key_new(
secret_key_bytes_ptr,
chain_code_ptr,
derivation_path_ptr,
ext_secret_key_out,
);
Error::c_api_from(res)
}
#[no_mangle]
pub unsafe extern "C" fn ergo_lib_ext_secret_key_derive_master(
seed: *const u8,
ext_secret_key_out: *mut ExtSecretKeyPtr,
) -> ErrorPtr {
let res = ext_secret_key_derive_master(seed, ext_secret_key_out);
Error::c_api_from(res)
}
#[no_mangle]
pub unsafe extern "C" fn ergo_lib_ext_secret_key_child(
secret_key_bytes_ptr: ConstExtSecretKeyPtr,
index_str: *const c_char,
ext_secret_key_out: *mut ExtSecretKeyPtr,
) -> ErrorPtr {
let index = CStr::from_ptr(index_str).to_string_lossy();
let res = ext_secret_key_child(secret_key_bytes_ptr, &index, ext_secret_key_out);
Error::c_api_from(res)
}
#[no_mangle]
pub unsafe extern "C" fn ergo_lib_ext_secret_key_path(
ext_secret_key_ptr: ConstExtSecretKeyPtr,
derivation_path_out: *mut DerivationPathPtr,
) {
#[allow(clippy::unwrap_used)]
ext_secret_key_path(ext_secret_key_ptr, derivation_path_out).unwrap()
}
#[no_mangle]
pub unsafe extern "C" fn ergo_lib_ext_secret_key_get_secret_key(
ext_secret_key_ptr: ConstExtSecretKeyPtr,
secret_key_out: *mut SecretKeyPtr,
) {
#[allow(clippy::unwrap_used)]
ext_secret_key_get_secret_key(ext_secret_key_ptr, secret_key_out).unwrap()
}
#[no_mangle]
pub unsafe extern "C" fn ergo_lib_ext_secret_key_public_key(
ext_secret_key_ptr: ConstExtSecretKeyPtr,
ext_pub_key_out: *mut ExtPubKeyPtr,
) {
#[allow(clippy::unwrap_used)]
ext_secret_key_public_key(ext_secret_key_ptr, ext_pub_key_out).unwrap()
}
#[no_mangle]
pub unsafe extern "C" fn ergo_lib_ext_secret_key_derive(
ext_secret_key_ptr: ConstExtSecretKeyPtr,
derivation_path_ptr: ConstDerivationPathPtr,
ext_secret_key_out: *mut ExtSecretKeyPtr,
) -> ErrorPtr {
let res = ext_secret_key_derive(ext_secret_key_ptr, derivation_path_ptr, ext_secret_key_out);
Error::c_api_from(res)
}
#[no_mangle]
pub extern "C" fn ergo_lib_ext_secret_key_delete(ptr: ExtSecretKeyPtr) {
unsafe { delete_ptr(ptr) }
}