1use libc::{c_int, c_uchar, c_char, uint8_t, int8_t, uint16_t, int64_t};
2
3#[derive(Clone, Debug)]
4#[repr(i32)]
5pub enum PQParamSetID {
6 Xxx20140508n401,
7 Xxx20140508n439,
8 Xxx20140508n593,
9 Xxx20140508n743,
10
11 Xxx20151024n401,
12 Xxx20151024n443,
13 Xxx20151024n563,
14 Xxx20151024n743,
15 Xxx20151024n907,
16}
17
18#[derive(Clone, Debug)]
19#[repr(C)]
20pub struct PQParamSet {
21 pub id: PQParamSetID,
22 pub name: *mut c_char,
23 pub oid: [uint8_t; 3],
24 pub n_bits: uint8_t,
25 pub q_bits: uint8_t,
26 pub n: uint16_t,
27 pub p: int8_t,
28 pub q: int64_t,
29 pub b_s: int64_t,
30 pub b_t: int64_t,
31 pub norm_bound_s: int64_t,
32 pub norm_bound_t: int64_t,
33 pub d1: uint8_t,
34 pub d2: uint8_t,
35 pub d3: uint8_t,
36 pub padded_n: uint16_t,
37}
38
39extern "C" {
40 pub fn pq_gen_key(params: *const PQParamSet,
41 privkey_blob_len: *mut isize,
42 privkey_blob: *mut c_uchar,
43 pubkey_blob_len: *mut isize,
44 pubkey_blob: *mut c_uchar) -> c_int;
45
46 pub fn pq_gen_key_fg(params: *const PQParamSet,
47 fg: *const u16,
48 privkey_blob_len: *mut isize,
49 privkey_blob: *mut c_uchar,
50 pubkey_blob_len: *mut isize,
51 pubkey_blob: *mut c_uchar) -> c_int;
52
53 pub fn unpack_private_key(params: *const PQParamSet,
54 f: *mut u16,
55 g: *mut u16,
56 ginv: *mut i64,
57 blob_len: isize,
58 blob: *const c_uchar) -> c_int;
59
60 pub fn pq_get_param_set_by_id(id: PQParamSetID) -> *mut PQParamSet;
61 pub fn bench_param_set(id: PQParamSetID) -> c_int;
62 pub fn pq_sign(packed_sig_len: *mut usize, packed_sig: *mut c_uchar, private_key_len: usize, private_key_blob: *const c_uchar, public_key_len: usize, public_key_blob: *const c_uchar, msg_len: usize, msg: *const c_uchar) -> c_int;
63 pub fn pq_verify(packed_sig_len: usize, packed_sig: *const c_uchar, public_key_len: usize, public_key_blob: *const c_uchar, msg_len: usize, msg: *const c_uchar) -> c_int;
64}