     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58

    use libc::*;

    use *;

    extern "C" {
        pub fn DSA_new() -> *mut DSA;
        pub fn DSA_free(dsa: *mut DSA);
        pub fn DSA_up_ref(dsa: *mut DSA) -> c_int;
        pub fn DSA_size(dsa: *const DSA) -> c_int;
        pub fn DSA_sign(
            dummy: c_int,
            dgst: *const c_uchar,
            len: c_int,
            sigret: *mut c_uchar,
            siglen: *mut c_uint,
            dsa: *mut DSA,
        ) -> c_int;
        pub fn DSA_verify(
            dummy: c_int,
            dgst: *const c_uchar,
            len: c_int,
            sigbuf: *const c_uchar,
            siglen: c_int,
            dsa: *mut DSA,
        ) -> c_int;

        pub fn d2i_DSAPublicKey(a: *mut *mut DSA, pp: *mut *const c_uchar, length: c_long) -> *mut DSA;
        pub fn d2i_DSAPrivateKey(a: *mut *mut DSA, pp: *mut *const c_uchar, length: c_long)
            -> *mut DSA;

        pub fn DSA_generate_parameters_ex(
            dsa: *mut DSA,
            bits: c_int,
            seed: *const c_uchar,
            seed_len: c_int,
            counter_ref: *mut c_int,
            h_ret: *mut c_ulong,
            cb: *mut BN_GENCB,
        ) -> c_int;

        pub fn DSA_generate_key(dsa: *mut DSA) -> c_int;
        pub fn i2d_DSAPublicKey(a: *const DSA, pp: *mut *mut c_uchar) -> c_int;
        pub fn i2d_DSAPrivateKey(a: *const DSA, pp: *mut *mut c_uchar) -> c_int;

        #[cfg(any(ossl110, libressl273))]
        pub fn DSA_get0_pqg(
            d: *const DSA,
            p: *mut *const BIGNUM,
            q: *mut *const BIGNUM,
            q: *mut *const BIGNUM,
        );
        #[cfg(any(ossl110, libressl273))]
        pub fn DSA_set0_pqg(d: *mut DSA, p: *mut BIGNUM, q: *mut BIGNUM, q: *mut BIGNUM) -> c_int;
        #[cfg(any(ossl110, libressl273))]
        pub fn DSA_get0_key(d: *const DSA, pub_key: *mut *const BIGNUM, priv_key: *mut *const BIGNUM);
        #[cfg(any(ossl110, libressl273))]
        pub fn DSA_set0_key(d: *mut DSA, pub_key: *mut BIGNUM, priv_key: *mut BIGNUM) -> c_int;
    }