botan_sys/
pubkey.rs

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}