1 module bindbc.gnutls.x509_ext;
2 
3 import bindbc.gnutls.config;
4 import bindbc.gnutls.gnutls;
5 import bindbc.gnutls.x509;
6 import core.sys.posix.sys.select;
7 
8 struct gnutls_subject_alt_names_st;
9 alias gnutls_subject_alt_names_t = gnutls_subject_alt_names_st*;
10 
11 struct gnutls_x509_crl_dist_points_st;
12 alias gnutls_x509_crl_dist_points_t = gnutls_x509_crl_dist_points_st*;
13 
14 struct gnutls_x509_aia_st;
15 alias gnutls_x509_aia_t = gnutls_x509_aia_st*;
16 
17 struct gnutls_x509_aki_st;
18 alias gnutls_x509_aki_t = gnutls_x509_aki_st*;
19 
20 struct gnutls_x509_key_purposes_st;
21 alias gnutls_x509_key_purposes_t = gnutls_x509_key_purposes_st*;
22 
23 struct gnutls_x509_policies_st;
24 alias gnutls_x509_policies_t = gnutls_x509_policies_st*;
25 
26 alias gnutls_x509_ext_import_issuer_alt_name = gnutls_x509_ext_import_subject_alt_names;
27 alias gnutls_x509_ext_export_issuer_alt_name = gnutls_x509_ext_export_subject_alt_names;
28 
29 version (BindGnuTLS_Static)
30 {
31     extern (System) @nogc nothrow @system:
32 
33     int gnutls_subject_alt_names_init (gnutls_subject_alt_names_t*);
34     void gnutls_subject_alt_names_deinit (gnutls_subject_alt_names_t sans);
35     int gnutls_subject_alt_names_get (gnutls_subject_alt_names_t sans, uint seq, uint* san_type, gnutls_datum_t* san, gnutls_datum_t* othername_oid);
36     int gnutls_subject_alt_names_set (gnutls_subject_alt_names_t sans, uint san_type, const(gnutls_datum_t)* san, const(char)* othername_oid);
37     int gnutls_x509_ext_import_subject_alt_names (const(gnutls_datum_t)* ext, gnutls_subject_alt_names_t, uint flags);
38     int gnutls_x509_ext_export_subject_alt_names (gnutls_subject_alt_names_t, gnutls_datum_t* ext);
39     int gnutls_x509_crl_dist_points_init (gnutls_x509_crl_dist_points_t*);
40     void gnutls_x509_crl_dist_points_deinit (gnutls_x509_crl_dist_points_t);
41     int gnutls_x509_crl_dist_points_get (gnutls_x509_crl_dist_points_t, uint seq, uint* type, gnutls_datum_t* dist, uint* reason_flags);
42     int gnutls_x509_crl_dist_points_set (gnutls_x509_crl_dist_points_t, gnutls_x509_subject_alt_name_t type, const(gnutls_datum_t)* dist, uint reason_flags);
43     int gnutls_x509_ext_import_crl_dist_points (const(gnutls_datum_t)* ext, gnutls_x509_crl_dist_points_t dp, uint flags);
44     int gnutls_x509_ext_export_crl_dist_points (gnutls_x509_crl_dist_points_t dp, gnutls_datum_t* ext);
45     int gnutls_x509_ext_import_name_constraints (const(gnutls_datum_t)* ext, gnutls_x509_name_constraints_t nc, uint flags);
46     int gnutls_x509_ext_export_name_constraints (gnutls_x509_name_constraints_t nc, gnutls_datum_t* ext);
47     int gnutls_x509_aia_init (gnutls_x509_aia_t*);
48     void gnutls_x509_aia_deinit (gnutls_x509_aia_t);
49     int gnutls_x509_aia_get (gnutls_x509_aia_t aia, uint seq, gnutls_datum_t* oid, uint* san_type, gnutls_datum_t* san);
50     int gnutls_x509_aia_set (gnutls_x509_aia_t aia, const(char)* oid, uint san_type, const(gnutls_datum_t)* san);
51     int gnutls_x509_ext_import_aia (const(gnutls_datum_t)* ext, gnutls_x509_aia_t, uint flags);
52     int gnutls_x509_ext_export_aia (gnutls_x509_aia_t aia, gnutls_datum_t* ext);
53     int gnutls_x509_ext_import_subject_key_id (const(gnutls_datum_t)* ext, gnutls_datum_t* id);
54     int gnutls_x509_ext_export_subject_key_id (const(gnutls_datum_t)* id, gnutls_datum_t* ext);
55     int gnutls_x509_ext_export_authority_key_id (gnutls_x509_aki_t, gnutls_datum_t* ext);
56     int gnutls_x509_ext_import_authority_key_id (const(gnutls_datum_t)* ext, gnutls_x509_aki_t, uint flags);
57     int gnutls_x509_othername_to_virtual (const(char)* oid, const(gnutls_datum_t)* othername, uint* virt_type, gnutls_datum_t* virt);
58     int gnutls_x509_aki_init (gnutls_x509_aki_t*);
59     int gnutls_x509_aki_get_id (gnutls_x509_aki_t, gnutls_datum_t* id);
60     int gnutls_x509_aki_get_cert_issuer (gnutls_x509_aki_t aki, uint seq, uint* san_type, gnutls_datum_t* san, gnutls_datum_t* othername_oid, gnutls_datum_t* serial);
61     int gnutls_x509_aki_set_id (gnutls_x509_aki_t aki, const(gnutls_datum_t)* id);
62     int gnutls_x509_aki_set_cert_issuer (gnutls_x509_aki_t aki, uint san_type, const(gnutls_datum_t)* san, const(char)* othername_oid, const(gnutls_datum_t)* serial);
63     void gnutls_x509_aki_deinit (gnutls_x509_aki_t);
64     int gnutls_x509_ext_import_private_key_usage_period (const(gnutls_datum_t)* ext, time_t* activation, time_t* expiration);
65     int gnutls_x509_ext_export_private_key_usage_period (time_t activation, time_t expiration, gnutls_datum_t* ext);
66     int gnutls_x509_ext_import_basic_constraints (const(gnutls_datum_t)* ext, uint* ca, int* pathlen);
67     int gnutls_x509_ext_export_basic_constraints (uint ca, int pathlen, gnutls_datum_t* ext);
68     int gnutls_x509_key_purpose_init (gnutls_x509_key_purposes_t* p);
69     void gnutls_x509_key_purpose_deinit (gnutls_x509_key_purposes_t p);
70     int gnutls_x509_key_purpose_set (gnutls_x509_key_purposes_t p, const(char)* oid);
71     int gnutls_x509_key_purpose_get (gnutls_x509_key_purposes_t p, uint idx, gnutls_datum_t* oid);
72     int gnutls_x509_ext_import_key_purposes (const(gnutls_datum_t)* ext, gnutls_x509_key_purposes_t, uint flags);
73     int gnutls_x509_ext_export_key_purposes (gnutls_x509_key_purposes_t, gnutls_datum_t* ext);
74     int gnutls_x509_ext_import_key_usage (const(gnutls_datum_t)* ext, uint* key_usage);
75     int gnutls_x509_ext_export_key_usage (uint key_usage, gnutls_datum_t* ext);
76 
77     static if (gnuTLSSupport >= GnuTLSSupport.gnutls_3_6_0)
78     {
79         int gnutls_x509_ext_import_inhibit_anypolicy (const(gnutls_datum_t)* ext, uint* skipcerts);
80         int gnutls_x509_ext_export_inhibit_anypolicy (uint skipcerts, gnutls_datum_t* ext);
81     }
82 
83     int gnutls_x509_ext_import_proxy (const(gnutls_datum_t)* ext, int* pathlen, char** policyLanguage, char** policy, size_t* sizeof_policy);
84     int gnutls_x509_ext_export_proxy (int pathLenConstraint, const(char)* policyLanguage, const(char)* policy, size_t sizeof_policy, gnutls_datum_t* ext);
85     int gnutls_x509_policies_init (gnutls_x509_policies_t*);
86     void gnutls_x509_policies_deinit (gnutls_x509_policies_t);
87     int gnutls_x509_policies_get (gnutls_x509_policies_t policies, uint seq, gnutls_x509_policy_st* policy);
88     int gnutls_x509_policies_set (gnutls_x509_policies_t policies, const(gnutls_x509_policy_st)* policy);
89     int gnutls_x509_ext_import_policies (const(gnutls_datum_t)* ext, gnutls_x509_policies_t policies, uint flags);
90     int gnutls_x509_ext_export_policies (gnutls_x509_policies_t policies, gnutls_datum_t* ext);
91 
92     static if (gnuTLSSupport >= GnuTLSSupport.gnutls_3_5_1)
93     {
94         int gnutls_x509_ext_import_tlsfeatures (const(gnutls_datum_t)* ext, gnutls_x509_tlsfeatures_t, uint flags);
95         int gnutls_x509_ext_export_tlsfeatures (gnutls_x509_tlsfeatures_t f, gnutls_datum_t* ext);
96         int gnutls_x509_tlsfeatures_add (gnutls_x509_tlsfeatures_t f, uint feature);
97     }
98 }
99 else
100 {
101     extern (System) @nogc nothrow @system
102     {
103         alias pgnutls_subject_alt_names_init = int function (gnutls_subject_alt_names_t*);
104         alias pgnutls_subject_alt_names_deinit = void function (gnutls_subject_alt_names_t sans);
105         alias pgnutls_subject_alt_names_get = int function (gnutls_subject_alt_names_t sans, uint seq, uint* san_type, gnutls_datum_t* san, gnutls_datum_t* othername_oid);
106         alias pgnutls_subject_alt_names_set = int function (gnutls_subject_alt_names_t sans, uint san_type, const(gnutls_datum_t)* san, const(char)* othername_oid);
107         alias pgnutls_x509_ext_import_subject_alt_names = int function (const(gnutls_datum_t)* ext, gnutls_subject_alt_names_t, uint flags);
108         alias pgnutls_x509_ext_export_subject_alt_names = int function (gnutls_subject_alt_names_t, gnutls_datum_t* ext);
109         alias pgnutls_x509_crl_dist_points_init = int function (gnutls_x509_crl_dist_points_t*);
110         alias pgnutls_x509_crl_dist_points_deinit = void function (gnutls_x509_crl_dist_points_t);
111         alias pgnutls_x509_crl_dist_points_get = int function (gnutls_x509_crl_dist_points_t, uint seq, uint* type, gnutls_datum_t* dist, uint* reason_flags);
112         alias pgnutls_x509_crl_dist_points_set = int function (gnutls_x509_crl_dist_points_t, gnutls_x509_subject_alt_name_t type, const(gnutls_datum_t)* dist, uint reason_flags);
113         alias pgnutls_x509_ext_import_crl_dist_points = int function (const(gnutls_datum_t)* ext, gnutls_x509_crl_dist_points_t dp, uint flags);
114         alias pgnutls_x509_ext_export_crl_dist_points = int function (gnutls_x509_crl_dist_points_t dp, gnutls_datum_t* ext);
115         alias pgnutls_x509_ext_import_name_constraints = int function (const(gnutls_datum_t)* ext, gnutls_x509_name_constraints_t nc, uint flags);
116         alias pgnutls_x509_ext_export_name_constraints = int function (gnutls_x509_name_constraints_t nc, gnutls_datum_t* ext);
117         alias pgnutls_x509_aia_init = int function (gnutls_x509_aia_t*);
118         alias pgnutls_x509_aia_deinit = void function (gnutls_x509_aia_t);
119         alias pgnutls_x509_aia_get = int function (gnutls_x509_aia_t aia, uint seq, gnutls_datum_t* oid, uint* san_type, gnutls_datum_t* san);
120         alias pgnutls_x509_aia_set = int function (gnutls_x509_aia_t aia, const(char)* oid, uint san_type, const(gnutls_datum_t)* san);
121         alias pgnutls_x509_ext_import_aia = int function (const(gnutls_datum_t)* ext, gnutls_x509_aia_t, uint flags);
122         alias pgnutls_x509_ext_export_aia = int function (gnutls_x509_aia_t aia, gnutls_datum_t* ext);
123         alias pgnutls_x509_ext_import_subject_key_id = int function (const(gnutls_datum_t)* ext, gnutls_datum_t* id);
124         alias pgnutls_x509_ext_export_subject_key_id = int function (const(gnutls_datum_t)* id, gnutls_datum_t* ext);
125         alias pgnutls_x509_ext_export_authority_key_id = int function (gnutls_x509_aki_t, gnutls_datum_t* ext);
126         alias pgnutls_x509_ext_import_authority_key_id = int function (const(gnutls_datum_t)* ext, gnutls_x509_aki_t, uint flags);
127         alias pgnutls_x509_othername_to_virtual = int function (const(char)* oid, const(gnutls_datum_t)* othername, uint* virt_type, gnutls_datum_t* virt);
128         alias pgnutls_x509_aki_init = int function (gnutls_x509_aki_t*);
129         alias pgnutls_x509_aki_get_id = int function (gnutls_x509_aki_t, gnutls_datum_t* id);
130         alias pgnutls_x509_aki_get_cert_issuer = int function (gnutls_x509_aki_t aki, uint seq, uint* san_type, gnutls_datum_t* san, gnutls_datum_t* othername_oid, gnutls_datum_t* serial);
131         alias pgnutls_x509_aki_set_id = int function (gnutls_x509_aki_t aki, const(gnutls_datum_t)* id);
132         alias pgnutls_x509_aki_set_cert_issuer = int function (gnutls_x509_aki_t aki, uint san_type, const(gnutls_datum_t)* san, const(char)* othername_oid, const(gnutls_datum_t)* serial);
133         alias pgnutls_x509_aki_deinit = void function (gnutls_x509_aki_t);
134         alias pgnutls_x509_ext_import_private_key_usage_period = int function (const(gnutls_datum_t)* ext, time_t* activation, time_t* expiration);
135         alias pgnutls_x509_ext_export_private_key_usage_period = int function (time_t activation, time_t expiration, gnutls_datum_t* ext);
136         alias pgnutls_x509_ext_import_basic_constraints = int function (const(gnutls_datum_t)* ext, uint* ca, int* pathlen);
137         alias pgnutls_x509_ext_export_basic_constraints = int function (uint ca, int pathlen, gnutls_datum_t* ext);
138         alias pgnutls_x509_key_purpose_init = int function (gnutls_x509_key_purposes_t* p);
139         alias pgnutls_x509_key_purpose_deinit = void function (gnutls_x509_key_purposes_t p);
140         alias pgnutls_x509_key_purpose_set = int function (gnutls_x509_key_purposes_t p, const(char)* oid);
141         alias pgnutls_x509_key_purpose_get = int function (gnutls_x509_key_purposes_t p, uint idx, gnutls_datum_t* oid);
142         alias pgnutls_x509_ext_import_key_purposes = int function (const(gnutls_datum_t)* ext, gnutls_x509_key_purposes_t, uint flags);
143         alias pgnutls_x509_ext_export_key_purposes = int function (gnutls_x509_key_purposes_t, gnutls_datum_t* ext);
144         alias pgnutls_x509_ext_import_key_usage = int function (const(gnutls_datum_t)* ext, uint* key_usage);
145         alias pgnutls_x509_ext_export_key_usage = int function (uint key_usage, gnutls_datum_t* ext);
146 
147         static if (gnuTLSSupport >= GnuTLSSupport.gnutls_3_6_0)
148         {
149             alias pgnutls_x509_ext_import_inhibit_anypolicy = int function (const(gnutls_datum_t)* ext, uint* skipcerts);
150             alias pgnutls_x509_ext_export_inhibit_anypolicy = int function (uint skipcerts, gnutls_datum_t* ext);
151         }
152 
153         alias pgnutls_x509_ext_import_proxy = int function (const(gnutls_datum_t)* ext, int* pathlen, char** policyLanguage, char** policy, size_t* sizeof_policy);
154         alias pgnutls_x509_ext_export_proxy = int function (int pathLenConstraint, const(char)* policyLanguage, const(char)* policy, size_t sizeof_policy, gnutls_datum_t* ext);
155         alias pgnutls_x509_policies_init = int function (gnutls_x509_policies_t*);
156         alias pgnutls_x509_policies_deinit = void function (gnutls_x509_policies_t);
157         alias pgnutls_x509_policies_get = int function (gnutls_x509_policies_t policies, uint seq, gnutls_x509_policy_st* policy);
158         alias pgnutls_x509_policies_set = int function (gnutls_x509_policies_t policies, const(gnutls_x509_policy_st)* policy);
159         alias pgnutls_x509_ext_import_policies = int function (const(gnutls_datum_t)* ext, gnutls_x509_policies_t policies, uint flags);
160         alias pgnutls_x509_ext_export_policies = int function (gnutls_x509_policies_t policies, gnutls_datum_t* ext);
161 
162         static if (gnuTLSSupport >= GnuTLSSupport.gnutls_3_5_1)
163         {
164             alias pgnutls_x509_ext_import_tlsfeatures = int function (const(gnutls_datum_t)* ext, gnutls_x509_tlsfeatures_t, uint flags);
165             alias pgnutls_x509_ext_export_tlsfeatures = int function (gnutls_x509_tlsfeatures_t f, gnutls_datum_t* ext);
166             alias pgnutls_x509_tlsfeatures_add = int function (gnutls_x509_tlsfeatures_t f, uint feature);
167         }
168     }
169 
170     __gshared
171     {
172         pgnutls_subject_alt_names_init gnutls_subject_alt_names_init;
173         pgnutls_subject_alt_names_deinit gnutls_subject_alt_names_deinit;
174         pgnutls_subject_alt_names_get gnutls_subject_alt_names_get;
175         pgnutls_subject_alt_names_set gnutls_subject_alt_names_set;
176         pgnutls_x509_ext_import_subject_alt_names gnutls_x509_ext_import_subject_alt_names;
177         pgnutls_x509_ext_export_subject_alt_names gnutls_x509_ext_export_subject_alt_names;
178         pgnutls_x509_crl_dist_points_init gnutls_x509_crl_dist_points_init;
179         pgnutls_x509_crl_dist_points_deinit gnutls_x509_crl_dist_points_deinit;
180         pgnutls_x509_crl_dist_points_get gnutls_x509_crl_dist_points_get;
181         pgnutls_x509_crl_dist_points_set gnutls_x509_crl_dist_points_set;
182         pgnutls_x509_ext_import_crl_dist_points gnutls_x509_ext_import_crl_dist_points;
183         pgnutls_x509_ext_export_crl_dist_points gnutls_x509_ext_export_crl_dist_points;
184         pgnutls_x509_ext_import_name_constraints gnutls_x509_ext_import_name_constraints;
185         pgnutls_x509_ext_export_name_constraints gnutls_x509_ext_export_name_constraints;
186         pgnutls_x509_aia_init gnutls_x509_aia_init;
187         pgnutls_x509_aia_deinit gnutls_x509_aia_deinit;
188         pgnutls_x509_aia_get gnutls_x509_aia_get;
189         pgnutls_x509_aia_set gnutls_x509_aia_set;
190         pgnutls_x509_ext_import_aia gnutls_x509_ext_import_aia;
191         pgnutls_x509_ext_export_aia gnutls_x509_ext_export_aia;
192         pgnutls_x509_ext_import_subject_key_id gnutls_x509_ext_import_subject_key_id;
193         pgnutls_x509_ext_export_subject_key_id gnutls_x509_ext_export_subject_key_id;
194         pgnutls_x509_ext_export_authority_key_id gnutls_x509_ext_export_authority_key_id;
195         pgnutls_x509_ext_import_authority_key_id gnutls_x509_ext_import_authority_key_id;
196         pgnutls_x509_othername_to_virtual gnutls_x509_othername_to_virtual;
197         pgnutls_x509_aki_init gnutls_x509_aki_init;
198         pgnutls_x509_aki_get_id gnutls_x509_aki_get_id;
199         pgnutls_x509_aki_get_cert_issuer gnutls_x509_aki_get_cert_issuer;
200         pgnutls_x509_aki_set_id gnutls_x509_aki_set_id;
201         pgnutls_x509_aki_set_cert_issuer gnutls_x509_aki_set_cert_issuer;
202         pgnutls_x509_aki_deinit gnutls_x509_aki_deinit;
203         pgnutls_x509_ext_import_private_key_usage_period gnutls_x509_ext_import_private_key_usage_period;
204         pgnutls_x509_ext_export_private_key_usage_period gnutls_x509_ext_export_private_key_usage_period;
205         pgnutls_x509_ext_import_basic_constraints gnutls_x509_ext_import_basic_constraints;
206         pgnutls_x509_ext_export_basic_constraints gnutls_x509_ext_export_basic_constraints;
207         pgnutls_x509_key_purpose_init gnutls_x509_key_purpose_init;
208         pgnutls_x509_key_purpose_deinit gnutls_x509_key_purpose_deinit;
209         pgnutls_x509_key_purpose_set gnutls_x509_key_purpose_set;
210         pgnutls_x509_key_purpose_get gnutls_x509_key_purpose_get;
211         pgnutls_x509_ext_import_key_purposes gnutls_x509_ext_import_key_purposes;
212         pgnutls_x509_ext_export_key_purposes gnutls_x509_ext_export_key_purposes;
213         pgnutls_x509_ext_import_key_usage gnutls_x509_ext_import_key_usage;
214         pgnutls_x509_ext_export_key_usage gnutls_x509_ext_export_key_usage;
215 
216         static if (gnuTLSSupport >= GnuTLSSupport.gnutls_3_6_0)
217         {
218             pgnutls_x509_ext_import_inhibit_anypolicy gnutls_x509_ext_import_inhibit_anypolicy;
219             pgnutls_x509_ext_export_inhibit_anypolicy gnutls_x509_ext_export_inhibit_anypolicy;
220         }
221 
222         pgnutls_x509_ext_import_proxy gnutls_x509_ext_import_proxy;
223         pgnutls_x509_ext_export_proxy gnutls_x509_ext_export_proxy;
224         pgnutls_x509_policies_init gnutls_x509_policies_init;
225         pgnutls_x509_policies_deinit gnutls_x509_policies_deinit;
226         pgnutls_x509_policies_get gnutls_x509_policies_get;
227         pgnutls_x509_policies_set gnutls_x509_policies_set;
228         pgnutls_x509_ext_import_policies gnutls_x509_ext_import_policies;
229         pgnutls_x509_ext_export_policies gnutls_x509_ext_export_policies;
230 
231         static if (gnuTLSSupport >= GnuTLSSupport.gnutls_3_5_1)
232         {
233             pgnutls_x509_ext_import_tlsfeatures gnutls_x509_ext_import_tlsfeatures;
234             pgnutls_x509_ext_export_tlsfeatures gnutls_x509_ext_export_tlsfeatures;
235             pgnutls_x509_tlsfeatures_add gnutls_x509_tlsfeatures_add;
236         }
237     }
238 
239     import bindbc.loader : SharedLib, bindSymbol_stdcall;
240     void bindX509Ext(SharedLib lib)
241     {
242         lib.bindSymbol_stdcall(gnutls_subject_alt_names_init, "gnutls_subject_alt_names_init");
243         lib.bindSymbol_stdcall(gnutls_subject_alt_names_deinit, "gnutls_subject_alt_names_deinit");
244         lib.bindSymbol_stdcall(gnutls_subject_alt_names_get, "gnutls_subject_alt_names_get");
245         lib.bindSymbol_stdcall(gnutls_subject_alt_names_set, "gnutls_subject_alt_names_set");
246         lib.bindSymbol_stdcall(gnutls_x509_ext_import_subject_alt_names, "gnutls_x509_ext_import_subject_alt_names");
247         lib.bindSymbol_stdcall(gnutls_x509_ext_export_subject_alt_names, "gnutls_x509_ext_export_subject_alt_names");
248         lib.bindSymbol_stdcall(gnutls_x509_crl_dist_points_init, "gnutls_x509_crl_dist_points_init");
249         lib.bindSymbol_stdcall(gnutls_x509_crl_dist_points_deinit, "gnutls_x509_crl_dist_points_deinit");
250         lib.bindSymbol_stdcall(gnutls_x509_crl_dist_points_get, "gnutls_x509_crl_dist_points_get");
251         lib.bindSymbol_stdcall(gnutls_x509_crl_dist_points_set, "gnutls_x509_crl_dist_points_set");
252         lib.bindSymbol_stdcall(gnutls_x509_ext_import_crl_dist_points, "gnutls_x509_ext_import_crl_dist_points");
253         lib.bindSymbol_stdcall(gnutls_x509_ext_export_crl_dist_points, "gnutls_x509_ext_export_crl_dist_points");
254         lib.bindSymbol_stdcall(gnutls_x509_ext_import_name_constraints, "gnutls_x509_ext_import_name_constraints");
255         lib.bindSymbol_stdcall(gnutls_x509_ext_export_name_constraints, "gnutls_x509_ext_export_name_constraints");
256         lib.bindSymbol_stdcall(gnutls_x509_aia_init, "gnutls_x509_aia_init");
257         lib.bindSymbol_stdcall(gnutls_x509_aia_deinit, "gnutls_x509_aia_deinit");
258         lib.bindSymbol_stdcall(gnutls_x509_aia_get, "gnutls_x509_aia_get");
259         lib.bindSymbol_stdcall(gnutls_x509_aia_set, "gnutls_x509_aia_set");
260         lib.bindSymbol_stdcall(gnutls_x509_ext_import_aia, "gnutls_x509_ext_import_aia");
261         lib.bindSymbol_stdcall(gnutls_x509_ext_export_aia, "gnutls_x509_ext_export_aia");
262         lib.bindSymbol_stdcall(gnutls_x509_ext_import_subject_key_id, "gnutls_x509_ext_import_subject_key_id");
263         lib.bindSymbol_stdcall(gnutls_x509_ext_export_subject_key_id, "gnutls_x509_ext_export_subject_key_id");
264         lib.bindSymbol_stdcall(gnutls_x509_ext_export_authority_key_id, "gnutls_x509_ext_export_authority_key_id");
265         lib.bindSymbol_stdcall(gnutls_x509_ext_import_authority_key_id, "gnutls_x509_ext_import_authority_key_id");
266         lib.bindSymbol_stdcall(gnutls_x509_othername_to_virtual, "gnutls_x509_othername_to_virtual");
267         lib.bindSymbol_stdcall(gnutls_x509_aki_init, "gnutls_x509_aki_init");
268         lib.bindSymbol_stdcall(gnutls_x509_aki_get_id, "gnutls_x509_aki_get_id");
269         lib.bindSymbol_stdcall(gnutls_x509_aki_get_cert_issuer, "gnutls_x509_aki_get_cert_issuer");
270         lib.bindSymbol_stdcall(gnutls_x509_aki_set_id, "gnutls_x509_aki_set_id");
271         lib.bindSymbol_stdcall(gnutls_x509_aki_set_cert_issuer, "gnutls_x509_aki_set_cert_issuer");
272         lib.bindSymbol_stdcall(gnutls_x509_aki_deinit, "gnutls_x509_aki_deinit");
273         lib.bindSymbol_stdcall(gnutls_x509_ext_import_private_key_usage_period, "gnutls_x509_ext_import_private_key_usage_period");
274         lib.bindSymbol_stdcall(gnutls_x509_ext_export_private_key_usage_period, "gnutls_x509_ext_export_private_key_usage_period");
275         lib.bindSymbol_stdcall(gnutls_x509_ext_import_basic_constraints, "gnutls_x509_ext_import_basic_constraints");
276         lib.bindSymbol_stdcall(gnutls_x509_ext_export_basic_constraints, "gnutls_x509_ext_export_basic_constraints");
277         lib.bindSymbol_stdcall(gnutls_x509_key_purpose_init, "gnutls_x509_key_purpose_init");
278         lib.bindSymbol_stdcall(gnutls_x509_key_purpose_deinit, "gnutls_x509_key_purpose_deinit");
279         lib.bindSymbol_stdcall(gnutls_x509_key_purpose_set, "gnutls_x509_key_purpose_set");
280         lib.bindSymbol_stdcall(gnutls_x509_key_purpose_get, "gnutls_x509_key_purpose_get");
281         lib.bindSymbol_stdcall(gnutls_x509_ext_import_key_purposes, "gnutls_x509_ext_import_key_purposes");
282         lib.bindSymbol_stdcall(gnutls_x509_ext_export_key_purposes, "gnutls_x509_ext_export_key_purposes");
283         lib.bindSymbol_stdcall(gnutls_x509_ext_import_key_usage, "gnutls_x509_ext_import_key_usage");
284         lib.bindSymbol_stdcall(gnutls_x509_ext_export_key_usage, "gnutls_x509_ext_export_key_usage");
285 
286         static if (gnuTLSSupport >= GnuTLSSupport.gnutls_3_6_0)
287         {
288             lib.bindSymbol_stdcall(gnutls_x509_ext_import_inhibit_anypolicy, "gnutls_x509_ext_import_inhibit_anypolicy");
289             lib.bindSymbol_stdcall(gnutls_x509_ext_export_inhibit_anypolicy, "gnutls_x509_ext_export_inhibit_anypolicy");
290         }
291 
292         lib.bindSymbol_stdcall(gnutls_x509_ext_import_proxy, "gnutls_x509_ext_import_proxy");
293         lib.bindSymbol_stdcall(gnutls_x509_ext_export_proxy, "gnutls_x509_ext_export_proxy");
294         lib.bindSymbol_stdcall(gnutls_x509_policies_init, "gnutls_x509_policies_init");
295         lib.bindSymbol_stdcall(gnutls_x509_policies_deinit, "gnutls_x509_policies_deinit");
296         lib.bindSymbol_stdcall(gnutls_x509_policies_get, "gnutls_x509_policies_get");
297         lib.bindSymbol_stdcall(gnutls_x509_policies_set, "gnutls_x509_policies_set");
298         lib.bindSymbol_stdcall(gnutls_x509_ext_import_policies, "gnutls_x509_ext_import_policies");
299         lib.bindSymbol_stdcall(gnutls_x509_ext_export_policies, "gnutls_x509_ext_export_policies");
300 
301         static if (gnuTLSSupport >= GnuTLSSupport.gnutls_3_5_1)
302         {
303             lib.bindSymbol_stdcall(gnutls_x509_ext_import_tlsfeatures, "gnutls_x509_ext_import_tlsfeatures");
304             lib.bindSymbol_stdcall(gnutls_x509_ext_export_tlsfeatures, "gnutls_x509_ext_export_tlsfeatures");
305             lib.bindSymbol_stdcall(gnutls_x509_tlsfeatures_add, "gnutls_x509_tlsfeatures_add");
306         }
307     }
308 }