54#define UFSECP_PRIVKEY_LEN 32
55#define UFSECP_PUBKEY_COMPRESSED_LEN 33
56#define UFSECP_PUBKEY_UNCOMPRESSED_LEN 65
57#define UFSECP_PUBKEY_XONLY_LEN 32
58#define UFSECP_SIG_COMPACT_LEN 64
59#define UFSECP_SIG_DER_MAX_LEN 72
60#define UFSECP_HASH_LEN 32
61#define UFSECP_HASH160_LEN 20
62#define UFSECP_SHARED_SECRET_LEN 32
63#define UFSECP_BIP32_SERIALIZED_LEN 78
67#define UFSECP_NET_MAINNET 0
68#define UFSECP_NET_TESTNET 1
138 const uint8_t* seed32);
147 const uint8_t privkey[32]);
151 uint8_t privkey[32]);
156 const uint8_t tweak[32]);
161 const uint8_t tweak[32]);
169 const uint8_t privkey[32],
170 uint8_t pubkey33_out[33]);
175 const uint8_t privkey[32],
176 uint8_t pubkey65_out[65]);
181 const uint8_t* input,
183 uint8_t pubkey33_out[33]);
187 const uint8_t privkey[32],
188 uint8_t xonly32_out[32]);
196 const uint8_t msg32[32],
197 const uint8_t privkey[32],
198 uint8_t sig64_out[64]);
204 const uint8_t msg32[32],
205 const uint8_t privkey[32],
206 uint8_t sig64_out[64]);
211 const uint8_t msg32[32],
212 const uint8_t sig64[64],
213 const uint8_t pubkey33[33]);
218 const uint8_t sig64[64],
226 uint8_t sig64_out[64]);
234 const uint8_t msg32[32],
235 const uint8_t privkey[32],
236 uint8_t sig64_out[64],
241 const uint8_t msg32[32],
242 const uint8_t sig64[64],
244 uint8_t pubkey33_out[33]);
253 const uint8_t msg32[32],
254 const uint8_t privkey[32],
255 const uint8_t aux_rand[32],
256 uint8_t sig64_out[64]);
261 const uint8_t msg32[32],
262 const uint8_t privkey[32],
263 const uint8_t aux_rand[32],
264 uint8_t sig64_out[64]);
269 const uint8_t msg32[32],
270 const uint8_t sig64[64],
271 const uint8_t pubkey_x[32]);
290 const uint8_t* msgs32,
291 const uint8_t* privkeys32,
292 uint8_t* sigs64_out);
309 const uint8_t* msgs32,
310 const uint8_t* privkeys32,
311 const uint8_t* aux_rands32,
312 uint8_t* sigs64_out);
320 const uint8_t privkey[32],
321 const uint8_t pubkey33[33],
322 uint8_t secret32_out[32]);
326 const uint8_t privkey[32],
327 const uint8_t pubkey33[33],
328 uint8_t secret32_out[32]);
332 const uint8_t privkey[32],
333 const uint8_t pubkey33[33],
334 uint8_t secret32_out[32]);
342 uint8_t digest32_out[32]);
346 uint8_t digest20_out[20]);
350 const uint8_t* data,
size_t len,
351 uint8_t digest32_out[32]);
361 const uint8_t pubkey33[33],
363 char* addr_out,
size_t* addr_len);
369 const uint8_t pubkey33[33],
371 char* addr_out,
size_t* addr_len);
377 const uint8_t internal_key_x[32],
379 char* addr_out,
size_t* addr_len);
385 const uint8_t* redeem_script,
size_t redeem_script_len,
387 char* addr_out,
size_t* addr_len);
394 const uint8_t pubkey33[33],
396 char* addr_out,
size_t* addr_len);
406 const uint8_t privkey[32],
407 int compressed,
int network,
408 char* wif_out,
size_t* wif_len);
413 uint8_t privkey32_out[32],
433 const uint8_t* seed,
size_t seed_len,
451 uint8_t privkey32_out[32]);
456 uint8_t pubkey33_out[33]);
466 const uint8_t internal_x[32],
467 const uint8_t* merkle_root,
468 uint8_t output_x_out[32],
474 const uint8_t privkey[32],
475 const uint8_t* merkle_root,
476 uint8_t tweaked32_out[32]);
481 const uint8_t output_x[32],
int output_parity,
482 const uint8_t internal_x[32],
483 const uint8_t* merkle_root,
size_t merkle_root_len);
500 const uint8_t hash_prevouts[32],
501 const uint8_t hash_sequence[32],
502 const uint8_t outpoint_txid[32], uint32_t outpoint_vout,
503 const uint8_t* script_code,
size_t script_code_len,
506 const uint8_t hash_outputs[32],
508 uint32_t sighash_type,
509 uint8_t sighash_out[32]);
513 const uint8_t pubkey_hash[20],
514 uint8_t script_code_out[25]);
525 const uint8_t* raw_tx,
size_t raw_tx_len,
526 uint8_t txid_out[32]);
531 const uint8_t* raw_tx,
size_t raw_tx_len,
532 uint8_t wtxid_out[32]);
536 const uint8_t witness_root[32],
537 const uint8_t witness_nonce[32],
538 uint8_t commitment_out[32]);
546 const uint8_t* script,
size_t script_len);
554 const uint8_t* script,
size_t script_len,
556 uint8_t* program_out,
size_t* program_len_out);
560 const uint8_t pubkey_hash[20],
561 uint8_t spk_out[22]);
565 const uint8_t script_hash[32],
566 uint8_t spk_out[34]);
570 const uint8_t output_key[32],
571 uint8_t spk_out[34]);
575 const uint8_t* script,
size_t script_len,
576 uint8_t hash_out[32]);
587 uint32_t version, uint32_t locktime,
589 const uint8_t* prevout_txids,
590 const uint32_t* prevout_vouts,
591 const uint64_t* input_amounts,
592 const uint32_t* input_sequences,
593 const uint8_t*
const* input_spks,
594 const size_t* input_spk_lens,
596 const uint64_t* output_values,
597 const uint8_t*
const* output_spks,
598 const size_t* output_spk_lens,
601 const uint8_t* annex,
size_t annex_len,
602 uint8_t sighash_out[32]);
607 uint32_t version, uint32_t locktime,
609 const uint8_t* prevout_txids,
610 const uint32_t* prevout_vouts,
611 const uint64_t* input_amounts,
612 const uint32_t* input_sequences,
613 const uint8_t*
const* input_spks,
614 const size_t* input_spk_lens,
616 const uint64_t* output_values,
617 const uint8_t*
const* output_spks,
618 const size_t* output_spk_lens,
621 const uint8_t tapleaf_hash[32],
623 uint32_t code_separator_pos,
624 const uint8_t* annex,
size_t annex_len,
625 uint8_t sighash_out[32]);
637 const uint8_t a33[33],
638 const uint8_t b33[33],
643 const uint8_t pubkey33[33],
648 const uint8_t pubkey33[33],
649 const uint8_t tweak[32],
654 const uint8_t pubkey33[33],
655 const uint8_t tweak[32],
662 const uint8_t* pubkeys,
677 size_t entropy_bytes,
678 const uint8_t* entropy_in,
680 size_t* mnemonic_len);
685 const char* mnemonic);
690 const char* mnemonic,
691 const char* passphrase,
692 uint8_t seed64_out[64]);
698 const char* mnemonic,
699 uint8_t* entropy_out,
700 size_t* entropy_len);
711 const uint8_t* entries,
size_t n);
718 const uint8_t* entries,
size_t n);
725 const uint8_t* entries,
size_t n,
726 size_t* invalid_out,
size_t* invalid_count);
733 const uint8_t* entries,
size_t n,
734 size_t* invalid_out,
size_t* invalid_count);
742 uint8_t digest64_out[64]);
752 const uint8_t a[32],
const uint8_t P33[33],
753 const uint8_t b[32],
const uint8_t Q33[33],
761 const uint8_t* scalars,
const uint8_t* points,
size_t n,
768#define UFSECP_MUSIG2_PUBNONCE_LEN 66
769#define UFSECP_MUSIG2_AGGNONCE_LEN 66
770#define UFSECP_MUSIG2_KEYAGG_LEN 165
771#define UFSECP_MUSIG2_SESSION_LEN 165
772#define UFSECP_MUSIG2_SECNONCE_LEN 64
779 const uint8_t* pubkeys,
size_t n,
781 uint8_t agg_pubkey32_out[32]);
786 const uint8_t privkey[32],
787 const uint8_t pubkey32[32],
788 const uint8_t agg_pubkey32[32],
789 const uint8_t msg32[32],
790 const uint8_t extra_in[32],
800 const uint8_t* pubnonces,
size_t n,
812 const uint8_t msg32[32],
823 const uint8_t privkey[32],
827 uint8_t partial_sig32_out[32]);
835 const uint8_t partial_sig32[32],
837 const uint8_t pubkey32[32],
840 size_t signer_index);
847 const uint8_t* partial_sigs,
size_t n,
849 uint8_t sig64_out[64]);
855#define UFSECP_FROST_SHARE_LEN 36
856#define UFSECP_FROST_KEYPKG_LEN 141
857#define UFSECP_FROST_NONCE_LEN 64
858#define UFSECP_FROST_NONCE_COMMIT_LEN 70
868 uint32_t participant_id, uint32_t threshold, uint32_t num_participants,
869 const uint8_t seed[32],
870 uint8_t* commits_out,
size_t* commits_len,
871 uint8_t* shares_out,
size_t* shares_len);
883 uint32_t participant_id,
884 const uint8_t* all_commits,
size_t commits_len,
885 const uint8_t* received_shares,
size_t shares_len,
886 uint32_t threshold, uint32_t num_participants,
893 uint32_t participant_id,
894 const uint8_t nonce_seed[32],
907 const uint8_t msg32[32],
908 const uint8_t* nonce_commits,
size_t n_signers,
909 uint8_t partial_sig_out[36]);
920 const uint8_t partial_sig[36],
921 const uint8_t verification_share33[33],
922 const uint8_t* nonce_commits,
size_t n_signers,
923 const uint8_t msg32[32],
924 const uint8_t group_pubkey33[33]);
935 const uint8_t* partial_sigs,
size_t n,
936 const uint8_t* nonce_commits,
size_t n_signers,
937 const uint8_t group_pubkey33[33],
938 const uint8_t msg32[32],
939 uint8_t sig64_out[64]);
945#define UFSECP_SCHNORR_ADAPTOR_SIG_LEN 97
946#define UFSECP_ECDSA_ADAPTOR_SIG_LEN 130
951 const uint8_t privkey[32],
952 const uint8_t msg32[32],
953 const uint8_t adaptor_point33[33],
954 const uint8_t aux_rand[32],
961 const uint8_t pubkey_x[32],
962 const uint8_t msg32[32],
963 const uint8_t adaptor_point33[33]);
969 const uint8_t adaptor_secret[32],
970 uint8_t sig64_out[64]);
976 const uint8_t sig64[64],
977 uint8_t secret32_out[32]);
982 const uint8_t privkey[32],
983 const uint8_t msg32[32],
984 const uint8_t adaptor_point33[33],
991 const uint8_t pubkey33[33],
992 const uint8_t msg32[32],
993 const uint8_t adaptor_point33[33]);
999 const uint8_t adaptor_secret[32],
1000 uint8_t sig64_out[64]);
1006 const uint8_t sig64[64],
1007 uint8_t secret32_out[32]);
1017 const uint8_t value[32],
1018 const uint8_t blinding[32],
1019 uint8_t commitment33_out[33]);
1024 const uint8_t commitment33[33],
1025 const uint8_t value[32],
1026 const uint8_t blinding[32]);
1032 const uint8_t* pos,
size_t n_pos,
1033 const uint8_t* neg,
size_t n_neg);
1039 const uint8_t* blinds_in,
size_t n_in,
1040 const uint8_t* blinds_out,
size_t n_out,
1041 uint8_t sum32_out[32]);
1046 const uint8_t value[32],
1047 const uint8_t blinding[32],
1048 const uint8_t switch_blind[32],
1049 uint8_t commitment33_out[33]);
1055#define UFSECP_ZK_KNOWLEDGE_PROOF_LEN 64
1056#define UFSECP_ZK_DLEQ_PROOF_LEN 64
1057#define UFSECP_ZK_RANGE_PROOF_MAX_LEN 688
1062 const uint8_t secret[32],
1063 const uint8_t pubkey33[33],
1064 const uint8_t msg32[32],
1065 const uint8_t aux_rand[32],
1072 const uint8_t pubkey33[33],
1073 const uint8_t msg32[32]);
1079 const uint8_t secret[32],
1080 const uint8_t G33[33],
const uint8_t H33[33],
1081 const uint8_t P33[33],
const uint8_t Q33[33],
1082 const uint8_t aux_rand[32],
1089 const uint8_t G33[33],
const uint8_t H33[33],
1090 const uint8_t P33[33],
const uint8_t Q33[33]);
1097 const uint8_t blinding[32],
1098 const uint8_t commitment33[33],
1099 const uint8_t aux_rand[32],
1100 uint8_t* proof_out,
size_t* proof_len);
1106 const uint8_t commitment33[33],
1107 const uint8_t* proof,
size_t proof_len);
1141 uint8_t result_x[32];
1142 uint8_t result_y[32];
1143 uint8_t result_x_mod_n[32];
1177 const uint8_t msg_hash32[32],
1178 const uint8_t pubkey33[33],
1179 const uint8_t sig64[64],
1234 const uint8_t msg32[32],
1235 const uint8_t pubkey_x32[32],
1236 const uint8_t sig64[64],
1244#define UFSECP_COIN_ADDR_MAX_LEN 128
1247#define UFSECP_COIN_BITCOIN 0
1248#define UFSECP_COIN_LITECOIN 2
1249#define UFSECP_COIN_DOGECOIN 3
1250#define UFSECP_COIN_DASH 5
1251#define UFSECP_COIN_ETHEREUM 60
1252#define UFSECP_COIN_BITCOIN_CASH 145
1253#define UFSECP_COIN_TRON 195
1261 const uint8_t pubkey33[33],
1262 uint32_t coin_type,
int testnet,
1263 char* addr_out,
size_t* addr_len);
1272 const uint8_t* seed,
size_t seed_len,
1273 uint32_t coin_type, uint32_t account,
int change, uint32_t index,
1275 uint8_t* privkey32_out,
1276 uint8_t* pubkey33_out,
1277 char* addr_out,
size_t* addr_len);
1282 const uint8_t privkey[32],
1283 uint32_t coin_type,
int testnet,
1284 char* wif_out,
size_t* wif_len);
1291 const uint8_t* msg,
size_t msg_len,
1292 const uint8_t privkey[32],
1293 char* base64_out,
size_t* base64_len);
1299 const uint8_t* msg,
size_t msg_len,
1300 const uint8_t pubkey33[33],
1301 const char* base64_sig);
1305 const uint8_t* msg,
size_t msg_len,
1306 uint8_t digest32_out[32]);
1321 const uint8_t scan_privkey[32],
1322 const uint8_t spend_privkey[32],
1323 uint8_t scan_pubkey33_out[33],
1324 uint8_t spend_pubkey33_out[33],
1325 char* addr_out,
size_t* addr_len);
1338 const uint8_t* input_privkeys,
size_t n_inputs,
1339 const uint8_t scan_pubkey33[33],
1340 const uint8_t spend_pubkey33[33],
1342 uint8_t output_pubkey33_out[33],
1343 uint8_t* tweak32_out);
1357 const uint8_t scan_privkey[32],
1358 const uint8_t spend_privkey[32],
1359 const uint8_t* input_pubkeys33,
size_t n_input_pubkeys,
1360 const uint8_t* output_xonly32,
size_t n_outputs,
1361 uint32_t* found_indices_out,
1362 uint8_t* found_privkeys_out,
1370#define UFSECP_ECIES_OVERHEAD 81
1379 const uint8_t recipient_pubkey33[33],
1380 const uint8_t* plaintext,
size_t plaintext_len,
1381 uint8_t* envelope_out,
size_t* envelope_len);
1390 const uint8_t privkey[32],
1391 const uint8_t* envelope,
size_t envelope_len,
1392 uint8_t* plaintext_out,
size_t* plaintext_len);
1397#ifdef SECP256K1_BIP324
1400typedef struct ufsecp_bip324_session ufsecp_bip324_session;
1409 ufsecp_bip324_session** session_out,
1410 uint8_t ellswift64_out[64]);
1416 ufsecp_bip324_session* session,
1417 const uint8_t peer_ellswift64[64],
1418 uint8_t session_id32_out[32]);
1425 ufsecp_bip324_session* session,
1426 const uint8_t* plaintext,
size_t plaintext_len,
1427 uint8_t* out,
size_t* out_len);
1437 ufsecp_bip324_session* session,
1438 const uint8_t* encrypted,
size_t encrypted_len,
1439 uint8_t* plaintext_out,
size_t* plaintext_len);
1442UFSECP_API void ufsecp_bip324_destroy(ufsecp_bip324_session* session);
1452 const uint8_t key[32],
const uint8_t nonce[12],
1453 const uint8_t* aad,
size_t aad_len,
1454 const uint8_t* plaintext,
size_t plaintext_len,
1455 uint8_t* out, uint8_t tag[16]);
1460 const uint8_t key[32],
const uint8_t nonce[12],
1461 const uint8_t* aad,
size_t aad_len,
1462 const uint8_t* ciphertext,
size_t ciphertext_len,
1463 const uint8_t tag[16], uint8_t* out);
1470 const uint8_t privkey[32],
1471 uint8_t encoding64_out[64]);
1481 const uint8_t ell_a64[64],
1482 const uint8_t ell_b64[64],
1483 const uint8_t our_privkey[32],
1485 uint8_t secret32_out[32]);
1489#ifdef SECP256K1_BUILD_ETHEREUM
1492#define UFSECP_ETH_ADDR_LEN 20
1497 uint8_t digest32_out[32]);
1503 const uint8_t pubkey33[33],
1504 uint8_t addr20_out[20]);
1511 const uint8_t pubkey33[33],
1512 char* addr_out,
size_t* addr_len);
1518 uint8_t digest32_out[32]);
1526 const uint8_t msg32[32],
1527 const uint8_t privkey[32],
1537 const uint8_t msg32[32],
1538 const uint8_t r[32],
1539 const uint8_t s[32],
1541 uint8_t addr20_out[20]);
1559 uint8_t* entropy_out,
size_t entropy_len);
1569 uint32_t words, uint32_t language_index, uint32_t index,
1570 char* mnemonic_out,
size_t* mnemonic_len);
1581 const uint8_t privkey[32],
1582 const uint8_t* msg,
size_t msg_len,
1583 const uint8_t* aux_rand32,
1584 uint8_t sig64_out[64]);
1589 const uint8_t pubkey_x[32],
1590 const uint8_t* msg,
size_t msg_len,
1591 const uint8_t sig64[64]);
1611 const uint8_t privkey[32],
1613 const uint8_t* msg,
size_t msg_len,
1614 uint8_t* sig_out,
size_t* sig_len);
1622 const uint8_t* pubkey,
size_t pubkey_len,
1624 const uint8_t* msg,
size_t msg_len,
1625 const uint8_t* sig,
size_t sig_len);
1639 const uint8_t key[16],
1640 const uint8_t** data,
const size_t* data_sizes,
size_t count,
1641 uint8_t* filter_out,
size_t* filter_len);
1646 const uint8_t key[16],
1647 const uint8_t* filter,
size_t filter_len,
1649 const uint8_t* item,
size_t item_len);
1654 const uint8_t key[16],
1655 const uint8_t* filter,
size_t filter_len,
1657 const uint8_t** query,
const size_t* query_sizes,
size_t query_count);
1664#define UFSECP_SIGHASH_ALL 0x01
1665#define UFSECP_SIGHASH_NONE 0x02
1666#define UFSECP_SIGHASH_SINGLE 0x03
1667#define UFSECP_SIGHASH_ANYONECANPAY 0x80
1668#define UFSECP_SIGHASH_DEFAULT 0x00
1677 const uint8_t sighash32[32],
1678 const uint8_t privkey[32],
1679 uint8_t sighash_type,
1680 uint8_t* sig_out,
size_t* sig_len);
1686 const uint8_t sighash32[32],
1687 const uint8_t privkey[32],
1688 uint8_t sighash_type,
1689 uint8_t* sig_out,
size_t* sig_len);
1695 const uint8_t sighash32[32],
1696 const uint8_t privkey[32],
1697 uint8_t sighash_type,
1698 const uint8_t* aux_rand32,
1699 uint8_t* sig_out,
size_t* sig_len);
1707 const char* key_path,
1708 uint8_t privkey_out[32]);
1739 const char* descriptor,
1742 char* addr_out,
size_t* addr_len);
1748 const char* descriptor,
1750 char* addr_out,
size_t* addr_len);
1759 "ABI break: ufsecp_bip32_key size changed (expected 82)");
1761 "ABI break: UFSECP_BIP32_SERIALIZED_LEN changed (expected 78)");
1763 "ABI break: UFSECP_PRIVKEY_LEN changed");
1765 "ABI break: UFSECP_PUBKEY_COMPRESSED_LEN changed");
1767 "ABI break: UFSECP_SIG_COMPACT_LEN changed");
1770#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
1772 "ABI break: ufsecp_bip32_key size changed (expected 82)");
ufsecp_ff_limbs_t lmb_pub_y
ufsecp_ff_limbs_t lmb_result_x_mod_n
ufsecp_ff_limbs_t lmb_sig_r
ufsecp_ff_limbs_t lmb_result_x
ufsecp_ff_limbs_t lmb_sig_s
ufsecp_ff_limbs_t lmb_s_inv
ufsecp_ff_limbs_t lmb_pub_x
ufsecp_ff_limbs_t lmb_result_y
ufsecp_ff_limbs_t lmb_pub_x
ufsecp_ff_limbs_t lmb_sig_s
ufsecp_ff_limbs_t lmb_pub_y
ufsecp_ff_limbs_t lmb_sig_r
ufsecp_ff_limbs_t lmb_r_y
UFSECP_API ufsecp_error_t ufsecp_bip32_master(ufsecp_ctx *ctx, const uint8_t *seed, size_t seed_len, ufsecp_bip32_key *key_out)
UFSECP_API ufsecp_error_t ufsecp_btc_message_sign(ufsecp_ctx *ctx, const uint8_t *msg, size_t msg_len, const uint8_t privkey[32], char *base64_out, size_t *base64_len)
UFSECP_API ufsecp_error_t ufsecp_tapscript_sighash(ufsecp_ctx *ctx, uint32_t version, uint32_t locktime, size_t input_count, const uint8_t *prevout_txids, const uint32_t *prevout_vouts, const uint64_t *input_amounts, const uint32_t *input_sequences, const uint8_t *const *input_spks, const size_t *input_spk_lens, size_t output_count, const uint64_t *output_values, const uint8_t *const *output_spks, const size_t *output_spk_lens, size_t input_index, uint8_t hash_type, const uint8_t tapleaf_hash[32], uint8_t key_version, uint32_t code_separator_pos, const uint8_t *annex, size_t annex_len, uint8_t sighash_out[32])
UFSECP_API ufsecp_error_t ufsecp_ecdsa_batch_verify(ufsecp_ctx *ctx, const uint8_t *entries, size_t n)
UFSECP_API ufsecp_error_t ufsecp_wif_decode(ufsecp_ctx *ctx, const char *wif, uint8_t privkey32_out[32], int *compressed_out, int *network_out)
UFSECP_API ufsecp_error_t ufsecp_schnorr_adaptor_extract(ufsecp_ctx *ctx, const uint8_t pre_sig[UFSECP_SCHNORR_ADAPTOR_SIG_LEN], const uint8_t sig64[64], uint8_t secret32_out[32])
#define UFSECP_FROST_NONCE_COMMIT_LEN
UFSECP_API ufsecp_error_t ufsecp_pubkey_tweak_add(ufsecp_ctx *ctx, const uint8_t pubkey33[33], const uint8_t tweak[32], uint8_t out33[33])
UFSECP_API ufsecp_error_t ufsecp_pubkey_negate(ufsecp_ctx *ctx, const uint8_t pubkey33[33], uint8_t out33[33])
UFSECP_API ufsecp_error_t ufsecp_bip144_witness_commitment(const uint8_t witness_root[32], const uint8_t witness_nonce[32], uint8_t commitment_out[32])
UFSECP_API ufsecp_error_t ufsecp_segwit_witness_script_hash(const uint8_t *script, size_t script_len, uint8_t hash_out[32])
UFSECP_API ufsecp_error_t ufsecp_pedersen_commit(ufsecp_ctx *ctx, const uint8_t value[32], const uint8_t blinding[32], uint8_t commitment33_out[33])
UFSECP_API ufsecp_error_t ufsecp_tagged_hash(const char *tag, const uint8_t *data, size_t len, uint8_t digest32_out[32])
UFSECP_API ufsecp_error_t ufsecp_frost_aggregate(ufsecp_ctx *ctx, const uint8_t *partial_sigs, size_t n, const uint8_t *nonce_commits, size_t n_signers, const uint8_t group_pubkey33[33], const uint8_t msg32[32], uint8_t sig64_out[64])
UFSECP_API ufsecp_error_t ufsecp_pubkey_tweak_mul(ufsecp_ctx *ctx, const uint8_t pubkey33[33], const uint8_t tweak[32], uint8_t out33[33])
UFSECP_API ufsecp_error_t ufsecp_frost_sign_nonce_gen(ufsecp_ctx *ctx, uint32_t participant_id, const uint8_t nonce_seed[32], uint8_t nonce_out[UFSECP_FROST_NONCE_LEN], uint8_t nonce_commit_out[UFSECP_FROST_NONCE_COMMIT_LEN])
UFSECP_API ufsecp_error_t ufsecp_taproot_keypath_sighash(ufsecp_ctx *ctx, uint32_t version, uint32_t locktime, size_t input_count, const uint8_t *prevout_txids, const uint32_t *prevout_vouts, const uint64_t *input_amounts, const uint32_t *input_sequences, const uint8_t *const *input_spks, const size_t *input_spk_lens, size_t output_count, const uint64_t *output_values, const uint8_t *const *output_spks, const size_t *output_spk_lens, size_t input_index, uint8_t hash_type, const uint8_t *annex, size_t annex_len, uint8_t sighash_out[32])
UFSECP_API ufsecp_error_t ufsecp_ecdsa_adaptor_adapt(ufsecp_ctx *ctx, const uint8_t pre_sig[UFSECP_ECDSA_ADAPTOR_SIG_LEN], const uint8_t adaptor_secret[32], uint8_t sig64_out[64])
UFSECP_API ufsecp_error_t ufsecp_btc_message_verify(ufsecp_ctx *ctx, const uint8_t *msg, size_t msg_len, const uint8_t pubkey33[33], const char *base64_sig)
UFSECP_API ufsecp_error_t ufsecp_addr_p2wpkh(ufsecp_ctx *ctx, const uint8_t pubkey33[33], int network, char *addr_out, size_t *addr_len)
UFSECP_API ufsecp_error_t ufsecp_gcs_match(const uint8_t key[16], const uint8_t *filter, size_t filter_len, size_t n_items, const uint8_t *item, size_t item_len)
UFSECP_API ufsecp_error_t ufsecp_zk_range_prove(ufsecp_ctx *ctx, uint64_t value, const uint8_t blinding[32], const uint8_t commitment33[33], const uint8_t aux_rand[32], uint8_t *proof_out, size_t *proof_len)
UFSECP_API ufsecp_error_t ufsecp_bip322_verify(ufsecp_ctx *ctx, const uint8_t *pubkey, size_t pubkey_len, ufsecp_bip322_addr_type addr_type, const uint8_t *msg, size_t msg_len, const uint8_t *sig, size_t sig_len)
UFSECP_API ufsecp_error_t ufsecp_musig2_start_sign_session(ufsecp_ctx *ctx, const uint8_t aggnonce[UFSECP_MUSIG2_AGGNONCE_LEN], const uint8_t keyagg[UFSECP_MUSIG2_KEYAGG_LEN], const uint8_t msg32[32], uint8_t session_out[UFSECP_MUSIG2_SESSION_LEN])
UFSECP_API ufsecp_error_t ufsecp_schnorr_adaptor_sign(ufsecp_ctx *ctx, const uint8_t privkey[32], const uint8_t msg32[32], const uint8_t adaptor_point33[33], const uint8_t aux_rand[32], uint8_t pre_sig_out[UFSECP_SCHNORR_ADAPTOR_SIG_LEN])
#define UFSECP_ZK_KNOWLEDGE_PROOF_LEN
UFSECP_API ufsecp_error_t ufsecp_coin_wif_encode(ufsecp_ctx *ctx, const uint8_t privkey[32], uint32_t coin_type, int testnet, char *wif_out, size_t *wif_len)
UFSECP_API int ufsecp_segwit_is_witness_program(const uint8_t *script, size_t script_len)
UFSECP_API ufsecp_error_t ufsecp_ecdsa_verify(ufsecp_ctx *ctx, const uint8_t msg32[32], const uint8_t sig64[64], const uint8_t pubkey33[33])
UFSECP_API ufsecp_error_t ufsecp_bip144_txid(ufsecp_ctx *ctx, const uint8_t *raw_tx, size_t raw_tx_len, uint8_t txid_out[32])
UFSECP_API ufsecp_error_t ufsecp_frost_sign(ufsecp_ctx *ctx, const uint8_t keypkg[UFSECP_FROST_KEYPKG_LEN], uint8_t nonce[UFSECP_FROST_NONCE_LEN], const uint8_t msg32[32], const uint8_t *nonce_commits, size_t n_signers, uint8_t partial_sig_out[36])
UFSECP_API ufsecp_error_t ufsecp_taproot_tweak_seckey(ufsecp_ctx *ctx, const uint8_t privkey[32], const uint8_t *merkle_root, uint8_t tweaked32_out[32])
UFSECP_API ufsecp_error_t ufsecp_musig2_partial_sign(ufsecp_ctx *ctx, uint8_t secnonce[UFSECP_MUSIG2_SECNONCE_LEN], const uint8_t privkey[32], const uint8_t keyagg[UFSECP_MUSIG2_KEYAGG_LEN], const uint8_t session[UFSECP_MUSIG2_SESSION_LEN], size_t signer_index, uint8_t partial_sig32_out[32])
UFSECP_API ufsecp_error_t ufsecp_schnorr_sign_msg(ufsecp_ctx *ctx, const uint8_t privkey[32], const uint8_t *msg, size_t msg_len, const uint8_t *aux_rand32, uint8_t sig64_out[64])
UFSECP_API ufsecp_error_t ufsecp_ctx_clone(const ufsecp_ctx *src, ufsecp_ctx **ctx_out)
UFSECP_API ufsecp_error_t ufsecp_sha512(const uint8_t *data, size_t len, uint8_t digest64_out[64])
UFSECP_API ufsecp_error_t ufsecp_ecdsa_sign_recoverable(ufsecp_ctx *ctx, const uint8_t msg32[32], const uint8_t privkey[32], uint8_t sig64_out[64], int *recid_out)
UFSECP_API const char * ufsecp_last_error_msg(const ufsecp_ctx *ctx)
#define UFSECP_MUSIG2_SECNONCE_LEN
UFSECP_API ufsecp_error_t ufsecp_ecdsa_sign(ufsecp_ctx *ctx, const uint8_t msg32[32], const uint8_t privkey[32], uint8_t sig64_out[64])
UFSECP_API ufsecp_error_t ufsecp_addr_p2sh(const uint8_t *redeem_script, size_t redeem_script_len, int network, char *addr_out, size_t *addr_len)
UFSECP_API ufsecp_error_t ufsecp_ecdh_raw(ufsecp_ctx *ctx, const uint8_t privkey[32], const uint8_t pubkey33[33], uint8_t secret32_out[32])
UFSECP_API ufsecp_error_t ufsecp_bip39_to_seed(ufsecp_ctx *ctx, const char *mnemonic, const char *passphrase, uint8_t seed64_out[64])
UFSECP_API ufsecp_error_t ufsecp_sha256(const uint8_t *data, size_t len, uint8_t digest32_out[32])
UFSECP_API ufsecp_error_t ufsecp_segwit_p2tr_spk(const uint8_t output_key[32], uint8_t spk_out[34])
UFSECP_API ufsecp_error_t ufsecp_bip143_sighash(ufsecp_ctx *ctx, uint32_t version, const uint8_t hash_prevouts[32], const uint8_t hash_sequence[32], const uint8_t outpoint_txid[32], uint32_t outpoint_vout, const uint8_t *script_code, size_t script_code_len, uint64_t value, uint32_t sequence, const uint8_t hash_outputs[32], uint32_t locktime, uint32_t sighash_type, uint8_t sighash_out[32])
UFSECP_API ufsecp_error_t ufsecp_wif_encode(ufsecp_ctx *ctx, const uint8_t privkey[32], int compressed, int network, char *wif_out, size_t *wif_len)
UFSECP_API ufsecp_error_t ufsecp_bip39_to_entropy(ufsecp_ctx *ctx, const char *mnemonic, uint8_t *entropy_out, size_t *entropy_len)
UFSECP_API ufsecp_error_t ufsecp_bip143_p2wpkh_script_code(const uint8_t pubkey_hash[20], uint8_t script_code_out[25])
UFSECP_API ufsecp_error_t ufsecp_zk_knowledge_verify(ufsecp_ctx *ctx, const uint8_t proof[UFSECP_ZK_KNOWLEDGE_PROOF_LEN], const uint8_t pubkey33[33], const uint8_t msg32[32])
UFSECP_API size_t ufsecp_ctx_size(void)
UFSECP_API ufsecp_error_t ufsecp_taproot_verify(ufsecp_ctx *ctx, const uint8_t output_x[32], int output_parity, const uint8_t internal_x[32], const uint8_t *merkle_root, size_t merkle_root_len)
UFSECP_API ufsecp_error_t ufsecp_psbt_sign_taproot(ufsecp_ctx *ctx, const uint8_t sighash32[32], const uint8_t privkey[32], uint8_t sighash_type, const uint8_t *aux_rand32, uint8_t *sig_out, size_t *sig_len)
UFSECP_API ufsecp_error_t ufsecp_segwit_p2wpkh_spk(const uint8_t pubkey_hash[20], uint8_t spk_out[22])
UFSECP_API ufsecp_error_t ufsecp_schnorr_batch_identify_invalid(ufsecp_ctx *ctx, const uint8_t *entries, size_t n, size_t *invalid_out, size_t *invalid_count)
#define UFSECP_SIG_COMPACT_LEN
UFSECP_API ufsecp_error_t ufsecp_last_error(const ufsecp_ctx *ctx)
#define UFSECP_ZK_DLEQ_PROOF_LEN
UFSECP_API ufsecp_error_t ufsecp_zk_schnorr_snark_witness(ufsecp_ctx *ctx, const uint8_t msg32[32], const uint8_t pubkey_x32[32], const uint8_t sig64[64], ufsecp_schnorr_snark_witness_t *out)
UFSECP_API ufsecp_error_t ufsecp_schnorr_sign_verified(ufsecp_ctx *ctx, const uint8_t msg32[32], const uint8_t privkey[32], const uint8_t aux_rand[32], uint8_t sig64_out[64])
UFSECP_API ufsecp_error_t ufsecp_pubkey_create_uncompressed(ufsecp_ctx *ctx, const uint8_t privkey[32], uint8_t pubkey65_out[65])
#define UFSECP_FROST_NONCE_LEN
UFSECP_API ufsecp_error_t ufsecp_zk_dleq_verify(ufsecp_ctx *ctx, const uint8_t proof[UFSECP_ZK_DLEQ_PROOF_LEN], const uint8_t G33[33], const uint8_t H33[33], const uint8_t P33[33], const uint8_t Q33[33])
UFSECP_API ufsecp_error_t ufsecp_bip32_pubkey(ufsecp_ctx *ctx, const ufsecp_bip32_key *key, uint8_t pubkey33_out[33])
UFSECP_API ufsecp_error_t ufsecp_btc_message_hash(const uint8_t *msg, size_t msg_len, uint8_t digest32_out[32])
@ UFSECP_BIP322_ADDR_P2PKH
@ UFSECP_BIP322_ADDR_P2TR
@ UFSECP_BIP322_ADDR_P2SH_P2WPKH
@ UFSECP_BIP322_ADDR_P2WPKH
UFSECP_API ufsecp_error_t ufsecp_musig2_key_agg(ufsecp_ctx *ctx, const uint8_t *pubkeys, size_t n, uint8_t keyagg_out[UFSECP_MUSIG2_KEYAGG_LEN], uint8_t agg_pubkey32_out[32])
UFSECP_API ufsecp_error_t ufsecp_ecdsa_adaptor_verify(ufsecp_ctx *ctx, const uint8_t pre_sig[UFSECP_ECDSA_ADAPTOR_SIG_LEN], const uint8_t pubkey33[33], const uint8_t msg32[32], const uint8_t adaptor_point33[33])
UFSECP_API ufsecp_error_t ufsecp_musig2_partial_verify(ufsecp_ctx *ctx, const uint8_t partial_sig32[32], const uint8_t pubnonce[UFSECP_MUSIG2_PUBNONCE_LEN], const uint8_t pubkey32[32], const uint8_t keyagg[UFSECP_MUSIG2_KEYAGG_LEN], const uint8_t session[UFSECP_MUSIG2_SESSION_LEN], size_t signer_index)
UFSECP_API ufsecp_error_t ufsecp_ecdh(ufsecp_ctx *ctx, const uint8_t privkey[32], const uint8_t pubkey33[33], uint8_t secret32_out[32])
UFSECP_API ufsecp_error_t ufsecp_bip322_sign(ufsecp_ctx *ctx, const uint8_t privkey[32], ufsecp_bip322_addr_type addr_type, const uint8_t *msg, size_t msg_len, uint8_t *sig_out, size_t *sig_len)
UFSECP_API void ufsecp_ctx_destroy(ufsecp_ctx *ctx)
UFSECP_API ufsecp_error_t ufsecp_pubkey_xonly(ufsecp_ctx *ctx, const uint8_t privkey[32], uint8_t xonly32_out[32])
UFSECP_API ufsecp_error_t ufsecp_schnorr_verify_msg(ufsecp_ctx *ctx, const uint8_t pubkey_x[32], const uint8_t *msg, size_t msg_len, const uint8_t sig64[64])
UFSECP_API ufsecp_error_t ufsecp_pubkey_parse(ufsecp_ctx *ctx, const uint8_t *input, size_t input_len, uint8_t pubkey33_out[33])
UFSECP_API ufsecp_error_t ufsecp_pedersen_switch_commit(ufsecp_ctx *ctx, const uint8_t value[32], const uint8_t blinding[32], const uint8_t switch_blind[32], uint8_t commitment33_out[33])
UFSECP_API ufsecp_error_t ufsecp_addr_p2sh_p2wpkh(ufsecp_ctx *ctx, const uint8_t pubkey33[33], int network, char *addr_out, size_t *addr_len)
UFSECP_API ufsecp_error_t ufsecp_schnorr_adaptor_verify(ufsecp_ctx *ctx, const uint8_t pre_sig[UFSECP_SCHNORR_ADAPTOR_SIG_LEN], const uint8_t pubkey_x[32], const uint8_t msg32[32], const uint8_t adaptor_point33[33])
UFSECP_API ufsecp_error_t ufsecp_silent_payment_create_output(ufsecp_ctx *ctx, const uint8_t *input_privkeys, size_t n_inputs, const uint8_t scan_pubkey33[33], const uint8_t spend_pubkey33[33], uint32_t k, uint8_t output_pubkey33_out[33], uint8_t *tweak32_out)
UFSECP_API ufsecp_error_t ufsecp_musig2_nonce_gen(ufsecp_ctx *ctx, const uint8_t privkey[32], const uint8_t pubkey32[32], const uint8_t agg_pubkey32[32], const uint8_t msg32[32], const uint8_t extra_in[32], uint8_t secnonce_out[UFSECP_MUSIG2_SECNONCE_LEN], uint8_t pubnonce_out[UFSECP_MUSIG2_PUBNONCE_LEN])
UFSECP_API ufsecp_error_t ufsecp_ecdsa_sig_to_der(ufsecp_ctx *ctx, const uint8_t sig64[64], uint8_t *der_out, size_t *der_len)
#define UFSECP_MUSIG2_KEYAGG_LEN
#define UFSECP_PRIVKEY_LEN
UFSECP_API ufsecp_error_t ufsecp_psbt_sign_legacy(ufsecp_ctx *ctx, const uint8_t sighash32[32], const uint8_t privkey[32], uint8_t sighash_type, uint8_t *sig_out, size_t *sig_len)
UFSECP_API ufsecp_error_t ufsecp_bip32_privkey(ufsecp_ctx *ctx, const ufsecp_bip32_key *key, uint8_t privkey32_out[32])
UFSECP_API ufsecp_error_t ufsecp_ecies_encrypt(ufsecp_ctx *ctx, const uint8_t recipient_pubkey33[33], const uint8_t *plaintext, size_t plaintext_len, uint8_t *envelope_out, size_t *envelope_len)
UFSECP_API ufsecp_error_t ufsecp_schnorr_verify(ufsecp_ctx *ctx, const uint8_t msg32[32], const uint8_t sig64[64], const uint8_t pubkey_x[32])
#define UFSECP_FROST_KEYPKG_LEN
UFSECP_API ufsecp_error_t ufsecp_bip85_bip39(ufsecp_ctx *ctx, const ufsecp_bip32_key *master_xprv, uint32_t words, uint32_t language_index, uint32_t index, char *mnemonic_out, size_t *mnemonic_len)
UFSECP_API ufsecp_error_t ufsecp_gcs_match_any(const uint8_t key[16], const uint8_t *filter, size_t filter_len, size_t n_items, const uint8_t **query, const size_t *query_sizes, size_t query_count)
UFSECP_API ufsecp_error_t ufsecp_schnorr_sign_batch(ufsecp_ctx *ctx, size_t count, const uint8_t *msgs32, const uint8_t *privkeys32, const uint8_t *aux_rands32, uint8_t *sigs64_out)
UFSECP_API ufsecp_error_t ufsecp_schnorr_sign(ufsecp_ctx *ctx, const uint8_t msg32[32], const uint8_t privkey[32], const uint8_t aux_rand[32], uint8_t sig64_out[64])
UFSECP_API ufsecp_error_t ufsecp_multi_scalar_mul(ufsecp_ctx *ctx, const uint8_t *scalars, const uint8_t *points, size_t n, uint8_t out33[33])
UFSECP_API ufsecp_error_t ufsecp_ecdsa_recover(ufsecp_ctx *ctx, const uint8_t msg32[32], const uint8_t sig64[64], int recid, uint8_t pubkey33_out[33])
UFSECP_API ufsecp_error_t ufsecp_bip32_derive_path(ufsecp_ctx *ctx, const ufsecp_bip32_key *master, const char *path, ufsecp_bip32_key *key_out)
UFSECP_API ufsecp_error_t ufsecp_seckey_tweak_mul(ufsecp_ctx *ctx, uint8_t privkey[32], const uint8_t tweak[32])
UFSECP_API ufsecp_error_t ufsecp_psbt_derive_key(ufsecp_ctx *ctx, const ufsecp_bip32_key *master_xprv, const char *key_path, uint8_t privkey_out[32])
UFSECP_API ufsecp_error_t ufsecp_zk_dleq_prove(ufsecp_ctx *ctx, const uint8_t secret[32], const uint8_t G33[33], const uint8_t H33[33], const uint8_t P33[33], const uint8_t Q33[33], const uint8_t aux_rand[32], uint8_t proof_out[UFSECP_ZK_DLEQ_PROOF_LEN])
UFSECP_API ufsecp_error_t ufsecp_context_randomize(ufsecp_ctx *ctx, const uint8_t *seed32)
UFSECP_API ufsecp_error_t ufsecp_shamir_trick(ufsecp_ctx *ctx, const uint8_t a[32], const uint8_t P33[33], const uint8_t b[32], const uint8_t Q33[33], uint8_t out33[33])
UFSECP_API ufsecp_error_t ufsecp_segwit_p2wsh_spk(const uint8_t script_hash[32], uint8_t spk_out[34])
UFSECP_API ufsecp_error_t ufsecp_ecies_decrypt(ufsecp_ctx *ctx, const uint8_t privkey[32], const uint8_t *envelope, size_t envelope_len, uint8_t *plaintext_out, size_t *plaintext_len)
#define UFSECP_BIP32_SERIALIZED_LEN
UFSECP_API ufsecp_error_t ufsecp_bip144_wtxid(ufsecp_ctx *ctx, const uint8_t *raw_tx, size_t raw_tx_len, uint8_t wtxid_out[32])
#define UFSECP_PUBKEY_COMPRESSED_LEN
UFSECP_API ufsecp_error_t ufsecp_silent_payment_address(ufsecp_ctx *ctx, const uint8_t scan_privkey[32], const uint8_t spend_privkey[32], uint8_t scan_pubkey33_out[33], uint8_t spend_pubkey33_out[33], char *addr_out, size_t *addr_len)
UFSECP_API ufsecp_error_t ufsecp_seckey_negate(ufsecp_ctx *ctx, uint8_t privkey[32])
UFSECP_API ufsecp_error_t ufsecp_zk_range_verify(ufsecp_ctx *ctx, const uint8_t commitment33[33], const uint8_t *proof, size_t proof_len)
#define UFSECP_MUSIG2_AGGNONCE_LEN
UFSECP_API ufsecp_error_t ufsecp_addr_p2pkh(ufsecp_ctx *ctx, const uint8_t pubkey33[33], int network, char *addr_out, size_t *addr_len)
UFSECP_API ufsecp_error_t ufsecp_ecdsa_sign_verified(ufsecp_ctx *ctx, const uint8_t msg32[32], const uint8_t privkey[32], uint8_t sig64_out[64])
#define UFSECP_MUSIG2_PUBNONCE_LEN
UFSECP_API ufsecp_error_t ufsecp_bip32_derive(ufsecp_ctx *ctx, const ufsecp_bip32_key *parent, uint32_t index, ufsecp_bip32_key *child_out)
UFSECP_API ufsecp_error_t ufsecp_coin_derive_from_seed(ufsecp_ctx *ctx, const uint8_t *seed, size_t seed_len, uint32_t coin_type, uint32_t account, int change, uint32_t index, int testnet, uint8_t *privkey32_out, uint8_t *pubkey33_out, char *addr_out, size_t *addr_len)
UFSECP_API ufsecp_error_t ufsecp_psbt_sign_segwit(ufsecp_ctx *ctx, const uint8_t sighash32[32], const uint8_t privkey[32], uint8_t sighash_type, uint8_t *sig_out, size_t *sig_len)
UFSECP_API ufsecp_error_t ufsecp_musig2_nonce_agg(ufsecp_ctx *ctx, const uint8_t *pubnonces, size_t n, uint8_t aggnonce_out[UFSECP_MUSIG2_AGGNONCE_LEN])
UFSECP_API ufsecp_error_t ufsecp_ecdsa_sig_from_der(ufsecp_ctx *ctx, const uint8_t *der, size_t der_len, uint8_t sig64_out[64])
UFSECP_API ufsecp_error_t ufsecp_taproot_output_key(ufsecp_ctx *ctx, const uint8_t internal_x[32], const uint8_t *merkle_root, uint8_t output_x_out[32], int *parity_out)
UFSECP_API ufsecp_error_t ufsecp_ecdh_xonly(ufsecp_ctx *ctx, const uint8_t privkey[32], const uint8_t pubkey33[33], uint8_t secret32_out[32])
#define UFSECP_ECDSA_ADAPTOR_SIG_LEN
struct ufsecp_ctx ufsecp_ctx
UFSECP_API ufsecp_error_t ufsecp_pubkey_combine(ufsecp_ctx *ctx, const uint8_t *pubkeys, size_t n, uint8_t out33[33])
UFSECP_API ufsecp_error_t ufsecp_ctx_create(ufsecp_ctx **ctx_out)
UFSECP_API ufsecp_error_t ufsecp_bip39_validate(const ufsecp_ctx *ctx, const char *mnemonic)
UFSECP_API ufsecp_error_t ufsecp_segwit_parse_program(const uint8_t *script, size_t script_len, int *version_out, uint8_t *program_out, size_t *program_len_out)
#define UFSECP_MUSIG2_SESSION_LEN
UFSECP_API ufsecp_error_t ufsecp_frost_keygen_begin(ufsecp_ctx *ctx, uint32_t participant_id, uint32_t threshold, uint32_t num_participants, const uint8_t seed[32], uint8_t *commits_out, size_t *commits_len, uint8_t *shares_out, size_t *shares_len)
UFSECP_API ufsecp_error_t ufsecp_pedersen_blind_sum(ufsecp_ctx *ctx, const uint8_t *blinds_in, size_t n_in, const uint8_t *blinds_out, size_t n_out, uint8_t sum32_out[32])
UFSECP_API ufsecp_error_t ufsecp_ecdsa_sign_batch(ufsecp_ctx *ctx, size_t count, const uint8_t *msgs32, const uint8_t *privkeys32, uint8_t *sigs64_out)
UFSECP_API ufsecp_error_t ufsecp_zk_ecdsa_snark_witness(ufsecp_ctx *ctx, const uint8_t msg_hash32[32], const uint8_t pubkey33[33], const uint8_t sig64[64], ufsecp_ecdsa_snark_witness_t *out)
UFSECP_API ufsecp_error_t ufsecp_hash160(const uint8_t *data, size_t len, uint8_t digest20_out[20])
UFSECP_API ufsecp_error_t ufsecp_descriptor_parse(ufsecp_ctx *ctx, const char *descriptor, uint32_t index, ufsecp_desc_key *key_out, char *addr_out, size_t *addr_len)
UFSECP_API ufsecp_error_t ufsecp_gcs_build(const uint8_t key[16], const uint8_t **data, const size_t *data_sizes, size_t count, uint8_t *filter_out, size_t *filter_len)
UFSECP_API ufsecp_error_t ufsecp_bip85_entropy(ufsecp_ctx *ctx, const ufsecp_bip32_key *master_xprv, const char *path, uint8_t *entropy_out, size_t entropy_len)
UFSECP_API ufsecp_error_t ufsecp_pubkey_add(ufsecp_ctx *ctx, const uint8_t a33[33], const uint8_t b33[33], uint8_t out33[33])
UFSECP_API ufsecp_error_t ufsecp_ecdsa_batch_identify_invalid(ufsecp_ctx *ctx, const uint8_t *entries, size_t n, size_t *invalid_out, size_t *invalid_count)
UFSECP_API ufsecp_error_t ufsecp_seckey_verify(const ufsecp_ctx *ctx, const uint8_t privkey[32])
UFSECP_API ufsecp_error_t ufsecp_pedersen_verify_sum(ufsecp_ctx *ctx, const uint8_t *pos, size_t n_pos, const uint8_t *neg, size_t n_neg)
UFSECP_API ufsecp_error_t ufsecp_frost_verify_partial(ufsecp_ctx *ctx, const uint8_t partial_sig[36], const uint8_t verification_share33[33], const uint8_t *nonce_commits, size_t n_signers, const uint8_t msg32[32], const uint8_t group_pubkey33[33])
UFSECP_API ufsecp_error_t ufsecp_coin_address(ufsecp_ctx *ctx, const uint8_t pubkey33[33], uint32_t coin_type, int testnet, char *addr_out, size_t *addr_len)
UFSECP_API ufsecp_error_t ufsecp_seckey_tweak_add(ufsecp_ctx *ctx, uint8_t privkey[32], const uint8_t tweak[32])
UFSECP_API ufsecp_error_t ufsecp_schnorr_batch_verify(ufsecp_ctx *ctx, const uint8_t *entries, size_t n)
UFSECP_API ufsecp_error_t ufsecp_zk_knowledge_prove(ufsecp_ctx *ctx, const uint8_t secret[32], const uint8_t pubkey33[33], const uint8_t msg32[32], const uint8_t aux_rand[32], uint8_t proof_out[UFSECP_ZK_KNOWLEDGE_PROOF_LEN])
UFSECP_API ufsecp_error_t ufsecp_silent_payment_scan(ufsecp_ctx *ctx, const uint8_t scan_privkey[32], const uint8_t spend_privkey[32], const uint8_t *input_pubkeys33, size_t n_input_pubkeys, const uint8_t *output_xonly32, size_t n_outputs, uint32_t *found_indices_out, uint8_t *found_privkeys_out, size_t *n_found)
UFSECP_API ufsecp_error_t ufsecp_musig2_partial_sig_agg(ufsecp_ctx *ctx, const uint8_t *partial_sigs, size_t n, const uint8_t session[UFSECP_MUSIG2_SESSION_LEN], uint8_t sig64_out[64])
UFSECP_API ufsecp_error_t ufsecp_ecdsa_adaptor_extract(ufsecp_ctx *ctx, const uint8_t pre_sig[UFSECP_ECDSA_ADAPTOR_SIG_LEN], const uint8_t sig64[64], uint8_t secret32_out[32])
UFSECP_API ufsecp_error_t ufsecp_frost_keygen_finalize(ufsecp_ctx *ctx, uint32_t participant_id, const uint8_t *all_commits, size_t commits_len, const uint8_t *received_shares, size_t shares_len, uint32_t threshold, uint32_t num_participants, uint8_t keypkg_out[UFSECP_FROST_KEYPKG_LEN])
#define UFSECP_SCHNORR_ADAPTOR_SIG_LEN
UFSECP_API ufsecp_error_t ufsecp_ecdsa_adaptor_sign(ufsecp_ctx *ctx, const uint8_t privkey[32], const uint8_t msg32[32], const uint8_t adaptor_point33[33], uint8_t pre_sig_out[UFSECP_ECDSA_ADAPTOR_SIG_LEN])
UFSECP_API ufsecp_error_t ufsecp_addr_p2tr(ufsecp_ctx *ctx, const uint8_t internal_key_x[32], int network, char *addr_out, size_t *addr_len)
UFSECP_API ufsecp_error_t ufsecp_pedersen_verify(ufsecp_ctx *ctx, const uint8_t commitment33[33], const uint8_t value[32], const uint8_t blinding[32])
UFSECP_API ufsecp_error_t ufsecp_pubkey_create(ufsecp_ctx *ctx, const uint8_t privkey[32], uint8_t pubkey33_out[33])
UFSECP_API ufsecp_error_t ufsecp_bip39_generate(ufsecp_ctx *ctx, size_t entropy_bytes, const uint8_t *entropy_in, char *mnemonic_out, size_t *mnemonic_len)
UFSECP_API ufsecp_error_t ufsecp_descriptor_address(ufsecp_ctx *ctx, const char *descriptor, uint32_t index, char *addr_out, size_t *addr_len)
UFSECP_API ufsecp_error_t ufsecp_schnorr_adaptor_adapt(ufsecp_ctx *ctx, const uint8_t pre_sig[UFSECP_SCHNORR_ADAPTOR_SIG_LEN], const uint8_t adaptor_secret[32], uint8_t sig64_out[64])