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}