1 use libc::*;
2 
3 use *;
4 
5 #[repr(C)]
6 #[derive(Copy, Clone)]
7 pub enum point_conversion_form_t {
8     POINT_CONVERSION_COMPRESSED = 2,
9     POINT_CONVERSION_UNCOMPRESSED = 4,
10     POINT_CONVERSION_HYBRID = 6,
11 }
12 
13 pub enum EC_METHOD {}
14 pub enum EC_GROUP {}
15 pub enum EC_POINT {}
16 
17 pub const OPENSSL_EC_NAMED_CURVE: c_int = 1;
18 
19 extern "C" {
20     #[cfg(not(osslconf = "OPENSSL_NO_EC2M"))]
EC_GF2m_simple_method() -> *const EC_METHOD21     pub fn EC_GF2m_simple_method() -> *const EC_METHOD;
22 
EC_GROUP_new(meth: *const EC_METHOD) -> *mut EC_GROUP23     pub fn EC_GROUP_new(meth: *const EC_METHOD) -> *mut EC_GROUP;
24 
EC_GROUP_free(group: *mut EC_GROUP)25     pub fn EC_GROUP_free(group: *mut EC_GROUP);
26 
EC_GROUP_get_order( group: *const EC_GROUP, order: *mut BIGNUM, ctx: *mut BN_CTX, ) -> c_int27     pub fn EC_GROUP_get_order(
28         group: *const EC_GROUP,
29         order: *mut BIGNUM,
30         ctx: *mut BN_CTX,
31     ) -> c_int;
32 
EC_GROUP_get_cofactor( group: *const EC_GROUP, cofactor: *mut BIGNUM, ctx: *mut BN_CTX, ) -> c_int33     pub fn EC_GROUP_get_cofactor(
34         group: *const EC_GROUP,
35         cofactor: *mut BIGNUM,
36         ctx: *mut BN_CTX,
37     ) -> c_int;
38 
EC_GROUP_get0_generator(group: *const EC_GROUP) -> *const EC_POINT39     pub fn EC_GROUP_get0_generator(group: *const EC_GROUP) -> *const EC_POINT;
40 
EC_GROUP_get_curve_name(group: *const EC_GROUP) -> c_int41     pub fn EC_GROUP_get_curve_name(group: *const EC_GROUP) -> c_int;
42 
EC_GROUP_set_asn1_flag(key: *mut EC_GROUP, flag: c_int)43     pub fn EC_GROUP_set_asn1_flag(key: *mut EC_GROUP, flag: c_int);
44 
EC_GROUP_get_curve_GFp( group: *const EC_GROUP, p: *mut BIGNUM, a: *mut BIGNUM, b: *mut BIGNUM, ctx: *mut BN_CTX, ) -> c_int45     pub fn EC_GROUP_get_curve_GFp(
46         group: *const EC_GROUP,
47         p: *mut BIGNUM,
48         a: *mut BIGNUM,
49         b: *mut BIGNUM,
50         ctx: *mut BN_CTX,
51     ) -> c_int;
52 
53     #[cfg(not(osslconf = "OPENSSL_NO_EC2M"))]
EC_GROUP_get_curve_GF2m( group: *const EC_GROUP, p: *mut BIGNUM, a: *mut BIGNUM, b: *mut BIGNUM, ctx: *mut BN_CTX, ) -> c_int54     pub fn EC_GROUP_get_curve_GF2m(
55         group: *const EC_GROUP,
56         p: *mut BIGNUM,
57         a: *mut BIGNUM,
58         b: *mut BIGNUM,
59         ctx: *mut BN_CTX,
60     ) -> c_int;
61 
EC_GROUP_get_degree(group: *const EC_GROUP) -> c_int62     pub fn EC_GROUP_get_degree(group: *const EC_GROUP) -> c_int;
63 
64     #[cfg(ossl110)]
EC_GROUP_order_bits(group: *const EC_GROUP) -> c_int65     pub fn EC_GROUP_order_bits(group: *const EC_GROUP) -> c_int;
66 
EC_GROUP_new_curve_GFp( p: *const BIGNUM, a: *const BIGNUM, b: *const BIGNUM, ctx: *mut BN_CTX, ) -> *mut EC_GROUP67     pub fn EC_GROUP_new_curve_GFp(
68         p: *const BIGNUM,
69         a: *const BIGNUM,
70         b: *const BIGNUM,
71         ctx: *mut BN_CTX,
72     ) -> *mut EC_GROUP;
73 
74     #[cfg(not(osslconf = "OPENSSL_NO_EC2M"))]
EC_GROUP_new_curve_GF2m( p: *const BIGNUM, a: *const BIGNUM, b: *const BIGNUM, ctx: *mut BN_CTX, ) -> *mut EC_GROUP75     pub fn EC_GROUP_new_curve_GF2m(
76         p: *const BIGNUM,
77         a: *const BIGNUM,
78         b: *const BIGNUM,
79         ctx: *mut BN_CTX,
80     ) -> *mut EC_GROUP;
81 
EC_GROUP_new_by_curve_name(nid: c_int) -> *mut EC_GROUP82     pub fn EC_GROUP_new_by_curve_name(nid: c_int) -> *mut EC_GROUP;
83 
EC_POINT_new(group: *const EC_GROUP) -> *mut EC_POINT84     pub fn EC_POINT_new(group: *const EC_GROUP) -> *mut EC_POINT;
85 
EC_POINT_free(point: *mut EC_POINT)86     pub fn EC_POINT_free(point: *mut EC_POINT);
87 
EC_POINT_dup(p: *const EC_POINT, group: *const EC_GROUP) -> *mut EC_POINT88     pub fn EC_POINT_dup(p: *const EC_POINT, group: *const EC_GROUP) -> *mut EC_POINT;
89 
EC_POINT_get_affine_coordinates_GFp( group: *const EC_GROUP, p: *const EC_POINT, x: *mut BIGNUM, y: *mut BIGNUM, ctx: *mut BN_CTX, ) -> c_int90     pub fn EC_POINT_get_affine_coordinates_GFp(
91         group: *const EC_GROUP,
92         p: *const EC_POINT,
93         x: *mut BIGNUM,
94         y: *mut BIGNUM,
95         ctx: *mut BN_CTX,
96     ) -> c_int;
97 
98     #[cfg(not(osslconf = "OPENSSL_NO_EC2M"))]
EC_POINT_get_affine_coordinates_GF2m( group: *const EC_GROUP, p: *const EC_POINT, x: *mut BIGNUM, y: *mut BIGNUM, ctx: *mut BN_CTX, ) -> c_int99     pub fn EC_POINT_get_affine_coordinates_GF2m(
100         group: *const EC_GROUP,
101         p: *const EC_POINT,
102         x: *mut BIGNUM,
103         y: *mut BIGNUM,
104         ctx: *mut BN_CTX,
105     ) -> c_int;
106 
EC_POINT_point2oct( group: *const EC_GROUP, p: *const EC_POINT, form: point_conversion_form_t, buf: *mut c_uchar, len: size_t, ctx: *mut BN_CTX, ) -> size_t107     pub fn EC_POINT_point2oct(
108         group: *const EC_GROUP,
109         p: *const EC_POINT,
110         form: point_conversion_form_t,
111         buf: *mut c_uchar,
112         len: size_t,
113         ctx: *mut BN_CTX,
114     ) -> size_t;
115 
EC_POINT_oct2point( group: *const EC_GROUP, p: *mut EC_POINT, buf: *const c_uchar, len: size_t, ctx: *mut BN_CTX, ) -> c_int116     pub fn EC_POINT_oct2point(
117         group: *const EC_GROUP,
118         p: *mut EC_POINT,
119         buf: *const c_uchar,
120         len: size_t,
121         ctx: *mut BN_CTX,
122     ) -> c_int;
123 
EC_POINT_add( group: *const EC_GROUP, r: *mut EC_POINT, a: *const EC_POINT, b: *const EC_POINT, ctx: *mut BN_CTX, ) -> c_int124     pub fn EC_POINT_add(
125         group: *const EC_GROUP,
126         r: *mut EC_POINT,
127         a: *const EC_POINT,
128         b: *const EC_POINT,
129         ctx: *mut BN_CTX,
130     ) -> c_int;
131 
EC_POINT_invert(group: *const EC_GROUP, r: *mut EC_POINT, ctx: *mut BN_CTX) -> c_int132     pub fn EC_POINT_invert(group: *const EC_GROUP, r: *mut EC_POINT, ctx: *mut BN_CTX) -> c_int;
133 
EC_POINT_cmp( group: *const EC_GROUP, a: *const EC_POINT, b: *const EC_POINT, ctx: *mut BN_CTX, ) -> c_int134     pub fn EC_POINT_cmp(
135         group: *const EC_GROUP,
136         a: *const EC_POINT,
137         b: *const EC_POINT,
138         ctx: *mut BN_CTX,
139     ) -> c_int;
140 
EC_POINT_mul( group: *const EC_GROUP, r: *mut EC_POINT, n: *const BIGNUM, q: *const EC_POINT, m: *const BIGNUM, ctx: *mut BN_CTX, ) -> c_int141     pub fn EC_POINT_mul(
142         group: *const EC_GROUP,
143         r: *mut EC_POINT,
144         n: *const BIGNUM,
145         q: *const EC_POINT,
146         m: *const BIGNUM,
147         ctx: *mut BN_CTX,
148     ) -> c_int;
149 
EC_KEY_new() -> *mut EC_KEY150     pub fn EC_KEY_new() -> *mut EC_KEY;
151 
EC_KEY_new_by_curve_name(nid: c_int) -> *mut EC_KEY152     pub fn EC_KEY_new_by_curve_name(nid: c_int) -> *mut EC_KEY;
153 
EC_KEY_free(key: *mut EC_KEY)154     pub fn EC_KEY_free(key: *mut EC_KEY);
155 
EC_KEY_dup(key: *const EC_KEY) -> *mut EC_KEY156     pub fn EC_KEY_dup(key: *const EC_KEY) -> *mut EC_KEY;
157 
EC_KEY_up_ref(key: *mut EC_KEY) -> c_int158     pub fn EC_KEY_up_ref(key: *mut EC_KEY) -> c_int;
159 
EC_KEY_get0_group(key: *const EC_KEY) -> *const EC_GROUP160     pub fn EC_KEY_get0_group(key: *const EC_KEY) -> *const EC_GROUP;
161 
EC_KEY_set_group(key: *mut EC_KEY, group: *const EC_GROUP) -> c_int162     pub fn EC_KEY_set_group(key: *mut EC_KEY, group: *const EC_GROUP) -> c_int;
163 
EC_KEY_get0_private_key(key: *const EC_KEY) -> *const BIGNUM164     pub fn EC_KEY_get0_private_key(key: *const EC_KEY) -> *const BIGNUM;
165 
EC_KEY_set_private_key(key: *mut EC_KEY, key: *const BIGNUM) -> c_int166     pub fn EC_KEY_set_private_key(key: *mut EC_KEY, key: *const BIGNUM) -> c_int;
167 
EC_KEY_get0_public_key(key: *const EC_KEY) -> *const EC_POINT168     pub fn EC_KEY_get0_public_key(key: *const EC_KEY) -> *const EC_POINT;
169 
EC_KEY_set_public_key(key: *mut EC_KEY, key: *const EC_POINT) -> c_int170     pub fn EC_KEY_set_public_key(key: *mut EC_KEY, key: *const EC_POINT) -> c_int;
171 
EC_KEY_generate_key(key: *mut EC_KEY) -> c_int172     pub fn EC_KEY_generate_key(key: *mut EC_KEY) -> c_int;
173 
EC_KEY_check_key(key: *const EC_KEY) -> c_int174     pub fn EC_KEY_check_key(key: *const EC_KEY) -> c_int;
175 
EC_KEY_set_public_key_affine_coordinates( key: *mut EC_KEY, x: *mut BIGNUM, y: *mut BIGNUM, ) -> c_int176     pub fn EC_KEY_set_public_key_affine_coordinates(
177         key: *mut EC_KEY,
178         x: *mut BIGNUM,
179         y: *mut BIGNUM,
180     ) -> c_int;
181 }
182 
183 cfg_if! {
184     if #[cfg(any(ossl110, libressl280))] {
185         pub enum ECDSA_SIG {}
186     } else {
187         #[repr(C)]
188         pub struct ECDSA_SIG {
189             pub r: *mut BIGNUM,
190             pub s: *mut BIGNUM,
191         }
192     }
193 }
194 
195 extern "C" {
ECDSA_SIG_new() -> *mut ECDSA_SIG196     pub fn ECDSA_SIG_new() -> *mut ECDSA_SIG;
197 
ECDSA_SIG_free(sig: *mut ECDSA_SIG)198     pub fn ECDSA_SIG_free(sig: *mut ECDSA_SIG);
199 
200     #[cfg(any(ossl110, libressl273))]
ECDSA_SIG_get0(sig: *const ECDSA_SIG, pr: *mut *const BIGNUM, ps: *mut *const BIGNUM)201     pub fn ECDSA_SIG_get0(sig: *const ECDSA_SIG, pr: *mut *const BIGNUM, ps: *mut *const BIGNUM);
202 
203     #[cfg(any(ossl110, libressl273))]
ECDSA_SIG_set0(sig: *mut ECDSA_SIG, pr: *mut BIGNUM, ps: *mut BIGNUM) -> c_int204     pub fn ECDSA_SIG_set0(sig: *mut ECDSA_SIG, pr: *mut BIGNUM, ps: *mut BIGNUM) -> c_int;
205 
ECDSA_do_sign( dgst: *const c_uchar, dgst_len: c_int, eckey: *mut EC_KEY, ) -> *mut ECDSA_SIG206     pub fn ECDSA_do_sign(
207         dgst: *const c_uchar,
208         dgst_len: c_int,
209         eckey: *mut EC_KEY,
210     ) -> *mut ECDSA_SIG;
211 
ECDSA_do_verify( dgst: *const c_uchar, dgst_len: c_int, sig: *const ECDSA_SIG, eckey: *mut EC_KEY, ) -> c_int212     pub fn ECDSA_do_verify(
213         dgst: *const c_uchar,
214         dgst_len: c_int,
215         sig: *const ECDSA_SIG,
216         eckey: *mut EC_KEY,
217     ) -> c_int;
218 
d2i_ECDSA_SIG( sig: *mut *mut ECDSA_SIG, inp: *mut *const c_uchar, length: c_long, ) -> *mut ECDSA_SIG219     pub fn d2i_ECDSA_SIG(
220         sig: *mut *mut ECDSA_SIG,
221         inp: *mut *const c_uchar,
222         length: c_long,
223     ) -> *mut ECDSA_SIG;
224 
i2d_ECDSA_SIG(sig: *const ECDSA_SIG, out: *mut *mut c_uchar) -> c_int225     pub fn i2d_ECDSA_SIG(sig: *const ECDSA_SIG, out: *mut *mut c_uchar) -> c_int;
226 }
227