x509v3.py 10 KB

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