botan_sys/
pubkey.rs

1use crate::ffi_types::*;
2
3use crate::mp::botan_mp_t;
4use crate::rng::botan_rng_t;
5
6pub enum botan_pubkey_struct {}
7pub type botan_pubkey_t = *mut botan_pubkey_struct;
8
9pub enum botan_privkey_struct {}
10pub type botan_privkey_t = *mut botan_privkey_struct;
11
12extern "C" {
13    pub fn botan_privkey_create(
14        key: *mut botan_privkey_t,
15        algo_name: *const c_char,
16        algo_params: *const c_char,
17        rng: botan_rng_t,
18    ) -> c_int;
19    pub fn botan_privkey_check_key(key: botan_privkey_t, rng: botan_rng_t, flags: u32) -> c_int;
20    pub fn botan_privkey_create_rsa(
21        key: *mut botan_privkey_t,
22        rng: botan_rng_t,
23        n_bits: usize,
24    ) -> c_int;
25    pub fn botan_privkey_create_ecdsa(
26        key: *mut botan_privkey_t,
27        rng: botan_rng_t,
28        params: *const c_char,
29    ) -> c_int;
30    pub fn botan_privkey_create_ecdh(
31        key: *mut botan_privkey_t,
32        rng: botan_rng_t,
33        params: *const c_char,
34    ) -> c_int;
35    pub fn botan_privkey_create_mceliece(
36        key: *mut botan_privkey_t,
37        rng: botan_rng_t,
38        n: usize,
39        t: usize,
40    ) -> c_int;
41    pub fn botan_privkey_create_dh(
42        key: *mut botan_privkey_t,
43        rng: botan_rng_t,
44        param: *const c_char,
45    ) -> c_int;
46    pub fn botan_privkey_create_dsa(
47        key: *mut botan_privkey_t,
48        rng: botan_rng_t,
49        pbits: usize,
50        qbits: usize,
51    ) -> c_int;
52    pub fn botan_privkey_create_elgamal(
53        key: *mut botan_privkey_t,
54        rng: botan_rng_t,
55        pbits: usize,
56        qbits: usize,
57    ) -> c_int;
58    pub fn botan_privkey_load(
59        key: *mut botan_privkey_t,
60        rng: botan_rng_t,
61        bits: *const u8,
62        len: usize,
63        password: *const c_char,
64    ) -> c_int;
65    pub fn botan_privkey_destroy(key: botan_privkey_t) -> c_int;
66    pub fn botan_privkey_export(
67        key: botan_privkey_t,
68        out: *mut u8,
69        out_len: *mut usize,
70        flags: u32,
71    ) -> c_int;
72    pub fn botan_privkey_export_encrypted(
73        key: botan_privkey_t,
74        out: *mut u8,
75        out_len: *mut usize,
76        rng: botan_rng_t,
77        passphrase: *const c_char,
78        encryption_algo: *const c_char,
79        flags: u32,
80    ) -> c_int;
81    pub fn botan_privkey_export_encrypted_pbkdf_msec(
82        key: botan_privkey_t,
83        out: *mut u8,
84        out_len: *mut usize,
85        rng: botan_rng_t,
86        passphrase: *const c_char,
87        pbkdf_msec_runtime: u32,
88        pbkdf_iterations_out: *mut usize,
89        cipher_algo: *const c_char,
90        pbkdf_algo: *const c_char,
91        flags: u32,
92    ) -> c_int;
93    pub fn botan_privkey_export_encrypted_pbkdf_iter(
94        key: botan_privkey_t,
95        out: *mut u8,
96        out_len: *mut usize,
97        rng: botan_rng_t,
98        passphrase: *const c_char,
99        pbkdf_iterations: usize,
100        cipher_algo: *const c_char,
101        pbkdf_algo: *const c_char,
102        flags: u32,
103    ) -> c_int;
104
105    pub fn botan_pubkey_load(key: *mut botan_pubkey_t, bits: *const u8, len: usize) -> c_int;
106    pub fn botan_privkey_export_pubkey(out: *mut botan_pubkey_t, in_: botan_privkey_t) -> c_int;
107    pub fn botan_pubkey_export(
108        key: botan_pubkey_t,
109        out: *mut u8,
110        out_len: *mut usize,
111        flags: u32,
112    ) -> c_int;
113    pub fn botan_privkey_algo_name(
114        key: botan_privkey_t,
115        out: *mut c_char,
116        out_len: *mut usize,
117    ) -> c_int;
118    pub fn botan_pubkey_algo_name(
119        key: botan_pubkey_t,
120        out: *mut c_char,
121        out_len: *mut usize,
122    ) -> c_int;
123    pub fn botan_pubkey_check_key(key: botan_pubkey_t, rng: botan_rng_t, flags: u32) -> c_int;
124    pub fn botan_pubkey_estimated_strength(key: botan_pubkey_t, estimate: *mut usize) -> c_int;
125    pub fn botan_pubkey_fingerprint(
126        key: botan_pubkey_t,
127        hash: *const c_char,
128        out: *mut u8,
129        out_len: *mut usize,
130    ) -> c_int;
131    pub fn botan_pubkey_destroy(key: botan_pubkey_t) -> c_int;
132    pub fn botan_pubkey_get_field(
133        output: botan_mp_t,
134        key: botan_pubkey_t,
135        field_name: *const c_char,
136    ) -> c_int;
137    pub fn botan_privkey_get_field(
138        output: botan_mp_t,
139        key: botan_privkey_t,
140        field_name: *const c_char,
141    ) -> c_int;
142    pub fn botan_privkey_load_rsa(
143        key: *mut botan_privkey_t,
144        p: botan_mp_t,
145        q: botan_mp_t,
146        e: botan_mp_t,
147    ) -> c_int;
148    pub fn botan_privkey_load_rsa_pkcs1(
149        key: *mut botan_privkey_t,
150        bits: *const u8,
151        len: usize,
152    ) -> c_int;
153    pub fn botan_privkey_rsa_get_p(p: botan_mp_t, rsa_key: botan_privkey_t) -> c_int;
154    pub fn botan_privkey_rsa_get_q(q: botan_mp_t, rsa_key: botan_privkey_t) -> c_int;
155    pub fn botan_privkey_rsa_get_d(d: botan_mp_t, rsa_key: botan_privkey_t) -> c_int;
156    pub fn botan_privkey_rsa_get_n(n: botan_mp_t, rsa_key: botan_privkey_t) -> c_int;
157    pub fn botan_privkey_rsa_get_e(e: botan_mp_t, rsa_key: botan_privkey_t) -> c_int;
158    pub fn botan_pubkey_load_rsa(key: *mut botan_pubkey_t, n: botan_mp_t, e: botan_mp_t) -> c_int;
159    pub fn botan_pubkey_rsa_get_e(e: botan_mp_t, rsa_key: botan_pubkey_t) -> c_int;
160    pub fn botan_pubkey_rsa_get_n(n: botan_mp_t, rsa_key: botan_pubkey_t) -> c_int;
161    pub fn botan_privkey_load_dsa(
162        key: *mut botan_privkey_t,
163        p: botan_mp_t,
164        q: botan_mp_t,
165        g: botan_mp_t,
166        x: botan_mp_t,
167    ) -> c_int;
168    pub fn botan_pubkey_load_dsa(
169        key: *mut botan_pubkey_t,
170        p: botan_mp_t,
171        q: botan_mp_t,
172        g: botan_mp_t,
173        y: botan_mp_t,
174    ) -> c_int;
175    pub fn botan_privkey_dsa_get_x(n: botan_mp_t, key: botan_privkey_t) -> c_int;
176    pub fn botan_pubkey_dsa_get_p(p: botan_mp_t, key: botan_pubkey_t) -> c_int;
177    pub fn botan_pubkey_dsa_get_q(q: botan_mp_t, key: botan_pubkey_t) -> c_int;
178    pub fn botan_pubkey_dsa_get_g(d: botan_mp_t, key: botan_pubkey_t) -> c_int;
179    pub fn botan_pubkey_dsa_get_y(y: botan_mp_t, key: botan_pubkey_t) -> c_int;
180    pub fn botan_privkey_load_dh(
181        key: *mut botan_privkey_t,
182        p: botan_mp_t,
183        g: botan_mp_t,
184        x: botan_mp_t,
185    ) -> c_int;
186    pub fn botan_pubkey_load_dh(
187        key: *mut botan_pubkey_t,
188        p: botan_mp_t,
189        g: botan_mp_t,
190        y: botan_mp_t,
191    ) -> c_int;
192    pub fn botan_pubkey_load_elgamal(
193        key: *mut botan_pubkey_t,
194        p: botan_mp_t,
195        g: botan_mp_t,
196        y: botan_mp_t,
197    ) -> c_int;
198    pub fn botan_privkey_load_elgamal(
199        key: *mut botan_privkey_t,
200        p: botan_mp_t,
201        g: botan_mp_t,
202        x: botan_mp_t,
203    ) -> c_int;
204    pub fn botan_privkey_load_ed25519(key: *mut botan_privkey_t, privkey: *const u8) -> c_int;
205    pub fn botan_pubkey_load_ed25519(key: *mut botan_pubkey_t, pubkey: *const u8) -> c_int;
206    pub fn botan_privkey_ed25519_get_privkey(key: botan_privkey_t, output: *mut u8) -> c_int;
207    pub fn botan_pubkey_ed25519_get_pubkey(key: botan_pubkey_t, pubkey: *mut u8) -> c_int;
208
209    pub fn botan_privkey_load_x25519(key: *mut botan_privkey_t, privkey: *const u8) -> c_int;
210    pub fn botan_pubkey_load_x25519(key: *mut botan_pubkey_t, pubkey: *const u8) -> c_int;
211    pub fn botan_privkey_x25519_get_privkey(key: botan_privkey_t, output: *mut u8) -> c_int;
212    pub fn botan_pubkey_x25519_get_pubkey(key: botan_pubkey_t, pubkey: *mut u8) -> c_int;
213
214    pub fn botan_privkey_load_ecdsa(
215        key: *mut botan_privkey_t,
216        scalar: botan_mp_t,
217        curve_name: *const c_char,
218    ) -> c_int;
219    pub fn botan_pubkey_load_ecdsa(
220        key: *mut botan_pubkey_t,
221        public_x: botan_mp_t,
222        public_y: botan_mp_t,
223        curve_name: *const c_char,
224    ) -> c_int;
225    pub fn botan_pubkey_load_ecdh(
226        key: *mut botan_pubkey_t,
227        public_x: botan_mp_t,
228        public_y: botan_mp_t,
229        curve_name: *const c_char,
230    ) -> c_int;
231    pub fn botan_privkey_load_ecdh(
232        key: *mut botan_privkey_t,
233        scalar: botan_mp_t,
234        curve_name: *const c_char,
235    ) -> c_int;
236    pub fn botan_pubkey_load_sm2(
237        key: *mut botan_pubkey_t,
238        public_x: botan_mp_t,
239        public_y: botan_mp_t,
240        curve_name: *const c_char,
241    ) -> c_int;
242    pub fn botan_privkey_load_sm2(
243        key: *mut botan_privkey_t,
244        scalar: botan_mp_t,
245        curve_name: *const c_char,
246    ) -> c_int;
247    pub fn botan_pubkey_load_sm2_enc(
248        key: *mut botan_pubkey_t,
249        public_x: botan_mp_t,
250        public_y: botan_mp_t,
251        curve_name: *const c_char,
252    ) -> c_int;
253    pub fn botan_privkey_load_sm2_enc(
254        key: *mut botan_privkey_t,
255        scalar: botan_mp_t,
256        curve_name: *const c_char,
257    ) -> c_int;
258    pub fn botan_pubkey_sm2_compute_za(
259        out: *mut u8,
260        out_len: *mut usize,
261        ident: *const c_char,
262        hash_algo: *const c_char,
263        key: botan_pubkey_t,
264    ) -> c_int;
265}
266
267#[cfg(feature = "botan3")]
268extern "C" {
269    pub fn botan_pubkey_view_der(
270        key: botan_pubkey_t,
271        view_ctx: botan_view_ctx,
272        view_fn: botan_view_bin_fn,
273    ) -> c_int;
274
275    pub fn botan_pubkey_view_pem(
276        key: botan_pubkey_t,
277        view_ctx: botan_view_ctx,
278        view_fn: botan_view_str_fn,
279    ) -> c_int;
280
281    pub fn botan_privkey_view_der(
282        key: botan_privkey_t,
283        view_ctx: botan_view_ctx,
284        view_fn: botan_view_bin_fn,
285    ) -> c_int;
286
287    pub fn botan_privkey_view_pem(
288        key: botan_privkey_t,
289        view_ctx: botan_view_ctx,
290        view_fn: botan_view_str_fn,
291    ) -> c_int;
292
293    pub fn botan_pubkey_view_ec_public_point(
294        key: botan_pubkey_t,
295        view_ctx: botan_view_ctx,
296        view_fn: botan_view_bin_fn,
297    ) -> c_int;
298
299    pub fn botan_privkey_view_encrypted_der(
300        key: botan_privkey_t,
301        rng: botan_rng_t,
302        passphrase: *const c_char,
303        cipher_algo: *const c_char,
304        pbkdf_algo: *const c_char,
305        pbkdf_iterations: usize,
306        view_ctx: botan_view_ctx,
307        view_fn: botan_view_bin_fn,
308    ) -> c_int;
309
310    pub fn botan_privkey_view_encrypted_pem(
311        key: botan_privkey_t,
312        rng: botan_rng_t,
313        passphrase: *const c_char,
314        cipher_algo: *const c_char,
315        pbkdf_algo: *const c_char,
316        pbkdf_iterations: usize,
317        view_ctx: botan_view_ctx,
318        view_fn: botan_view_str_fn,
319    ) -> c_int;
320}