51#define UFSECP_PRIVKEY_LEN 32
52#define UFSECP_PUBKEY_COMPRESSED_LEN 33
53#define UFSECP_PUBKEY_UNCOMPRESSED_LEN 65
54#define UFSECP_PUBKEY_XONLY_LEN 32
55#define UFSECP_SIG_COMPACT_LEN 64
56#define UFSECP_SIG_DER_MAX_LEN 72
57#define UFSECP_HASH_LEN 32
58#define UFSECP_HASH160_LEN 20
59#define UFSECP_SHARED_SECRET_LEN 32
60#define UFSECP_BIP32_SERIALIZED_LEN 78
64#define UFSECP_NET_MAINNET 0
65#define UFSECP_NET_TESTNET 1
124 const uint8_t privkey[32]);
128 uint8_t privkey[32]);
133 const uint8_t tweak[32]);
138 const uint8_t tweak[32]);
146 const uint8_t privkey[32],
147 uint8_t pubkey33_out[33]);
152 const uint8_t privkey[32],
153 uint8_t pubkey65_out[65]);
158 const uint8_t* input,
160 uint8_t pubkey33_out[33]);
164 const uint8_t privkey[32],
165 uint8_t xonly32_out[32]);
173 const uint8_t msg32[32],
174 const uint8_t privkey[32],
175 uint8_t sig64_out[64]);
181 const uint8_t msg32[32],
182 const uint8_t privkey[32],
183 uint8_t sig64_out[64]);
188 const uint8_t msg32[32],
189 const uint8_t sig64[64],
190 const uint8_t pubkey33[33]);
195 const uint8_t sig64[64],
203 uint8_t sig64_out[64]);
211 const uint8_t msg32[32],
212 const uint8_t privkey[32],
213 uint8_t sig64_out[64],
218 const uint8_t msg32[32],
219 const uint8_t sig64[64],
221 uint8_t pubkey33_out[33]);
230 const uint8_t msg32[32],
231 const uint8_t privkey[32],
232 const uint8_t aux_rand[32],
233 uint8_t sig64_out[64]);
238 const uint8_t msg32[32],
239 const uint8_t privkey[32],
240 const uint8_t aux_rand[32],
241 uint8_t sig64_out[64]);
246 const uint8_t msg32[32],
247 const uint8_t sig64[64],
248 const uint8_t pubkey_x[32]);
267 const uint8_t* msgs32,
268 const uint8_t* privkeys32,
269 uint8_t* sigs64_out);
286 const uint8_t* msgs32,
287 const uint8_t* privkeys32,
288 const uint8_t* aux_rands32,
289 uint8_t* sigs64_out);
297 const uint8_t privkey[32],
298 const uint8_t pubkey33[33],
299 uint8_t secret32_out[32]);
303 const uint8_t privkey[32],
304 const uint8_t pubkey33[33],
305 uint8_t secret32_out[32]);
309 const uint8_t privkey[32],
310 const uint8_t pubkey33[33],
311 uint8_t secret32_out[32]);
319 uint8_t digest32_out[32]);
323 uint8_t digest20_out[20]);
327 const uint8_t* data,
size_t len,
328 uint8_t digest32_out[32]);
337 const uint8_t pubkey33[33],
339 char* addr_out,
size_t* addr_len);
343 const uint8_t pubkey33[33],
345 char* addr_out,
size_t* addr_len);
349 const uint8_t internal_key_x[32],
351 char* addr_out,
size_t* addr_len);
356 const uint8_t* redeem_script,
size_t redeem_script_len,
358 char* addr_out,
size_t* addr_len);
364 const uint8_t pubkey33[33],
366 char* addr_out,
size_t* addr_len);
375 const uint8_t privkey[32],
376 int compressed,
int network,
377 char* wif_out,
size_t* wif_len);
382 uint8_t privkey32_out[32],
402 const uint8_t* seed,
size_t seed_len,
420 uint8_t privkey32_out[32]);
425 uint8_t pubkey33_out[33]);
435 const uint8_t internal_x[32],
436 const uint8_t* merkle_root,
437 uint8_t output_x_out[32],
443 const uint8_t privkey[32],
444 const uint8_t* merkle_root,
445 uint8_t tweaked32_out[32]);
450 const uint8_t output_x[32],
int output_parity,
451 const uint8_t internal_x[32],
452 const uint8_t* merkle_root,
size_t merkle_root_len);
469 const uint8_t hash_prevouts[32],
470 const uint8_t hash_sequence[32],
471 const uint8_t outpoint_txid[32], uint32_t outpoint_vout,
472 const uint8_t* script_code,
size_t script_code_len,
475 const uint8_t hash_outputs[32],
477 uint32_t sighash_type,
478 uint8_t sighash_out[32]);
482 const uint8_t pubkey_hash[20],
483 uint8_t script_code_out[25]);
494 const uint8_t* raw_tx,
size_t raw_tx_len,
495 uint8_t txid_out[32]);
500 const uint8_t* raw_tx,
size_t raw_tx_len,
501 uint8_t wtxid_out[32]);
505 const uint8_t witness_root[32],
506 const uint8_t witness_nonce[32],
507 uint8_t commitment_out[32]);
515 const uint8_t* script,
size_t script_len);
523 const uint8_t* script,
size_t script_len,
525 uint8_t* program_out,
size_t* program_len_out);
529 const uint8_t pubkey_hash[20],
530 uint8_t spk_out[22]);
534 const uint8_t script_hash[32],
535 uint8_t spk_out[34]);
539 const uint8_t output_key[32],
540 uint8_t spk_out[34]);
544 const uint8_t* script,
size_t script_len,
545 uint8_t hash_out[32]);
556 uint32_t version, uint32_t locktime,
558 const uint8_t* prevout_txids,
559 const uint32_t* prevout_vouts,
560 const uint64_t* input_amounts,
561 const uint32_t* input_sequences,
562 const uint8_t*
const* input_spks,
563 const size_t* input_spk_lens,
565 const uint64_t* output_values,
566 const uint8_t*
const* output_spks,
567 const size_t* output_spk_lens,
570 const uint8_t* annex,
size_t annex_len,
571 uint8_t sighash_out[32]);
576 uint32_t version, uint32_t locktime,
578 const uint8_t* prevout_txids,
579 const uint32_t* prevout_vouts,
580 const uint64_t* input_amounts,
581 const uint32_t* input_sequences,
582 const uint8_t*
const* input_spks,
583 const size_t* input_spk_lens,
585 const uint64_t* output_values,
586 const uint8_t*
const* output_spks,
587 const size_t* output_spk_lens,
590 const uint8_t tapleaf_hash[32],
592 uint32_t code_separator_pos,
593 const uint8_t* annex,
size_t annex_len,
594 uint8_t sighash_out[32]);
606 const uint8_t a33[33],
607 const uint8_t b33[33],
612 const uint8_t pubkey33[33],
617 const uint8_t pubkey33[33],
618 const uint8_t tweak[32],
623 const uint8_t pubkey33[33],
624 const uint8_t tweak[32],
631 const uint8_t* pubkeys,
645 size_t entropy_bytes,
646 const uint8_t* entropy_in,
648 size_t* mnemonic_len);
653 const char* mnemonic);
658 const char* mnemonic,
659 const char* passphrase,
660 uint8_t seed64_out[64]);
666 const char* mnemonic,
667 uint8_t* entropy_out,
668 size_t* entropy_len);
679 const uint8_t* entries,
size_t n);
686 const uint8_t* entries,
size_t n);
693 const uint8_t* entries,
size_t n,
694 size_t* invalid_out,
size_t* invalid_count);
701 const uint8_t* entries,
size_t n,
702 size_t* invalid_out,
size_t* invalid_count);
710 uint8_t digest64_out[64]);
720 const uint8_t a[32],
const uint8_t P33[33],
721 const uint8_t b[32],
const uint8_t Q33[33],
729 const uint8_t* scalars,
const uint8_t* points,
size_t n,
736#define UFSECP_MUSIG2_PUBNONCE_LEN 66
737#define UFSECP_MUSIG2_AGGNONCE_LEN 66
738#define UFSECP_MUSIG2_KEYAGG_LEN 165
739#define UFSECP_MUSIG2_SESSION_LEN 165
740#define UFSECP_MUSIG2_SECNONCE_LEN 64
747 const uint8_t* pubkeys,
size_t n,
749 uint8_t agg_pubkey32_out[32]);
754 const uint8_t privkey[32],
755 const uint8_t pubkey32[32],
756 const uint8_t agg_pubkey32[32],
757 const uint8_t msg32[32],
758 const uint8_t extra_in[32],
768 const uint8_t* pubnonces,
size_t n,
780 const uint8_t msg32[32],
791 const uint8_t privkey[32],
795 uint8_t partial_sig32_out[32]);
803 const uint8_t partial_sig32[32],
805 const uint8_t pubkey32[32],
808 size_t signer_index);
815 const uint8_t* partial_sigs,
size_t n,
817 uint8_t sig64_out[64]);
823#define UFSECP_FROST_SHARE_LEN 36
824#define UFSECP_FROST_KEYPKG_LEN 141
825#define UFSECP_FROST_NONCE_LEN 64
826#define UFSECP_FROST_NONCE_COMMIT_LEN 70
836 uint32_t participant_id, uint32_t threshold, uint32_t num_participants,
837 const uint8_t seed[32],
838 uint8_t* commits_out,
size_t* commits_len,
839 uint8_t* shares_out,
size_t* shares_len);
851 uint32_t participant_id,
852 const uint8_t* all_commits,
size_t commits_len,
853 const uint8_t* received_shares,
size_t shares_len,
854 uint32_t threshold, uint32_t num_participants,
861 uint32_t participant_id,
862 const uint8_t nonce_seed[32],
875 const uint8_t msg32[32],
876 const uint8_t* nonce_commits,
size_t n_signers,
877 uint8_t partial_sig_out[36]);
888 const uint8_t partial_sig[36],
889 const uint8_t verification_share33[33],
890 const uint8_t* nonce_commits,
size_t n_signers,
891 const uint8_t msg32[32],
892 const uint8_t group_pubkey33[33]);
903 const uint8_t* partial_sigs,
size_t n,
904 const uint8_t* nonce_commits,
size_t n_signers,
905 const uint8_t group_pubkey33[33],
906 const uint8_t msg32[32],
907 uint8_t sig64_out[64]);
913#define UFSECP_SCHNORR_ADAPTOR_SIG_LEN 97
914#define UFSECP_ECDSA_ADAPTOR_SIG_LEN 130
919 const uint8_t privkey[32],
920 const uint8_t msg32[32],
921 const uint8_t adaptor_point33[33],
922 const uint8_t aux_rand[32],
929 const uint8_t pubkey_x[32],
930 const uint8_t msg32[32],
931 const uint8_t adaptor_point33[33]);
937 const uint8_t adaptor_secret[32],
938 uint8_t sig64_out[64]);
944 const uint8_t sig64[64],
945 uint8_t secret32_out[32]);
950 const uint8_t privkey[32],
951 const uint8_t msg32[32],
952 const uint8_t adaptor_point33[33],
959 const uint8_t pubkey33[33],
960 const uint8_t msg32[32],
961 const uint8_t adaptor_point33[33]);
967 const uint8_t adaptor_secret[32],
968 uint8_t sig64_out[64]);
974 const uint8_t sig64[64],
975 uint8_t secret32_out[32]);
985 const uint8_t value[32],
986 const uint8_t blinding[32],
987 uint8_t commitment33_out[33]);
992 const uint8_t commitment33[33],
993 const uint8_t value[32],
994 const uint8_t blinding[32]);
1000 const uint8_t* pos,
size_t n_pos,
1001 const uint8_t* neg,
size_t n_neg);
1007 const uint8_t* blinds_in,
size_t n_in,
1008 const uint8_t* blinds_out,
size_t n_out,
1009 uint8_t sum32_out[32]);
1014 const uint8_t value[32],
1015 const uint8_t blinding[32],
1016 const uint8_t switch_blind[32],
1017 uint8_t commitment33_out[33]);
1023#define UFSECP_ZK_KNOWLEDGE_PROOF_LEN 64
1024#define UFSECP_ZK_DLEQ_PROOF_LEN 64
1025#define UFSECP_ZK_RANGE_PROOF_MAX_LEN 688
1030 const uint8_t secret[32],
1031 const uint8_t pubkey33[33],
1032 const uint8_t msg32[32],
1033 const uint8_t aux_rand[32],
1040 const uint8_t pubkey33[33],
1041 const uint8_t msg32[32]);
1047 const uint8_t secret[32],
1048 const uint8_t G33[33],
const uint8_t H33[33],
1049 const uint8_t P33[33],
const uint8_t Q33[33],
1050 const uint8_t aux_rand[32],
1057 const uint8_t G33[33],
const uint8_t H33[33],
1058 const uint8_t P33[33],
const uint8_t Q33[33]);
1065 const uint8_t blinding[32],
1066 const uint8_t commitment33[33],
1067 const uint8_t aux_rand[32],
1068 uint8_t* proof_out,
size_t* proof_len);
1074 const uint8_t commitment33[33],
1075 const uint8_t* proof,
size_t proof_len);
1082#define UFSECP_COIN_ADDR_MAX_LEN 128
1085#define UFSECP_COIN_BITCOIN 0
1086#define UFSECP_COIN_LITECOIN 2
1087#define UFSECP_COIN_DOGECOIN 3
1088#define UFSECP_COIN_DASH 5
1089#define UFSECP_COIN_ETHEREUM 60
1090#define UFSECP_COIN_BITCOIN_CASH 145
1091#define UFSECP_COIN_TRON 195
1099 const uint8_t pubkey33[33],
1100 uint32_t coin_type,
int testnet,
1101 char* addr_out,
size_t* addr_len);
1110 const uint8_t* seed,
size_t seed_len,
1111 uint32_t coin_type, uint32_t account,
int change, uint32_t index,
1113 uint8_t* privkey32_out,
1114 uint8_t* pubkey33_out,
1115 char* addr_out,
size_t* addr_len);
1120 const uint8_t privkey[32],
1121 uint32_t coin_type,
int testnet,
1122 char* wif_out,
size_t* wif_len);
1129 const uint8_t* msg,
size_t msg_len,
1130 const uint8_t privkey[32],
1131 char* base64_out,
size_t* base64_len);
1137 const uint8_t* msg,
size_t msg_len,
1138 const uint8_t pubkey33[33],
1139 const char* base64_sig);
1143 const uint8_t* msg,
size_t msg_len,
1144 uint8_t digest32_out[32]);
1159 const uint8_t scan_privkey[32],
1160 const uint8_t spend_privkey[32],
1161 uint8_t scan_pubkey33_out[33],
1162 uint8_t spend_pubkey33_out[33],
1163 char* addr_out,
size_t* addr_len);
1176 const uint8_t* input_privkeys,
size_t n_inputs,
1177 const uint8_t scan_pubkey33[33],
1178 const uint8_t spend_pubkey33[33],
1180 uint8_t output_pubkey33_out[33],
1181 uint8_t* tweak32_out);
1195 const uint8_t scan_privkey[32],
1196 const uint8_t spend_privkey[32],
1197 const uint8_t* input_pubkeys33,
size_t n_input_pubkeys,
1198 const uint8_t* output_xonly32,
size_t n_outputs,
1199 uint32_t* found_indices_out,
1200 uint8_t* found_privkeys_out,
1208#define UFSECP_ECIES_OVERHEAD 81
1217 const uint8_t recipient_pubkey33[33],
1218 const uint8_t* plaintext,
size_t plaintext_len,
1219 uint8_t* envelope_out,
size_t* envelope_len);
1228 const uint8_t privkey[32],
1229 const uint8_t* envelope,
size_t envelope_len,
1230 uint8_t* plaintext_out,
size_t* plaintext_len);
1235#ifdef SECP256K1_BIP324
1238typedef struct ufsecp_bip324_session ufsecp_bip324_session;
1247 ufsecp_bip324_session** session_out,
1248 uint8_t ellswift64_out[64]);
1254 ufsecp_bip324_session* session,
1255 const uint8_t peer_ellswift64[64],
1256 uint8_t session_id32_out[32]);
1263 ufsecp_bip324_session* session,
1264 const uint8_t* plaintext,
size_t plaintext_len,
1265 uint8_t* out,
size_t* out_len);
1275 ufsecp_bip324_session* session,
1276 const uint8_t* encrypted,
size_t encrypted_len,
1277 uint8_t* plaintext_out,
size_t* plaintext_len);
1280UFSECP_API void ufsecp_bip324_destroy(ufsecp_bip324_session* session);
1290 const uint8_t key[32],
const uint8_t nonce[12],
1291 const uint8_t* aad,
size_t aad_len,
1292 const uint8_t* plaintext,
size_t plaintext_len,
1293 uint8_t* out, uint8_t tag[16]);
1298 const uint8_t key[32],
const uint8_t nonce[12],
1299 const uint8_t* aad,
size_t aad_len,
1300 const uint8_t* ciphertext,
size_t ciphertext_len,
1301 const uint8_t tag[16], uint8_t* out);
1308 const uint8_t privkey[32],
1309 uint8_t encoding64_out[64]);
1319 const uint8_t ell_a64[64],
1320 const uint8_t ell_b64[64],
1321 const uint8_t our_privkey[32],
1323 uint8_t secret32_out[32]);
1327#ifdef SECP256K1_BUILD_ETHEREUM
1330#define UFSECP_ETH_ADDR_LEN 20
1335 uint8_t digest32_out[32]);
1341 const uint8_t pubkey33[33],
1342 uint8_t addr20_out[20]);
1349 const uint8_t pubkey33[33],
1350 char* addr_out,
size_t* addr_len);
1356 uint8_t digest32_out[32]);
1364 const uint8_t msg32[32],
1365 const uint8_t privkey[32],
1375 const uint8_t msg32[32],
1376 const uint8_t r[32],
1377 const uint8_t s[32],
1379 uint8_t addr20_out[20]);
1397 uint8_t* entropy_out,
size_t entropy_len);
1407 uint32_t words, uint32_t language_index, uint32_t index,
1408 char* mnemonic_out,
size_t* mnemonic_len);
1419 const uint8_t privkey[32],
1420 const uint8_t* msg,
size_t msg_len,
1421 const uint8_t* aux_rand32,
1422 uint8_t sig64_out[64]);
1427 const uint8_t pubkey_x[32],
1428 const uint8_t* msg,
size_t msg_len,
1429 const uint8_t sig64[64]);
1449 const uint8_t privkey[32],
1451 const uint8_t* msg,
size_t msg_len,
1452 uint8_t* sig_out,
size_t* sig_len);
1460 const uint8_t* pubkey,
size_t pubkey_len,
1462 const uint8_t* msg,
size_t msg_len,
1463 const uint8_t* sig,
size_t sig_len);
1477 const uint8_t key[16],
1478 const uint8_t** data,
const size_t* data_sizes,
size_t count,
1479 uint8_t* filter_out,
size_t* filter_len);
1484 const uint8_t key[16],
1485 const uint8_t* filter,
size_t filter_len,
1487 const uint8_t* item,
size_t item_len);
1492 const uint8_t key[16],
1493 const uint8_t* filter,
size_t filter_len,
1495 const uint8_t** query,
const size_t* query_sizes,
size_t query_count);
1502#define UFSECP_SIGHASH_ALL 0x01
1503#define UFSECP_SIGHASH_NONE 0x02
1504#define UFSECP_SIGHASH_SINGLE 0x03
1505#define UFSECP_SIGHASH_ANYONECANPAY 0x80
1506#define UFSECP_SIGHASH_DEFAULT 0x00
1515 const uint8_t sighash32[32],
1516 const uint8_t privkey[32],
1517 uint8_t sighash_type,
1518 uint8_t* sig_out,
size_t* sig_len);
1524 const uint8_t sighash32[32],
1525 const uint8_t privkey[32],
1526 uint8_t sighash_type,
1527 uint8_t* sig_out,
size_t* sig_len);
1533 const uint8_t sighash32[32],
1534 const uint8_t privkey[32],
1535 uint8_t sighash_type,
1536 const uint8_t* aux_rand32,
1537 uint8_t* sig_out,
size_t* sig_len);
1545 const char* key_path,
1546 uint8_t privkey_out[32]);
1577 const char* descriptor,
1580 char* addr_out,
size_t* addr_len);
1586 const char* descriptor,
1588 char* addr_out,
size_t* addr_len);
1597 "ABI break: ufsecp_bip32_key size changed (expected 82)");
1599 "ABI break: UFSECP_BIP32_SERIALIZED_LEN changed (expected 78)");
1601 "ABI break: UFSECP_PRIVKEY_LEN changed");
1603 "ABI break: UFSECP_PUBKEY_COMPRESSED_LEN changed");
1605 "ABI break: UFSECP_SIG_COMPACT_LEN changed");
1608#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
1610 "ABI break: ufsecp_bip32_key size changed (expected 82)");
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_frost_sign(ufsecp_ctx *ctx, const uint8_t keypkg[UFSECP_FROST_KEYPKG_LEN], const 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])
Sign a FROST round-2 partial signature.
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_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_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_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
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_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])