1use super::super::*;
2use libc::*;
3
4#[repr(C)]
5#[derive(Copy, Clone)]
6pub enum point_conversion_form_t {
7 POINT_CONVERSION_COMPRESSED = 2,
8 POINT_CONVERSION_UNCOMPRESSED = 4,
9 POINT_CONVERSION_HYBRID = 6,
10}
11
12#[cfg(not(libressl410))]
13pub enum EC_METHOD {}
14pub enum EC_GROUP {}
15pub enum EC_POINT {}
16
17extern "C" {
18 #[cfg(not(osslconf = "OPENSSL_NO_EC2M"))]
19 pub fn EC_GF2m_simple_method() -> *const EC_METHOD;
20
21 #[cfg(not(libressl410))]
22 pub fn EC_GROUP_new(meth: *const EC_METHOD) -> *mut EC_GROUP;
23
24 pub fn EC_GROUP_free(group: *mut EC_GROUP);
25
26 pub fn EC_GROUP_get_order(
27 group: *const EC_GROUP,
28 order: *mut BIGNUM,
29 ctx: *mut BN_CTX,
30 ) -> c_int;
31
32 pub fn EC_GROUP_get_cofactor(
33 group: *const EC_GROUP,
34 cofactor: *mut BIGNUM,
35 ctx: *mut BN_CTX,
36 ) -> c_int;
37
38 pub fn EC_GROUP_get0_generator(group: *const EC_GROUP) -> *const EC_POINT;
39
40 pub fn EC_GROUP_set_generator(
41 group: *mut EC_GROUP,
42 generator: *const EC_POINT,
43 order: *const BIGNUM,
44 cofactor: *const BIGNUM,
45 ) -> c_int;
46
47 pub fn EC_GROUP_get_curve_name(group: *const EC_GROUP) -> c_int;
48
49 pub fn EC_GROUP_set_asn1_flag(key: *mut EC_GROUP, flag: c_int);
50
51 pub fn EC_GROUP_get_asn1_flag(group: *const EC_GROUP) -> c_int;
52
53 pub fn EC_GROUP_get_curve_GFp(
54 group: *const EC_GROUP,
55 p: *mut BIGNUM,
56 a: *mut BIGNUM,
57 b: *mut BIGNUM,
58 ctx: *mut BN_CTX,
59 ) -> c_int;
60
61 #[cfg(not(osslconf = "OPENSSL_NO_EC2M"))]
62 pub fn EC_GROUP_get_curve_GF2m(
63 group: *const EC_GROUP,
64 p: *mut BIGNUM,
65 a: *mut BIGNUM,
66 b: *mut BIGNUM,
67 ctx: *mut BN_CTX,
68 ) -> c_int;
69
70 pub fn EC_GROUP_get_degree(group: *const EC_GROUP) -> c_int;
71
72 #[cfg(ossl110)]
73 pub fn EC_GROUP_order_bits(group: *const EC_GROUP) -> c_int;
74
75 pub fn EC_GROUP_new_curve_GFp(
76 p: *const BIGNUM,
77 a: *const BIGNUM,
78 b: *const BIGNUM,
79 ctx: *mut BN_CTX,
80 ) -> *mut EC_GROUP;
81
82 #[cfg(not(osslconf = "OPENSSL_NO_EC2M"))]
83 pub fn EC_GROUP_new_curve_GF2m(
84 p: *const BIGNUM,
85 a: *const BIGNUM,
86 b: *const BIGNUM,
87 ctx: *mut BN_CTX,
88 ) -> *mut EC_GROUP;
89
90 pub fn EC_GROUP_new_by_curve_name(nid: c_int) -> *mut EC_GROUP;
91
92 pub fn EC_POINT_is_at_infinity(group: *const EC_GROUP, point: *const EC_POINT) -> c_int;
93
94 pub fn EC_POINT_is_on_curve(
95 group: *const EC_GROUP,
96 point: *const EC_POINT,
97 ctx: *mut BN_CTX,
98 ) -> c_int;
99
100 pub fn EC_POINT_new(group: *const EC_GROUP) -> *mut EC_POINT;
101
102 pub fn EC_POINT_free(point: *mut EC_POINT);
103
104 pub fn EC_POINT_dup(p: *const EC_POINT, group: *const EC_GROUP) -> *mut EC_POINT;
105
106 #[cfg(any(ossl111, boringssl, libressl350))]
107 pub fn EC_POINT_get_affine_coordinates(
108 group: *const EC_GROUP,
109 p: *const EC_POINT,
110 x: *mut BIGNUM,
111 y: *mut BIGNUM,
112 ctx: *mut BN_CTX,
113 ) -> c_int;
114
115 pub fn EC_POINT_get_affine_coordinates_GFp(
116 group: *const EC_GROUP,
117 p: *const EC_POINT,
118 x: *mut BIGNUM,
119 y: *mut BIGNUM,
120 ctx: *mut BN_CTX,
121 ) -> c_int;
122
123 pub fn EC_POINT_set_affine_coordinates_GFp(
124 group: *const EC_GROUP,
125 p: *mut EC_POINT,
126 x: *const BIGNUM,
127 y: *const BIGNUM,
128 ctx: *mut BN_CTX,
129 ) -> c_int;
130
131 #[cfg(not(osslconf = "OPENSSL_NO_EC2M"))]
132 pub fn EC_POINT_get_affine_coordinates_GF2m(
133 group: *const EC_GROUP,
134 p: *const EC_POINT,
135 x: *mut BIGNUM,
136 y: *mut BIGNUM,
137 ctx: *mut BN_CTX,
138 ) -> c_int;
139
140 pub fn EC_POINT_point2oct(
141 group: *const EC_GROUP,
142 p: *const EC_POINT,
143 form: point_conversion_form_t,
144 buf: *mut c_uchar,
145 len: size_t,
146 ctx: *mut BN_CTX,
147 ) -> size_t;
148
149 pub fn EC_POINT_oct2point(
150 group: *const EC_GROUP,
151 p: *mut EC_POINT,
152 buf: *const c_uchar,
153 len: size_t,
154 ctx: *mut BN_CTX,
155 ) -> c_int;
156
157 pub fn EC_POINT_point2hex(
158 group: *const EC_GROUP,
159 p: *const EC_POINT,
160 form: point_conversion_form_t,
161 ctx: *mut BN_CTX,
162 ) -> *mut c_char;
163
164 pub fn EC_POINT_hex2point(
165 group: *const EC_GROUP,
166 s: *const c_char,
167 p: *mut EC_POINT,
168 ctx: *mut BN_CTX,
169 ) -> *mut EC_POINT;
170
171 pub fn EC_POINT_add(
172 group: *const EC_GROUP,
173 r: *mut EC_POINT,
174 a: *const EC_POINT,
175 b: *const EC_POINT,
176 ctx: *mut BN_CTX,
177 ) -> c_int;
178
179 pub fn EC_POINT_invert(group: *const EC_GROUP, r: *mut EC_POINT, ctx: *mut BN_CTX) -> c_int;
180
181 pub fn EC_POINT_cmp(
182 group: *const EC_GROUP,
183 a: *const EC_POINT,
184 b: *const EC_POINT,
185 ctx: *mut BN_CTX,
186 ) -> c_int;
187
188 pub fn EC_POINT_mul(
189 group: *const EC_GROUP,
190 r: *mut EC_POINT,
191 n: *const BIGNUM,
192 q: *const EC_POINT,
193 m: *const BIGNUM,
194 ctx: *mut BN_CTX,
195 ) -> c_int;
196
197 pub fn EC_KEY_new() -> *mut EC_KEY;
198
199 pub fn EC_KEY_new_by_curve_name(nid: c_int) -> *mut EC_KEY;
200
201 pub fn EC_KEY_free(key: *mut EC_KEY);
202
203 pub fn EC_KEY_dup(key: *const EC_KEY) -> *mut EC_KEY;
204
205 pub fn EC_KEY_up_ref(key: *mut EC_KEY) -> c_int;
206
207 pub fn EC_KEY_get0_group(key: *const EC_KEY) -> *const EC_GROUP;
208
209 pub fn EC_KEY_set_group(key: *mut EC_KEY, group: *const EC_GROUP) -> c_int;
210
211 pub fn EC_KEY_get0_private_key(key: *const EC_KEY) -> *const BIGNUM;
212
213 pub fn EC_KEY_set_private_key(key: *mut EC_KEY, key: *const BIGNUM) -> c_int;
214
215 pub fn EC_KEY_get0_public_key(key: *const EC_KEY) -> *const EC_POINT;
216
217 pub fn EC_KEY_set_public_key(key: *mut EC_KEY, key: *const EC_POINT) -> c_int;
218
219 pub fn EC_KEY_generate_key(key: *mut EC_KEY) -> c_int;
220
221 pub fn EC_KEY_check_key(key: *const EC_KEY) -> c_int;
222
223 pub fn EC_KEY_set_public_key_affine_coordinates(
224 key: *mut EC_KEY,
225 x: *mut BIGNUM,
226 y: *mut BIGNUM,
227 ) -> c_int;
228}
229
230cfg_if! {
231 if #[cfg(any(ossl110, libressl280))] {
232 pub enum ECDSA_SIG {}
233 } else {
234 #[repr(C)]
235 pub struct ECDSA_SIG {
236 pub r: *mut BIGNUM,
237 pub s: *mut BIGNUM,
238 }
239 }
240}
241
242extern "C" {
243 pub fn ECDSA_SIG_new() -> *mut ECDSA_SIG;
244
245 pub fn ECDSA_SIG_free(sig: *mut ECDSA_SIG);
246
247 #[cfg(any(ossl110, libressl273))]
248 pub fn ECDSA_SIG_get0(sig: *const ECDSA_SIG, pr: *mut *const BIGNUM, ps: *mut *const BIGNUM);
249
250 #[cfg(any(ossl110, libressl273))]
251 pub fn ECDSA_SIG_set0(sig: *mut ECDSA_SIG, pr: *mut BIGNUM, ps: *mut BIGNUM) -> c_int;
252
253 pub fn ECDSA_do_sign(
254 dgst: *const c_uchar,
255 dgst_len: c_int,
256 eckey: *mut EC_KEY,
257 ) -> *mut ECDSA_SIG;
258
259 pub fn ECDSA_do_verify(
260 dgst: *const c_uchar,
261 dgst_len: c_int,
262 sig: *const ECDSA_SIG,
263 eckey: *mut EC_KEY,
264 ) -> c_int;
265
266 pub fn d2i_ECDSA_SIG(
267 sig: *mut *mut ECDSA_SIG,
268 inp: *mut *const c_uchar,
269 length: c_long,
270 ) -> *mut ECDSA_SIG;
271
272 pub fn i2d_ECDSA_SIG(sig: *const ECDSA_SIG, out: *mut *mut c_uchar) -> c_int;
273}