1 use libc::*; 2 3 use *; 4 5 pub const X509_FILETYPE_PEM: c_int = 1; 6 pub const X509_FILETYPE_ASN1: c_int = 2; 7 pub const X509_FILETYPE_DEFAULT: c_int = 3; 8 9 #[repr(C)] 10 pub struct X509_VAL { 11 pub notBefore: *mut ASN1_TIME, 12 pub notAfter: *mut ASN1_TIME, 13 } 14 15 pub enum X509_NAME_ENTRY {} 16 17 stack!(stack_st_X509_NAME); 18 19 pub enum X509_EXTENSION {} 20 21 stack!(stack_st_X509_EXTENSION); 22 23 stack!(stack_st_X509_ATTRIBUTE); 24 25 cfg_if! { 26 if #[cfg(ossl110)] { 27 pub enum X509_REQ_INFO {} 28 } else { 29 #[repr(C)] 30 pub struct X509_REQ_INFO { 31 pub enc: ASN1_ENCODING, 32 pub version: *mut ::ASN1_INTEGER, 33 pub subject: *mut ::X509_NAME, 34 pubkey: *mut c_void, 35 pub attributes: *mut stack_st_X509_ATTRIBUTE, 36 } 37 } 38 } 39 40 cfg_if! { 41 if #[cfg(ossl110)] { 42 pub enum X509_REQ {} 43 } else { 44 #[repr(C)] 45 pub struct X509_REQ { 46 pub req_info: *mut X509_REQ_INFO, 47 sig_alg: *mut c_void, 48 signature: *mut c_void, 49 references: c_int, 50 } 51 } 52 } 53 54 cfg_if! { 55 if #[cfg(ossl110)] { 56 pub enum X509_CINF {} 57 } else { 58 #[repr(C)] 59 pub struct X509_CINF { 60 version: *mut c_void, 61 serialNumber: *mut c_void, 62 signature: *mut c_void, 63 issuer: *mut c_void, 64 pub validity: *mut X509_VAL, 65 subject: *mut c_void, 66 key: *mut c_void, 67 issuerUID: *mut c_void, 68 subjectUID: *mut c_void, 69 pub extensions: *mut stack_st_X509_EXTENSION, 70 enc: ASN1_ENCODING, 71 } 72 } 73 } 74 75 stack!(stack_st_X509); 76 77 extern "C" { X509_verify_cert_error_string(n: c_long) -> *const c_char78 pub fn X509_verify_cert_error_string(n: c_long) -> *const c_char; 79 X509_sign(x: *mut X509, pkey: *mut EVP_PKEY, md: *const EVP_MD) -> c_int80 pub fn X509_sign(x: *mut X509, pkey: *mut EVP_PKEY, md: *const EVP_MD) -> c_int; 81 X509_digest( x: *const X509, digest: *const EVP_MD, buf: *mut c_uchar, len: *mut c_uint, ) -> c_int82 pub fn X509_digest( 83 x: *const X509, 84 digest: *const EVP_MD, 85 buf: *mut c_uchar, 86 len: *mut c_uint, 87 ) -> c_int; 88 X509_REQ_sign(x: *mut X509_REQ, pkey: *mut EVP_PKEY, md: *const EVP_MD) -> c_int89 pub fn X509_REQ_sign(x: *mut X509_REQ, pkey: *mut EVP_PKEY, md: *const EVP_MD) -> c_int; 90 i2d_X509_bio(b: *mut BIO, x: *mut X509) -> c_int91 pub fn i2d_X509_bio(b: *mut BIO, x: *mut X509) -> c_int; i2d_X509_REQ_bio(b: *mut BIO, x: *mut X509_REQ) -> c_int92 pub fn i2d_X509_REQ_bio(b: *mut BIO, x: *mut X509_REQ) -> c_int; i2d_PrivateKey_bio(b: *mut BIO, x: *mut EVP_PKEY) -> c_int93 pub fn i2d_PrivateKey_bio(b: *mut BIO, x: *mut EVP_PKEY) -> c_int; i2d_PUBKEY_bio(b: *mut BIO, x: *mut EVP_PKEY) -> c_int94 pub fn i2d_PUBKEY_bio(b: *mut BIO, x: *mut EVP_PKEY) -> c_int; 95 i2d_PUBKEY(k: *mut EVP_PKEY, buf: *mut *mut u8) -> c_int96 pub fn i2d_PUBKEY(k: *mut EVP_PKEY, buf: *mut *mut u8) -> c_int; d2i_PUBKEY(k: *mut *mut EVP_PKEY, buf: *mut *const u8, len: c_long) -> *mut EVP_PKEY97 pub fn d2i_PUBKEY(k: *mut *mut EVP_PKEY, buf: *mut *const u8, len: c_long) -> *mut EVP_PKEY; d2i_RSA_PUBKEY(k: *mut *mut RSA, buf: *mut *const u8, len: c_long) -> *mut RSA98 pub fn d2i_RSA_PUBKEY(k: *mut *mut RSA, buf: *mut *const u8, len: c_long) -> *mut RSA; i2d_RSA_PUBKEY(k: *mut RSA, buf: *mut *mut u8) -> c_int99 pub fn i2d_RSA_PUBKEY(k: *mut RSA, buf: *mut *mut u8) -> c_int; d2i_DSA_PUBKEY(k: *mut *mut DSA, pp: *mut *const c_uchar, length: c_long) -> *mut DSA100 pub fn d2i_DSA_PUBKEY(k: *mut *mut DSA, pp: *mut *const c_uchar, length: c_long) -> *mut DSA; i2d_DSA_PUBKEY(a: *mut DSA, pp: *mut *mut c_uchar) -> c_int101 pub fn i2d_DSA_PUBKEY(a: *mut DSA, pp: *mut *mut c_uchar) -> c_int; i2d_PrivateKey(k: *mut EVP_PKEY, buf: *mut *mut u8) -> c_int102 pub fn i2d_PrivateKey(k: *mut EVP_PKEY, buf: *mut *mut u8) -> c_int; 103 d2i_ECPrivateKey( k: *mut *mut EC_KEY, pp: *mut *const c_uchar, length: c_long, ) -> *mut EC_KEY104 pub fn d2i_ECPrivateKey( 105 k: *mut *mut EC_KEY, 106 pp: *mut *const c_uchar, 107 length: c_long, 108 ) -> *mut EC_KEY; i2d_ECPrivateKey(ec_key: *mut EC_KEY, pp: *mut *mut c_uchar) -> c_int109 pub fn i2d_ECPrivateKey(ec_key: *mut EC_KEY, pp: *mut *mut c_uchar) -> c_int; 110 } 111 112 cfg_if! { 113 if #[cfg(ossl110)] { 114 extern "C" { 115 pub fn X509_ALGOR_get0( 116 paobj: *mut *const ASN1_OBJECT, 117 pptype: *mut c_int, 118 ppval: *mut *const c_void, 119 alg: *const X509_ALGOR, 120 ); 121 } 122 } else if #[cfg(ossl102)] { 123 extern "C" { 124 pub fn X509_ALGOR_get0( 125 paobj: *mut *mut ASN1_OBJECT, 126 pptype: *mut c_int, 127 ppval: *mut *mut c_void, 128 alg: *mut X509_ALGOR, 129 ); 130 } 131 } 132 } 133 134 extern "C" { X509_gmtime_adj(time: *mut ASN1_TIME, adj: c_long) -> *mut ASN1_TIME135 pub fn X509_gmtime_adj(time: *mut ASN1_TIME, adj: c_long) -> *mut ASN1_TIME; 136 X509_to_X509_REQ(x: *mut X509, pkey: *mut EVP_PKEY, md: *const EVP_MD) -> *mut X509_REQ137 pub fn X509_to_X509_REQ(x: *mut X509, pkey: *mut EVP_PKEY, md: *const EVP_MD) -> *mut X509_REQ; 138 X509_ALGOR_free(x: *mut X509_ALGOR)139 pub fn X509_ALGOR_free(x: *mut X509_ALGOR); 140 X509_REQ_new() -> *mut X509_REQ141 pub fn X509_REQ_new() -> *mut X509_REQ; X509_REQ_free(x: *mut X509_REQ)142 pub fn X509_REQ_free(x: *mut X509_REQ); d2i_X509_REQ( a: *mut *mut X509_REQ, pp: *mut *const c_uchar, length: c_long, ) -> *mut X509_REQ143 pub fn d2i_X509_REQ( 144 a: *mut *mut X509_REQ, 145 pp: *mut *const c_uchar, 146 length: c_long, 147 ) -> *mut X509_REQ; i2d_X509_REQ(x: *mut X509_REQ, buf: *mut *mut u8) -> c_int148 pub fn i2d_X509_REQ(x: *mut X509_REQ, buf: *mut *mut u8) -> c_int; 149 } 150 151 cfg_if! { 152 if #[cfg(any(ossl110, libressl273))] { 153 extern "C" { 154 pub fn X509_get0_signature( 155 psig: *mut *const ASN1_BIT_STRING, 156 palg: *mut *const X509_ALGOR, 157 x: *const X509, 158 ); 159 } 160 } else if #[cfg(ossl102)] { 161 extern "C" { 162 pub fn X509_get0_signature( 163 psig: *mut *mut ASN1_BIT_STRING, 164 palg: *mut *mut X509_ALGOR, 165 x: *const X509, 166 ); 167 } 168 } 169 } 170 extern "C" { 171 #[cfg(ossl102)] X509_get_signature_nid(x: *const X509) -> c_int172 pub fn X509_get_signature_nid(x: *const X509) -> c_int; 173 X509_EXTENSION_free(ext: *mut X509_EXTENSION)174 pub fn X509_EXTENSION_free(ext: *mut X509_EXTENSION); 175 X509_NAME_ENTRY_free(x: *mut X509_NAME_ENTRY)176 pub fn X509_NAME_ENTRY_free(x: *mut X509_NAME_ENTRY); 177 X509_NAME_new() -> *mut X509_NAME178 pub fn X509_NAME_new() -> *mut X509_NAME; X509_NAME_free(x: *mut X509_NAME)179 pub fn X509_NAME_free(x: *mut X509_NAME); 180 X509_new() -> *mut X509181 pub fn X509_new() -> *mut X509; X509_free(x: *mut X509)182 pub fn X509_free(x: *mut X509); i2d_X509(x: *mut X509, buf: *mut *mut u8) -> c_int183 pub fn i2d_X509(x: *mut X509, buf: *mut *mut u8) -> c_int; d2i_X509(a: *mut *mut X509, pp: *mut *const c_uchar, length: c_long) -> *mut X509184 pub fn d2i_X509(a: *mut *mut X509, pp: *mut *const c_uchar, length: c_long) -> *mut X509; 185 X509_get_pubkey(x: *mut X509) -> *mut EVP_PKEY186 pub fn X509_get_pubkey(x: *mut X509) -> *mut EVP_PKEY; 187 X509_set_version(x: *mut X509, version: c_long) -> c_int188 pub fn X509_set_version(x: *mut X509, version: c_long) -> c_int; X509_set_serialNumber(x: *mut X509, sn: *mut ASN1_INTEGER) -> c_int189 pub fn X509_set_serialNumber(x: *mut X509, sn: *mut ASN1_INTEGER) -> c_int; X509_get_serialNumber(x: *mut X509) -> *mut ASN1_INTEGER190 pub fn X509_get_serialNumber(x: *mut X509) -> *mut ASN1_INTEGER; X509_set_issuer_name(x: *mut X509, name: *mut X509_NAME) -> c_int191 pub fn X509_set_issuer_name(x: *mut X509, name: *mut X509_NAME) -> c_int; 192 } 193 cfg_if! { 194 if #[cfg(any(ossl110, libressl280))] { 195 extern "C" { 196 pub fn X509_get_issuer_name(x: *const ::X509) -> *mut ::X509_NAME; 197 } 198 } else { 199 extern "C" { 200 pub fn X509_get_issuer_name(x: *mut ::X509) -> *mut ::X509_NAME; 201 } 202 } 203 } 204 extern "C" { X509_set_subject_name(x: *mut X509, name: *mut X509_NAME) -> c_int205 pub fn X509_set_subject_name(x: *mut X509, name: *mut X509_NAME) -> c_int; 206 } 207 cfg_if! { 208 if #[cfg(any(ossl110, libressl280))] { 209 extern "C" { 210 pub fn X509_get_subject_name(x: *const ::X509) -> *mut ::X509_NAME; 211 } 212 } else { 213 extern "C" { 214 pub fn X509_get_subject_name(x: *mut ::X509) -> *mut ::X509_NAME; 215 } 216 } 217 } 218 cfg_if! { 219 if #[cfg(ossl110)] { 220 extern "C" { 221 pub fn X509_set1_notBefore(x: *mut ::X509, tm: *const ::ASN1_TIME) -> c_int; 222 pub fn X509_set1_notAfter(x: *mut ::X509, tm: *const ::ASN1_TIME) -> c_int; 223 } 224 } else { 225 extern "C" { 226 pub fn X509_set_notBefore(x: *mut ::X509, tm: *const ::ASN1_TIME) -> c_int; 227 pub fn X509_set_notAfter(x: *mut ::X509, tm: *const ::ASN1_TIME) -> c_int; 228 } 229 } 230 } 231 extern "C" { 232 #[cfg(ossl110)] X509_REQ_get_version(req: *const X509_REQ) -> c_long233 pub fn X509_REQ_get_version(req: *const X509_REQ) -> c_long; X509_REQ_set_version(req: *mut X509_REQ, version: c_long) -> c_int234 pub fn X509_REQ_set_version(req: *mut X509_REQ, version: c_long) -> c_int; 235 #[cfg(ossl110)] X509_REQ_get_subject_name(req: *const X509_REQ) -> *mut X509_NAME236 pub fn X509_REQ_get_subject_name(req: *const X509_REQ) -> *mut X509_NAME; X509_REQ_set_subject_name(req: *mut X509_REQ, name: *mut X509_NAME) -> c_int237 pub fn X509_REQ_set_subject_name(req: *mut X509_REQ, name: *mut X509_NAME) -> c_int; X509_REQ_set_pubkey(req: *mut X509_REQ, pkey: *mut EVP_PKEY) -> c_int238 pub fn X509_REQ_set_pubkey(req: *mut X509_REQ, pkey: *mut EVP_PKEY) -> c_int; X509_REQ_get_pubkey(req: *mut X509_REQ) -> *mut EVP_PKEY239 pub fn X509_REQ_get_pubkey(req: *mut X509_REQ) -> *mut EVP_PKEY; X509_REQ_get_extensions(req: *mut X509_REQ) -> *mut stack_st_X509_EXTENSION240 pub fn X509_REQ_get_extensions(req: *mut X509_REQ) -> *mut stack_st_X509_EXTENSION; X509_REQ_add_extensions(req: *mut X509_REQ, exts: *mut stack_st_X509_EXTENSION) -> c_int241 pub fn X509_REQ_add_extensions(req: *mut X509_REQ, exts: *mut stack_st_X509_EXTENSION) 242 -> c_int; X509_set_pubkey(x: *mut X509, pkey: *mut EVP_PKEY) -> c_int243 pub fn X509_set_pubkey(x: *mut X509, pkey: *mut EVP_PKEY) -> c_int; X509_REQ_verify(req: *mut X509_REQ, pkey: *mut EVP_PKEY) -> c_int244 pub fn X509_REQ_verify(req: *mut X509_REQ, pkey: *mut EVP_PKEY) -> c_int; 245 #[cfg(any(ossl110, libressl273))] X509_getm_notBefore(x: *const X509) -> *mut ASN1_TIME246 pub fn X509_getm_notBefore(x: *const X509) -> *mut ASN1_TIME; 247 #[cfg(any(ossl110, libressl273))] X509_getm_notAfter(x: *const X509) -> *mut ASN1_TIME248 pub fn X509_getm_notAfter(x: *const X509) -> *mut ASN1_TIME; 249 #[cfg(any(ossl110, libressl273))] X509_up_ref(x: *mut X509) -> c_int250 pub fn X509_up_ref(x: *mut X509) -> c_int; 251 252 #[cfg(ossl110)] X509_get0_extensions(req: *const ::X509) -> *const stack_st_X509_EXTENSION253 pub fn X509_get0_extensions(req: *const ::X509) -> *const stack_st_X509_EXTENSION; 254 } 255 256 cfg_if! { 257 if #[cfg(any(ossl110, libressl280))] { 258 extern "C" { 259 pub fn X509_NAME_entry_count(n: *const X509_NAME) -> c_int; 260 } 261 } else { 262 extern "C" { 263 pub fn X509_NAME_entry_count(n: *mut X509_NAME) -> c_int; 264 } 265 } 266 } 267 268 cfg_if! { 269 if #[cfg(libressl280)] { 270 extern "C" { 271 pub fn X509_NAME_get_index_by_NID(n: *const X509_NAME, nid: c_int, last_pos: c_int) -> c_int; 272 } 273 } else { 274 extern "C" { 275 pub fn X509_NAME_get_index_by_NID(n: *mut X509_NAME, nid: c_int, last_pos: c_int) -> c_int; 276 } 277 } 278 } 279 cfg_if! { 280 if #[cfg(any(ossl110, libressl280))] { 281 extern "C" { 282 pub fn X509_NAME_get_entry(n: *const X509_NAME, loc: c_int) -> *mut X509_NAME_ENTRY; 283 pub fn X509_NAME_add_entry_by_NID( 284 x: *mut X509_NAME, 285 field: c_int, 286 ty: c_int, 287 bytes: *const c_uchar, 288 len: c_int, 289 loc: c_int, 290 set: c_int, 291 ) -> c_int; 292 pub fn X509_NAME_ENTRY_get_object(ne: *const X509_NAME_ENTRY) -> *mut ASN1_OBJECT; 293 pub fn X509_NAME_ENTRY_get_data(ne: *const X509_NAME_ENTRY) -> *mut ASN1_STRING; 294 } 295 } else { 296 extern "C" { 297 pub fn X509_NAME_get_entry(n: *mut X509_NAME, loc: c_int) -> *mut X509_NAME_ENTRY; 298 pub fn X509_NAME_add_entry_by_NID( 299 x: *mut X509_NAME, 300 field: c_int, 301 ty: c_int, 302 bytes: *mut c_uchar, 303 len: c_int, 304 loc: c_int, 305 set: c_int, 306 ) -> c_int; 307 pub fn X509_NAME_ENTRY_get_object(ne: *mut X509_NAME_ENTRY) -> *mut ASN1_OBJECT; 308 pub fn X509_NAME_ENTRY_get_data(ne: *mut X509_NAME_ENTRY) -> *mut ASN1_STRING; 309 } 310 } 311 } 312 extern "C" { X509_NAME_add_entry_by_txt( x: *mut X509_NAME, field: *const c_char, ty: c_int, bytes: *const c_uchar, len: c_int, loc: c_int, set: c_int, ) -> c_int313 pub fn X509_NAME_add_entry_by_txt( 314 x: *mut X509_NAME, 315 field: *const c_char, 316 ty: c_int, 317 bytes: *const c_uchar, 318 len: c_int, 319 loc: c_int, 320 set: c_int, 321 ) -> c_int; 322 X509_add_ext(x: *mut X509, ext: *mut X509_EXTENSION, loc: c_int) -> c_int323 pub fn X509_add_ext(x: *mut X509, ext: *mut X509_EXTENSION, loc: c_int) -> c_int; 324 } 325 cfg_if! { 326 if #[cfg(any(ossl110, libressl280))] { 327 extern "C" { 328 pub fn X509_get_ext_d2i( 329 x: *const ::X509, 330 nid: c_int, 331 crit: *mut c_int, 332 idx: *mut c_int, 333 ) -> *mut c_void; 334 } 335 } else { 336 extern "C" { 337 pub fn X509_get_ext_d2i( 338 x: *mut ::X509, 339 nid: c_int, 340 crit: *mut c_int, 341 idx: *mut c_int, 342 ) -> *mut c_void; 343 } 344 } 345 } 346 347 extern "C" { X509_verify_cert(ctx: *mut X509_STORE_CTX) -> c_int348 pub fn X509_verify_cert(ctx: *mut X509_STORE_CTX) -> c_int; 349 } 350