65# define UFSECP_NOEXCEPT noexcept
68# define UFSECP_NOEXCEPT
75#define UFSECP_ERR_GPU_UNAVAILABLE 100
76#define UFSECP_ERR_GPU_DEVICE 101
77#define UFSECP_ERR_GPU_LAUNCH 102
78#define UFSECP_ERR_GPU_MEMORY 103
79#define UFSECP_ERR_GPU_UNSUPPORTED 104
80#define UFSECP_ERR_GPU_BACKEND 105
81#define UFSECP_ERR_GPU_QUEUE 106
87#define UFSECP_GPU_BACKEND_NONE 0
88#define UFSECP_GPU_BACKEND_CUDA 1
89#define UFSECP_GPU_BACKEND_OPENCL 2
90#define UFSECP_GPU_BACKEND_METAL 3
129 uint32_t device_index,
144 uint32_t device_index);
179 const uint8_t* scalars32,
181 uint8_t* out_pubkeys33);
197 const uint8_t* msg_hashes32,
198 const uint8_t* pubkeys33,
199 const uint8_t* sigs64,
201 uint8_t* out_results);
216 const uint8_t* msg_hashes32,
217 const uint8_t* pubkeys_x32,
218 const uint8_t* sigs64,
220 uint8_t* out_results);
235 const uint8_t* privkeys32,
236 const uint8_t* peer_pubkeys33,
238 uint8_t* out_secrets32);
251 const uint8_t* pubkeys33,
253 uint8_t* out_hash160);
268 const uint8_t* scalars32,
269 const uint8_t* points33,
271 uint8_t* out_result33);
298 const uint8_t* z_i32,
299 const uint8_t* D_i33,
300 const uint8_t* E_i33,
301 const uint8_t* Y_i33,
302 const uint8_t* rho_i32,
303 const uint8_t* lambda_ie32,
304 const uint8_t* negate_R,
305 const uint8_t* negate_key,
307 uint8_t* out_results);
325 const uint8_t* msg_hashes32,
326 const uint8_t* sigs64,
329 uint8_t* out_pubkeys33,
358 const uint8_t* proofs64,
359 const uint8_t* pubkeys65,
360 const uint8_t* messages32,
362 uint8_t* out_results);
384 const uint8_t* proofs64,
385 const uint8_t* G_pts65,
386 const uint8_t* H_pts65,
387 const uint8_t* P_pts65,
388 const uint8_t* Q_pts65,
390 uint8_t* out_results);
410 const uint8_t* proofs324,
411 const uint8_t* commitments65,
412 const uint8_t* H_generator65,
414 uint8_t* out_results);
439 const uint8_t* keys32,
440 const uint8_t* nonces12,
441 const uint8_t* plaintexts,
442 const uint32_t* sizes,
443 uint32_t max_payload,
465 const uint8_t* keys32,
466 const uint8_t* nonces12,
467 const uint8_t* wire_in,
468 const uint32_t* sizes,
469 uint32_t max_payload,
471 uint8_t* plaintext_out,
478#define UFSECP_ECDSA_SNARK_WITNESS_BYTES 760
496 const uint8_t* msg_hashes32,
497 const uint8_t* pubkeys33,
498 const uint8_t* sigs64,
500 uint8_t* out_witnesses);
506#define UFSECP_SCHNORR_SNARK_WITNESS_BYTES 472
523 const uint8_t* msgs32,
524 const uint8_t* pubkeys_x32,
525 const uint8_t* sigs64,
527 uint8_t* out_witnesses);
535#define UFSECP_BIP352_SCAN_PLAN_BYTES 264
553 const uint8_t scan_privkey32[32],
554 uint8_t plan264_out[264]);
590 const uint8_t scan_privkey32[32],
591 const uint8_t spend_pubkey33[33],
592 const uint8_t* tweak_pubkeys33,
594 uint64_t* prefix64_out);
uint32_t max_threads_per_block
uint64_t global_mem_bytes
UFSECP_API ufsecp_error_t ufsecp_gpu_last_error(const ufsecp_gpu_ctx *ctx)
UFSECP_API ufsecp_error_t ufsecp_gpu_ecdh_batch(ufsecp_gpu_ctx *ctx, const uint8_t *privkeys32, const uint8_t *peer_pubkeys33, size_t count, uint8_t *out_secrets32)
UFSECP_API int ufsecp_gpu_is_available(uint32_t backend_id) UFSECP_NOEXCEPT
UFSECP_API ufsecp_error_t ufsecp_gpu_zk_knowledge_verify_batch(ufsecp_gpu_ctx *ctx, const uint8_t *proofs64, const uint8_t *pubkeys65, const uint8_t *messages32, size_t count, uint8_t *out_results)
UFSECP_API int ufsecp_gpu_is_ready(const ufsecp_gpu_ctx *ctx) UFSECP_NOEXCEPT
UFSECP_API ufsecp_error_t ufsecp_gpu_bip324_aead_encrypt_batch(ufsecp_gpu_ctx *ctx, const uint8_t *keys32, const uint8_t *nonces12, const uint8_t *plaintexts, const uint32_t *sizes, uint32_t max_payload, size_t count, uint8_t *wire_out)
UFSECP_API ufsecp_error_t ufsecp_gpu_frost_verify_partial_batch(ufsecp_gpu_ctx *ctx, const uint8_t *z_i32, const uint8_t *D_i33, const uint8_t *E_i33, const uint8_t *Y_i33, const uint8_t *rho_i32, const uint8_t *lambda_ie32, const uint8_t *negate_R, const uint8_t *negate_key, size_t count, uint8_t *out_results)
UFSECP_API ufsecp_error_t ufsecp_gpu_bip324_aead_decrypt_batch(ufsecp_gpu_ctx *ctx, const uint8_t *keys32, const uint8_t *nonces12, const uint8_t *wire_in, const uint32_t *sizes, uint32_t max_payload, size_t count, uint8_t *plaintext_out, uint8_t *out_valid)
UFSECP_API ufsecp_error_t ufsecp_gpu_zk_schnorr_snark_witness_batch(ufsecp_gpu_ctx *ctx, const uint8_t *msgs32, const uint8_t *pubkeys_x32, const uint8_t *sigs64, size_t count, uint8_t *out_witnesses)
UFSECP_API const char * ufsecp_gpu_last_error_msg(const ufsecp_gpu_ctx *ctx)
UFSECP_API ufsecp_error_t ufsecp_gpu_ecdsa_verify_batch(ufsecp_gpu_ctx *ctx, const uint8_t *msg_hashes32, const uint8_t *pubkeys33, const uint8_t *sigs64, size_t count, uint8_t *out_results)
UFSECP_API ufsecp_error_t ufsecp_gpu_generator_mul_batch(ufsecp_gpu_ctx *ctx, const uint8_t *scalars32, size_t count, uint8_t *out_pubkeys33)
UFSECP_API ufsecp_error_t ufsecp_gpu_bip352_scan_batch(ufsecp_gpu_ctx *ctx, const uint8_t scan_privkey32[32], const uint8_t spend_pubkey33[33], const uint8_t *tweak_pubkeys33, size_t n_tweaks, uint64_t *prefix64_out)
UFSECP_API ufsecp_error_t ufsecp_bip352_prepare_scan_plan(const uint8_t scan_privkey32[32], uint8_t plan264_out[264])
UFSECP_API uint32_t ufsecp_gpu_device_count(uint32_t backend_id) UFSECP_NOEXCEPT
UFSECP_API ufsecp_error_t ufsecp_gpu_ctx_create(ufsecp_gpu_ctx **ctx_out, uint32_t backend_id, uint32_t device_index)
UFSECP_API ufsecp_error_t ufsecp_gpu_ecrecover_batch(ufsecp_gpu_ctx *ctx, const uint8_t *msg_hashes32, const uint8_t *sigs64, const int *recids, size_t count, uint8_t *out_pubkeys33, uint8_t *out_valid)
UFSECP_API ufsecp_error_t ufsecp_gpu_zk_dleq_verify_batch(ufsecp_gpu_ctx *ctx, const uint8_t *proofs64, const uint8_t *G_pts65, const uint8_t *H_pts65, const uint8_t *P_pts65, const uint8_t *Q_pts65, size_t count, uint8_t *out_results)
UFSECP_API const char * ufsecp_gpu_backend_name(uint32_t backend_id)
UFSECP_API ufsecp_error_t ufsecp_gpu_schnorr_verify_batch(ufsecp_gpu_ctx *ctx, const uint8_t *msg_hashes32, const uint8_t *pubkeys_x32, const uint8_t *sigs64, size_t count, uint8_t *out_results)
UFSECP_API ufsecp_error_t ufsecp_gpu_hash160_pubkey_batch(ufsecp_gpu_ctx *ctx, const uint8_t *pubkeys33, size_t count, uint8_t *out_hash160)
UFSECP_API const char * ufsecp_gpu_error_str(ufsecp_error_t err)
UFSECP_API ufsecp_error_t ufsecp_gpu_msm(ufsecp_gpu_ctx *ctx, const uint8_t *scalars32, const uint8_t *points33, size_t n, uint8_t *out_result33)
UFSECP_API ufsecp_error_t ufsecp_gpu_bulletproof_verify_batch(ufsecp_gpu_ctx *ctx, const uint8_t *proofs324, const uint8_t *commitments65, const uint8_t *H_generator65, size_t count, uint8_t *out_results)
UFSECP_API uint32_t ufsecp_gpu_backend_count(uint32_t *backend_ids, uint32_t max_ids) UFSECP_NOEXCEPT
UFSECP_API void ufsecp_gpu_ctx_destroy(ufsecp_gpu_ctx *ctx)
UFSECP_API ufsecp_error_t ufsecp_gpu_device_info(uint32_t backend_id, uint32_t device_index, ufsecp_gpu_device_info_t *info_out)
UFSECP_API ufsecp_error_t ufsecp_gpu_zk_ecdsa_snark_witness_batch(ufsecp_gpu_ctx *ctx, const uint8_t *msg_hashes32, const uint8_t *pubkeys33, const uint8_t *sigs64, size_t count, uint8_t *out_witnesses)
struct ufsecp_gpu_ctx ufsecp_gpu_ctx