40#define LUX_GPU_VERSION_MAJOR 0
41#define LUX_GPU_VERSION_MINOR 2
42#define LUX_GPU_VERSION_PATCH 0
244 const uint64_t* inputs,
251 const uint8_t* inputs,
253 const size_t* input_lens,
261 const uint8_t* inputs,
263 const size_t* input_lens,
277 uint8_t msg_hash[32];
319 size_t num_signatures);
338 const void* a,
const void* b,
void* out,
339 size_t count,
bool is_g2);
343 const void* points,
const void* scalars,
void* out,
344 size_t count,
bool is_g2);
348 const void* g1_points,
const void* g2_points,
349 void* out,
size_t count);
353 const uint8_t* sig,
size_t sig_len,
354 const uint8_t* msg,
size_t msg_len,
355 const uint8_t* pubkey,
size_t pubkey_len,
359 const uint8_t*
const* sigs,
const size_t* sig_lens,
360 const uint8_t*
const* msgs,
const size_t* msg_lens,
361 const uint8_t*
const* pubkeys,
const size_t* pubkey_lens,
362 int count,
bool* results);
365 const uint8_t*
const* sigs,
const size_t* sig_lens,
366 int count, uint8_t* out,
size_t* out_len);
374 const void* a,
const void* b,
void* out,
375 size_t count,
bool is_g2);
379 const void* points,
const void* scalars,
void* out,
380 size_t count,
bool is_g2);
405 const void* commitment,
427 const uint64_t* a,
const uint64_t* b,
428 uint64_t* result,
size_t n, uint64_t modulus);
440 const uint64_t* lwe_in,
443 const uint64_t* test_poly,
454 const uint64_t* lwe_in,
468 const uint64_t* lwe_a,
494 uint32_t l, uint32_t base_log, uint64_t q);
503 uint32_t l, uint32_t base_log);
528 uint32_t level, uint32_t base_log);
574 uint32_t base_log, uint64_t q);
584 uint32_t base_log, uint64_t q);
649 const uint8_t*
const* pubkeys,
650 const uint8_t*
const* messages,
651 const uint8_t*
const* signatures,
660 const uint8_t*
const* secret_keys,
661 const uint8_t*
const* ciphertexts,
662 uint8_t** shared_secrets,
670 const uint8_t*
const* pubkeys,
671 const uint8_t*
const* messages,
672 const uint8_t*
const* signatures,
685 const uint8_t*
const* shares,
686 const uint8_t*
const* messages,
687 uint8_t** partial_sigs,
695 const uint8_t*
const* partial_sigs,
696 const int32_t* lagrange_coeffs,
697 uint8_t** combined_sigs,
707 const uint8_t*
const* commitments,
708 const uint8_t*
const* signatures,
709 const uint8_t*
const* pubkeys,
710 const uint8_t*
const* challenges,
719 const uint8_t*
const* inputs,
721 uint8_t** partial_sigs,
733 const uint8_t*
const* pubkeys,
734 const uint8_t*
const* messages,
735 const uint8_t*
const* signatures,
744 const uint8_t*
const* pubkeys,
745 const uint8_t*
const* messages,
746 const uint8_t*
const* signatures,
LuxError lux_tensor_to_host(LuxTensor *tensor, void *data, size_t size)
uint64_t lux_fhe_gadget_reconstruct(const int64_t *digits, uint32_t l, uint32_t base_log, uint64_t q)
LuxError lux_ntt_batch(LuxGPU *gpu, uint64_t **polys, size_t count, size_t n, uint64_t modulus)
size_t lux_fhe_bsk_words(uint32_t n_lwe, uint32_t N, uint32_t k, uint32_t l)
uint64_t lux_fhe_encode_message(uint64_t m, uint64_t modulus, uint64_t q)
LuxTensor * lux_tensor_add(LuxGPU *gpu, LuxTensor *a, LuxTensor *b)
void lux_gpu_destroy(LuxGPU *gpu)
LuxTensor * lux_tensor_gelu(LuxGPU *gpu, LuxTensor *t)
LuxTensor * lux_tensor_mean(LuxGPU *gpu, LuxTensor *t, const int *axes, int naxes)
int lux_device_count(LuxBackend backend)
bool lux_fhe_is_valid_gadget(uint32_t l, uint32_t base_log)
LuxError lux_gpu_keccak256_batch(LuxGPU *gpu, const uint8_t *inputs, uint8_t *outputs, const size_t *input_lens, size_t num_inputs)
void lux_event_destroy(LuxEvent *event)
struct LuxTensor LuxTensor
LuxDtype lux_tensor_dtype(LuxTensor *tensor)
LuxTensor * lux_tensor_rms_norm(LuxGPU *gpu, LuxTensor *t, LuxTensor *weight, float eps)
LuxError lux_device_info(LuxBackend backend, int index, LuxDeviceInfo *info)
const char * lux_gpu_error(LuxGPU *gpu)
LuxError lux_event_wait(LuxEvent *event, LuxStream *stream)
LuxError lux_event_record(LuxEvent *event, LuxStream *stream)
LuxError lux_gpu_slhdsa_verify_batch(LuxGPU *gpu, const uint8_t *const *pubkeys, const uint8_t *const *messages, const uint8_t *const *signatures, bool *results, size_t count)
float lux_tensor_reduce_min(LuxGPU *gpu, LuxTensor *t)
LuxGPU * lux_gpu_create(void)
LuxTensor * lux_tensor_copy(LuxGPU *gpu, LuxTensor *t)
LuxError lux_gpu_cggmp21_partial_sign_batch(LuxGPU *gpu, const uint8_t *const *inputs, const uint8_t *r_x, uint8_t **partial_sigs, size_t count)
LuxError lux_ntt_inverse(LuxGPU *gpu, uint64_t *data, size_t n, uint64_t modulus)
bool lux_fhe_test_poly_half(uint32_t N, uint64_t Delta, uint64_t *out)
float lux_tensor_reduce_mean(LuxGPU *gpu, LuxTensor *t)
LuxError lux_gpu_sync(LuxGPU *gpu)
struct LuxStream LuxStream
const char * lux_gpu_backend_name(LuxGPU *gpu)
LuxTensor * lux_tensor_matmul(LuxGPU *gpu, LuxTensor *a, LuxTensor *b)
bool lux_fhe_test_poly_plateau(uint32_t N, uint64_t Delta, uint64_t *out)
LuxTensor * lux_tensor_softmax(LuxGPU *gpu, LuxTensor *t, int axis)
size_t lux_fhe_decomp_words(uint32_t N, uint32_t k, uint32_t l)
uint32_t lux_fhe_abi_revision(void)
LuxTensor * lux_tensor_sqrt(LuxGPU *gpu, LuxTensor *t)
LuxError lux_msm(LuxGPU *gpu, const void *scalars, const void *points, void *result, size_t count, LuxCurve curve)
LuxTensor * lux_tensor_from_data(LuxGPU *gpu, const void *data, const int64_t *shape, int ndim, LuxDtype dtype)
LuxError lux_gpu_ecrecover_batch(LuxGPU *gpu, const LuxEcrecoverInput *signatures, LuxEcrecoverOutput *addresses, size_t num_signatures)
LuxError lux_gpu_mlkem_decapsulate_batch(LuxGPU *gpu, const uint8_t *const *secret_keys, const uint8_t *const *ciphertexts, uint8_t **shared_secrets, size_t count)
LuxError lux_gpu_device_info(LuxGPU *gpu, LuxDeviceInfo *info)
LuxTensor * lux_tensor_log_softmax(LuxGPU *gpu, LuxTensor *t, int axis)
uint32_t lux_fhe_compute_a_tilde(uint64_t a, uint32_t N, uint64_t q)
float lux_event_elapsed(LuxEvent *start, LuxEvent *end)
const char * lux_backend_name(LuxBackend backend)
int64_t lux_tensor_shape(LuxTensor *tensor, int dim)
LuxTensor * lux_tensor_zeros(LuxGPU *gpu, const int64_t *shape, int ndim, LuxDtype dtype)
size_t lux_fhe_keyswitch_out_words(uint32_t n_out)
LuxError lux_bn254_add(LuxGPU *gpu, const void *a, const void *b, void *out, size_t count, bool is_g2)
bool lux_fhe_is_valid_pbs(uint32_t n_lwe, uint32_t N, uint32_t k, uint32_t l, uint32_t base_log, uint64_t q)
LuxGPU * lux_gpu_create_with_backend(LuxBackend backend)
LuxError lux_gpu_nullifier(LuxGPU *gpu, LuxFr256 *out, const LuxFr256 *keys, const LuxFr256 *commitments, const LuxFr256 *indices, size_t n)
int64_t lux_tensor_size(LuxTensor *tensor)
LuxError lux_bls12_381_add(LuxGPU *gpu, const void *a, const void *b, void *out, size_t count, bool is_g2)
LuxError lux_poseidon2_hash(LuxGPU *gpu, const uint64_t *inputs, uint64_t *outputs, size_t rate, size_t num_hashes)
void lux_tensor_destroy(LuxTensor *tensor)
LuxError lux_stream_sync(LuxStream *stream)
bool lux_fhe_signed_decomp_all(uint64_t value, uint32_t l, uint32_t base_log, int64_t *out)
LuxError lux_bn254_mul(LuxGPU *gpu, const void *points, const void *scalars, void *out, size_t count, bool is_g2)
size_t lux_fhe_lwe_out_words(uint32_t N, uint32_t k)
size_t lux_fhe_keyswitch_in_words(uint32_t n_in)
LuxTensor * lux_tensor_relu(LuxGPU *gpu, LuxTensor *t)
LuxTensor * lux_tensor_neg(LuxGPU *gpu, LuxTensor *t)
LuxError lux_gpu_sr25519_verify_batch(LuxGPU *gpu, const uint8_t *const *pubkeys, const uint8_t *const *messages, const uint8_t *const *signatures, bool *results, size_t count)
float lux_tensor_reduce_max(LuxGPU *gpu, LuxTensor *t)
bool lux_fhe_is_valid_keyswitch(uint32_t n_in, uint32_t n_out, uint32_t l, uint32_t base_log, uint64_t q)
LuxTensor * lux_tensor_layer_norm(LuxGPU *gpu, LuxTensor *t, LuxTensor *gamma, LuxTensor *beta, float eps)
size_t lux_fhe_acc_words(uint32_t N, uint32_t k)
LuxError lux_tfhe_keyswitch(LuxGPU *gpu, const uint64_t *lwe_in, uint64_t *lwe_out, const uint64_t *ksk, uint32_t n_in, uint32_t n_out, uint32_t l, uint32_t base_log, uint64_t q)
LuxError lux_kzg_open(LuxGPU *gpu, const void *coeffs, const void *srs, const void *point, void *proof, size_t degree, LuxCurve curve)
LuxError lux_kzg_verify(LuxGPU *gpu, const void *commitment, const void *proof, const void *point, const void *value, const void *srs_g2, bool *result, LuxCurve curve)
uint32_t lux_fhe_suggest_base_log(uint32_t l, uint64_t q)
LuxError lux_blake3_hash(LuxGPU *gpu, const uint8_t *inputs, uint8_t *outputs, const size_t *input_lens, size_t num_hashes)
LuxTensor * lux_tensor_min(LuxGPU *gpu, LuxTensor *t, const int *axes, int naxes)
LuxTensor * lux_tensor_transpose(LuxGPU *gpu, LuxTensor *t)
LuxTensor * lux_tensor_sigmoid(LuxGPU *gpu, LuxTensor *t)
LuxTensor * lux_tensor_sum(LuxGPU *gpu, LuxTensor *t, const int *axes, int naxes)
LuxError lux_gpu_commitment(LuxGPU *gpu, LuxFr256 *out, const LuxFr256 *values, const LuxFr256 *blindings, const LuxFr256 *salts, size_t n)
LuxTensor * lux_tensor_exp(LuxGPU *gpu, LuxTensor *t)
LuxTensor * lux_tensor_ones(LuxGPU *gpu, const int64_t *shape, int ndim, LuxDtype dtype)
void lux_stream_destroy(LuxStream *stream)
LuxError lux_kzg_commit(LuxGPU *gpu, const void *coeffs, const void *srs, void *commitment, size_t degree, LuxCurve curve)
LuxTensor * lux_tensor_log(LuxGPU *gpu, LuxTensor *t)
LuxError lux_bls_verify(LuxGPU *gpu, const uint8_t *sig, size_t sig_len, const uint8_t *msg, size_t msg_len, const uint8_t *pubkey, size_t pubkey_len, bool *result)
LuxError lux_gpu_frost_partial_verify_batch(LuxGPU *gpu, const uint8_t *const *commitments, const uint8_t *const *signatures, const uint8_t *const *pubkeys, const uint8_t *const *challenges, bool *results, size_t count)
LuxTensor * lux_tensor_mul(LuxGPU *gpu, LuxTensor *a, LuxTensor *b)
size_t lux_fhe_ksk_words(uint32_t n_in, uint32_t n_out, uint32_t l, uint32_t base_log)
LuxEvent * lux_event_create(LuxGPU *gpu)
LuxError lux_ntt_forward(LuxGPU *gpu, uint64_t *data, size_t n, uint64_t modulus)
LuxError lux_gpu_mldsa_verify_batch(LuxGPU *gpu, const uint8_t *const *pubkeys, const uint8_t *const *messages, const uint8_t *const *signatures, bool *results, size_t count)
LuxError lux_bls_aggregate(LuxGPU *gpu, const uint8_t *const *sigs, const size_t *sig_lens, int count, uint8_t *out, size_t *out_len)
float lux_tensor_reduce_sum(LuxGPU *gpu, LuxTensor *t)
LuxBackend lux_gpu_backend(LuxGPU *gpu)
LuxError lux_gpu_set_backend(LuxGPU *gpu, LuxBackend backend)
LuxTensor * lux_tensor_div(LuxGPU *gpu, LuxTensor *a, LuxTensor *b)
LuxError lux_gpu_merkle_root(LuxGPU *gpu, LuxFr256 *out, const LuxFr256 *leaves, size_t n)
LuxError lux_gpu_poseidon2(LuxGPU *gpu, LuxFr256 *out, const LuxFr256 *left, const LuxFr256 *right, size_t n)
int lux_backend_count(void)
LuxError lux_bls_verify_batch(LuxGPU *gpu, const uint8_t *const *sigs, const size_t *sig_lens, const uint8_t *const *msgs, const size_t *msg_lens, const uint8_t *const *pubkeys, const size_t *pubkey_lens, int count, bool *results)
@ LUX_ERROR_INVALID_ARGUMENT
@ LUX_ERROR_NOT_SUPPORTED
@ LUX_ERROR_KERNEL_FAILED
@ LUX_ERROR_DEVICE_NOT_FOUND
@ LUX_ERROR_OUT_OF_MEMORY
@ LUX_ERROR_BACKEND_NOT_AVAILABLE
LuxError lux_gpu_ed25519_verify_batch(LuxGPU *gpu, const uint8_t *const *pubkeys, const uint8_t *const *messages, const uint8_t *const *signatures, bool *results, size_t count)
uint64_t lux_fhe_gadget_value(uint32_t level, uint32_t base_log, uint64_t q)
LuxError lux_gpu_ringtail_combine_batch(LuxGPU *gpu, const uint8_t *const *partial_sigs, const int32_t *lagrange_coeffs, uint8_t **combined_sigs, size_t threshold, size_t count)
int64_t lux_fhe_signed_decomp_digit(uint64_t value, uint32_t level, uint32_t base_log)
LuxError lux_blind_rotate(LuxGPU *gpu, uint64_t *acc, const uint64_t *bsk, const uint64_t *lwe_a, uint32_t n_lwe, uint32_t N, uint32_t k, uint32_t l, uint32_t base_log, uint64_t q)
LuxGPU * lux_gpu_create_with_device(LuxBackend backend, int device_index)
uint64_t lux_fhe_decode_phase(uint64_t phase, uint64_t modulus, uint64_t q)
LuxError lux_gpu_ringtail_partial_sign_batch(LuxGPU *gpu, const uint8_t *const *shares, const uint8_t *const *messages, uint8_t **partial_sigs, size_t count)
LuxError lux_bls12_381_mul(LuxGPU *gpu, const void *points, const void *scalars, void *out, size_t count, bool is_g2)
LuxStream * lux_stream_create(LuxGPU *gpu)
LuxError lux_bls12_381_pairing(LuxGPU *gpu, const void *g1_points, const void *g2_points, void *out, size_t count)
bool lux_fhe_is_valid_N(uint32_t N)
LuxError lux_poly_mul(LuxGPU *gpu, const uint64_t *a, const uint64_t *b, uint64_t *result, size_t n, uint64_t modulus)
LuxTensor * lux_tensor_sub(LuxGPU *gpu, LuxTensor *a, LuxTensor *b)
LuxTensor * lux_tensor_tanh(LuxGPU *gpu, LuxTensor *t)
LuxTensor * lux_tensor_abs(LuxGPU *gpu, LuxTensor *t)
LuxTensor * lux_tensor_full(LuxGPU *gpu, const int64_t *shape, int ndim, LuxDtype dtype, double value)
LuxError lux_tfhe_bootstrap(LuxGPU *gpu, const uint64_t *lwe_in, uint64_t *lwe_out, const uint64_t *bsk, const uint64_t *test_poly, uint32_t n_lwe, uint32_t N, uint32_t k, uint32_t l, uint32_t base_log, uint64_t q)
int lux_tensor_ndim(LuxTensor *tensor)
bool lux_backend_available(LuxBackend backend)
LuxTensor * lux_tensor_max(LuxGPU *gpu, LuxTensor *t, const int *axes, int naxes)
uint64_t memory_available