• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# This file is dual licensed under the terms of the Apache License, Version
2# 2.0, and the BSD License. See the LICENSE file in the root of this repository
3# for complete details.
4
5from __future__ import absolute_import, division, print_function
6
7INCLUDES = """
8#include <openssl/x509v3.h>
9
10/*
11 * This is part of a work-around for the difficulty cffi has in dealing with
12 * `LHASH_OF(foo)` as the name of a type.  We invent a new, simpler name that
13 * will be an alias for this type and use the alias throughout.  This works
14 * together with another opaque typedef for the same name in the TYPES section.
15 * Note that the result is an opaque type.
16 */
17typedef LHASH_OF(CONF_VALUE) Cryptography_LHASH_OF_CONF_VALUE;
18
19typedef STACK_OF(ACCESS_DESCRIPTION) Cryptography_STACK_OF_ACCESS_DESCRIPTION;
20typedef STACK_OF(DIST_POINT) Cryptography_STACK_OF_DIST_POINT;
21typedef STACK_OF(POLICYQUALINFO) Cryptography_STACK_OF_POLICYQUALINFO;
22typedef STACK_OF(POLICYINFO) Cryptography_STACK_OF_POLICYINFO;
23typedef STACK_OF(ASN1_INTEGER) Cryptography_STACK_OF_ASN1_INTEGER;
24typedef STACK_OF(GENERAL_SUBTREE) Cryptography_STACK_OF_GENERAL_SUBTREE;
25"""
26
27TYPES = """
28typedef ... Cryptography_STACK_OF_ACCESS_DESCRIPTION;
29typedef ... Cryptography_STACK_OF_POLICYQUALINFO;
30typedef ... Cryptography_STACK_OF_POLICYINFO;
31typedef ... Cryptography_STACK_OF_ASN1_INTEGER;
32typedef ... Cryptography_STACK_OF_GENERAL_SUBTREE;
33typedef ... EXTENDED_KEY_USAGE;
34typedef ... CONF;
35
36typedef struct {
37    X509 *issuer_cert;
38    X509 *subject_cert;
39    ...;
40} X509V3_CTX;
41
42typedef void * (*X509V3_EXT_D2I)(void *, const unsigned char **, long);
43
44static const int GEN_OTHERNAME;
45static const int GEN_EMAIL;
46static const int GEN_X400;
47static const int GEN_DNS;
48static const int GEN_URI;
49static const int GEN_DIRNAME;
50static const int GEN_EDIPARTY;
51static const int GEN_IPADD;
52static const int GEN_RID;
53
54typedef struct {
55    ASN1_OBJECT *type_id;
56    ASN1_TYPE *value;
57} OTHERNAME;
58
59typedef struct {
60    ...;
61} EDIPARTYNAME;
62
63typedef struct {
64    int ca;
65    ASN1_INTEGER *pathlen;
66} BASIC_CONSTRAINTS;
67
68typedef struct {
69    Cryptography_STACK_OF_GENERAL_SUBTREE *permittedSubtrees;
70    Cryptography_STACK_OF_GENERAL_SUBTREE *excludedSubtrees;
71} NAME_CONSTRAINTS;
72
73typedef struct {
74    ASN1_INTEGER *requireExplicitPolicy;
75    ASN1_INTEGER *inhibitPolicyMapping;
76} POLICY_CONSTRAINTS;
77
78
79typedef struct {
80    int type;
81    union {
82        char *ptr;
83        OTHERNAME *otherName;  /* otherName */
84        ASN1_IA5STRING *rfc822Name;
85        ASN1_IA5STRING *dNSName;
86        ASN1_TYPE *x400Address;
87        X509_NAME *directoryName;
88        EDIPARTYNAME *ediPartyName;
89        ASN1_IA5STRING *uniformResourceIdentifier;
90        ASN1_OCTET_STRING *iPAddress;
91        ASN1_OBJECT *registeredID;
92
93        /* Old names */
94        ASN1_OCTET_STRING *ip; /* iPAddress */
95        X509_NAME *dirn;       /* dirn */
96        ASN1_IA5STRING *ia5;   /* rfc822Name, dNSName, */
97                               /*   uniformResourceIdentifier */
98        ASN1_OBJECT *rid;      /* registeredID */
99        ASN1_TYPE *other;      /* x400Address */
100    } d;
101    ...;
102} GENERAL_NAME;
103
104typedef struct {
105    GENERAL_NAME *base;
106    ASN1_INTEGER *minimum;
107    ASN1_INTEGER *maximum;
108} GENERAL_SUBTREE;
109
110typedef struct stack_st_GENERAL_NAME GENERAL_NAMES;
111
112typedef struct {
113    ASN1_OCTET_STRING *keyid;
114    GENERAL_NAMES *issuer;
115    ASN1_INTEGER *serial;
116} AUTHORITY_KEYID;
117
118typedef struct {
119    ASN1_OBJECT *method;
120    GENERAL_NAME *location;
121} ACCESS_DESCRIPTION;
122
123typedef ... Cryptography_LHASH_OF_CONF_VALUE;
124
125
126typedef ... Cryptography_STACK_OF_DIST_POINT;
127
128typedef struct {
129    int type;
130    union {
131        GENERAL_NAMES *fullname;
132        Cryptography_STACK_OF_X509_NAME_ENTRY *relativename;
133    } name;
134    ...;
135} DIST_POINT_NAME;
136
137typedef struct {
138    DIST_POINT_NAME *distpoint;
139    ASN1_BIT_STRING *reasons;
140    GENERAL_NAMES *CRLissuer;
141    ...;
142} DIST_POINT;
143
144typedef struct {
145    DIST_POINT_NAME *distpoint;
146    int onlyuser;
147    int onlyCA;
148    ASN1_BIT_STRING *onlysomereasons;
149    int indirectCRL;
150    int onlyattr;
151} ISSUING_DIST_POINT;
152
153typedef struct {
154    ASN1_STRING *organization;
155    Cryptography_STACK_OF_ASN1_INTEGER *noticenos;
156} NOTICEREF;
157
158typedef struct {
159    NOTICEREF *noticeref;
160    ASN1_STRING *exptext;
161} USERNOTICE;
162
163typedef struct {
164    ASN1_OBJECT *pqualid;
165    union {
166        ASN1_IA5STRING *cpsuri;
167        USERNOTICE *usernotice;
168        ASN1_TYPE *other;
169    } d;
170} POLICYQUALINFO;
171
172typedef struct {
173    ASN1_OBJECT *policyid;
174    Cryptography_STACK_OF_POLICYQUALINFO *qualifiers;
175} POLICYINFO;
176
177typedef void (*sk_GENERAL_NAME_freefunc)(GENERAL_NAME *);
178typedef void (*sk_DIST_POINT_freefunc)(DIST_POINT *);
179typedef void (*sk_POLICYINFO_freefunc)(POLICYINFO *);
180typedef void (*sk_ACCESS_DESCRIPTION_freefunc)(ACCESS_DESCRIPTION *);
181"""
182
183
184FUNCTIONS = """
185int X509V3_EXT_add_alias(int, int);
186void X509V3_set_ctx(X509V3_CTX *, X509 *, X509 *, X509_REQ *, X509_CRL *, int);
187int GENERAL_NAME_print(BIO *, GENERAL_NAME *);
188GENERAL_NAMES *GENERAL_NAMES_new(void);
189void GENERAL_NAMES_free(GENERAL_NAMES *);
190void *X509V3_EXT_d2i(X509_EXTENSION *);
191int X509_check_ca(X509 *);
192/* X509 became a const arg in 1.1.0 */
193void *X509_get_ext_d2i(X509 *, int, int *, int *);
194/* The last two char * args became const char * in 1.1.0 */
195X509_EXTENSION *X509V3_EXT_nconf(CONF *, X509V3_CTX *, char *, char *);
196/* This is a macro defined by a call to DECLARE_ASN1_FUNCTIONS in the
197   x509v3.h header. */
198BASIC_CONSTRAINTS *BASIC_CONSTRAINTS_new(void);
199void BASIC_CONSTRAINTS_free(BASIC_CONSTRAINTS *);
200/* This is a macro defined by a call to DECLARE_ASN1_FUNCTIONS in the
201   x509v3.h header. */
202AUTHORITY_KEYID *AUTHORITY_KEYID_new(void);
203void AUTHORITY_KEYID_free(AUTHORITY_KEYID *);
204
205NAME_CONSTRAINTS *NAME_CONSTRAINTS_new(void);
206void NAME_CONSTRAINTS_free(NAME_CONSTRAINTS *);
207
208OTHERNAME *OTHERNAME_new(void);
209void OTHERNAME_free(OTHERNAME *);
210
211POLICY_CONSTRAINTS *POLICY_CONSTRAINTS_new(void);
212void POLICY_CONSTRAINTS_free(POLICY_CONSTRAINTS *);
213
214void *X509V3_set_ctx_nodb(X509V3_CTX *);
215
216int i2d_GENERAL_NAMES(GENERAL_NAMES *, unsigned char **);
217GENERAL_NAMES *d2i_GENERAL_NAMES(GENERAL_NAMES **, const unsigned char **,
218                                 long);
219
220int sk_GENERAL_NAME_num(struct stack_st_GENERAL_NAME *);
221int sk_GENERAL_NAME_push(struct stack_st_GENERAL_NAME *, GENERAL_NAME *);
222GENERAL_NAME *sk_GENERAL_NAME_value(struct stack_st_GENERAL_NAME *, int);
223void sk_GENERAL_NAME_pop_free(struct stack_st_GENERAL_NAME *,
224                              sk_GENERAL_NAME_freefunc);
225
226Cryptography_STACK_OF_ACCESS_DESCRIPTION *sk_ACCESS_DESCRIPTION_new_null(void);
227int sk_ACCESS_DESCRIPTION_num(Cryptography_STACK_OF_ACCESS_DESCRIPTION *);
228ACCESS_DESCRIPTION *sk_ACCESS_DESCRIPTION_value(
229    Cryptography_STACK_OF_ACCESS_DESCRIPTION *, int
230);
231void sk_ACCESS_DESCRIPTION_free(Cryptography_STACK_OF_ACCESS_DESCRIPTION *);
232void sk_ACCESS_DESCRIPTION_pop_free(Cryptography_STACK_OF_ACCESS_DESCRIPTION *,
233                              sk_ACCESS_DESCRIPTION_freefunc);
234int sk_ACCESS_DESCRIPTION_push(Cryptography_STACK_OF_ACCESS_DESCRIPTION *,
235                               ACCESS_DESCRIPTION *);
236
237ACCESS_DESCRIPTION *ACCESS_DESCRIPTION_new(void);
238void ACCESS_DESCRIPTION_free(ACCESS_DESCRIPTION *);
239
240X509_EXTENSION *X509V3_EXT_conf_nid(Cryptography_LHASH_OF_CONF_VALUE *,
241                                    X509V3_CTX *, int, char *);
242
243Cryptography_STACK_OF_DIST_POINT *sk_DIST_POINT_new_null(void);
244void sk_DIST_POINT_free(Cryptography_STACK_OF_DIST_POINT *);
245int sk_DIST_POINT_num(Cryptography_STACK_OF_DIST_POINT *);
246DIST_POINT *sk_DIST_POINT_value(Cryptography_STACK_OF_DIST_POINT *, int);
247int sk_DIST_POINT_push(Cryptography_STACK_OF_DIST_POINT *, DIST_POINT *);
248void sk_DIST_POINT_pop_free(Cryptography_STACK_OF_DIST_POINT *,
249                            sk_DIST_POINT_freefunc);
250void CRL_DIST_POINTS_free(Cryptography_STACK_OF_DIST_POINT *);
251
252void sk_POLICYINFO_free(Cryptography_STACK_OF_POLICYINFO *);
253int sk_POLICYINFO_num(Cryptography_STACK_OF_POLICYINFO *);
254POLICYINFO *sk_POLICYINFO_value(Cryptography_STACK_OF_POLICYINFO *, int);
255int sk_POLICYINFO_push(Cryptography_STACK_OF_POLICYINFO *, POLICYINFO *);
256Cryptography_STACK_OF_POLICYINFO *sk_POLICYINFO_new_null(void);
257void sk_POLICYINFO_pop_free(Cryptography_STACK_OF_POLICYINFO *,
258                            sk_POLICYINFO_freefunc);
259void CERTIFICATEPOLICIES_free(Cryptography_STACK_OF_POLICYINFO *);
260
261POLICYINFO *POLICYINFO_new(void);
262void POLICYINFO_free(POLICYINFO *);
263
264POLICYQUALINFO *POLICYQUALINFO_new(void);
265void POLICYQUALINFO_free(POLICYQUALINFO *);
266
267NOTICEREF *NOTICEREF_new(void);
268void NOTICEREF_free(NOTICEREF *);
269
270USERNOTICE *USERNOTICE_new(void);
271void USERNOTICE_free(USERNOTICE *);
272
273void sk_POLICYQUALINFO_free(Cryptography_STACK_OF_POLICYQUALINFO *);
274int sk_POLICYQUALINFO_num(Cryptography_STACK_OF_POLICYQUALINFO *);
275POLICYQUALINFO *sk_POLICYQUALINFO_value(Cryptography_STACK_OF_POLICYQUALINFO *,
276                                        int);
277int sk_POLICYQUALINFO_push(Cryptography_STACK_OF_POLICYQUALINFO *,
278                           POLICYQUALINFO *);
279Cryptography_STACK_OF_POLICYQUALINFO *sk_POLICYQUALINFO_new_null(void);
280
281Cryptography_STACK_OF_GENERAL_SUBTREE *sk_GENERAL_SUBTREE_new_null(void);
282void sk_GENERAL_SUBTREE_free(Cryptography_STACK_OF_GENERAL_SUBTREE *);
283int sk_GENERAL_SUBTREE_num(Cryptography_STACK_OF_GENERAL_SUBTREE *);
284GENERAL_SUBTREE *sk_GENERAL_SUBTREE_value(
285    Cryptography_STACK_OF_GENERAL_SUBTREE *, int
286);
287int sk_GENERAL_SUBTREE_push(Cryptography_STACK_OF_GENERAL_SUBTREE *,
288                            GENERAL_SUBTREE *);
289
290GENERAL_SUBTREE *GENERAL_SUBTREE_new(void);
291
292void sk_ASN1_INTEGER_free(Cryptography_STACK_OF_ASN1_INTEGER *);
293int sk_ASN1_INTEGER_num(Cryptography_STACK_OF_ASN1_INTEGER *);
294ASN1_INTEGER *sk_ASN1_INTEGER_value(Cryptography_STACK_OF_ASN1_INTEGER *, int);
295int sk_ASN1_INTEGER_push(Cryptography_STACK_OF_ASN1_INTEGER *, ASN1_INTEGER *);
296Cryptography_STACK_OF_ASN1_INTEGER *sk_ASN1_INTEGER_new_null(void);
297
298X509_EXTENSION *X509V3_EXT_i2d(int, int, void *);
299
300DIST_POINT *DIST_POINT_new(void);
301void DIST_POINT_free(DIST_POINT *);
302
303DIST_POINT_NAME *DIST_POINT_NAME_new(void);
304void DIST_POINT_NAME_free(DIST_POINT_NAME *);
305
306GENERAL_NAME *GENERAL_NAME_new(void);
307void GENERAL_NAME_free(GENERAL_NAME *);
308
309ISSUING_DIST_POINT *ISSUING_DIST_POINT_new(void);
310void ISSUING_DIST_POINT_free(ISSUING_DIST_POINT *);
311"""
312
313CUSTOMIZATIONS = """
314"""
315