1 // Copyright (c) 2023 Huawei Device Co., Ltd.
2 // Licensed under the Apache License, Version 2.0 (the "License");
3 // you may not use this file except in compliance with the License.
4 // You may obtain a copy of the License at
5 //
6 //     http://www.apache.org/licenses/LICENSE-2.0
7 //
8 // Unless required by applicable law or agreed to in writing, software
9 // distributed under the License is distributed on an "AS IS" BASIS,
10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 // See the License for the specific language governing permissions and
12 // limitations under the License.
13 
14 use libc::{c_char, c_int, c_long, c_uchar, c_uint, size_t};
15 
16 pub(crate) enum EVP_PKEY {}
17 
18 extern "C" {
EVP_PKEY_free(ctx: *mut EVP_PKEY)19     pub(crate) fn EVP_PKEY_free(ctx: *mut EVP_PKEY);
20 }
21 
22 pub(crate) enum EVP_MD_CTX {}
23 
24 pub(crate) enum EVP_MD {}
25 
26 extern "C" {
EVP_MD_CTX_new() -> *mut EVP_MD_CTX27     pub(crate) fn EVP_MD_CTX_new() -> *mut EVP_MD_CTX;
28 
EVP_sha256() -> *mut EVP_MD29     pub(crate) fn EVP_sha256() -> *mut EVP_MD;
30 
EVP_DigestInit(ctx: *mut EVP_MD_CTX, md: *mut EVP_MD) -> c_int31     pub(crate) fn EVP_DigestInit(ctx: *mut EVP_MD_CTX, md: *mut EVP_MD) -> c_int;
32 
EVP_MD_CTX_free(ctx: *mut EVP_MD_CTX)33     pub(crate) fn EVP_MD_CTX_free(ctx: *mut EVP_MD_CTX);
34 
EVP_DigestUpdate(ctx: *mut EVP_MD_CTX, buf: *const c_uchar, cnt: c_int) -> c_int35     pub(crate) fn EVP_DigestUpdate(ctx: *mut EVP_MD_CTX, buf: *const c_uchar, cnt: c_int) -> c_int;
36 
EVP_DigestFinal_ex( ctx: *mut EVP_MD_CTX, buf: *const c_uchar, start: *const c_uint, )37     pub(crate) fn EVP_DigestFinal_ex(
38         ctx: *mut EVP_MD_CTX,
39         buf: *const c_uchar,
40         start: *const c_uint,
41     );
42 }
43 
44 pub(crate) enum C_X509 {}
45 
46 // for `C_X509`
47 extern "C" {
X509_free(a: *mut C_X509)48     pub(crate) fn X509_free(a: *mut C_X509);
49 
50     /// Returns a human readable error string for verification error n.
X509_verify_cert_error_string(n: c_long) -> *const c_char51     pub(crate) fn X509_verify_cert_error_string(n: c_long) -> *const c_char;
52 
53     /// Attempts to decode len bytes at *ppin.
54     /// If successful a pointer to the TYPE structure is returned and *ppin is
55     /// incremented to the byte following the parsed data.
d2i_X509( a: *mut *mut C_X509, pp: *mut *const c_uchar, length: c_long, ) -> *mut C_X50956     pub(crate) fn d2i_X509(
57         a: *mut *mut C_X509,
58         pp: *mut *const c_uchar,
59         length: c_long,
60     ) -> *mut C_X509;
61 
X509_get_version(a: *const C_X509) -> c_long62     pub(crate) fn X509_get_version(a: *const C_X509) -> c_long;
63 
X509_get_subject_name(a: *const C_X509) -> *mut X509_NAME64     pub(crate) fn X509_get_subject_name(a: *const C_X509) -> *mut X509_NAME;
65 
X509_get_issuer_name(a: *const C_X509) -> *mut X509_NAME66     pub(crate) fn X509_get_issuer_name(a: *const C_X509) -> *mut X509_NAME;
67 
X509_NAME_oneline( a: *mut X509_NAME, buf: *mut c_char, size: c_int, ) -> *mut c_char68     pub(crate) fn X509_NAME_oneline(
69         a: *mut X509_NAME,
70         buf: *mut c_char,
71         size: c_int,
72     ) -> *mut c_char;
73 
X509_get_pubkey(a: *mut C_X509) -> *mut EVP_PKEY74     pub(crate) fn X509_get_pubkey(a: *mut C_X509) -> *mut EVP_PKEY;
75 
X509_verify(a: *mut C_X509, pkey: *mut EVP_PKEY) -> c_int76     pub(crate) fn X509_verify(a: *mut C_X509, pkey: *mut EVP_PKEY) -> c_int;
77 
X509_up_ref(x: *mut C_X509) -> c_int78     pub(crate) fn X509_up_ref(x: *mut C_X509) -> c_int;
79 }
80 pub(crate) enum X509_NAME {}
81 
82 extern "C" {
X509_NAME_free(name: *mut X509_NAME)83     pub(crate) fn X509_NAME_free(name: *mut X509_NAME);
84 }
85 pub(crate) enum X509_STORE {}
86 
87 // for `X509_STORE`
88 extern "C" {
89     /// Returns a new `X509_STORE`.
X509_STORE_new() -> *mut X509_STORE90     pub(crate) fn X509_STORE_new() -> *mut X509_STORE;
91 
92     /// Frees up a single `X509_STORE` object.
X509_STORE_free(store: *mut X509_STORE)93     pub(crate) fn X509_STORE_free(store: *mut X509_STORE);
94 
95     /// Adds the respective object to the X509_STORE's local storage.
X509_STORE_add_cert(store: *mut X509_STORE, x: *mut C_X509) -> c_int96     pub(crate) fn X509_STORE_add_cert(store: *mut X509_STORE, x: *mut C_X509) -> c_int;
97 
98     /// Adds the respective object of file paths to the X509_STORE's local
99     /// storage.
100     #[cfg(feature = "c_openssl_3_0")]
X509_STORE_load_path(store: *mut X509_STORE, x: *const c_char) -> c_int101     pub(crate) fn X509_STORE_load_path(store: *mut X509_STORE, x: *const c_char) -> c_int;
102 }
103 
104 pub(crate) enum X509_STORE_CTX {}
105 
106 extern "C" {
X509_STORE_CTX_free(ctx: *mut X509_STORE_CTX)107     pub(crate) fn X509_STORE_CTX_free(ctx: *mut X509_STORE_CTX);
108 
X509_STORE_CTX_get0_cert(ctx: *const X509_STORE_CTX) -> *mut C_X509109     pub(crate) fn X509_STORE_CTX_get0_cert(ctx: *const X509_STORE_CTX) -> *mut C_X509;
110 }
111 
112 pub(crate) enum X509_VERIFY_PARAM {}
113 
114 // for `X509_VERIFY_PARAM`
115 extern "C" {
X509_VERIFY_PARAM_free(param: *mut X509_VERIFY_PARAM)116     pub(crate) fn X509_VERIFY_PARAM_free(param: *mut X509_VERIFY_PARAM);
117 
X509_VERIFY_PARAM_set_hostflags(param: *mut X509_VERIFY_PARAM, flags: c_uint)118     pub(crate) fn X509_VERIFY_PARAM_set_hostflags(param: *mut X509_VERIFY_PARAM, flags: c_uint);
119 
120     /// If name is NUL-terminated, namelen may be zero, otherwise namelen must
121     /// be set to the length of name.
X509_VERIFY_PARAM_set1_host( param: *mut X509_VERIFY_PARAM, name: *const c_char, namelen: size_t, ) -> c_int122     pub(crate) fn X509_VERIFY_PARAM_set1_host(
123         param: *mut X509_VERIFY_PARAM,
124         name: *const c_char,
125         namelen: size_t,
126     ) -> c_int;
127 
128     /// The ip argument is in binary format, in network byte-order and iplen
129     /// must be set to 4 for IPv4 and 16 for IPv6.
X509_VERIFY_PARAM_set1_ip( param: *mut X509_VERIFY_PARAM, ip: *const c_uchar, iplen: size_t, ) -> c_int130     pub(crate) fn X509_VERIFY_PARAM_set1_ip(
131         param: *mut X509_VERIFY_PARAM,
132         ip: *const c_uchar,
133         iplen: size_t,
134     ) -> c_int;
135 }
136 
137 pub(crate) enum STACK_X509 {}
138 pub(crate) enum X509_PUBKEY {}
139 
140 extern "C" {
X509_get_X509_PUBKEY(x509: *mut C_X509) -> *mut X509_PUBKEY141     pub(crate) fn X509_get_X509_PUBKEY(x509: *mut C_X509) -> *mut X509_PUBKEY;
142 
X509_PUBKEY_free(x509: *mut X509_PUBKEY)143     pub(crate) fn X509_PUBKEY_free(x509: *mut X509_PUBKEY);
144 
i2d_X509_PUBKEY(pubkey: *const X509_PUBKEY, buf: *mut *const c_uchar) -> c_int145     pub(crate) fn i2d_X509_PUBKEY(pubkey: *const X509_PUBKEY, buf: *mut *const c_uchar) -> c_int;
146 }
147