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