1
0

x509v3.h 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119
  1. /* $OpenBSD: x509v3.h,v 1.25 2023/06/25 18:15:21 tb Exp $ */
  2. /* Written by Dr Stephen N Henson ([email protected]) for the OpenSSL
  3. * project 1999.
  4. */
  5. /* ====================================================================
  6. * Copyright (c) 1999-2004 The OpenSSL Project. All rights reserved.
  7. *
  8. * Redistribution and use in source and binary forms, with or without
  9. * modification, are permitted provided that the following conditions
  10. * are met:
  11. *
  12. * 1. Redistributions of source code must retain the above copyright
  13. * notice, this list of conditions and the following disclaimer.
  14. *
  15. * 2. Redistributions in binary form must reproduce the above copyright
  16. * notice, this list of conditions and the following disclaimer in
  17. * the documentation and/or other materials provided with the
  18. * distribution.
  19. *
  20. * 3. All advertising materials mentioning features or use of this
  21. * software must display the following acknowledgment:
  22. * "This product includes software developed by the OpenSSL Project
  23. * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
  24. *
  25. * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
  26. * endorse or promote products derived from this software without
  27. * prior written permission. For written permission, please contact
  28. * [email protected].
  29. *
  30. * 5. Products derived from this software may not be called "OpenSSL"
  31. * nor may "OpenSSL" appear in their names without prior written
  32. * permission of the OpenSSL Project.
  33. *
  34. * 6. Redistributions of any form whatsoever must retain the following
  35. * acknowledgment:
  36. * "This product includes software developed by the OpenSSL Project
  37. * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
  38. *
  39. * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
  40. * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  41. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  42. * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
  43. * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  44. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  45. * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  46. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  47. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  48. * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  49. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
  50. * OF THE POSSIBILITY OF SUCH DAMAGE.
  51. * ====================================================================
  52. *
  53. * This product includes cryptographic software written by Eric Young
  54. * ([email protected]). This product includes software written by Tim
  55. * Hudson ([email protected]).
  56. *
  57. */
  58. #ifndef HEADER_X509V3_H
  59. #define HEADER_X509V3_H
  60. #include <openssl/opensslconf.h>
  61. #include <openssl/bio.h>
  62. #include <openssl/x509.h>
  63. #include <openssl/conf.h>
  64. #ifdef __cplusplus
  65. extern "C" {
  66. #endif
  67. /* Forward reference */
  68. struct v3_ext_method;
  69. struct v3_ext_ctx;
  70. /* Useful typedefs */
  71. typedef void * (*X509V3_EXT_NEW)(void);
  72. typedef void (*X509V3_EXT_FREE)(void *);
  73. typedef void * (*X509V3_EXT_D2I)(void *, const unsigned char ** , long);
  74. typedef int (*X509V3_EXT_I2D)(void *, unsigned char **);
  75. typedef STACK_OF(CONF_VALUE) *
  76. (*X509V3_EXT_I2V)(const struct v3_ext_method *method, void *ext,
  77. STACK_OF(CONF_VALUE) *extlist);
  78. typedef void * (*X509V3_EXT_V2I)(const struct v3_ext_method *method,
  79. struct v3_ext_ctx *ctx,
  80. STACK_OF(CONF_VALUE) *values);
  81. typedef char * (*X509V3_EXT_I2S)(const struct v3_ext_method *method, void *ext);
  82. typedef void * (*X509V3_EXT_S2I)(const struct v3_ext_method *method,
  83. struct v3_ext_ctx *ctx, const char *str);
  84. typedef int (*X509V3_EXT_I2R)(const struct v3_ext_method *method, void *ext,
  85. BIO *out, int indent);
  86. typedef void * (*X509V3_EXT_R2I)(const struct v3_ext_method *method,
  87. struct v3_ext_ctx *ctx, const char *str);
  88. /* V3 extension structure */
  89. struct v3_ext_method {
  90. int ext_nid;
  91. int ext_flags;
  92. /* If this is set the following four fields are ignored */
  93. ASN1_ITEM_EXP *it;
  94. /* Old style ASN1 calls */
  95. X509V3_EXT_NEW ext_new;
  96. X509V3_EXT_FREE ext_free;
  97. X509V3_EXT_D2I d2i;
  98. X509V3_EXT_I2D i2d;
  99. /* The following pair is used for string extensions */
  100. X509V3_EXT_I2S i2s;
  101. X509V3_EXT_S2I s2i;
  102. /* The following pair is used for multi-valued extensions */
  103. X509V3_EXT_I2V i2v;
  104. X509V3_EXT_V2I v2i;
  105. /* The following are used for raw extensions */
  106. X509V3_EXT_I2R i2r;
  107. X509V3_EXT_R2I r2i;
  108. void *usr_data; /* Any extension specific data */
  109. };
  110. typedef struct X509V3_CONF_METHOD_st {
  111. char *(*get_string)(void *db, const char *section, const char *value);
  112. STACK_OF(CONF_VALUE) *(*get_section)(void *db, const char *section);
  113. void (*free_string)(void *db, char *string);
  114. void (*free_section)(void *db, STACK_OF(CONF_VALUE) *section);
  115. } X509V3_CONF_METHOD;
  116. /* Context specific info */
  117. struct v3_ext_ctx {
  118. #define CTX_TEST 0x1
  119. int flags;
  120. X509 *issuer_cert;
  121. X509 *subject_cert;
  122. X509_REQ *subject_req;
  123. X509_CRL *crl;
  124. X509V3_CONF_METHOD *db_meth;
  125. void *db;
  126. /* Maybe more here */
  127. };
  128. typedef struct v3_ext_method X509V3_EXT_METHOD;
  129. DECLARE_STACK_OF(X509V3_EXT_METHOD)
  130. /* ext_flags values */
  131. #define X509V3_EXT_DYNAMIC 0x1
  132. #define X509V3_EXT_CTX_DEP 0x2
  133. #define X509V3_EXT_MULTILINE 0x4
  134. typedef BIT_STRING_BITNAME ENUMERATED_NAMES;
  135. typedef struct BASIC_CONSTRAINTS_st {
  136. int ca;
  137. ASN1_INTEGER *pathlen;
  138. } BASIC_CONSTRAINTS;
  139. typedef struct PKEY_USAGE_PERIOD_st {
  140. ASN1_GENERALIZEDTIME *notBefore;
  141. ASN1_GENERALIZEDTIME *notAfter;
  142. } PKEY_USAGE_PERIOD;
  143. typedef struct otherName_st {
  144. ASN1_OBJECT *type_id;
  145. ASN1_TYPE *value;
  146. } OTHERNAME;
  147. typedef struct EDIPartyName_st {
  148. ASN1_STRING *nameAssigner;
  149. ASN1_STRING *partyName;
  150. } EDIPARTYNAME;
  151. typedef struct GENERAL_NAME_st {
  152. #define GEN_OTHERNAME 0
  153. #define GEN_EMAIL 1
  154. #define GEN_DNS 2
  155. #define GEN_X400 3
  156. #define GEN_DIRNAME 4
  157. #define GEN_EDIPARTY 5
  158. #define GEN_URI 6
  159. #define GEN_IPADD 7
  160. #define GEN_RID 8
  161. int type;
  162. union {
  163. char *ptr;
  164. OTHERNAME *otherName; /* otherName */
  165. ASN1_IA5STRING *rfc822Name;
  166. ASN1_IA5STRING *dNSName;
  167. ASN1_STRING *x400Address;
  168. X509_NAME *directoryName;
  169. EDIPARTYNAME *ediPartyName;
  170. ASN1_IA5STRING *uniformResourceIdentifier;
  171. ASN1_OCTET_STRING *iPAddress;
  172. ASN1_OBJECT *registeredID;
  173. /* Old names */
  174. ASN1_OCTET_STRING *ip; /* iPAddress */
  175. X509_NAME *dirn; /* dirn */
  176. ASN1_IA5STRING *ia5; /* rfc822Name, dNSName, uniformResourceIdentifier */
  177. ASN1_OBJECT *rid; /* registeredID */
  178. } d;
  179. } GENERAL_NAME;
  180. typedef struct ACCESS_DESCRIPTION_st {
  181. ASN1_OBJECT *method;
  182. GENERAL_NAME *location;
  183. } ACCESS_DESCRIPTION;
  184. typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS;
  185. typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE;
  186. DECLARE_STACK_OF(GENERAL_NAME)
  187. typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES;
  188. DECLARE_STACK_OF(GENERAL_NAMES)
  189. DECLARE_STACK_OF(ACCESS_DESCRIPTION)
  190. typedef struct DIST_POINT_NAME_st {
  191. int type;
  192. union {
  193. GENERAL_NAMES *fullname;
  194. STACK_OF(X509_NAME_ENTRY) *relativename;
  195. } name;
  196. /* If relativename then this contains the full distribution point name */
  197. X509_NAME *dpname;
  198. } DIST_POINT_NAME;
  199. /* All existing reasons */
  200. #define CRLDP_ALL_REASONS 0x807f
  201. #define CRL_REASON_NONE -1
  202. #define CRL_REASON_UNSPECIFIED 0
  203. #define CRL_REASON_KEY_COMPROMISE 1
  204. #define CRL_REASON_CA_COMPROMISE 2
  205. #define CRL_REASON_AFFILIATION_CHANGED 3
  206. #define CRL_REASON_SUPERSEDED 4
  207. #define CRL_REASON_CESSATION_OF_OPERATION 5
  208. #define CRL_REASON_CERTIFICATE_HOLD 6
  209. #define CRL_REASON_REMOVE_FROM_CRL 8
  210. #define CRL_REASON_PRIVILEGE_WITHDRAWN 9
  211. #define CRL_REASON_AA_COMPROMISE 10
  212. struct DIST_POINT_st {
  213. DIST_POINT_NAME *distpoint;
  214. ASN1_BIT_STRING *reasons;
  215. GENERAL_NAMES *CRLissuer;
  216. int dp_reasons;
  217. };
  218. typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS;
  219. DECLARE_STACK_OF(DIST_POINT)
  220. struct AUTHORITY_KEYID_st {
  221. ASN1_OCTET_STRING *keyid;
  222. GENERAL_NAMES *issuer;
  223. ASN1_INTEGER *serial;
  224. };
  225. typedef struct NOTICEREF_st {
  226. ASN1_STRING *organization;
  227. STACK_OF(ASN1_INTEGER) *noticenos;
  228. } NOTICEREF;
  229. typedef struct USERNOTICE_st {
  230. NOTICEREF *noticeref;
  231. ASN1_STRING *exptext;
  232. } USERNOTICE;
  233. typedef struct POLICYQUALINFO_st {
  234. ASN1_OBJECT *pqualid;
  235. union {
  236. ASN1_IA5STRING *cpsuri;
  237. USERNOTICE *usernotice;
  238. ASN1_TYPE *other;
  239. } d;
  240. } POLICYQUALINFO;
  241. DECLARE_STACK_OF(POLICYQUALINFO)
  242. typedef struct POLICYINFO_st {
  243. ASN1_OBJECT *policyid;
  244. STACK_OF(POLICYQUALINFO) *qualifiers;
  245. } POLICYINFO;
  246. typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES;
  247. DECLARE_STACK_OF(POLICYINFO)
  248. typedef struct POLICY_MAPPING_st {
  249. ASN1_OBJECT *issuerDomainPolicy;
  250. ASN1_OBJECT *subjectDomainPolicy;
  251. } POLICY_MAPPING;
  252. DECLARE_STACK_OF(POLICY_MAPPING)
  253. typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS;
  254. typedef struct GENERAL_SUBTREE_st {
  255. GENERAL_NAME *base;
  256. ASN1_INTEGER *minimum;
  257. ASN1_INTEGER *maximum;
  258. } GENERAL_SUBTREE;
  259. DECLARE_STACK_OF(GENERAL_SUBTREE)
  260. struct NAME_CONSTRAINTS_st {
  261. STACK_OF(GENERAL_SUBTREE) *permittedSubtrees;
  262. STACK_OF(GENERAL_SUBTREE) *excludedSubtrees;
  263. };
  264. typedef struct POLICY_CONSTRAINTS_st {
  265. ASN1_INTEGER *requireExplicitPolicy;
  266. ASN1_INTEGER *inhibitPolicyMapping;
  267. } POLICY_CONSTRAINTS;
  268. struct ISSUING_DIST_POINT_st {
  269. DIST_POINT_NAME *distpoint;
  270. int onlyuser;
  271. int onlyCA;
  272. ASN1_BIT_STRING *onlysomereasons;
  273. int indirectCRL;
  274. int onlyattr;
  275. };
  276. /* Values in idp_flags field */
  277. /* IDP present */
  278. #define IDP_PRESENT 0x1
  279. /* IDP values inconsistent */
  280. #define IDP_INVALID 0x2
  281. /* onlyuser true */
  282. #define IDP_ONLYUSER 0x4
  283. /* onlyCA true */
  284. #define IDP_ONLYCA 0x8
  285. /* onlyattr true */
  286. #define IDP_ONLYATTR 0x10
  287. /* indirectCRL true */
  288. #define IDP_INDIRECT 0x20
  289. /* onlysomereasons present */
  290. #define IDP_REASONS 0x40
  291. #define X509V3_conf_err(val) ERR_asprintf_error_data( \
  292. "section:%s,name:%s,value:%s", val->section, \
  293. val->name, val->value);
  294. #define X509V3_set_ctx_test(ctx) \
  295. X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST)
  296. #define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL;
  297. #define EXT_BITSTRING(nid, table) { nid, 0, &ASN1_BIT_STRING_it, \
  298. 0,0,0,0, \
  299. 0,0, \
  300. (X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \
  301. (X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \
  302. NULL, NULL, \
  303. table}
  304. #define EXT_IA5STRING(nid) { nid, 0, &ASN1_IA5STRING_it, \
  305. 0,0,0,0, \
  306. (X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \
  307. (X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \
  308. 0,0,0,0, \
  309. NULL}
  310. #define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
  311. /* X509_PURPOSE stuff */
  312. #define EXFLAG_BCONS 0x0001
  313. #define EXFLAG_KUSAGE 0x0002
  314. #define EXFLAG_XKUSAGE 0x0004
  315. #define EXFLAG_NSCERT 0x0008
  316. #define EXFLAG_CA 0x0010
  317. #define EXFLAG_SI 0x0020 /* Self issued. */
  318. #define EXFLAG_V1 0x0040
  319. #define EXFLAG_INVALID 0x0080
  320. #define EXFLAG_SET 0x0100
  321. #define EXFLAG_CRITICAL 0x0200
  322. #if !defined(LIBRESSL_INTERNAL)
  323. #define EXFLAG_PROXY 0x0400
  324. #endif
  325. #define EXFLAG_INVALID_POLICY 0x0800
  326. #define EXFLAG_FRESHEST 0x1000
  327. #define EXFLAG_SS 0x2000 /* Self signed. */
  328. #define KU_DIGITAL_SIGNATURE 0x0080
  329. #define KU_NON_REPUDIATION 0x0040
  330. #define KU_KEY_ENCIPHERMENT 0x0020
  331. #define KU_DATA_ENCIPHERMENT 0x0010
  332. #define KU_KEY_AGREEMENT 0x0008
  333. #define KU_KEY_CERT_SIGN 0x0004
  334. #define KU_CRL_SIGN 0x0002
  335. #define KU_ENCIPHER_ONLY 0x0001
  336. #define KU_DECIPHER_ONLY 0x8000
  337. #define NS_SSL_CLIENT 0x80
  338. #define NS_SSL_SERVER 0x40
  339. #define NS_SMIME 0x20
  340. #define NS_OBJSIGN 0x10
  341. #define NS_SSL_CA 0x04
  342. #define NS_SMIME_CA 0x02
  343. #define NS_OBJSIGN_CA 0x01
  344. #define NS_ANY_CA (NS_SSL_CA|NS_SMIME_CA|NS_OBJSIGN_CA)
  345. #define XKU_SSL_SERVER 0x1
  346. #define XKU_SSL_CLIENT 0x2
  347. #define XKU_SMIME 0x4
  348. #define XKU_CODE_SIGN 0x8
  349. #define XKU_SGC 0x10
  350. #define XKU_OCSP_SIGN 0x20
  351. #define XKU_TIMESTAMP 0x40
  352. #define XKU_DVCS 0x80
  353. #define XKU_ANYEKU 0x100
  354. #define X509_PURPOSE_DYNAMIC 0x1
  355. #define X509_PURPOSE_DYNAMIC_NAME 0x2
  356. typedef struct x509_purpose_st {
  357. int purpose;
  358. int trust; /* Default trust ID */
  359. int flags;
  360. int (*check_purpose)(const struct x509_purpose_st *, const X509 *, int);
  361. char *name;
  362. char *sname;
  363. void *usr_data;
  364. } X509_PURPOSE;
  365. #define X509_PURPOSE_SSL_CLIENT 1
  366. #define X509_PURPOSE_SSL_SERVER 2
  367. #define X509_PURPOSE_NS_SSL_SERVER 3
  368. #define X509_PURPOSE_SMIME_SIGN 4
  369. #define X509_PURPOSE_SMIME_ENCRYPT 5
  370. #define X509_PURPOSE_CRL_SIGN 6
  371. #define X509_PURPOSE_ANY 7
  372. #define X509_PURPOSE_OCSP_HELPER 8
  373. #define X509_PURPOSE_TIMESTAMP_SIGN 9
  374. #define X509_PURPOSE_MIN 1
  375. #define X509_PURPOSE_MAX 9
  376. /* Flags for X509V3_EXT_print() */
  377. #define X509V3_EXT_UNKNOWN_MASK (0xfL << 16)
  378. /* Return error for unknown extensions */
  379. #define X509V3_EXT_DEFAULT 0
  380. /* Print error for unknown extensions */
  381. #define X509V3_EXT_ERROR_UNKNOWN (1L << 16)
  382. /* ASN1 parse unknown extensions */
  383. #define X509V3_EXT_PARSE_UNKNOWN (2L << 16)
  384. /* BIO_dump unknown extensions */
  385. #define X509V3_EXT_DUMP_UNKNOWN (3L << 16)
  386. /* Flags for X509V3_add1_i2d */
  387. #define X509V3_ADD_OP_MASK 0xfL
  388. #define X509V3_ADD_DEFAULT 0L
  389. #define X509V3_ADD_APPEND 1L
  390. #define X509V3_ADD_REPLACE 2L
  391. #define X509V3_ADD_REPLACE_EXISTING 3L
  392. #define X509V3_ADD_KEEP_EXISTING 4L
  393. #define X509V3_ADD_DELETE 5L
  394. #define X509V3_ADD_SILENT 0x10
  395. DECLARE_STACK_OF(X509_PURPOSE)
  396. BASIC_CONSTRAINTS *BASIC_CONSTRAINTS_new(void);
  397. void BASIC_CONSTRAINTS_free(BASIC_CONSTRAINTS *a);
  398. BASIC_CONSTRAINTS *d2i_BASIC_CONSTRAINTS(BASIC_CONSTRAINTS **a, const unsigned char **in, long len);
  399. int i2d_BASIC_CONSTRAINTS(BASIC_CONSTRAINTS *a, unsigned char **out);
  400. extern const ASN1_ITEM BASIC_CONSTRAINTS_it;
  401. AUTHORITY_KEYID *AUTHORITY_KEYID_new(void);
  402. void AUTHORITY_KEYID_free(AUTHORITY_KEYID *a);
  403. AUTHORITY_KEYID *d2i_AUTHORITY_KEYID(AUTHORITY_KEYID **a, const unsigned char **in, long len);
  404. int i2d_AUTHORITY_KEYID(AUTHORITY_KEYID *a, unsigned char **out);
  405. extern const ASN1_ITEM AUTHORITY_KEYID_it;
  406. PKEY_USAGE_PERIOD *PKEY_USAGE_PERIOD_new(void);
  407. void PKEY_USAGE_PERIOD_free(PKEY_USAGE_PERIOD *a);
  408. PKEY_USAGE_PERIOD *d2i_PKEY_USAGE_PERIOD(PKEY_USAGE_PERIOD **a, const unsigned char **in, long len);
  409. int i2d_PKEY_USAGE_PERIOD(PKEY_USAGE_PERIOD *a, unsigned char **out);
  410. extern const ASN1_ITEM PKEY_USAGE_PERIOD_it;
  411. GENERAL_NAME *GENERAL_NAME_new(void);
  412. void GENERAL_NAME_free(GENERAL_NAME *a);
  413. GENERAL_NAME *d2i_GENERAL_NAME(GENERAL_NAME **a, const unsigned char **in, long len);
  414. int i2d_GENERAL_NAME(GENERAL_NAME *a, unsigned char **out);
  415. extern const ASN1_ITEM GENERAL_NAME_it;
  416. GENERAL_NAME *GENERAL_NAME_dup(GENERAL_NAME *a);
  417. int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b);
  418. ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method,
  419. X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval);
  420. STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method,
  421. ASN1_BIT_STRING *bits,
  422. STACK_OF(CONF_VALUE) *extlist);
  423. STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, GENERAL_NAME *gen, STACK_OF(CONF_VALUE) *ret);
  424. int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen);
  425. GENERAL_NAMES *GENERAL_NAMES_new(void);
  426. void GENERAL_NAMES_free(GENERAL_NAMES *a);
  427. GENERAL_NAMES *d2i_GENERAL_NAMES(GENERAL_NAMES **a, const unsigned char **in, long len);
  428. int i2d_GENERAL_NAMES(GENERAL_NAMES *a, unsigned char **out);
  429. extern const ASN1_ITEM GENERAL_NAMES_it;
  430. STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method,
  431. GENERAL_NAMES *gen, STACK_OF(CONF_VALUE) *extlist);
  432. GENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method,
  433. X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval);
  434. OTHERNAME *OTHERNAME_new(void);
  435. void OTHERNAME_free(OTHERNAME *a);
  436. OTHERNAME *d2i_OTHERNAME(OTHERNAME **a, const unsigned char **in, long len);
  437. int i2d_OTHERNAME(OTHERNAME *a, unsigned char **out);
  438. extern const ASN1_ITEM OTHERNAME_it;
  439. EDIPARTYNAME *EDIPARTYNAME_new(void);
  440. void EDIPARTYNAME_free(EDIPARTYNAME *a);
  441. EDIPARTYNAME *d2i_EDIPARTYNAME(EDIPARTYNAME **a, const unsigned char **in, long len);
  442. int i2d_EDIPARTYNAME(EDIPARTYNAME *a, unsigned char **out);
  443. extern const ASN1_ITEM EDIPARTYNAME_it;
  444. int OTHERNAME_cmp(OTHERNAME *a, OTHERNAME *b);
  445. void GENERAL_NAME_set0_value(GENERAL_NAME *a, int type, void *value);
  446. void *GENERAL_NAME_get0_value(GENERAL_NAME *a, int *ptype);
  447. int GENERAL_NAME_set0_othername(GENERAL_NAME *gen,
  448. ASN1_OBJECT *oid, ASN1_TYPE *value);
  449. int GENERAL_NAME_get0_otherName(GENERAL_NAME *gen,
  450. ASN1_OBJECT **poid, ASN1_TYPE **pvalue);
  451. char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method,
  452. const ASN1_OCTET_STRING *ia5);
  453. ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method,
  454. X509V3_CTX *ctx, const char *str);
  455. EXTENDED_KEY_USAGE *EXTENDED_KEY_USAGE_new(void);
  456. void EXTENDED_KEY_USAGE_free(EXTENDED_KEY_USAGE *a);
  457. EXTENDED_KEY_USAGE *d2i_EXTENDED_KEY_USAGE(EXTENDED_KEY_USAGE **a, const unsigned char **in, long len);
  458. int i2d_EXTENDED_KEY_USAGE(EXTENDED_KEY_USAGE *a, unsigned char **out);
  459. extern const ASN1_ITEM EXTENDED_KEY_USAGE_it;
  460. int i2a_ACCESS_DESCRIPTION(BIO *bp, const ACCESS_DESCRIPTION* a);
  461. CERTIFICATEPOLICIES *CERTIFICATEPOLICIES_new(void);
  462. void CERTIFICATEPOLICIES_free(CERTIFICATEPOLICIES *a);
  463. CERTIFICATEPOLICIES *d2i_CERTIFICATEPOLICIES(CERTIFICATEPOLICIES **a, const unsigned char **in, long len);
  464. int i2d_CERTIFICATEPOLICIES(CERTIFICATEPOLICIES *a, unsigned char **out);
  465. extern const ASN1_ITEM CERTIFICATEPOLICIES_it;
  466. POLICYINFO *POLICYINFO_new(void);
  467. void POLICYINFO_free(POLICYINFO *a);
  468. POLICYINFO *d2i_POLICYINFO(POLICYINFO **a, const unsigned char **in, long len);
  469. int i2d_POLICYINFO(POLICYINFO *a, unsigned char **out);
  470. extern const ASN1_ITEM POLICYINFO_it;
  471. POLICYQUALINFO *POLICYQUALINFO_new(void);
  472. void POLICYQUALINFO_free(POLICYQUALINFO *a);
  473. POLICYQUALINFO *d2i_POLICYQUALINFO(POLICYQUALINFO **a, const unsigned char **in, long len);
  474. int i2d_POLICYQUALINFO(POLICYQUALINFO *a, unsigned char **out);
  475. extern const ASN1_ITEM POLICYQUALINFO_it;
  476. USERNOTICE *USERNOTICE_new(void);
  477. void USERNOTICE_free(USERNOTICE *a);
  478. USERNOTICE *d2i_USERNOTICE(USERNOTICE **a, const unsigned char **in, long len);
  479. int i2d_USERNOTICE(USERNOTICE *a, unsigned char **out);
  480. extern const ASN1_ITEM USERNOTICE_it;
  481. NOTICEREF *NOTICEREF_new(void);
  482. void NOTICEREF_free(NOTICEREF *a);
  483. NOTICEREF *d2i_NOTICEREF(NOTICEREF **a, const unsigned char **in, long len);
  484. int i2d_NOTICEREF(NOTICEREF *a, unsigned char **out);
  485. extern const ASN1_ITEM NOTICEREF_it;
  486. CRL_DIST_POINTS *CRL_DIST_POINTS_new(void);
  487. void CRL_DIST_POINTS_free(CRL_DIST_POINTS *a);
  488. CRL_DIST_POINTS *d2i_CRL_DIST_POINTS(CRL_DIST_POINTS **a, const unsigned char **in, long len);
  489. int i2d_CRL_DIST_POINTS(CRL_DIST_POINTS *a, unsigned char **out);
  490. extern const ASN1_ITEM CRL_DIST_POINTS_it;
  491. DIST_POINT *DIST_POINT_new(void);
  492. void DIST_POINT_free(DIST_POINT *a);
  493. DIST_POINT *d2i_DIST_POINT(DIST_POINT **a, const unsigned char **in, long len);
  494. int i2d_DIST_POINT(DIST_POINT *a, unsigned char **out);
  495. extern const ASN1_ITEM DIST_POINT_it;
  496. DIST_POINT_NAME *DIST_POINT_NAME_new(void);
  497. void DIST_POINT_NAME_free(DIST_POINT_NAME *a);
  498. DIST_POINT_NAME *d2i_DIST_POINT_NAME(DIST_POINT_NAME **a, const unsigned char **in, long len);
  499. int i2d_DIST_POINT_NAME(DIST_POINT_NAME *a, unsigned char **out);
  500. extern const ASN1_ITEM DIST_POINT_NAME_it;
  501. ISSUING_DIST_POINT *ISSUING_DIST_POINT_new(void);
  502. void ISSUING_DIST_POINT_free(ISSUING_DIST_POINT *a);
  503. ISSUING_DIST_POINT *d2i_ISSUING_DIST_POINT(ISSUING_DIST_POINT **a, const unsigned char **in, long len);
  504. int i2d_ISSUING_DIST_POINT(ISSUING_DIST_POINT *a, unsigned char **out);
  505. extern const ASN1_ITEM ISSUING_DIST_POINT_it;
  506. int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, X509_NAME *iname);
  507. int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc);
  508. ACCESS_DESCRIPTION *ACCESS_DESCRIPTION_new(void);
  509. void ACCESS_DESCRIPTION_free(ACCESS_DESCRIPTION *a);
  510. ACCESS_DESCRIPTION *d2i_ACCESS_DESCRIPTION(ACCESS_DESCRIPTION **a, const unsigned char **in, long len);
  511. int i2d_ACCESS_DESCRIPTION(ACCESS_DESCRIPTION *a, unsigned char **out);
  512. extern const ASN1_ITEM ACCESS_DESCRIPTION_it;
  513. AUTHORITY_INFO_ACCESS *AUTHORITY_INFO_ACCESS_new(void);
  514. void AUTHORITY_INFO_ACCESS_free(AUTHORITY_INFO_ACCESS *a);
  515. AUTHORITY_INFO_ACCESS *d2i_AUTHORITY_INFO_ACCESS(AUTHORITY_INFO_ACCESS **a, const unsigned char **in, long len);
  516. int i2d_AUTHORITY_INFO_ACCESS(AUTHORITY_INFO_ACCESS *a, unsigned char **out);
  517. extern const ASN1_ITEM AUTHORITY_INFO_ACCESS_it;
  518. extern const ASN1_ITEM POLICY_MAPPING_it;
  519. POLICY_MAPPING *POLICY_MAPPING_new(void);
  520. void POLICY_MAPPING_free(POLICY_MAPPING *a);
  521. extern const ASN1_ITEM POLICY_MAPPINGS_it;
  522. extern const ASN1_ITEM GENERAL_SUBTREE_it;
  523. GENERAL_SUBTREE *GENERAL_SUBTREE_new(void);
  524. void GENERAL_SUBTREE_free(GENERAL_SUBTREE *a);
  525. extern const ASN1_ITEM NAME_CONSTRAINTS_it;
  526. NAME_CONSTRAINTS *NAME_CONSTRAINTS_new(void);
  527. void NAME_CONSTRAINTS_free(NAME_CONSTRAINTS *a);
  528. POLICY_CONSTRAINTS *POLICY_CONSTRAINTS_new(void);
  529. void POLICY_CONSTRAINTS_free(POLICY_CONSTRAINTS *a);
  530. extern const ASN1_ITEM POLICY_CONSTRAINTS_it;
  531. GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out,
  532. const X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
  533. int gen_type, const char *value, int is_nc);
  534. #ifdef HEADER_CONF_H
  535. GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx,
  536. CONF_VALUE *cnf);
  537. GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out,
  538. const X509V3_EXT_METHOD *method,
  539. X509V3_CTX *ctx, CONF_VALUE *cnf, int is_nc);
  540. void X509V3_conf_free(CONF_VALUE *val);
  541. X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid,
  542. const char *value);
  543. X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, const char *name,
  544. const char *value);
  545. int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, const char *section,
  546. STACK_OF(X509_EXTENSION) **sk);
  547. int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section,
  548. X509 *cert);
  549. int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section,
  550. X509_REQ *req);
  551. int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section,
  552. X509_CRL *crl);
  553. X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
  554. int ext_nid, const char *value);
  555. X509_EXTENSION *X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
  556. const char *name, const char *value);
  557. int X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
  558. const char *section, X509 *cert);
  559. int X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
  560. const char *section, X509_REQ *req);
  561. int X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
  562. const char *section, X509_CRL *crl);
  563. int X509V3_add_value_bool_nf(const char *name, int asn1_bool,
  564. STACK_OF(CONF_VALUE) **extlist);
  565. int X509V3_get_value_bool(const CONF_VALUE *value, int *asn1_bool);
  566. int X509V3_get_value_int(const CONF_VALUE *value, ASN1_INTEGER **aint);
  567. void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf);
  568. void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH_OF(CONF_VALUE) *lhash);
  569. #endif
  570. char *X509V3_get_string(X509V3_CTX *ctx, const char *name,
  571. const char *section);
  572. STACK_OF(CONF_VALUE) *X509V3_get_section(X509V3_CTX *ctx, const char *section);
  573. void X509V3_string_free(X509V3_CTX *ctx, char *str);
  574. void X509V3_section_free( X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section);
  575. void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject,
  576. X509_REQ *req, X509_CRL *crl, int flags);
  577. int X509V3_add_value(const char *name, const char *value,
  578. STACK_OF(CONF_VALUE) **extlist);
  579. int X509V3_add_value_uchar(const char *name, const unsigned char *value,
  580. STACK_OF(CONF_VALUE) **extlist);
  581. int X509V3_add_value_bool(const char *name, int asn1_bool,
  582. STACK_OF(CONF_VALUE) **extlist);
  583. int X509V3_add_value_int(const char *name, const ASN1_INTEGER *aint,
  584. STACK_OF(CONF_VALUE) **extlist);
  585. char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const ASN1_INTEGER *aint);
  586. ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const char *value);
  587. char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, const ASN1_ENUMERATED *aint);
  588. char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth,
  589. const ASN1_ENUMERATED *aint);
  590. int X509V3_EXT_add(X509V3_EXT_METHOD *ext);
  591. int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist);
  592. int X509V3_EXT_add_alias(int nid_to, int nid_from);
  593. void X509V3_EXT_cleanup(void);
  594. const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext);
  595. const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid);
  596. int X509V3_add_standard_extensions(void);
  597. STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line);
  598. void *X509V3_EXT_d2i(X509_EXTENSION *ext);
  599. void *X509V3_get_d2i(const STACK_OF(X509_EXTENSION) *x, int nid, int *crit,
  600. int *idx);
  601. X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc);
  602. int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, int crit, unsigned long flags);
  603. char *hex_to_string(const unsigned char *buffer, long len);
  604. unsigned char *string_to_hex(const char *str, long *len);
  605. void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent,
  606. int ml);
  607. int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, int indent);
  608. int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent);
  609. int X509V3_extensions_print(BIO *out, const char *title,
  610. const STACK_OF(X509_EXTENSION) *exts, unsigned long flag, int indent);
  611. int X509_check_ca(X509 *x);
  612. int X509_check_purpose(X509 *x, int id, int ca);
  613. int X509_supported_extension(X509_EXTENSION *ex);
  614. int X509_PURPOSE_set(int *p, int purpose);
  615. int X509_check_issued(X509 *issuer, X509 *subject);
  616. int X509_check_akid(X509 *issuer, AUTHORITY_KEYID *akid);
  617. int X509_PURPOSE_get_count(void);
  618. X509_PURPOSE * X509_PURPOSE_get0(int idx);
  619. int X509_PURPOSE_get_by_sname(const char *sname);
  620. int X509_PURPOSE_get_by_id(int id);
  621. int X509_PURPOSE_add(int id, int trust, int flags,
  622. int (*ck)(const X509_PURPOSE *, const X509 *, int),
  623. const char *name, const char *sname, void *arg);
  624. char *X509_PURPOSE_get0_name(const X509_PURPOSE *xp);
  625. char *X509_PURPOSE_get0_sname(const X509_PURPOSE *xp);
  626. int X509_PURPOSE_get_trust(const X509_PURPOSE *xp);
  627. void X509_PURPOSE_cleanup(void);
  628. int X509_PURPOSE_get_id(const X509_PURPOSE *);
  629. uint32_t X509_get_extension_flags(X509 *x);
  630. uint32_t X509_get_key_usage(X509 *x);
  631. uint32_t X509_get_extended_key_usage(X509 *x);
  632. STACK_OF(OPENSSL_STRING) *X509_get1_email(X509 *x);
  633. STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(X509_REQ *x);
  634. void X509_email_free(STACK_OF(OPENSSL_STRING) *sk);
  635. STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x);
  636. /* Flags for X509_check_* functions */
  637. /* Always check subject name for host match even if subject alt names present */
  638. #define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT 0x1
  639. /* Disable wildcard matching for dnsName fields and common name. */
  640. #define X509_CHECK_FLAG_NO_WILDCARDS 0x2
  641. /* Wildcards must not match a partial label. */
  642. #define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0x4
  643. /* Allow (non-partial) wildcards to match multiple labels. */
  644. #define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS 0x8
  645. /* Constraint verifier subdomain patterns to match a single labels. */
  646. #define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10
  647. /* Disable checking the CN for a hostname, to support modern validation */
  648. #define X509_CHECK_FLAG_NEVER_CHECK_SUBJECT 0x20
  649. /*
  650. * Match reference identifiers starting with "." to any sub-domain.
  651. * This is a non-public flag, turned on implicitly when the subject
  652. * reference identity is a DNS name.
  653. */
  654. #define _X509_CHECK_FLAG_DOT_SUBDOMAINS 0x8000
  655. int X509_check_host(X509 *x, const char *chk, size_t chklen,
  656. unsigned int flags, char **peername);
  657. int X509_check_email(X509 *x, const char *chk, size_t chklen,
  658. unsigned int flags);
  659. int X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen,
  660. unsigned int flags);
  661. int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags);
  662. ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc);
  663. ASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc);
  664. int a2i_ipadd(unsigned char *ipout, const char *ipasc);
  665. int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE)*dn_sk,
  666. unsigned long chtype);
  667. #ifndef OPENSSL_NO_RFC3779
  668. typedef struct ASRange_st {
  669. ASN1_INTEGER *min;
  670. ASN1_INTEGER *max;
  671. } ASRange;
  672. #define ASIdOrRange_id 0
  673. #define ASIdOrRange_range 1
  674. typedef struct ASIdOrRange_st {
  675. int type;
  676. union {
  677. ASN1_INTEGER *id;
  678. ASRange *range;
  679. } u;
  680. } ASIdOrRange;
  681. typedef STACK_OF(ASIdOrRange) ASIdOrRanges;
  682. DECLARE_STACK_OF(ASIdOrRange)
  683. #define ASIdentifierChoice_inherit 0
  684. #define ASIdentifierChoice_asIdsOrRanges 1
  685. typedef struct ASIdentifierChoice_st {
  686. int type;
  687. union {
  688. ASN1_NULL *inherit;
  689. ASIdOrRanges *asIdsOrRanges;
  690. } u;
  691. } ASIdentifierChoice;
  692. typedef struct ASIdentifiers_st {
  693. ASIdentifierChoice *asnum;
  694. ASIdentifierChoice *rdi;
  695. } ASIdentifiers;
  696. ASRange *ASRange_new(void);
  697. void ASRange_free(ASRange *a);
  698. ASRange *d2i_ASRange(ASRange **a, const unsigned char **in, long len);
  699. int i2d_ASRange(ASRange *a, unsigned char **out);
  700. extern const ASN1_ITEM ASRange_it;
  701. ASIdOrRange *ASIdOrRange_new(void);
  702. void ASIdOrRange_free(ASIdOrRange *a);
  703. ASIdOrRange *d2i_ASIdOrRange(ASIdOrRange **a, const unsigned char **in,
  704. long len);
  705. int i2d_ASIdOrRange(ASIdOrRange *a, unsigned char **out);
  706. extern const ASN1_ITEM ASIdOrRange_it;
  707. ASIdentifierChoice *ASIdentifierChoice_new(void);
  708. void ASIdentifierChoice_free(ASIdentifierChoice *a);
  709. ASIdentifierChoice *d2i_ASIdentifierChoice(ASIdentifierChoice **a,
  710. const unsigned char **in, long len);
  711. int i2d_ASIdentifierChoice(ASIdentifierChoice *a, unsigned char **out);
  712. extern const ASN1_ITEM ASIdentifierChoice_it;
  713. ASIdentifiers *ASIdentifiers_new(void);
  714. void ASIdentifiers_free(ASIdentifiers *a);
  715. ASIdentifiers *d2i_ASIdentifiers(ASIdentifiers **a, const unsigned char **in,
  716. long len);
  717. int i2d_ASIdentifiers(ASIdentifiers *a, unsigned char **out);
  718. extern const ASN1_ITEM ASIdentifiers_it;
  719. typedef struct IPAddressRange_st {
  720. ASN1_BIT_STRING *min;
  721. ASN1_BIT_STRING *max;
  722. } IPAddressRange;
  723. #define IPAddressOrRange_addressPrefix 0
  724. #define IPAddressOrRange_addressRange 1
  725. typedef struct IPAddressOrRange_st {
  726. int type;
  727. union {
  728. ASN1_BIT_STRING *addressPrefix;
  729. IPAddressRange *addressRange;
  730. } u;
  731. } IPAddressOrRange;
  732. typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges;
  733. DECLARE_STACK_OF(IPAddressOrRange)
  734. #define IPAddressChoice_inherit 0
  735. #define IPAddressChoice_addressesOrRanges 1
  736. typedef struct IPAddressChoice_st {
  737. int type;
  738. union {
  739. ASN1_NULL *inherit;
  740. IPAddressOrRanges *addressesOrRanges;
  741. } u;
  742. } IPAddressChoice;
  743. typedef struct IPAddressFamily_st {
  744. ASN1_OCTET_STRING *addressFamily;
  745. IPAddressChoice *ipAddressChoice;
  746. } IPAddressFamily;
  747. typedef STACK_OF(IPAddressFamily) IPAddrBlocks;
  748. DECLARE_STACK_OF(IPAddressFamily)
  749. IPAddressRange *IPAddressRange_new(void);
  750. void IPAddressRange_free(IPAddressRange *a);
  751. IPAddressRange *d2i_IPAddressRange(IPAddressRange **a,
  752. const unsigned char **in, long len);
  753. int i2d_IPAddressRange(IPAddressRange *a, unsigned char **out);
  754. extern const ASN1_ITEM IPAddressRange_it;
  755. IPAddressOrRange *IPAddressOrRange_new(void);
  756. void IPAddressOrRange_free(IPAddressOrRange *a);
  757. IPAddressOrRange *d2i_IPAddressOrRange(IPAddressOrRange **a,
  758. const unsigned char **in, long len);
  759. int i2d_IPAddressOrRange(IPAddressOrRange *a, unsigned char **out);
  760. extern const ASN1_ITEM IPAddressOrRange_it;
  761. IPAddressChoice *IPAddressChoice_new(void);
  762. void IPAddressChoice_free(IPAddressChoice *a);
  763. IPAddressChoice *d2i_IPAddressChoice(IPAddressChoice **a,
  764. const unsigned char **in, long len);
  765. int i2d_IPAddressChoice(IPAddressChoice *a, unsigned char **out);
  766. extern const ASN1_ITEM IPAddressChoice_it;
  767. IPAddressFamily *IPAddressFamily_new(void);
  768. void IPAddressFamily_free(IPAddressFamily *a);
  769. IPAddressFamily *d2i_IPAddressFamily(IPAddressFamily **a,
  770. const unsigned char **in, long len);
  771. int i2d_IPAddressFamily(IPAddressFamily *a, unsigned char **out);
  772. extern const ASN1_ITEM IPAddressFamily_it;
  773. /*
  774. * API tag for elements of the ASIdentifer SEQUENCE.
  775. */
  776. #define V3_ASID_ASNUM 0
  777. #define V3_ASID_RDI 1
  778. /*
  779. * AFI values, assigned by IANA. It'd be nice to make the AFI
  780. * handling code totally generic, but there are too many little things
  781. * that would need to be defined for other address families for it to
  782. * be worth the trouble.
  783. */
  784. #define IANA_AFI_IPV4 1
  785. #define IANA_AFI_IPV6 2
  786. /*
  787. * Utilities to construct and extract values from RFC3779 extensions,
  788. * since some of the encodings (particularly for IP address prefixes
  789. * and ranges) are a bit tedious to work with directly.
  790. */
  791. int X509v3_asid_add_inherit(ASIdentifiers *asid, int which);
  792. int X509v3_asid_add_id_or_range(ASIdentifiers *asid, int which,
  793. ASN1_INTEGER *min, ASN1_INTEGER *max);
  794. int X509v3_addr_add_inherit(IPAddrBlocks *addr, const unsigned afi,
  795. const unsigned *safi);
  796. int X509v3_addr_add_prefix(IPAddrBlocks *addr, const unsigned afi,
  797. const unsigned *safi, unsigned char *a, const int prefixlen);
  798. int X509v3_addr_add_range(IPAddrBlocks *addr, const unsigned afi,
  799. const unsigned *safi, unsigned char *min, unsigned char *max);
  800. unsigned X509v3_addr_get_afi(const IPAddressFamily *f);
  801. int X509v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi,
  802. unsigned char *min, unsigned char *max, const int length);
  803. /*
  804. * Canonical forms.
  805. */
  806. int X509v3_asid_is_canonical(ASIdentifiers *asid);
  807. int X509v3_addr_is_canonical(IPAddrBlocks *addr);
  808. int X509v3_asid_canonize(ASIdentifiers *asid);
  809. int X509v3_addr_canonize(IPAddrBlocks *addr);
  810. /*
  811. * Tests for inheritance and containment.
  812. */
  813. int X509v3_asid_inherits(ASIdentifiers *asid);
  814. int X509v3_addr_inherits(IPAddrBlocks *addr);
  815. int X509v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b);
  816. int X509v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b);
  817. /*
  818. * Check whether RFC 3779 extensions nest properly in chains.
  819. */
  820. int X509v3_asid_validate_path(X509_STORE_CTX *);
  821. int X509v3_addr_validate_path(X509_STORE_CTX *);
  822. int X509v3_asid_validate_resource_set(STACK_OF(X509) *chain, ASIdentifiers *ext,
  823. int allow_inheritance);
  824. int X509v3_addr_validate_resource_set(STACK_OF(X509) *chain, IPAddrBlocks *ext,
  825. int allow_inheritance);
  826. #endif /* !OPENSSL_NO_RFC3779 */
  827. void ERR_load_X509V3_strings(void);
  828. /* Error codes for the X509V3 functions. */
  829. /* Function codes. */
  830. #define X509V3_F_A2I_GENERAL_NAME 164
  831. #define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE 161
  832. #define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL 162
  833. #define X509V3_F_COPY_EMAIL 122
  834. #define X509V3_F_COPY_ISSUER 123
  835. #define X509V3_F_DO_DIRNAME 144
  836. #define X509V3_F_DO_EXT_CONF 124
  837. #define X509V3_F_DO_EXT_I2D 135
  838. #define X509V3_F_DO_EXT_NCONF 151
  839. #define X509V3_F_DO_I2V_NAME_CONSTRAINTS 148
  840. #define X509V3_F_GNAMES_FROM_SECTNAME 156
  841. #define X509V3_F_HEX_TO_STRING 111
  842. #define X509V3_F_I2S_ASN1_ENUMERATED 121
  843. #define X509V3_F_I2S_ASN1_IA5STRING 149
  844. #define X509V3_F_I2S_ASN1_INTEGER 120
  845. #define X509V3_F_I2V_AUTHORITY_INFO_ACCESS 138
  846. #define X509V3_F_NOTICE_SECTION 132
  847. #define X509V3_F_NREF_NOS 133
  848. #define X509V3_F_POLICY_SECTION 131
  849. #define X509V3_F_PROCESS_PCI_VALUE 150
  850. #define X509V3_F_R2I_CERTPOL 130
  851. #define X509V3_F_R2I_PCI 155
  852. #define X509V3_F_S2I_ASN1_IA5STRING 100
  853. #define X509V3_F_S2I_ASN1_INTEGER 108
  854. #define X509V3_F_S2I_ASN1_OCTET_STRING 112
  855. #define X509V3_F_S2I_ASN1_SKEY_ID 114
  856. #define X509V3_F_S2I_SKEY_ID 115
  857. #define X509V3_F_SET_DIST_POINT_NAME 158
  858. #define X509V3_F_STRING_TO_HEX 113
  859. #define X509V3_F_SXNET_ADD_ID_ASC 125
  860. #define X509V3_F_SXNET_ADD_ID_INTEGER 126
  861. #define X509V3_F_SXNET_ADD_ID_ULONG 127
  862. #define X509V3_F_SXNET_GET_ID_ASC 128
  863. #define X509V3_F_SXNET_GET_ID_ULONG 129
  864. #define X509V3_F_V2I_ASIDENTIFIERS 163
  865. #define X509V3_F_V2I_ASN1_BIT_STRING 101
  866. #define X509V3_F_V2I_AUTHORITY_INFO_ACCESS 139
  867. #define X509V3_F_V2I_AUTHORITY_KEYID 119
  868. #define X509V3_F_V2I_BASIC_CONSTRAINTS 102
  869. #define X509V3_F_V2I_CRLD 134
  870. #define X509V3_F_V2I_EXTENDED_KEY_USAGE 103
  871. #define X509V3_F_V2I_GENERAL_NAMES 118
  872. #define X509V3_F_V2I_GENERAL_NAME_EX 117
  873. #define X509V3_F_V2I_IDP 157
  874. #define X509V3_F_V2I_IPADDRBLOCKS 159
  875. #define X509V3_F_V2I_ISSUER_ALT 153
  876. #define X509V3_F_V2I_NAME_CONSTRAINTS 147
  877. #define X509V3_F_V2I_POLICY_CONSTRAINTS 146
  878. #define X509V3_F_V2I_POLICY_MAPPINGS 145
  879. #define X509V3_F_V2I_SUBJECT_ALT 154
  880. #define X509V3_F_V3_ADDR_VALIDATE_PATH_INTERNAL 160
  881. #define X509V3_F_V3_GENERIC_EXTENSION 116
  882. #define X509V3_F_X509V3_ADD1_I2D 140
  883. #define X509V3_F_X509V3_ADD_VALUE 105
  884. #define X509V3_F_X509V3_EXT_ADD 104
  885. #define X509V3_F_X509V3_EXT_ADD_ALIAS 106
  886. #define X509V3_F_X509V3_EXT_CONF 107
  887. #define X509V3_F_X509V3_EXT_I2D 136
  888. #define X509V3_F_X509V3_EXT_NCONF 152
  889. #define X509V3_F_X509V3_GET_SECTION 142
  890. #define X509V3_F_X509V3_GET_STRING 143
  891. #define X509V3_F_X509V3_GET_VALUE_BOOL 110
  892. #define X509V3_F_X509V3_PARSE_LIST 109
  893. #define X509V3_F_X509_PURPOSE_ADD 137
  894. #define X509V3_F_X509_PURPOSE_SET 141
  895. /* Reason codes. */
  896. #define X509V3_R_BAD_IP_ADDRESS 118
  897. #define X509V3_R_BAD_OBJECT 119
  898. #define X509V3_R_BN_DEC2BN_ERROR 100
  899. #define X509V3_R_BN_TO_ASN1_INTEGER_ERROR 101
  900. #define X509V3_R_DIRNAME_ERROR 149
  901. #define X509V3_R_DISTPOINT_ALREADY_SET 160
  902. #define X509V3_R_DUPLICATE_ZONE_ID 133
  903. #define X509V3_R_ERROR_CONVERTING_ZONE 131
  904. #define X509V3_R_ERROR_CREATING_EXTENSION 144
  905. #define X509V3_R_ERROR_IN_EXTENSION 128
  906. #define X509V3_R_EXPECTED_A_SECTION_NAME 137
  907. #define X509V3_R_EXTENSION_EXISTS 145
  908. #define X509V3_R_EXTENSION_NAME_ERROR 115
  909. #define X509V3_R_EXTENSION_NOT_FOUND 102
  910. #define X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED 103
  911. #define X509V3_R_EXTENSION_VALUE_ERROR 116
  912. #define X509V3_R_ILLEGAL_EMPTY_EXTENSION 151
  913. #define X509V3_R_ILLEGAL_HEX_DIGIT 113
  914. #define X509V3_R_INCORRECT_POLICY_SYNTAX_TAG 152
  915. #define X509V3_R_INVALID_MULTIPLE_RDNS 161
  916. #define X509V3_R_INVALID_ASNUMBER 162
  917. #define X509V3_R_INVALID_ASRANGE 163
  918. #define X509V3_R_INVALID_BOOLEAN_STRING 104
  919. #define X509V3_R_INVALID_EXTENSION_STRING 105
  920. #define X509V3_R_INVALID_INHERITANCE 165
  921. #define X509V3_R_INVALID_IPADDRESS 166
  922. #define X509V3_R_INVALID_NAME 106
  923. #define X509V3_R_INVALID_NULL_ARGUMENT 107
  924. #define X509V3_R_INVALID_NULL_NAME 108
  925. #define X509V3_R_INVALID_NULL_VALUE 109
  926. #define X509V3_R_INVALID_NUMBER 140
  927. #define X509V3_R_INVALID_NUMBERS 141
  928. #define X509V3_R_INVALID_OBJECT_IDENTIFIER 110
  929. #define X509V3_R_INVALID_OPTION 138
  930. #define X509V3_R_INVALID_POLICY_IDENTIFIER 134
  931. #define X509V3_R_INVALID_PROXY_POLICY_SETTING 153
  932. #define X509V3_R_INVALID_PURPOSE 146
  933. #define X509V3_R_INVALID_SAFI 164
  934. #define X509V3_R_INVALID_SECTION 135
  935. #define X509V3_R_INVALID_SYNTAX 143
  936. #define X509V3_R_ISSUER_DECODE_ERROR 126
  937. #define X509V3_R_MISSING_VALUE 124
  938. #define X509V3_R_NEED_ORGANIZATION_AND_NUMBERS 142
  939. #define X509V3_R_NO_CONFIG_DATABASE 136
  940. #define X509V3_R_NO_ISSUER_CERTIFICATE 121
  941. #define X509V3_R_NO_ISSUER_DETAILS 127
  942. #define X509V3_R_NO_POLICY_IDENTIFIER 139
  943. #define X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED 154
  944. #define X509V3_R_NO_PUBLIC_KEY 114
  945. #define X509V3_R_NO_SUBJECT_DETAILS 125
  946. #define X509V3_R_ODD_NUMBER_OF_DIGITS 112
  947. #define X509V3_R_OPERATION_NOT_DEFINED 148
  948. #define X509V3_R_OTHERNAME_ERROR 147
  949. #define X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED 155
  950. #define X509V3_R_POLICY_PATH_LENGTH 156
  951. #define X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED 157
  952. #define X509V3_R_POLICY_SYNTAX_NOT_CURRENTLY_SUPPORTED 158
  953. #define X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY 159
  954. #define X509V3_R_SECTION_NOT_FOUND 150
  955. #define X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS 122
  956. #define X509V3_R_UNABLE_TO_GET_ISSUER_KEYID 123
  957. #define X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT 111
  958. #define X509V3_R_UNKNOWN_EXTENSION 129
  959. #define X509V3_R_UNKNOWN_EXTENSION_NAME 130
  960. #define X509V3_R_UNKNOWN_OPTION 120
  961. #define X509V3_R_UNSUPPORTED_OPTION 117
  962. #define X509V3_R_UNSUPPORTED_TYPE 167
  963. #define X509V3_R_USER_TOO_LONG 132
  964. #ifdef __cplusplus
  965. }
  966. #endif
  967. #endif