ergo/
secret_key.rs

1use ergo_lib_c_core::{address::AddressPtr, secret_key::*, Error};
2use paste::paste;
3
4use crate::{delete_ptr, ErrorPtr};
5
6/// Parse dlog secret key from bytes (SEC-1-encoded scalar)
7#[no_mangle]
8pub unsafe extern "C" fn ergo_lib_secret_key_from_bytes(
9    bytes_ptr: *const u8,
10    secret_key_out: *mut SecretKeyPtr,
11) -> ErrorPtr {
12    let res = secret_key_from_bytes(bytes_ptr, secret_key_out);
13    Error::c_api_from(res)
14}
15
16/// Generate random key
17#[no_mangle]
18pub unsafe extern "C" fn ergo_lib_secret_key_generate_random(secret_key_out: *mut SecretKeyPtr) {
19    #[allow(clippy::unwrap_used)]
20    secret_key_generate_random(secret_key_out).unwrap();
21}
22
23/// Address (encoded public image)
24#[no_mangle]
25pub unsafe extern "C" fn ergo_lib_secret_key_get_address(
26    secret_key_ptr: ConstSecretKeyPtr,
27    address_out: *mut AddressPtr,
28) {
29    #[allow(clippy::unwrap_used)]
30    secret_key_get_address(secret_key_ptr, address_out).unwrap();
31}
32
33/// Encode from a serialized key. Key assumption: 32 bytes must be allocated at the address
34/// pointed-to by `output`.
35#[no_mangle]
36pub unsafe extern "C" fn ergo_lib_secret_key_to_bytes(
37    secret_key_ptr: ConstSecretKeyPtr,
38    output: *mut u8,
39) {
40    #[allow(clippy::unwrap_used)]
41    secret_key_to_bytes(secret_key_ptr, output).unwrap();
42}
43
44/// Drop `SecretKey`
45#[no_mangle]
46pub unsafe extern "C" fn ergo_lib_secret_key_delete(ptr: SecretKeyPtr) {
47    delete_ptr(ptr)
48}
49
50make_collection!(SecretKeys, SecretKey);