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}