1use crate::ffi_types::*;
2
3use crate::mp::botan_mp_t;
4use crate::rng::botan_rng_t;
5
6use crate::{botan_asn1_oid_t, botan_ec_group_t};
7
8use crate::botan_ec_scalar_t;
9
10pub enum botan_pubkey_struct {}
11pub type botan_pubkey_t = *mut botan_pubkey_struct;
12
13pub enum botan_privkey_struct {}
14pub type botan_privkey_t = *mut botan_privkey_struct;
15
16botan_ffi_functions! {
17 pub fn botan_privkey_create(
18 key: *mut botan_privkey_t,
19 algo_name: *const c_char,
20 algo_params: *const c_char,
21 rng: botan_rng_t,
22 ) -> c_int;
23 pub fn botan_privkey_check_key(key: botan_privkey_t, rng: botan_rng_t, flags: u32) -> c_int;
24 pub fn botan_privkey_create_rsa(
25 key: *mut botan_privkey_t,
26 rng: botan_rng_t,
27 n_bits: usize,
28 ) -> c_int;
29 pub fn botan_privkey_create_ecdsa(
30 key: *mut botan_privkey_t,
31 rng: botan_rng_t,
32 params: *const c_char,
33 ) -> c_int;
34 pub fn botan_privkey_create_ecdh(
35 key: *mut botan_privkey_t,
36 rng: botan_rng_t,
37 params: *const c_char,
38 ) -> c_int;
39 pub fn botan_privkey_create_dh(
40 key: *mut botan_privkey_t,
41 rng: botan_rng_t,
42 param: *const c_char,
43 ) -> c_int;
44 pub fn botan_privkey_create_dsa(
45 key: *mut botan_privkey_t,
46 rng: botan_rng_t,
47 pbits: usize,
48 qbits: usize,
49 ) -> c_int;
50 pub fn botan_privkey_create_elgamal(
51 key: *mut botan_privkey_t,
52 rng: botan_rng_t,
53 pbits: usize,
54 qbits: usize,
55 ) -> c_int;
56 pub fn botan_privkey_load(
57 key: *mut botan_privkey_t,
58 rng: botan_rng_t,
59 bits: *const u8,
60 len: usize,
61 password: *const c_char,
62 ) -> c_int;
63 pub fn botan_privkey_destroy(key: botan_privkey_t) -> c_int;
64 pub fn botan_privkey_export(
65 key: botan_privkey_t,
66 out: *mut u8,
67 out_len: *mut usize,
68 flags: u32,
69 ) -> c_int;
70 pub fn botan_privkey_export_encrypted(
71 key: botan_privkey_t,
72 out: *mut u8,
73 out_len: *mut usize,
74 rng: botan_rng_t,
75 passphrase: *const c_char,
76 encryption_algo: *const c_char,
77 flags: u32,
78 ) -> c_int;
79 pub fn botan_privkey_export_encrypted_pbkdf_msec(
80 key: botan_privkey_t,
81 out: *mut u8,
82 out_len: *mut usize,
83 rng: botan_rng_t,
84 passphrase: *const c_char,
85 pbkdf_msec_runtime: u32,
86 pbkdf_iterations_out: *mut usize,
87 cipher_algo: *const c_char,
88 pbkdf_algo: *const c_char,
89 flags: u32,
90 ) -> c_int;
91 pub fn botan_privkey_export_encrypted_pbkdf_iter(
92 key: botan_privkey_t,
93 out: *mut u8,
94 out_len: *mut usize,
95 rng: botan_rng_t,
96 passphrase: *const c_char,
97 pbkdf_iterations: usize,
98 cipher_algo: *const c_char,
99 pbkdf_algo: *const c_char,
100 flags: u32,
101 ) -> c_int;
102
103 pub fn botan_pubkey_load(key: *mut botan_pubkey_t, bits: *const u8, len: usize) -> c_int;
104 pub fn botan_privkey_export_pubkey(out: *mut botan_pubkey_t, in_: botan_privkey_t) -> c_int;
105 pub fn botan_pubkey_export(
106 key: botan_pubkey_t,
107 out: *mut u8,
108 out_len: *mut usize,
109 flags: u32,
110 ) -> c_int;
111 pub fn botan_privkey_algo_name(
112 key: botan_privkey_t,
113 out: *mut c_char,
114 out_len: *mut usize,
115 ) -> c_int;
116 pub fn botan_pubkey_algo_name(
117 key: botan_pubkey_t,
118 out: *mut c_char,
119 out_len: *mut usize,
120 ) -> c_int;
121 pub fn botan_pubkey_check_key(key: botan_pubkey_t, rng: botan_rng_t, flags: u32) -> c_int;
122 pub fn botan_pubkey_estimated_strength(key: botan_pubkey_t, estimate: *mut usize) -> c_int;
123 pub fn botan_pubkey_fingerprint(
124 key: botan_pubkey_t,
125 hash: *const c_char,
126 out: *mut u8,
127 out_len: *mut usize,
128 ) -> c_int;
129 pub fn botan_pubkey_destroy(key: botan_pubkey_t) -> c_int;
130 pub fn botan_pubkey_get_field(
131 output: botan_mp_t,
132 key: botan_pubkey_t,
133 field_name: *const c_char,
134 ) -> c_int;
135 pub fn botan_privkey_get_field(
136 output: botan_mp_t,
137 key: botan_privkey_t,
138 field_name: *const c_char,
139 ) -> c_int;
140 pub fn botan_privkey_load_rsa(
141 key: *mut botan_privkey_t,
142 p: botan_mp_t,
143 q: botan_mp_t,
144 e: botan_mp_t,
145 ) -> c_int;
146 pub fn botan_privkey_load_rsa_pkcs1(
147 key: *mut botan_privkey_t,
148 bits: *const u8,
149 len: usize,
150 ) -> c_int;
151 pub fn botan_privkey_rsa_get_p(p: botan_mp_t, rsa_key: botan_privkey_t) -> c_int;
152 pub fn botan_privkey_rsa_get_q(q: botan_mp_t, rsa_key: botan_privkey_t) -> c_int;
153 pub fn botan_privkey_rsa_get_d(d: botan_mp_t, rsa_key: botan_privkey_t) -> c_int;
154 pub fn botan_privkey_rsa_get_n(n: botan_mp_t, rsa_key: botan_privkey_t) -> c_int;
155 pub fn botan_privkey_rsa_get_e(e: botan_mp_t, rsa_key: botan_privkey_t) -> c_int;
156 pub fn botan_pubkey_load_rsa(key: *mut botan_pubkey_t, n: botan_mp_t, e: botan_mp_t) -> c_int;
157 #[cfg(botan_ffi_20260303)]
158 pub fn botan_pubkey_load_rsa_pkcs1(
159 key: *mut botan_pubkey_t,
160 bits: *const u8,
161 len: usize,
162 ) -> c_int;
163 pub fn botan_privkey_rsa_get_privkey(
164 rsa_key: botan_privkey_t,
165 out: *mut u8,
166 out_len: *mut usize,
167 flags: u32,
168 ) -> c_int;
169
170 pub fn botan_pubkey_rsa_get_e(e: botan_mp_t, rsa_key: botan_pubkey_t) -> c_int;
171 pub fn botan_pubkey_rsa_get_n(n: botan_mp_t, rsa_key: botan_pubkey_t) -> c_int;
172 pub fn botan_privkey_load_dsa(
173 key: *mut botan_privkey_t,
174 p: botan_mp_t,
175 q: botan_mp_t,
176 g: botan_mp_t,
177 x: botan_mp_t,
178 ) -> c_int;
179 pub fn botan_pubkey_load_dsa(
180 key: *mut botan_pubkey_t,
181 p: botan_mp_t,
182 q: botan_mp_t,
183 g: botan_mp_t,
184 y: botan_mp_t,
185 ) -> c_int;
186 pub fn botan_privkey_dsa_get_x(n: botan_mp_t, key: botan_privkey_t) -> c_int;
187 pub fn botan_pubkey_dsa_get_p(p: botan_mp_t, key: botan_pubkey_t) -> c_int;
188 pub fn botan_pubkey_dsa_get_q(q: botan_mp_t, key: botan_pubkey_t) -> c_int;
189 pub fn botan_pubkey_dsa_get_g(d: botan_mp_t, key: botan_pubkey_t) -> c_int;
190 pub fn botan_pubkey_dsa_get_y(y: botan_mp_t, key: botan_pubkey_t) -> c_int;
191 pub fn botan_privkey_load_dh(
192 key: *mut botan_privkey_t,
193 p: botan_mp_t,
194 g: botan_mp_t,
195 x: botan_mp_t,
196 ) -> c_int;
197 pub fn botan_pubkey_load_dh(
198 key: *mut botan_pubkey_t,
199 p: botan_mp_t,
200 g: botan_mp_t,
201 y: botan_mp_t,
202 ) -> c_int;
203 pub fn botan_pubkey_load_elgamal(
204 key: *mut botan_pubkey_t,
205 p: botan_mp_t,
206 g: botan_mp_t,
207 y: botan_mp_t,
208 ) -> c_int;
209 pub fn botan_privkey_load_elgamal(
210 key: *mut botan_privkey_t,
211 p: botan_mp_t,
212 g: botan_mp_t,
213 x: botan_mp_t,
214 ) -> c_int;
215 pub fn botan_privkey_load_ed25519(key: *mut botan_privkey_t, privkey: *const u8) -> c_int;
216 pub fn botan_pubkey_load_ed25519(key: *mut botan_pubkey_t, pubkey: *const u8) -> c_int;
217 pub fn botan_privkey_ed25519_get_privkey(key: botan_privkey_t, output: *mut u8) -> c_int;
218 pub fn botan_pubkey_ed25519_get_pubkey(key: botan_pubkey_t, pubkey: *mut u8) -> c_int;
219
220 #[cfg(botan_ffi_20240408)]
221 pub fn botan_privkey_ed448_get_privkey(key: botan_privkey_t, output: *mut u8) -> c_int;
222
223 #[cfg(botan_ffi_20240408)]
224 pub fn botan_pubkey_ed448_get_pubkey(key: botan_pubkey_t, pubkey: *mut u8) -> c_int;
225
226 pub fn botan_privkey_load_x25519(key: *mut botan_privkey_t, privkey: *const u8) -> c_int;
227 pub fn botan_pubkey_load_x25519(key: *mut botan_pubkey_t, pubkey: *const u8) -> c_int;
228 pub fn botan_privkey_x25519_get_privkey(key: botan_privkey_t, output: *mut u8) -> c_int;
229 pub fn botan_pubkey_x25519_get_pubkey(key: botan_pubkey_t, pubkey: *mut u8) -> c_int;
230
231 #[cfg(botan_ffi_20240408)]
232 pub fn botan_privkey_load_x448(key: *mut botan_privkey_t, privkey: *const u8) -> c_int;
233
234 #[cfg(botan_ffi_20240408)]
235 pub fn botan_pubkey_load_x448(key: *mut botan_pubkey_t, pubkey: *const u8) -> c_int;
236
237 #[cfg(botan_ffi_20240408)]
238 pub fn botan_privkey_x448_get_privkey(key: botan_privkey_t, output: *mut u8) -> c_int;
239
240 #[cfg(botan_ffi_20240408)]
241 pub fn botan_pubkey_x448_get_pubkey(key: botan_pubkey_t, pubkey: *mut u8) -> c_int;
242
243 #[cfg(botan_ffi_20240408)]
244 pub fn botan_privkey_load_ed448(key: *mut botan_privkey_t, privkey: *const u8) -> c_int;
245
246 #[cfg(botan_ffi_20240408)]
247 pub fn botan_pubkey_load_ed448(key: *mut botan_pubkey_t, pubkey: *const u8) -> c_int;
248
249 pub fn botan_privkey_load_ecdsa(
250 key: *mut botan_privkey_t,
251 scalar: botan_mp_t,
252 curve_name: *const c_char,
253 ) -> c_int;
254 pub fn botan_pubkey_load_ecdsa(
255 key: *mut botan_pubkey_t,
256 public_x: botan_mp_t,
257 public_y: botan_mp_t,
258 curve_name: *const c_char,
259 ) -> c_int;
260 pub fn botan_pubkey_load_ecdh(
261 key: *mut botan_pubkey_t,
262 public_x: botan_mp_t,
263 public_y: botan_mp_t,
264 curve_name: *const c_char,
265 ) -> c_int;
266 pub fn botan_privkey_load_ecdh(
267 key: *mut botan_privkey_t,
268 scalar: botan_mp_t,
269 curve_name: *const c_char,
270 ) -> c_int;
271 pub fn botan_pubkey_load_sm2(
272 key: *mut botan_pubkey_t,
273 public_x: botan_mp_t,
274 public_y: botan_mp_t,
275 curve_name: *const c_char,
276 ) -> c_int;
277 pub fn botan_privkey_load_sm2(
278 key: *mut botan_privkey_t,
279 scalar: botan_mp_t,
280 curve_name: *const c_char,
281 ) -> c_int;
282 pub fn botan_pubkey_load_sm2_enc(
283 key: *mut botan_pubkey_t,
284 public_x: botan_mp_t,
285 public_y: botan_mp_t,
286 curve_name: *const c_char,
287 ) -> c_int;
288 pub fn botan_privkey_load_sm2_enc(
289 key: *mut botan_privkey_t,
290 scalar: botan_mp_t,
291 curve_name: *const c_char,
292 ) -> c_int;
293 pub fn botan_pubkey_sm2_compute_za(
294 out: *mut u8,
295 out_len: *mut usize,
296 ident: *const c_char,
297 hash_algo: *const c_char,
298 key: botan_pubkey_t,
299 ) -> c_int;
300
301 #[cfg(botan_ffi_20250829)]
302 pub fn botan_pubkey_load_ecdsa_sec1(
303 key: *mut botan_pubkey_t,
304 sec1: *const u8,
305 sec1_len: usize,
306 curve_name: *const c_char,
307 ) -> c_int;
308
309 #[cfg(botan_ffi_20250829)]
310 pub fn botan_pubkey_load_ecdh_sec1(
311 key: *mut botan_pubkey_t,
312 sec1: *const u8,
313 sec1_len: usize,
314 curve_name: *const c_char,
315 ) -> c_int;
316
317 #[cfg(botan_ffi_20250829)]
318 pub fn botan_pubkey_load_sm2_sec1(
319 key: *mut botan_pubkey_t,
320 sec1: *const u8,
321 sec1_len: usize,
322 curve_name: *const c_char,
323 ) -> c_int;
324
325 #[cfg(botan_ffi_20231009)]
328 pub fn botan_pubkey_ecc_key_used_explicit_encoding(key: botan_pubkey_t) -> c_int;
329
330 #[cfg(botan_ffi_20230711)]
331 pub fn botan_privkey_load_kyber(
332 key: *mut botan_privkey_t,
333 privkey: *const u8,
334 key_len: usize,
335 ) -> c_int;
336
337 #[cfg(botan_ffi_20230711)]
338 pub fn botan_pubkey_load_kyber(
339 key: *mut botan_pubkey_t,
340 pubkey: *const u8,
341 key_len: usize,
342 ) -> c_int;
343
344 #[cfg(botan_ffi_20250506)]
347 pub fn botan_pubkey_view_raw(
348 key: botan_pubkey_t,
349 view_ctx: botan_view_ctx,
350 view_fn: botan_view_bin_fn,
351 ) -> c_int;
352
353 #[cfg(botan_ffi_20230403)]
354 pub fn botan_pubkey_view_der(
355 key: botan_pubkey_t,
356 view_ctx: botan_view_ctx,
357 view_fn: botan_view_bin_fn,
358 ) -> c_int;
359
360 #[cfg(botan_ffi_20230403)]
361 pub fn botan_pubkey_view_pem(
362 key: botan_pubkey_t,
363 view_ctx: botan_view_ctx,
364 view_fn: botan_view_str_fn,
365 ) -> c_int;
366
367 #[cfg(botan_ffi_20250506)]
370 pub fn botan_privkey_view_raw(
371 key: botan_privkey_t,
372 view_ctx: botan_view_ctx,
373 view_fn: botan_view_bin_fn,
374 ) -> c_int;
375
376 #[cfg(botan_ffi_20230403)]
377 pub fn botan_privkey_view_der(
378 key: botan_privkey_t,
379 view_ctx: botan_view_ctx,
380 view_fn: botan_view_bin_fn,
381 ) -> c_int;
382
383 #[cfg(botan_ffi_20230403)]
384 pub fn botan_privkey_view_pem(
385 key: botan_privkey_t,
386 view_ctx: botan_view_ctx,
387 view_fn: botan_view_str_fn,
388 ) -> c_int;
389
390 #[cfg(botan_ffi_20230403)]
391 pub fn botan_pubkey_view_ec_public_point(
392 key: botan_pubkey_t,
393 view_ctx: botan_view_ctx,
394 view_fn: botan_view_bin_fn,
395 ) -> c_int;
396
397 #[cfg(botan_ffi_20230403)]
398 pub fn botan_privkey_view_encrypted_der(
399 key: botan_privkey_t,
400 rng: botan_rng_t,
401 passphrase: *const c_char,
402 cipher_algo: *const c_char,
403 pbkdf_algo: *const c_char,
404 pbkdf_iterations: usize,
405 view_ctx: botan_view_ctx,
406 view_fn: botan_view_bin_fn,
407 ) -> c_int;
408
409 #[cfg(botan_ffi_20230403)]
410 pub fn botan_privkey_view_encrypted_pem(
411 key: botan_privkey_t,
412 rng: botan_rng_t,
413 passphrase: *const c_char,
414 cipher_algo: *const c_char,
415 pbkdf_algo: *const c_char,
416 pbkdf_iterations: usize,
417 view_ctx: botan_view_ctx,
418 view_fn: botan_view_str_fn,
419 ) -> c_int;
420
421 #[cfg(botan_ffi_20230403)]
422 pub fn botan_privkey_view_encrypted_der_timed(
423 key: botan_privkey_t,
424 rng: botan_rng_t,
425 passphrase: *const c_char,
426 cipher_algo: *const c_char,
427 pbkdf_algo: *const c_char,
428 pbkdf_runtime_msec: usize,
429 view_ctx: botan_view_ctx,
430 view_fn: botan_view_bin_fn,
431 ) -> c_int;
432
433 #[cfg(botan_ffi_20230403)]
434 pub fn botan_privkey_view_encrypted_pem_timed(
435 key: botan_privkey_t,
436 rng: botan_rng_t,
437 passphrase: *const c_char,
438 cipher_algo: *const c_char,
439 pbkdf_algo: *const c_char,
440 pbkdf_runtime_msec: usize,
441 view_ctx: botan_view_ctx,
442 view_fn: botan_view_str_fn,
443 ) -> c_int;
444
445 #[cfg(botan_ffi_20250506)]
446 pub fn botan_ec_privkey_create(
447 key: *mut botan_privkey_t,
448 algo: *const c_char,
449 group: botan_ec_group_t,
450 rng: botan_rng_t,
451 ) -> c_int;
452
453 #[cfg(botan_ffi_20250506)]
454 pub fn botan_pubkey_oid(oid: *mut botan_asn1_oid_t, key: botan_pubkey_t) -> c_int;
455
456 #[cfg(botan_ffi_20250506)]
457 pub fn botan_privkey_oid(oid: *mut botan_asn1_oid_t, key: botan_privkey_t) -> c_int;
458
459 #[cfg(botan_ffi_20250506)]
460 pub fn botan_privkey_stateful_operation(key: botan_privkey_t, stateful: *mut c_int) -> c_int;
461
462 #[cfg(botan_ffi_20250506)]
463 pub fn botan_privkey_remaining_operations(
464 key: botan_privkey_t,
465 remaining_ops: *mut u64,
466 ) -> c_int;
467
468 #[cfg(botan_ffi_20250506)]
469 pub fn botan_pubkey_load_frodokem(
470 key: *mut botan_pubkey_t,
471 bytes: *const u8,
472 len: usize,
473 mode: *const c_char,
474 ) -> c_int;
475
476 #[cfg(botan_ffi_20250506)]
477 pub fn botan_privkey_load_frodokem(
478 key: *mut botan_privkey_t,
479 bytes: *const u8,
480 len: usize,
481 mode: *const c_char,
482 ) -> c_int;
483
484 #[cfg(botan_ffi_20250506)]
485 pub fn botan_pubkey_load_classic_mceliece(
486 key: *mut botan_pubkey_t,
487 bytes: *const u8,
488 len: usize,
489 mode: *const c_char,
490 ) -> c_int;
491
492 #[cfg(botan_ffi_20250506)]
493 pub fn botan_privkey_load_classic_mceliece(
494 key: *mut botan_privkey_t,
495 bytes: *const u8,
496 len: usize,
497 mode: *const c_char,
498 ) -> c_int;
499
500 #[cfg(botan_ffi_20250506)]
501 pub fn botan_pubkey_load_ml_kem(
502 key: *mut botan_pubkey_t,
503 bytes: *const u8,
504 len: usize,
505 mode: *const c_char,
506 ) -> c_int;
507
508 #[cfg(botan_ffi_20250506)]
509 pub fn botan_privkey_load_ml_kem(
510 key: *mut botan_privkey_t,
511 bytes: *const u8,
512 len: usize,
513 mode: *const c_char,
514 ) -> c_int;
515
516 #[cfg(botan_ffi_20250506)]
517 pub fn botan_pubkey_load_slh_dsa(
518 key: *mut botan_pubkey_t,
519 bytes: *const u8,
520 len: usize,
521 mode: *const c_char,
522 ) -> c_int;
523
524 #[cfg(botan_ffi_20250506)]
525 pub fn botan_privkey_load_slh_dsa(
526 key: *mut botan_privkey_t,
527 bytes: *const u8,
528 len: usize,
529 mode: *const c_char,
530 ) -> c_int;
531
532 #[cfg(botan_ffi_20250506)]
533 pub fn botan_pubkey_load_ml_dsa(
534 key: *mut botan_pubkey_t,
535 bytes: *const u8,
536 len: usize,
537 mode: *const c_char,
538 ) -> c_int;
539
540 #[cfg(botan_ffi_20250506)]
541 pub fn botan_privkey_load_ml_dsa(
542 key: *mut botan_privkey_t,
543 bytes: *const u8,
544 len: usize,
545 mode: *const c_char,
546 ) -> c_int;
547
548 #[cfg(botan_ffi_20260506)]
549 pub fn botan_ec_privkey_get_private_key(
550 key: botan_privkey_t,
551 value: *mut botan_ec_scalar_t,
552 ) -> c_int;
553
554 #[cfg(botan_ffi_20260506)]
555 pub fn botan_ec_privkey_get_group(
556 key: botan_privkey_t,
557 ec_group: *mut botan_ec_group_t,
558 ) -> c_int;
559
560 #[cfg(botan_ffi_20260506)]
561 pub fn botan_ec_pubkey_get_group(key: botan_pubkey_t, ec_group: *mut botan_ec_group_t)
562 -> c_int;
563}