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