Skip to main content

bicycl_rs_sys/
lib.rs

1#![deny(unsafe_op_in_unsafe_fn)]
2
3use core::ffi::{c_char, c_int, c_void};
4
5#[allow(non_camel_case_types)]
6#[non_exhaustive]
7#[repr(C)]
8#[derive(Debug, Clone, Copy, PartialEq, Eq)]
9pub enum bicycl_status_t {
10    BICYCL_OK = 0,
11    BICYCL_ERR_NULL_PTR = 1,
12    BICYCL_ERR_INVALID_ARGUMENT = 2,
13    BICYCL_ERR_ALLOCATION_FAILED = 3,
14    BICYCL_ERR_INTERNAL = 4,
15    BICYCL_ERR_BUFFER_TOO_SMALL = 5,
16    BICYCL_ERR_PARSE = 6,
17    BICYCL_ERR_INVALID_STATE = 7,
18    BICYCL_ERR_VERIFY_FAILED = 8,
19    BICYCL_ERR_PROTOCOL_ABORT = 9,
20    BICYCL_ERR_CORE = 90,
21    BICYCL_ERR_PAILLIER = 100,
22    BICYCL_ERR_JOYE_LIBERT = 101,
23    BICYCL_ERR_CL_HSMQK = 102,
24    BICYCL_ERR_CL_HSM2K = 103,
25    BICYCL_ERR_ECDSA = 104,
26    BICYCL_ERR_TWO_PARTY_ECDSA = 105,
27    BICYCL_ERR_CL_THRESHOLD = 106,
28    BICYCL_ERR_CL_DLOG = 107,
29    BICYCL_ERR_THRESHOLD_ECDSA = 108,
30}
31
32#[repr(C)]
33pub struct bicycl_context_t {
34    _private: [u8; 0],
35}
36
37#[repr(C)]
38pub struct bicycl_randgen_t {
39    _private: [u8; 0],
40}
41
42#[repr(C)]
43pub struct bicycl_classgroup_t {
44    _private: [u8; 0],
45}
46
47#[repr(C)]
48pub struct bicycl_qfi_t {
49    _private: [u8; 0],
50}
51
52#[repr(C)]
53pub struct bicycl_paillier_t {
54    _private: [u8; 0],
55}
56
57#[repr(C)]
58pub struct bicycl_paillier_sk_t {
59    _private: [u8; 0],
60}
61
62#[repr(C)]
63pub struct bicycl_paillier_pk_t {
64    _private: [u8; 0],
65}
66
67#[repr(C)]
68pub struct bicycl_paillier_ct_t {
69    _private: [u8; 0],
70}
71
72#[repr(C)]
73pub struct bicycl_joye_libert_t {
74    _private: [u8; 0],
75}
76
77#[repr(C)]
78pub struct bicycl_joye_libert_sk_t {
79    _private: [u8; 0],
80}
81
82#[repr(C)]
83pub struct bicycl_joye_libert_pk_t {
84    _private: [u8; 0],
85}
86
87#[repr(C)]
88pub struct bicycl_joye_libert_ct_t {
89    _private: [u8; 0],
90}
91
92#[repr(C)]
93pub struct bicycl_cl_hsmqk_t {
94    _private: [u8; 0],
95}
96
97#[repr(C)]
98pub struct bicycl_cl_hsmqk_sk_t {
99    _private: [u8; 0],
100}
101
102#[repr(C)]
103pub struct bicycl_cl_hsmqk_pk_t {
104    _private: [u8; 0],
105}
106
107#[repr(C)]
108pub struct bicycl_cl_hsmqk_ct_t {
109    _private: [u8; 0],
110}
111
112#[repr(C)]
113pub struct bicycl_cl_hsm2k_t {
114    _private: [u8; 0],
115}
116
117#[repr(C)]
118pub struct bicycl_cl_hsm2k_sk_t {
119    _private: [u8; 0],
120}
121
122#[repr(C)]
123pub struct bicycl_cl_hsm2k_pk_t {
124    _private: [u8; 0],
125}
126
127#[repr(C)]
128pub struct bicycl_cl_hsm2k_ct_t {
129    _private: [u8; 0],
130}
131
132#[repr(C)]
133pub struct bicycl_ecdsa_t {
134    _private: [u8; 0],
135}
136
137#[repr(C)]
138pub struct bicycl_ecdsa_sk_t {
139    _private: [u8; 0],
140}
141
142#[repr(C)]
143pub struct bicycl_ecdsa_pk_t {
144    _private: [u8; 0],
145}
146
147#[repr(C)]
148pub struct bicycl_ecdsa_sig_t {
149    _private: [u8; 0],
150}
151
152#[repr(C)]
153pub struct bicycl_two_party_ecdsa_session_t {
154    _private: [u8; 0],
155}
156
157#[repr(C)]
158pub struct bicycl_cl_dlog_session_t {
159    _private: [u8; 0],
160}
161
162#[repr(C)]
163pub struct bicycl_threshold_ecdsa_session_t {
164    _private: [u8; 0],
165}
166
167#[repr(C)]
168pub struct bicycl_cl_dlog_message_t {
169    _private: [u8; 0],
170}
171
172pub const BICYCL_CAPI_VERSION: u32 = 0x0001_0000;
173
174unsafe extern "C" {
175    pub fn bicycl_get_abi_version() -> u32;
176    pub fn bicycl_get_version() -> *const c_char;
177    pub fn bicycl_status_message(status: bicycl_status_t) -> *const c_char;
178
179    pub fn bicycl_context_new(out_ctx: *mut *mut bicycl_context_t) -> bicycl_status_t;
180    pub fn bicycl_context_free(ctx: *mut bicycl_context_t);
181    pub fn bicycl_context_last_error(ctx: *const bicycl_context_t) -> *const c_char;
182    pub fn bicycl_context_clear_error(ctx: *mut bicycl_context_t);
183
184    pub fn bicycl_zeroize(ptr: *mut c_void, len: usize);
185
186    pub fn bicycl_randgen_new_from_seed_decimal(
187        ctx: *mut bicycl_context_t,
188        seed_decimal: *const c_char,
189        out_randgen: *mut *mut bicycl_randgen_t,
190    ) -> bicycl_status_t;
191    pub fn bicycl_randgen_free(randgen: *mut bicycl_randgen_t);
192
193    pub fn bicycl_classgroup_new_from_discriminant_decimal(
194        ctx: *mut bicycl_context_t,
195        discriminant_decimal: *const c_char,
196        out_classgroup: *mut *mut bicycl_classgroup_t,
197    ) -> bicycl_status_t;
198    pub fn bicycl_classgroup_free(classgroup: *mut bicycl_classgroup_t);
199
200    pub fn bicycl_classgroup_one(
201        ctx: *mut bicycl_context_t,
202        classgroup: *const bicycl_classgroup_t,
203        out_qfi: *mut *mut bicycl_qfi_t,
204    ) -> bicycl_status_t;
205
206    pub fn bicycl_classgroup_nudupl(
207        ctx: *mut bicycl_context_t,
208        classgroup: *const bicycl_classgroup_t,
209        input: *const bicycl_qfi_t,
210        out_qfi: *mut *mut bicycl_qfi_t,
211    ) -> bicycl_status_t;
212
213    pub fn bicycl_qfi_free(qfi: *mut bicycl_qfi_t);
214    pub fn bicycl_qfi_is_one(
215        ctx: *mut bicycl_context_t,
216        qfi: *const bicycl_qfi_t,
217        out_is_one: *mut c_int,
218    ) -> bicycl_status_t;
219    pub fn bicycl_qfi_discriminant_decimal(
220        ctx: *mut bicycl_context_t,
221        qfi: *const bicycl_qfi_t,
222        out_buf: *mut c_char,
223        inout_len: *mut usize,
224    ) -> bicycl_status_t;
225
226    pub fn bicycl_paillier_new(
227        ctx: *mut bicycl_context_t,
228        modulus_bits: u32,
229        out_paillier: *mut *mut bicycl_paillier_t,
230    ) -> bicycl_status_t;
231    pub fn bicycl_paillier_free(paillier: *mut bicycl_paillier_t);
232
233    pub fn bicycl_paillier_keygen(
234        ctx: *mut bicycl_context_t,
235        paillier: *const bicycl_paillier_t,
236        randgen: *mut bicycl_randgen_t,
237        out_sk: *mut *mut bicycl_paillier_sk_t,
238        out_pk: *mut *mut bicycl_paillier_pk_t,
239    ) -> bicycl_status_t;
240
241    pub fn bicycl_paillier_sk_free(sk: *mut bicycl_paillier_sk_t);
242    pub fn bicycl_paillier_pk_free(pk: *mut bicycl_paillier_pk_t);
243    pub fn bicycl_paillier_ct_free(ct: *mut bicycl_paillier_ct_t);
244
245    pub fn bicycl_paillier_encrypt_decimal(
246        ctx: *mut bicycl_context_t,
247        paillier: *const bicycl_paillier_t,
248        pk: *const bicycl_paillier_pk_t,
249        randgen: *mut bicycl_randgen_t,
250        message_decimal: *const c_char,
251        out_ct: *mut *mut bicycl_paillier_ct_t,
252    ) -> bicycl_status_t;
253
254    pub fn bicycl_paillier_decrypt_decimal(
255        ctx: *mut bicycl_context_t,
256        paillier: *const bicycl_paillier_t,
257        pk: *const bicycl_paillier_pk_t,
258        sk: *const bicycl_paillier_sk_t,
259        ct: *const bicycl_paillier_ct_t,
260        out_buf: *mut c_char,
261        inout_len: *mut usize,
262    ) -> bicycl_status_t;
263
264    pub fn bicycl_joye_libert_new(
265        ctx: *mut bicycl_context_t,
266        modulus_bits: u32,
267        k: u32,
268        out_joye_libert: *mut *mut bicycl_joye_libert_t,
269    ) -> bicycl_status_t;
270    pub fn bicycl_joye_libert_free(joye_libert: *mut bicycl_joye_libert_t);
271
272    pub fn bicycl_joye_libert_keygen(
273        ctx: *mut bicycl_context_t,
274        joye_libert: *const bicycl_joye_libert_t,
275        randgen: *mut bicycl_randgen_t,
276        out_sk: *mut *mut bicycl_joye_libert_sk_t,
277        out_pk: *mut *mut bicycl_joye_libert_pk_t,
278    ) -> bicycl_status_t;
279
280    pub fn bicycl_joye_libert_sk_free(sk: *mut bicycl_joye_libert_sk_t);
281    pub fn bicycl_joye_libert_pk_free(pk: *mut bicycl_joye_libert_pk_t);
282    pub fn bicycl_joye_libert_ct_free(ct: *mut bicycl_joye_libert_ct_t);
283
284    pub fn bicycl_joye_libert_encrypt_decimal(
285        ctx: *mut bicycl_context_t,
286        joye_libert: *const bicycl_joye_libert_t,
287        pk: *const bicycl_joye_libert_pk_t,
288        randgen: *mut bicycl_randgen_t,
289        message_decimal: *const c_char,
290        out_ct: *mut *mut bicycl_joye_libert_ct_t,
291    ) -> bicycl_status_t;
292
293    pub fn bicycl_joye_libert_decrypt_decimal(
294        ctx: *mut bicycl_context_t,
295        joye_libert: *const bicycl_joye_libert_t,
296        sk: *const bicycl_joye_libert_sk_t,
297        ct: *const bicycl_joye_libert_ct_t,
298        out_buf: *mut c_char,
299        inout_len: *mut usize,
300    ) -> bicycl_status_t;
301
302    pub fn bicycl_cl_hsmqk_new(
303        ctx: *mut bicycl_context_t,
304        q_decimal: *const c_char,
305        k: u32,
306        p_decimal: *const c_char,
307        out_cl: *mut *mut bicycl_cl_hsmqk_t,
308    ) -> bicycl_status_t;
309    pub fn bicycl_cl_hsmqk_free(cl: *mut bicycl_cl_hsmqk_t);
310
311    pub fn bicycl_cl_hsmqk_keygen(
312        ctx: *mut bicycl_context_t,
313        cl: *const bicycl_cl_hsmqk_t,
314        randgen: *mut bicycl_randgen_t,
315        out_sk: *mut *mut bicycl_cl_hsmqk_sk_t,
316        out_pk: *mut *mut bicycl_cl_hsmqk_pk_t,
317    ) -> bicycl_status_t;
318
319    pub fn bicycl_cl_hsmqk_sk_free(sk: *mut bicycl_cl_hsmqk_sk_t);
320    pub fn bicycl_cl_hsmqk_pk_free(pk: *mut bicycl_cl_hsmqk_pk_t);
321    pub fn bicycl_cl_hsmqk_ct_free(ct: *mut bicycl_cl_hsmqk_ct_t);
322
323    pub fn bicycl_cl_hsmqk_encrypt_decimal(
324        ctx: *mut bicycl_context_t,
325        cl: *const bicycl_cl_hsmqk_t,
326        pk: *const bicycl_cl_hsmqk_pk_t,
327        randgen: *mut bicycl_randgen_t,
328        message_decimal: *const c_char,
329        out_ct: *mut *mut bicycl_cl_hsmqk_ct_t,
330    ) -> bicycl_status_t;
331
332    pub fn bicycl_cl_hsmqk_decrypt_decimal(
333        ctx: *mut bicycl_context_t,
334        cl: *const bicycl_cl_hsmqk_t,
335        sk: *const bicycl_cl_hsmqk_sk_t,
336        ct: *const bicycl_cl_hsmqk_ct_t,
337        out_buf: *mut c_char,
338        inout_len: *mut usize,
339    ) -> bicycl_status_t;
340
341    pub fn bicycl_cl_hsmqk_add_ciphertexts(
342        ctx: *mut bicycl_context_t,
343        cl: *const bicycl_cl_hsmqk_t,
344        pk: *const bicycl_cl_hsmqk_pk_t,
345        randgen: *mut bicycl_randgen_t,
346        ca: *const bicycl_cl_hsmqk_ct_t,
347        cb: *const bicycl_cl_hsmqk_ct_t,
348        out_ct: *mut *mut bicycl_cl_hsmqk_ct_t,
349    ) -> bicycl_status_t;
350
351    pub fn bicycl_cl_hsmqk_scal_ciphertext_decimal(
352        ctx: *mut bicycl_context_t,
353        cl: *const bicycl_cl_hsmqk_t,
354        pk: *const bicycl_cl_hsmqk_pk_t,
355        randgen: *mut bicycl_randgen_t,
356        ct: *const bicycl_cl_hsmqk_ct_t,
357        scalar_decimal: *const c_char,
358        out_ct: *mut *mut bicycl_cl_hsmqk_ct_t,
359    ) -> bicycl_status_t;
360
361    pub fn bicycl_cl_hsmqk_addscal_ciphertexts_decimal(
362        ctx: *mut bicycl_context_t,
363        cl: *const bicycl_cl_hsmqk_t,
364        pk: *const bicycl_cl_hsmqk_pk_t,
365        randgen: *mut bicycl_randgen_t,
366        ca: *const bicycl_cl_hsmqk_ct_t,
367        cb: *const bicycl_cl_hsmqk_ct_t,
368        scalar_decimal: *const c_char,
369        out_ct: *mut *mut bicycl_cl_hsmqk_ct_t,
370    ) -> bicycl_status_t;
371
372    pub fn bicycl_cl_hsm2k_new(
373        ctx: *mut bicycl_context_t,
374        n_decimal: *const c_char,
375        k: u32,
376        out_cl: *mut *mut bicycl_cl_hsm2k_t,
377    ) -> bicycl_status_t;
378    pub fn bicycl_cl_hsm2k_free(cl: *mut bicycl_cl_hsm2k_t);
379
380    pub fn bicycl_cl_hsm2k_keygen(
381        ctx: *mut bicycl_context_t,
382        cl: *const bicycl_cl_hsm2k_t,
383        randgen: *mut bicycl_randgen_t,
384        out_sk: *mut *mut bicycl_cl_hsm2k_sk_t,
385        out_pk: *mut *mut bicycl_cl_hsm2k_pk_t,
386    ) -> bicycl_status_t;
387
388    pub fn bicycl_cl_hsm2k_sk_free(sk: *mut bicycl_cl_hsm2k_sk_t);
389    pub fn bicycl_cl_hsm2k_pk_free(pk: *mut bicycl_cl_hsm2k_pk_t);
390    pub fn bicycl_cl_hsm2k_ct_free(ct: *mut bicycl_cl_hsm2k_ct_t);
391
392    pub fn bicycl_cl_hsm2k_encrypt_decimal(
393        ctx: *mut bicycl_context_t,
394        cl: *const bicycl_cl_hsm2k_t,
395        pk: *const bicycl_cl_hsm2k_pk_t,
396        randgen: *mut bicycl_randgen_t,
397        message_decimal: *const c_char,
398        out_ct: *mut *mut bicycl_cl_hsm2k_ct_t,
399    ) -> bicycl_status_t;
400
401    pub fn bicycl_cl_hsm2k_decrypt_decimal(
402        ctx: *mut bicycl_context_t,
403        cl: *const bicycl_cl_hsm2k_t,
404        sk: *const bicycl_cl_hsm2k_sk_t,
405        ct: *const bicycl_cl_hsm2k_ct_t,
406        out_buf: *mut c_char,
407        inout_len: *mut usize,
408    ) -> bicycl_status_t;
409
410    pub fn bicycl_cl_hsm2k_add_ciphertexts(
411        ctx: *mut bicycl_context_t,
412        cl: *const bicycl_cl_hsm2k_t,
413        pk: *const bicycl_cl_hsm2k_pk_t,
414        randgen: *mut bicycl_randgen_t,
415        ca: *const bicycl_cl_hsm2k_ct_t,
416        cb: *const bicycl_cl_hsm2k_ct_t,
417        out_ct: *mut *mut bicycl_cl_hsm2k_ct_t,
418    ) -> bicycl_status_t;
419
420    pub fn bicycl_cl_hsm2k_scal_ciphertext_decimal(
421        ctx: *mut bicycl_context_t,
422        cl: *const bicycl_cl_hsm2k_t,
423        pk: *const bicycl_cl_hsm2k_pk_t,
424        randgen: *mut bicycl_randgen_t,
425        ct: *const bicycl_cl_hsm2k_ct_t,
426        scalar_decimal: *const c_char,
427        out_ct: *mut *mut bicycl_cl_hsm2k_ct_t,
428    ) -> bicycl_status_t;
429
430    pub fn bicycl_cl_hsm2k_addscal_ciphertexts_decimal(
431        ctx: *mut bicycl_context_t,
432        cl: *const bicycl_cl_hsm2k_t,
433        pk: *const bicycl_cl_hsm2k_pk_t,
434        randgen: *mut bicycl_randgen_t,
435        ca: *const bicycl_cl_hsm2k_ct_t,
436        cb: *const bicycl_cl_hsm2k_ct_t,
437        scalar_decimal: *const c_char,
438        out_ct: *mut *mut bicycl_cl_hsm2k_ct_t,
439    ) -> bicycl_status_t;
440
441    pub fn bicycl_ecdsa_new(
442        ctx: *mut bicycl_context_t,
443        seclevel_bits: u32,
444        out_ecdsa: *mut *mut bicycl_ecdsa_t,
445    ) -> bicycl_status_t;
446    pub fn bicycl_ecdsa_free(ecdsa: *mut bicycl_ecdsa_t);
447
448    pub fn bicycl_ecdsa_keygen(
449        ctx: *mut bicycl_context_t,
450        ecdsa: *const bicycl_ecdsa_t,
451        randgen: *mut bicycl_randgen_t,
452        out_sk: *mut *mut bicycl_ecdsa_sk_t,
453        out_pk: *mut *mut bicycl_ecdsa_pk_t,
454    ) -> bicycl_status_t;
455    pub fn bicycl_ecdsa_sk_free(sk: *mut bicycl_ecdsa_sk_t);
456    pub fn bicycl_ecdsa_pk_free(pk: *mut bicycl_ecdsa_pk_t);
457
458    pub fn bicycl_ecdsa_sign_message(
459        ctx: *mut bicycl_context_t,
460        ecdsa: *const bicycl_ecdsa_t,
461        randgen: *mut bicycl_randgen_t,
462        sk: *const bicycl_ecdsa_sk_t,
463        msg_ptr: *const u8,
464        msg_len: usize,
465        out_sig: *mut *mut bicycl_ecdsa_sig_t,
466    ) -> bicycl_status_t;
467    pub fn bicycl_ecdsa_sig_free(sig: *mut bicycl_ecdsa_sig_t);
468
469    pub fn bicycl_ecdsa_verify_message(
470        ctx: *mut bicycl_context_t,
471        ecdsa: *const bicycl_ecdsa_t,
472        pk: *const bicycl_ecdsa_pk_t,
473        msg_ptr: *const u8,
474        msg_len: usize,
475        sig: *const bicycl_ecdsa_sig_t,
476        out_valid: *mut c_int,
477    ) -> bicycl_status_t;
478
479    pub fn bicycl_ecdsa_sig_r_decimal(
480        ctx: *mut bicycl_context_t,
481        sig: *const bicycl_ecdsa_sig_t,
482        out_buf: *mut c_char,
483        inout_len: *mut usize,
484    ) -> bicycl_status_t;
485
486    pub fn bicycl_ecdsa_sig_s_decimal(
487        ctx: *mut bicycl_context_t,
488        sig: *const bicycl_ecdsa_sig_t,
489        out_buf: *mut c_char,
490        inout_len: *mut usize,
491    ) -> bicycl_status_t;
492
493    pub fn bicycl_two_party_ecdsa_run_demo(
494        ctx: *mut bicycl_context_t,
495        randgen: *mut bicycl_randgen_t,
496        seclevel_bits: u32,
497        msg_ptr: *const u8,
498        msg_len: usize,
499        out_valid: *mut c_int,
500    ) -> bicycl_status_t;
501    pub fn bicycl_two_party_ecdsa_session_new(
502        ctx: *mut bicycl_context_t,
503        randgen: *mut bicycl_randgen_t,
504        seclevel_bits: u32,
505        out_session: *mut *mut bicycl_two_party_ecdsa_session_t,
506    ) -> bicycl_status_t;
507    pub fn bicycl_two_party_ecdsa_session_free(session: *mut bicycl_two_party_ecdsa_session_t);
508    pub fn bicycl_two_party_ecdsa_keygen_round1(
509        ctx: *mut bicycl_context_t,
510        session: *mut bicycl_two_party_ecdsa_session_t,
511        randgen: *mut bicycl_randgen_t,
512    ) -> bicycl_status_t;
513    pub fn bicycl_two_party_ecdsa_keygen_round2(
514        ctx: *mut bicycl_context_t,
515        session: *mut bicycl_two_party_ecdsa_session_t,
516        randgen: *mut bicycl_randgen_t,
517    ) -> bicycl_status_t;
518    pub fn bicycl_two_party_ecdsa_keygen_round3(
519        ctx: *mut bicycl_context_t,
520        session: *mut bicycl_two_party_ecdsa_session_t,
521        randgen: *mut bicycl_randgen_t,
522    ) -> bicycl_status_t;
523    pub fn bicycl_two_party_ecdsa_keygen_round4(
524        ctx: *mut bicycl_context_t,
525        session: *mut bicycl_two_party_ecdsa_session_t,
526    ) -> bicycl_status_t;
527    pub fn bicycl_two_party_ecdsa_sign_round1(
528        ctx: *mut bicycl_context_t,
529        session: *mut bicycl_two_party_ecdsa_session_t,
530        randgen: *mut bicycl_randgen_t,
531        msg_ptr: *const u8,
532        msg_len: usize,
533    ) -> bicycl_status_t;
534    pub fn bicycl_two_party_ecdsa_sign_round2(
535        ctx: *mut bicycl_context_t,
536        session: *mut bicycl_two_party_ecdsa_session_t,
537        randgen: *mut bicycl_randgen_t,
538    ) -> bicycl_status_t;
539    pub fn bicycl_two_party_ecdsa_sign_round3(
540        ctx: *mut bicycl_context_t,
541        session: *mut bicycl_two_party_ecdsa_session_t,
542    ) -> bicycl_status_t;
543    pub fn bicycl_two_party_ecdsa_sign_round4(
544        ctx: *mut bicycl_context_t,
545        session: *mut bicycl_two_party_ecdsa_session_t,
546        randgen: *mut bicycl_randgen_t,
547    ) -> bicycl_status_t;
548    pub fn bicycl_two_party_ecdsa_sign_finalize(
549        ctx: *mut bicycl_context_t,
550        session: *mut bicycl_two_party_ecdsa_session_t,
551        out_valid: *mut c_int,
552    ) -> bicycl_status_t;
553
554    pub fn bicycl_cl_threshold_run_demo(
555        ctx: *mut bicycl_context_t,
556        randgen: *mut bicycl_randgen_t,
557        out_buf: *mut c_char,
558        inout_len: *mut usize,
559    ) -> bicycl_status_t;
560
561    pub fn bicycl_cl_dlog_proof_run_demo(
562        ctx: *mut bicycl_context_t,
563        randgen: *mut bicycl_randgen_t,
564        seclevel_bits: u32,
565        out_valid: *mut c_int,
566    ) -> bicycl_status_t;
567
568    pub fn bicycl_threshold_ecdsa_run_demo(
569        ctx: *mut bicycl_context_t,
570        randgen: *mut bicycl_randgen_t,
571        seclevel_bits: u32,
572        msg_ptr: *const u8,
573        msg_len: usize,
574        out_valid: *mut c_int,
575    ) -> bicycl_status_t;
576
577    pub fn bicycl_cl_dlog_session_new(
578        ctx: *mut bicycl_context_t,
579        randgen: *mut bicycl_randgen_t,
580        seclevel_bits: u32,
581        out_session: *mut *mut bicycl_cl_dlog_session_t,
582    ) -> bicycl_status_t;
583    pub fn bicycl_cl_dlog_session_free(session: *mut bicycl_cl_dlog_session_t);
584    pub fn bicycl_cl_dlog_session_prepare_statement(
585        ctx: *mut bicycl_context_t,
586        session: *mut bicycl_cl_dlog_session_t,
587        randgen: *mut bicycl_randgen_t,
588    ) -> bicycl_status_t;
589    pub fn bicycl_cl_dlog_session_prove_round(
590        ctx: *mut bicycl_context_t,
591        session: *mut bicycl_cl_dlog_session_t,
592        randgen: *mut bicycl_randgen_t,
593    ) -> bicycl_status_t;
594    pub fn bicycl_cl_dlog_session_verify_round(
595        ctx: *mut bicycl_context_t,
596        session: *const bicycl_cl_dlog_session_t,
597        out_valid: *mut c_int,
598    ) -> bicycl_status_t;
599    pub fn bicycl_cl_dlog_message_new(
600        out_msg: *mut *mut bicycl_cl_dlog_message_t,
601    ) -> bicycl_status_t;
602    pub fn bicycl_cl_dlog_message_free(msg: *mut bicycl_cl_dlog_message_t);
603    pub fn bicycl_cl_dlog_message_export_bytes(
604        ctx: *mut bicycl_context_t,
605        msg: *const bicycl_cl_dlog_message_t,
606        out_buf: *mut u8,
607        inout_len: *mut usize,
608    ) -> bicycl_status_t;
609    pub fn bicycl_cl_dlog_message_import_bytes(
610        ctx: *mut bicycl_context_t,
611        msg: *mut bicycl_cl_dlog_message_t,
612        bytes: *const u8,
613        len: usize,
614    ) -> bicycl_status_t;
615    pub fn bicycl_cl_dlog_session_export_statement(
616        ctx: *mut bicycl_context_t,
617        session: *const bicycl_cl_dlog_session_t,
618        out_msg: *mut bicycl_cl_dlog_message_t,
619    ) -> bicycl_status_t;
620    pub fn bicycl_cl_dlog_session_import_statement(
621        ctx: *mut bicycl_context_t,
622        session: *mut bicycl_cl_dlog_session_t,
623        msg: *const bicycl_cl_dlog_message_t,
624    ) -> bicycl_status_t;
625    pub fn bicycl_cl_dlog_session_export_proof(
626        ctx: *mut bicycl_context_t,
627        session: *const bicycl_cl_dlog_session_t,
628        out_msg: *mut bicycl_cl_dlog_message_t,
629    ) -> bicycl_status_t;
630    pub fn bicycl_cl_dlog_session_import_proof(
631        ctx: *mut bicycl_context_t,
632        session: *mut bicycl_cl_dlog_session_t,
633        msg: *const bicycl_cl_dlog_message_t,
634    ) -> bicycl_status_t;
635
636    pub fn bicycl_threshold_ecdsa_session_new(
637        ctx: *mut bicycl_context_t,
638        randgen: *mut bicycl_randgen_t,
639        seclevel_bits: u32,
640        n_players: u32,
641        threshold_t: u32,
642        out_session: *mut *mut bicycl_threshold_ecdsa_session_t,
643    ) -> bicycl_status_t;
644    pub fn bicycl_threshold_ecdsa_session_free(session: *mut bicycl_threshold_ecdsa_session_t);
645    pub fn bicycl_threshold_ecdsa_keygen_round1(
646        ctx: *mut bicycl_context_t,
647        session: *mut bicycl_threshold_ecdsa_session_t,
648        randgen: *mut bicycl_randgen_t,
649    ) -> bicycl_status_t;
650    pub fn bicycl_threshold_ecdsa_keygen_round2(
651        ctx: *mut bicycl_context_t,
652        session: *mut bicycl_threshold_ecdsa_session_t,
653        randgen: *mut bicycl_randgen_t,
654    ) -> bicycl_status_t;
655    pub fn bicycl_threshold_ecdsa_keygen_finalize(
656        ctx: *mut bicycl_context_t,
657        session: *mut bicycl_threshold_ecdsa_session_t,
658    ) -> bicycl_status_t;
659    pub fn bicycl_threshold_ecdsa_sign_round1(
660        ctx: *mut bicycl_context_t,
661        session: *mut bicycl_threshold_ecdsa_session_t,
662        randgen: *mut bicycl_randgen_t,
663        msg_ptr: *const u8,
664        msg_len: usize,
665    ) -> bicycl_status_t;
666    pub fn bicycl_threshold_ecdsa_sign_round2(
667        ctx: *mut bicycl_context_t,
668        session: *mut bicycl_threshold_ecdsa_session_t,
669        randgen: *mut bicycl_randgen_t,
670    ) -> bicycl_status_t;
671    pub fn bicycl_threshold_ecdsa_sign_round3(
672        ctx: *mut bicycl_context_t,
673        session: *mut bicycl_threshold_ecdsa_session_t,
674    ) -> bicycl_status_t;
675    pub fn bicycl_threshold_ecdsa_sign_round4(
676        ctx: *mut bicycl_context_t,
677        session: *mut bicycl_threshold_ecdsa_session_t,
678    ) -> bicycl_status_t;
679    pub fn bicycl_threshold_ecdsa_sign_round5(
680        ctx: *mut bicycl_context_t,
681        session: *mut bicycl_threshold_ecdsa_session_t,
682        randgen: *mut bicycl_randgen_t,
683    ) -> bicycl_status_t;
684    pub fn bicycl_threshold_ecdsa_sign_round6(
685        ctx: *mut bicycl_context_t,
686        session: *mut bicycl_threshold_ecdsa_session_t,
687        randgen: *mut bicycl_randgen_t,
688    ) -> bicycl_status_t;
689    pub fn bicycl_threshold_ecdsa_sign_round7(
690        ctx: *mut bicycl_context_t,
691        session: *mut bicycl_threshold_ecdsa_session_t,
692        randgen: *mut bicycl_randgen_t,
693    ) -> bicycl_status_t;
694    pub fn bicycl_threshold_ecdsa_sign_round8(
695        ctx: *mut bicycl_context_t,
696        session: *mut bicycl_threshold_ecdsa_session_t,
697    ) -> bicycl_status_t;
698    pub fn bicycl_threshold_ecdsa_sign_finalize(
699        ctx: *mut bicycl_context_t,
700        session: *mut bicycl_threshold_ecdsa_session_t,
701    ) -> bicycl_status_t;
702    pub fn bicycl_threshold_ecdsa_signature_valid(
703        ctx: *mut bicycl_context_t,
704        session: *const bicycl_threshold_ecdsa_session_t,
705        out_valid: *mut c_int,
706    ) -> bicycl_status_t;
707}