LCOV - code coverage report
Current view: top level - usr/include/openssl - x509v3.h (source / functions) Hit Total Coverage
Test: rapport Lines: 0 1 0.0 %
Date: 2021-12-10 16:22:55 Functions: 0 2 0.0 %
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /*
       2                 :            :  * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved.
       3                 :            :  *
       4                 :            :  * Licensed under the OpenSSL license (the "License").  You may not use
       5                 :            :  * this file except in compliance with the License.  You can obtain a copy
       6                 :            :  * in the file LICENSE in the source distribution or at
       7                 :            :  * https://www.openssl.org/source/license.html
       8                 :            :  */
       9                 :            : 
      10                 :            : #ifndef HEADER_X509V3_H
      11                 :            : # define HEADER_X509V3_H
      12                 :            : 
      13                 :            : # include <openssl/bio.h>
      14                 :            : # include <openssl/x509.h>
      15                 :            : # include <openssl/conf.h>
      16                 :            : # include <openssl/x509v3err.h>
      17                 :            : 
      18                 :            : #ifdef __cplusplus
      19                 :            : extern "C" {
      20                 :            : #endif
      21                 :            : 
      22                 :            : /* Forward reference */
      23                 :            : struct v3_ext_method;
      24                 :            : struct v3_ext_ctx;
      25                 :            : 
      26                 :            : /* Useful typedefs */
      27                 :            : 
      28                 :            : typedef void *(*X509V3_EXT_NEW)(void);
      29                 :            : typedef void (*X509V3_EXT_FREE) (void *);
      30                 :            : typedef void *(*X509V3_EXT_D2I)(void *, const unsigned char **, long);
      31                 :            : typedef int (*X509V3_EXT_I2D) (void *, unsigned char **);
      32                 :            : typedef STACK_OF(CONF_VALUE) *
      33                 :            :     (*X509V3_EXT_I2V) (const struct v3_ext_method *method, void *ext,
      34                 :            :                        STACK_OF(CONF_VALUE) *extlist);
      35                 :            : typedef void *(*X509V3_EXT_V2I)(const struct v3_ext_method *method,
      36                 :            :                                 struct v3_ext_ctx *ctx,
      37                 :            :                                 STACK_OF(CONF_VALUE) *values);
      38                 :            : typedef char *(*X509V3_EXT_I2S)(const struct v3_ext_method *method,
      39                 :            :                                 void *ext);
      40                 :            : typedef void *(*X509V3_EXT_S2I)(const struct v3_ext_method *method,
      41                 :            :                                 struct v3_ext_ctx *ctx, const char *str);
      42                 :            : typedef int (*X509V3_EXT_I2R) (const struct v3_ext_method *method, void *ext,
      43                 :            :                                BIO *out, int indent);
      44                 :            : typedef void *(*X509V3_EXT_R2I)(const struct v3_ext_method *method,
      45                 :            :                                 struct v3_ext_ctx *ctx, const char *str);
      46                 :            : 
      47                 :            : /* V3 extension structure */
      48                 :            : 
      49                 :            : struct v3_ext_method {
      50                 :            :     int ext_nid;
      51                 :            :     int ext_flags;
      52                 :            : /* If this is set the following four fields are ignored */
      53                 :            :     ASN1_ITEM_EXP *it;
      54                 :            : /* Old style ASN1 calls */
      55                 :            :     X509V3_EXT_NEW ext_new;
      56                 :            :     X509V3_EXT_FREE ext_free;
      57                 :            :     X509V3_EXT_D2I d2i;
      58                 :            :     X509V3_EXT_I2D i2d;
      59                 :            : /* The following pair is used for string extensions */
      60                 :            :     X509V3_EXT_I2S i2s;
      61                 :            :     X509V3_EXT_S2I s2i;
      62                 :            : /* The following pair is used for multi-valued extensions */
      63                 :            :     X509V3_EXT_I2V i2v;
      64                 :            :     X509V3_EXT_V2I v2i;
      65                 :            : /* The following are used for raw extensions */
      66                 :            :     X509V3_EXT_I2R i2r;
      67                 :            :     X509V3_EXT_R2I r2i;
      68                 :            :     void *usr_data;             /* Any extension specific data */
      69                 :            : };
      70                 :            : 
      71                 :            : typedef struct X509V3_CONF_METHOD_st {
      72                 :            :     char *(*get_string) (void *db, const char *section, const char *value);
      73                 :            :     STACK_OF(CONF_VALUE) *(*get_section) (void *db, const char *section);
      74                 :            :     void (*free_string) (void *db, char *string);
      75                 :            :     void (*free_section) (void *db, STACK_OF(CONF_VALUE) *section);
      76                 :            : } X509V3_CONF_METHOD;
      77                 :            : 
      78                 :            : /* Context specific info */
      79                 :            : struct v3_ext_ctx {
      80                 :            : # define CTX_TEST 0x1
      81                 :            : # define X509V3_CTX_REPLACE 0x2
      82                 :            :     int flags;
      83                 :            :     X509 *issuer_cert;
      84                 :            :     X509 *subject_cert;
      85                 :            :     X509_REQ *subject_req;
      86                 :            :     X509_CRL *crl;
      87                 :            :     X509V3_CONF_METHOD *db_meth;
      88                 :            :     void *db;
      89                 :            : /* Maybe more here */
      90                 :            : };
      91                 :            : 
      92                 :            : typedef struct v3_ext_method X509V3_EXT_METHOD;
      93                 :            : 
      94                 :            : DEFINE_STACK_OF(X509V3_EXT_METHOD)
      95                 :            : 
      96                 :            : /* ext_flags values */
      97                 :            : # define X509V3_EXT_DYNAMIC      0x1
      98                 :            : # define X509V3_EXT_CTX_DEP      0x2
      99                 :            : # define X509V3_EXT_MULTILINE    0x4
     100                 :            : 
     101                 :            : typedef BIT_STRING_BITNAME ENUMERATED_NAMES;
     102                 :            : 
     103                 :            : typedef struct BASIC_CONSTRAINTS_st {
     104                 :            :     int ca;
     105                 :            :     ASN1_INTEGER *pathlen;
     106                 :            : } BASIC_CONSTRAINTS;
     107                 :            : 
     108                 :            : typedef struct PKEY_USAGE_PERIOD_st {
     109                 :            :     ASN1_GENERALIZEDTIME *notBefore;
     110                 :            :     ASN1_GENERALIZEDTIME *notAfter;
     111                 :            : } PKEY_USAGE_PERIOD;
     112                 :            : 
     113                 :            : typedef struct otherName_st {
     114                 :            :     ASN1_OBJECT *type_id;
     115                 :            :     ASN1_TYPE *value;
     116                 :            : } OTHERNAME;
     117                 :            : 
     118                 :            : typedef struct EDIPartyName_st {
     119                 :            :     ASN1_STRING *nameAssigner;
     120                 :            :     ASN1_STRING *partyName;
     121                 :            : } EDIPARTYNAME;
     122                 :            : 
     123                 :            : typedef struct GENERAL_NAME_st {
     124                 :            : # define GEN_OTHERNAME   0
     125                 :            : # define GEN_EMAIL       1
     126                 :            : # define GEN_DNS         2
     127                 :            : # define GEN_X400        3
     128                 :            : # define GEN_DIRNAME     4
     129                 :            : # define GEN_EDIPARTY    5
     130                 :            : # define GEN_URI         6
     131                 :            : # define GEN_IPADD       7
     132                 :            : # define GEN_RID         8
     133                 :            :     int type;
     134                 :            :     union {
     135                 :            :         char *ptr;
     136                 :            :         OTHERNAME *otherName;   /* otherName */
     137                 :            :         ASN1_IA5STRING *rfc822Name;
     138                 :            :         ASN1_IA5STRING *dNSName;
     139                 :            :         ASN1_TYPE *x400Address;
     140                 :            :         X509_NAME *directoryName;
     141                 :            :         EDIPARTYNAME *ediPartyName;
     142                 :            :         ASN1_IA5STRING *uniformResourceIdentifier;
     143                 :            :         ASN1_OCTET_STRING *iPAddress;
     144                 :            :         ASN1_OBJECT *registeredID;
     145                 :            :         /* Old names */
     146                 :            :         ASN1_OCTET_STRING *ip;  /* iPAddress */
     147                 :            :         X509_NAME *dirn;        /* dirn */
     148                 :            :         ASN1_IA5STRING *ia5;    /* rfc822Name, dNSName,
     149                 :            :                                  * uniformResourceIdentifier */
     150                 :            :         ASN1_OBJECT *rid;       /* registeredID */
     151                 :            :         ASN1_TYPE *other;       /* x400Address */
     152                 :            :     } d;
     153                 :            : } GENERAL_NAME;
     154                 :            : 
     155                 :            : typedef struct ACCESS_DESCRIPTION_st {
     156                 :            :     ASN1_OBJECT *method;
     157                 :            :     GENERAL_NAME *location;
     158                 :            : } ACCESS_DESCRIPTION;
     159                 :            : 
     160                 :            : typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS;
     161                 :            : 
     162                 :            : typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE;
     163                 :            : 
     164                 :            : typedef STACK_OF(ASN1_INTEGER) TLS_FEATURE;
     165                 :            : 
     166                 :          0 : DEFINE_STACK_OF(GENERAL_NAME)
     167                 :            : typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES;
     168                 :            : DEFINE_STACK_OF(GENERAL_NAMES)
     169                 :            : 
     170                 :            : DEFINE_STACK_OF(ACCESS_DESCRIPTION)
     171                 :            : 
     172                 :            : typedef struct DIST_POINT_NAME_st {
     173                 :            :     int type;
     174                 :            :     union {
     175                 :            :         GENERAL_NAMES *fullname;
     176                 :            :         STACK_OF(X509_NAME_ENTRY) *relativename;
     177                 :            :     } name;
     178                 :            : /* If relativename then this contains the full distribution point name */
     179                 :            :     X509_NAME *dpname;
     180                 :            : } DIST_POINT_NAME;
     181                 :            : /* All existing reasons */
     182                 :            : # define CRLDP_ALL_REASONS       0x807f
     183                 :            : 
     184                 :            : # define CRL_REASON_NONE                         -1
     185                 :            : # define CRL_REASON_UNSPECIFIED                  0
     186                 :            : # define CRL_REASON_KEY_COMPROMISE               1
     187                 :            : # define CRL_REASON_CA_COMPROMISE                2
     188                 :            : # define CRL_REASON_AFFILIATION_CHANGED          3
     189                 :            : # define CRL_REASON_SUPERSEDED                   4
     190                 :            : # define CRL_REASON_CESSATION_OF_OPERATION       5
     191                 :            : # define CRL_REASON_CERTIFICATE_HOLD             6
     192                 :            : # define CRL_REASON_REMOVE_FROM_CRL              8
     193                 :            : # define CRL_REASON_PRIVILEGE_WITHDRAWN          9
     194                 :            : # define CRL_REASON_AA_COMPROMISE                10
     195                 :            : 
     196                 :            : struct DIST_POINT_st {
     197                 :            :     DIST_POINT_NAME *distpoint;
     198                 :            :     ASN1_BIT_STRING *reasons;
     199                 :            :     GENERAL_NAMES *CRLissuer;
     200                 :            :     int dp_reasons;
     201                 :            : };
     202                 :            : 
     203                 :            : typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS;
     204                 :            : 
     205                 :            : DEFINE_STACK_OF(DIST_POINT)
     206                 :            : 
     207                 :            : struct AUTHORITY_KEYID_st {
     208                 :            :     ASN1_OCTET_STRING *keyid;
     209                 :            :     GENERAL_NAMES *issuer;
     210                 :            :     ASN1_INTEGER *serial;
     211                 :            : };
     212                 :            : 
     213                 :            : /* Strong extranet structures */
     214                 :            : 
     215                 :            : typedef struct SXNET_ID_st {
     216                 :            :     ASN1_INTEGER *zone;
     217                 :            :     ASN1_OCTET_STRING *user;
     218                 :            : } SXNETID;
     219                 :            : 
     220                 :            : DEFINE_STACK_OF(SXNETID)
     221                 :            : 
     222                 :            : typedef struct SXNET_st {
     223                 :            :     ASN1_INTEGER *version;
     224                 :            :     STACK_OF(SXNETID) *ids;
     225                 :            : } SXNET;
     226                 :            : 
     227                 :            : typedef struct NOTICEREF_st {
     228                 :            :     ASN1_STRING *organization;
     229                 :            :     STACK_OF(ASN1_INTEGER) *noticenos;
     230                 :            : } NOTICEREF;
     231                 :            : 
     232                 :            : typedef struct USERNOTICE_st {
     233                 :            :     NOTICEREF *noticeref;
     234                 :            :     ASN1_STRING *exptext;
     235                 :            : } USERNOTICE;
     236                 :            : 
     237                 :            : typedef struct POLICYQUALINFO_st {
     238                 :            :     ASN1_OBJECT *pqualid;
     239                 :            :     union {
     240                 :            :         ASN1_IA5STRING *cpsuri;
     241                 :            :         USERNOTICE *usernotice;
     242                 :            :         ASN1_TYPE *other;
     243                 :            :     } d;
     244                 :            : } POLICYQUALINFO;
     245                 :            : 
     246                 :            : DEFINE_STACK_OF(POLICYQUALINFO)
     247                 :            : 
     248                 :            : typedef struct POLICYINFO_st {
     249                 :            :     ASN1_OBJECT *policyid;
     250                 :            :     STACK_OF(POLICYQUALINFO) *qualifiers;
     251                 :            : } POLICYINFO;
     252                 :            : 
     253                 :            : typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES;
     254                 :            : 
     255                 :            : DEFINE_STACK_OF(POLICYINFO)
     256                 :            : 
     257                 :            : typedef struct POLICY_MAPPING_st {
     258                 :            :     ASN1_OBJECT *issuerDomainPolicy;
     259                 :            :     ASN1_OBJECT *subjectDomainPolicy;
     260                 :            : } POLICY_MAPPING;
     261                 :            : 
     262                 :            : DEFINE_STACK_OF(POLICY_MAPPING)
     263                 :            : 
     264                 :            : typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS;
     265                 :            : 
     266                 :            : typedef struct GENERAL_SUBTREE_st {
     267                 :            :     GENERAL_NAME *base;
     268                 :            :     ASN1_INTEGER *minimum;
     269                 :            :     ASN1_INTEGER *maximum;
     270                 :            : } GENERAL_SUBTREE;
     271                 :            : 
     272                 :            : DEFINE_STACK_OF(GENERAL_SUBTREE)
     273                 :            : 
     274                 :            : struct NAME_CONSTRAINTS_st {
     275                 :            :     STACK_OF(GENERAL_SUBTREE) *permittedSubtrees;
     276                 :            :     STACK_OF(GENERAL_SUBTREE) *excludedSubtrees;
     277                 :            : };
     278                 :            : 
     279                 :            : typedef struct POLICY_CONSTRAINTS_st {
     280                 :            :     ASN1_INTEGER *requireExplicitPolicy;
     281                 :            :     ASN1_INTEGER *inhibitPolicyMapping;
     282                 :            : } POLICY_CONSTRAINTS;
     283                 :            : 
     284                 :            : /* Proxy certificate structures, see RFC 3820 */
     285                 :            : typedef struct PROXY_POLICY_st {
     286                 :            :     ASN1_OBJECT *policyLanguage;
     287                 :            :     ASN1_OCTET_STRING *policy;
     288                 :            : } PROXY_POLICY;
     289                 :            : 
     290                 :            : typedef struct PROXY_CERT_INFO_EXTENSION_st {
     291                 :            :     ASN1_INTEGER *pcPathLengthConstraint;
     292                 :            :     PROXY_POLICY *proxyPolicy;
     293                 :            : } PROXY_CERT_INFO_EXTENSION;
     294                 :            : 
     295                 :            : DECLARE_ASN1_FUNCTIONS(PROXY_POLICY)
     296                 :            : DECLARE_ASN1_FUNCTIONS(PROXY_CERT_INFO_EXTENSION)
     297                 :            : 
     298                 :            : struct ISSUING_DIST_POINT_st {
     299                 :            :     DIST_POINT_NAME *distpoint;
     300                 :            :     int onlyuser;
     301                 :            :     int onlyCA;
     302                 :            :     ASN1_BIT_STRING *onlysomereasons;
     303                 :            :     int indirectCRL;
     304                 :            :     int onlyattr;
     305                 :            : };
     306                 :            : 
     307                 :            : /* Values in idp_flags field */
     308                 :            : /* IDP present */
     309                 :            : # define IDP_PRESENT     0x1
     310                 :            : /* IDP values inconsistent */
     311                 :            : # define IDP_INVALID     0x2
     312                 :            : /* onlyuser true */
     313                 :            : # define IDP_ONLYUSER    0x4
     314                 :            : /* onlyCA true */
     315                 :            : # define IDP_ONLYCA      0x8
     316                 :            : /* onlyattr true */
     317                 :            : # define IDP_ONLYATTR    0x10
     318                 :            : /* indirectCRL true */
     319                 :            : # define IDP_INDIRECT    0x20
     320                 :            : /* onlysomereasons present */
     321                 :            : # define IDP_REASONS     0x40
     322                 :            : 
     323                 :            : # define X509V3_conf_err(val) ERR_add_error_data(6, \
     324                 :            :                         "section:", (val)->section, \
     325                 :            :                         ",name:", (val)->name, ",value:", (val)->value)
     326                 :            : 
     327                 :            : # define X509V3_set_ctx_test(ctx) \
     328                 :            :                         X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST)
     329                 :            : # define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL;
     330                 :            : 
     331                 :            : # define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \
     332                 :            :                         0,0,0,0, \
     333                 :            :                         0,0, \
     334                 :            :                         (X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \
     335                 :            :                         (X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \
     336                 :            :                         NULL, NULL, \
     337                 :            :                         table}
     338                 :            : 
     339                 :            : # define EXT_IA5STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_IA5STRING), \
     340                 :            :                         0,0,0,0, \
     341                 :            :                         (X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \
     342                 :            :                         (X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \
     343                 :            :                         0,0,0,0, \
     344                 :            :                         NULL}
     345                 :            : 
     346                 :            : # define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
     347                 :            : 
     348                 :            : /* X509_PURPOSE stuff */
     349                 :            : 
     350                 :            : # define EXFLAG_BCONS            0x1
     351                 :            : # define EXFLAG_KUSAGE           0x2
     352                 :            : # define EXFLAG_XKUSAGE          0x4
     353                 :            : # define EXFLAG_NSCERT           0x8
     354                 :            : 
     355                 :            : # define EXFLAG_CA               0x10
     356                 :            : /* Really self issued not necessarily self signed */
     357                 :            : # define EXFLAG_SI               0x20
     358                 :            : # define EXFLAG_V1               0x40
     359                 :            : # define EXFLAG_INVALID          0x80
     360                 :            : /* EXFLAG_SET is set to indicate that some values have been precomputed */
     361                 :            : # define EXFLAG_SET              0x100
     362                 :            : # define EXFLAG_CRITICAL         0x200
     363                 :            : # define EXFLAG_PROXY            0x400
     364                 :            : 
     365                 :            : # define EXFLAG_INVALID_POLICY   0x800
     366                 :            : # define EXFLAG_FRESHEST         0x1000
     367                 :            : # define EXFLAG_SS               0x2000 /* cert is apparently self-signed */
     368                 :            : 
     369                 :            : # define EXFLAG_NO_FINGERPRINT   0x100000
     370                 :            : 
     371                 :            : # define KU_DIGITAL_SIGNATURE    0x0080
     372                 :            : # define KU_NON_REPUDIATION      0x0040
     373                 :            : # define KU_KEY_ENCIPHERMENT     0x0020
     374                 :            : # define KU_DATA_ENCIPHERMENT    0x0010
     375                 :            : # define KU_KEY_AGREEMENT        0x0008
     376                 :            : # define KU_KEY_CERT_SIGN        0x0004
     377                 :            : # define KU_CRL_SIGN             0x0002
     378                 :            : # define KU_ENCIPHER_ONLY        0x0001
     379                 :            : # define KU_DECIPHER_ONLY        0x8000
     380                 :            : 
     381                 :            : # define NS_SSL_CLIENT           0x80
     382                 :            : # define NS_SSL_SERVER           0x40
     383                 :            : # define NS_SMIME                0x20
     384                 :            : # define NS_OBJSIGN              0x10
     385                 :            : # define NS_SSL_CA               0x04
     386                 :            : # define NS_SMIME_CA             0x02
     387                 :            : # define NS_OBJSIGN_CA           0x01
     388                 :            : # define NS_ANY_CA               (NS_SSL_CA|NS_SMIME_CA|NS_OBJSIGN_CA)
     389                 :            : 
     390                 :            : # define XKU_SSL_SERVER          0x1
     391                 :            : # define XKU_SSL_CLIENT          0x2
     392                 :            : # define XKU_SMIME               0x4
     393                 :            : # define XKU_CODE_SIGN           0x8
     394                 :            : # define XKU_SGC                 0x10
     395                 :            : # define XKU_OCSP_SIGN           0x20
     396                 :            : # define XKU_TIMESTAMP           0x40
     397                 :            : # define XKU_DVCS                0x80
     398                 :            : # define XKU_ANYEKU              0x100
     399                 :            : 
     400                 :            : # define X509_PURPOSE_DYNAMIC    0x1
     401                 :            : # define X509_PURPOSE_DYNAMIC_NAME       0x2
     402                 :            : 
     403                 :            : typedef struct x509_purpose_st {
     404                 :            :     int purpose;
     405                 :            :     int trust;                  /* Default trust ID */
     406                 :            :     int flags;
     407                 :            :     int (*check_purpose) (const struct x509_purpose_st *, const X509 *, int);
     408                 :            :     char *name;
     409                 :            :     char *sname;
     410                 :            :     void *usr_data;
     411                 :            : } X509_PURPOSE;
     412                 :            : 
     413                 :            : # define X509_PURPOSE_SSL_CLIENT         1
     414                 :            : # define X509_PURPOSE_SSL_SERVER         2
     415                 :            : # define X509_PURPOSE_NS_SSL_SERVER      3
     416                 :            : # define X509_PURPOSE_SMIME_SIGN         4
     417                 :            : # define X509_PURPOSE_SMIME_ENCRYPT      5
     418                 :            : # define X509_PURPOSE_CRL_SIGN           6
     419                 :            : # define X509_PURPOSE_ANY                7
     420                 :            : # define X509_PURPOSE_OCSP_HELPER        8
     421                 :            : # define X509_PURPOSE_TIMESTAMP_SIGN     9
     422                 :            : 
     423                 :            : # define X509_PURPOSE_MIN                1
     424                 :            : # define X509_PURPOSE_MAX                9
     425                 :            : 
     426                 :            : /* Flags for X509V3_EXT_print() */
     427                 :            : 
     428                 :            : # define X509V3_EXT_UNKNOWN_MASK         (0xfL << 16)
     429                 :            : /* Return error for unknown extensions */
     430                 :            : # define X509V3_EXT_DEFAULT              0
     431                 :            : /* Print error for unknown extensions */
     432                 :            : # define X509V3_EXT_ERROR_UNKNOWN        (1L << 16)
     433                 :            : /* ASN1 parse unknown extensions */
     434                 :            : # define X509V3_EXT_PARSE_UNKNOWN        (2L << 16)
     435                 :            : /* BIO_dump unknown extensions */
     436                 :            : # define X509V3_EXT_DUMP_UNKNOWN         (3L << 16)
     437                 :            : 
     438                 :            : /* Flags for X509V3_add1_i2d */
     439                 :            : 
     440                 :            : # define X509V3_ADD_OP_MASK              0xfL
     441                 :            : # define X509V3_ADD_DEFAULT              0L
     442                 :            : # define X509V3_ADD_APPEND               1L
     443                 :            : # define X509V3_ADD_REPLACE              2L
     444                 :            : # define X509V3_ADD_REPLACE_EXISTING     3L
     445                 :            : # define X509V3_ADD_KEEP_EXISTING        4L
     446                 :            : # define X509V3_ADD_DELETE               5L
     447                 :            : # define X509V3_ADD_SILENT               0x10
     448                 :            : 
     449                 :            : DEFINE_STACK_OF(X509_PURPOSE)
     450                 :            : 
     451                 :            : DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS)
     452                 :            : 
     453                 :            : DECLARE_ASN1_FUNCTIONS(SXNET)
     454                 :            : DECLARE_ASN1_FUNCTIONS(SXNETID)
     455                 :            : 
     456                 :            : int SXNET_add_id_asc(SXNET **psx, const char *zone, const char *user, int userlen);
     457                 :            : int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, const char *user,
     458                 :            :                        int userlen);
     459                 :            : int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *izone, const char *user,
     460                 :            :                          int userlen);
     461                 :            : 
     462                 :            : ASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, const char *zone);
     463                 :            : ASN1_OCTET_STRING *SXNET_get_id_ulong(SXNET *sx, unsigned long lzone);
     464                 :            : ASN1_OCTET_STRING *SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone);
     465                 :            : 
     466                 :            : DECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID)
     467                 :            : 
     468                 :            : DECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD)
     469                 :            : 
     470                 :            : DECLARE_ASN1_FUNCTIONS(GENERAL_NAME)
     471                 :            : GENERAL_NAME *GENERAL_NAME_dup(GENERAL_NAME *a);
     472                 :            : int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b);
     473                 :            : 
     474                 :            : ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method,
     475                 :            :                                      X509V3_CTX *ctx,
     476                 :            :                                      STACK_OF(CONF_VALUE) *nval);
     477                 :            : STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method,
     478                 :            :                                           ASN1_BIT_STRING *bits,
     479                 :            :                                           STACK_OF(CONF_VALUE) *extlist);
     480                 :            : char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5);
     481                 :            : ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method,
     482                 :            :                                    X509V3_CTX *ctx, const char *str);
     483                 :            : 
     484                 :            : STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method,
     485                 :            :                                        GENERAL_NAME *gen,
     486                 :            :                                        STACK_OF(CONF_VALUE) *ret);
     487                 :            : int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen);
     488                 :            : 
     489                 :            : DECLARE_ASN1_FUNCTIONS(GENERAL_NAMES)
     490                 :            : 
     491                 :            : STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method,
     492                 :            :                                         GENERAL_NAMES *gen,
     493                 :            :                                         STACK_OF(CONF_VALUE) *extlist);
     494                 :            : GENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method,
     495                 :            :                                  X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval);
     496                 :            : 
     497                 :            : DECLARE_ASN1_FUNCTIONS(OTHERNAME)
     498                 :            : DECLARE_ASN1_FUNCTIONS(EDIPARTYNAME)
     499                 :            : int OTHERNAME_cmp(OTHERNAME *a, OTHERNAME *b);
     500                 :            : void GENERAL_NAME_set0_value(GENERAL_NAME *a, int type, void *value);
     501                 :            : void *GENERAL_NAME_get0_value(const GENERAL_NAME *a, int *ptype);
     502                 :            : int GENERAL_NAME_set0_othername(GENERAL_NAME *gen,
     503                 :            :                                 ASN1_OBJECT *oid, ASN1_TYPE *value);
     504                 :            : int GENERAL_NAME_get0_otherName(const GENERAL_NAME *gen,
     505                 :            :                                 ASN1_OBJECT **poid, ASN1_TYPE **pvalue);
     506                 :            : 
     507                 :            : char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method,
     508                 :            :                             const ASN1_OCTET_STRING *ia5);
     509                 :            : ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method,
     510                 :            :                                          X509V3_CTX *ctx, const char *str);
     511                 :            : 
     512                 :            : DECLARE_ASN1_FUNCTIONS(EXTENDED_KEY_USAGE)
     513                 :            : int i2a_ACCESS_DESCRIPTION(BIO *bp, const ACCESS_DESCRIPTION *a);
     514                 :            : 
     515                 :            : DECLARE_ASN1_ALLOC_FUNCTIONS(TLS_FEATURE)
     516                 :            : 
     517                 :            : DECLARE_ASN1_FUNCTIONS(CERTIFICATEPOLICIES)
     518                 :            : DECLARE_ASN1_FUNCTIONS(POLICYINFO)
     519                 :            : DECLARE_ASN1_FUNCTIONS(POLICYQUALINFO)
     520                 :            : DECLARE_ASN1_FUNCTIONS(USERNOTICE)
     521                 :            : DECLARE_ASN1_FUNCTIONS(NOTICEREF)
     522                 :            : 
     523                 :            : DECLARE_ASN1_FUNCTIONS(CRL_DIST_POINTS)
     524                 :            : DECLARE_ASN1_FUNCTIONS(DIST_POINT)
     525                 :            : DECLARE_ASN1_FUNCTIONS(DIST_POINT_NAME)
     526                 :            : DECLARE_ASN1_FUNCTIONS(ISSUING_DIST_POINT)
     527                 :            : 
     528                 :            : int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, X509_NAME *iname);
     529                 :            : 
     530                 :            : int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc);
     531                 :            : int NAME_CONSTRAINTS_check_CN(X509 *x, NAME_CONSTRAINTS *nc);
     532                 :            : 
     533                 :            : DECLARE_ASN1_FUNCTIONS(ACCESS_DESCRIPTION)
     534                 :            : DECLARE_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS)
     535                 :            : 
     536                 :            : DECLARE_ASN1_ITEM(POLICY_MAPPING)
     537                 :            : DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_MAPPING)
     538                 :            : DECLARE_ASN1_ITEM(POLICY_MAPPINGS)
     539                 :            : 
     540                 :            : DECLARE_ASN1_ITEM(GENERAL_SUBTREE)
     541                 :            : DECLARE_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE)
     542                 :            : 
     543                 :            : DECLARE_ASN1_ITEM(NAME_CONSTRAINTS)
     544                 :            : DECLARE_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS)
     545                 :            : 
     546                 :            : DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_CONSTRAINTS)
     547                 :            : DECLARE_ASN1_ITEM(POLICY_CONSTRAINTS)
     548                 :            : 
     549                 :            : GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out,
     550                 :            :                                const X509V3_EXT_METHOD *method,
     551                 :            :                                X509V3_CTX *ctx, int gen_type,
     552                 :            :                                const char *value, int is_nc);
     553                 :            : 
     554                 :            : # ifdef HEADER_CONF_H
     555                 :            : GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method,
     556                 :            :                                X509V3_CTX *ctx, CONF_VALUE *cnf);
     557                 :            : GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out,
     558                 :            :                                   const X509V3_EXT_METHOD *method,
     559                 :            :                                   X509V3_CTX *ctx, CONF_VALUE *cnf,
     560                 :            :                                   int is_nc);
     561                 :            : void X509V3_conf_free(CONF_VALUE *val);
     562                 :            : 
     563                 :            : X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid,
     564                 :            :                                      const char *value);
     565                 :            : X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, const char *name,
     566                 :            :                                  const char *value);
     567                 :            : int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, const char *section,
     568                 :            :                             STACK_OF(X509_EXTENSION) **sk);
     569                 :            : int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section,
     570                 :            :                          X509 *cert);
     571                 :            : int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section,
     572                 :            :                              X509_REQ *req);
     573                 :            : int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section,
     574                 :            :                              X509_CRL *crl);
     575                 :            : 
     576                 :            : X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf,
     577                 :            :                                     X509V3_CTX *ctx, int ext_nid,
     578                 :            :                                     const char *value);
     579                 :            : X509_EXTENSION *X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
     580                 :            :                                 const char *name, const char *value);
     581                 :            : int X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
     582                 :            :                         const char *section, X509 *cert);
     583                 :            : int X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
     584                 :            :                             const char *section, X509_REQ *req);
     585                 :            : int X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,
     586                 :            :                             const char *section, X509_CRL *crl);
     587                 :            : 
     588                 :            : int X509V3_add_value_bool_nf(const char *name, int asn1_bool,
     589                 :            :                              STACK_OF(CONF_VALUE) **extlist);
     590                 :            : int X509V3_get_value_bool(const CONF_VALUE *value, int *asn1_bool);
     591                 :            : int X509V3_get_value_int(const CONF_VALUE *value, ASN1_INTEGER **aint);
     592                 :            : void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf);
     593                 :            : void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH_OF(CONF_VALUE) *lhash);
     594                 :            : # endif
     595                 :            : 
     596                 :            : char *X509V3_get_string(X509V3_CTX *ctx, const char *name, const char *section);
     597                 :            : STACK_OF(CONF_VALUE) *X509V3_get_section(X509V3_CTX *ctx, const char *section);
     598                 :            : void X509V3_string_free(X509V3_CTX *ctx, char *str);
     599                 :            : void X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section);
     600                 :            : void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject,
     601                 :            :                     X509_REQ *req, X509_CRL *crl, int flags);
     602                 :            : 
     603                 :            : int X509V3_add_value(const char *name, const char *value,
     604                 :            :                      STACK_OF(CONF_VALUE) **extlist);
     605                 :            : int X509V3_add_value_uchar(const char *name, const unsigned char *value,
     606                 :            :                            STACK_OF(CONF_VALUE) **extlist);
     607                 :            : int X509V3_add_value_bool(const char *name, int asn1_bool,
     608                 :            :                           STACK_OF(CONF_VALUE) **extlist);
     609                 :            : int X509V3_add_value_int(const char *name, const ASN1_INTEGER *aint,
     610                 :            :                          STACK_OF(CONF_VALUE) **extlist);
     611                 :            : char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const ASN1_INTEGER *aint);
     612                 :            : ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const char *value);
     613                 :            : char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, const ASN1_ENUMERATED *aint);
     614                 :            : char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth,
     615                 :            :                                 const ASN1_ENUMERATED *aint);
     616                 :            : int X509V3_EXT_add(X509V3_EXT_METHOD *ext);
     617                 :            : int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist);
     618                 :            : int X509V3_EXT_add_alias(int nid_to, int nid_from);
     619                 :            : void X509V3_EXT_cleanup(void);
     620                 :            : 
     621                 :            : const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext);
     622                 :            : const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid);
     623                 :            : int X509V3_add_standard_extensions(void);
     624                 :            : STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line);
     625                 :            : void *X509V3_EXT_d2i(X509_EXTENSION *ext);
     626                 :            : void *X509V3_get_d2i(const STACK_OF(X509_EXTENSION) *x, int nid, int *crit,
     627                 :            :                      int *idx);
     628                 :            : 
     629                 :            : X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc);
     630                 :            : int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value,
     631                 :            :                     int crit, unsigned long flags);
     632                 :            : 
     633                 :            : #if OPENSSL_API_COMPAT < 0x10100000L
     634                 :            : /* The new declarations are in crypto.h, but the old ones were here. */
     635                 :            : # define hex_to_string OPENSSL_buf2hexstr
     636                 :            : # define string_to_hex OPENSSL_hexstr2buf
     637                 :            : #endif
     638                 :            : 
     639                 :            : void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent,
     640                 :            :                         int ml);
     641                 :            : int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag,
     642                 :            :                      int indent);
     643                 :            : #ifndef OPENSSL_NO_STDIO
     644                 :            : int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent);
     645                 :            : #endif
     646                 :            : int X509V3_extensions_print(BIO *out, const char *title,
     647                 :            :                             const STACK_OF(X509_EXTENSION) *exts,
     648                 :            :                             unsigned long flag, int indent);
     649                 :            : 
     650                 :            : int X509_check_ca(X509 *x);
     651                 :            : int X509_check_purpose(X509 *x, int id, int ca);
     652                 :            : int X509_supported_extension(X509_EXTENSION *ex);
     653                 :            : int X509_PURPOSE_set(int *p, int purpose);
     654                 :            : int X509_check_issued(X509 *issuer, X509 *subject);
     655                 :            : int X509_check_akid(X509 *issuer, AUTHORITY_KEYID *akid);
     656                 :            : void X509_set_proxy_flag(X509 *x);
     657                 :            : void X509_set_proxy_pathlen(X509 *x, long l);
     658                 :            : long X509_get_proxy_pathlen(X509 *x);
     659                 :            : 
     660                 :            : uint32_t X509_get_extension_flags(X509 *x);
     661                 :            : uint32_t X509_get_key_usage(X509 *x);
     662                 :            : uint32_t X509_get_extended_key_usage(X509 *x);
     663                 :            : const ASN1_OCTET_STRING *X509_get0_subject_key_id(X509 *x);
     664                 :            : const ASN1_OCTET_STRING *X509_get0_authority_key_id(X509 *x);
     665                 :            : const GENERAL_NAMES *X509_get0_authority_issuer(X509 *x);
     666                 :            : const ASN1_INTEGER *X509_get0_authority_serial(X509 *x);
     667                 :            : 
     668                 :            : int X509_PURPOSE_get_count(void);
     669                 :            : X509_PURPOSE *X509_PURPOSE_get0(int idx);
     670                 :            : int X509_PURPOSE_get_by_sname(const char *sname);
     671                 :            : int X509_PURPOSE_get_by_id(int id);
     672                 :            : int X509_PURPOSE_add(int id, int trust, int flags,
     673                 :            :                      int (*ck) (const X509_PURPOSE *, const X509 *, int),
     674                 :            :                      const char *name, const char *sname, void *arg);
     675                 :            : char *X509_PURPOSE_get0_name(const X509_PURPOSE *xp);
     676                 :            : char *X509_PURPOSE_get0_sname(const X509_PURPOSE *xp);
     677                 :            : int X509_PURPOSE_get_trust(const X509_PURPOSE *xp);
     678                 :            : void X509_PURPOSE_cleanup(void);
     679                 :            : int X509_PURPOSE_get_id(const X509_PURPOSE *);
     680                 :            : 
     681                 :            : STACK_OF(OPENSSL_STRING) *X509_get1_email(X509 *x);
     682                 :            : STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(X509_REQ *x);
     683                 :            : void X509_email_free(STACK_OF(OPENSSL_STRING) *sk);
     684                 :            : STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x);
     685                 :            : /* Flags for X509_check_* functions */
     686                 :            : 
     687                 :            : /*
     688                 :            :  * Always check subject name for host match even if subject alt names present
     689                 :            :  */
     690                 :            : # define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT    0x1
     691                 :            : /* Disable wildcard matching for dnsName fields and common name. */
     692                 :            : # define X509_CHECK_FLAG_NO_WILDCARDS    0x2
     693                 :            : /* Wildcards must not match a partial label. */
     694                 :            : # define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0x4
     695                 :            : /* Allow (non-partial) wildcards to match multiple labels. */
     696                 :            : # define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS 0x8
     697                 :            : /* Constraint verifier subdomain patterns to match a single labels. */
     698                 :            : # define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10
     699                 :            : /* Never check the subject CN */
     700                 :            : # define X509_CHECK_FLAG_NEVER_CHECK_SUBJECT    0x20
     701                 :            : /*
     702                 :            :  * Match reference identifiers starting with "." to any sub-domain.
     703                 :            :  * This is a non-public flag, turned on implicitly when the subject
     704                 :            :  * reference identity is a DNS name.
     705                 :            :  */
     706                 :            : # define _X509_CHECK_FLAG_DOT_SUBDOMAINS 0x8000
     707                 :            : 
     708                 :            : int X509_check_host(X509 *x, const char *chk, size_t chklen,
     709                 :            :                     unsigned int flags, char **peername);
     710                 :            : int X509_check_email(X509 *x, const char *chk, size_t chklen,
     711                 :            :                      unsigned int flags);
     712                 :            : int X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen,
     713                 :            :                   unsigned int flags);
     714                 :            : int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags);
     715                 :            : 
     716                 :            : ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc);
     717                 :            : ASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc);
     718                 :            : int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE) *dn_sk,
     719                 :            :                              unsigned long chtype);
     720                 :            : 
     721                 :            : void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent);
     722                 :            : DEFINE_STACK_OF(X509_POLICY_NODE)
     723                 :            : 
     724                 :            : #ifndef OPENSSL_NO_RFC3779
     725                 :            : typedef struct ASRange_st {
     726                 :            :     ASN1_INTEGER *min, *max;
     727                 :            : } ASRange;
     728                 :            : 
     729                 :            : # define ASIdOrRange_id          0
     730                 :            : # define ASIdOrRange_range       1
     731                 :            : 
     732                 :            : typedef struct ASIdOrRange_st {
     733                 :            :     int type;
     734                 :            :     union {
     735                 :            :         ASN1_INTEGER *id;
     736                 :            :         ASRange *range;
     737                 :            :     } u;
     738                 :            : } ASIdOrRange;
     739                 :            : 
     740                 :            : typedef STACK_OF(ASIdOrRange) ASIdOrRanges;
     741                 :            : DEFINE_STACK_OF(ASIdOrRange)
     742                 :            : 
     743                 :            : # define ASIdentifierChoice_inherit              0
     744                 :            : # define ASIdentifierChoice_asIdsOrRanges        1
     745                 :            : 
     746                 :            : typedef struct ASIdentifierChoice_st {
     747                 :            :     int type;
     748                 :            :     union {
     749                 :            :         ASN1_NULL *inherit;
     750                 :            :         ASIdOrRanges *asIdsOrRanges;
     751                 :            :     } u;
     752                 :            : } ASIdentifierChoice;
     753                 :            : 
     754                 :            : typedef struct ASIdentifiers_st {
     755                 :            :     ASIdentifierChoice *asnum, *rdi;
     756                 :            : } ASIdentifiers;
     757                 :            : 
     758                 :            : DECLARE_ASN1_FUNCTIONS(ASRange)
     759                 :            : DECLARE_ASN1_FUNCTIONS(ASIdOrRange)
     760                 :            : DECLARE_ASN1_FUNCTIONS(ASIdentifierChoice)
     761                 :            : DECLARE_ASN1_FUNCTIONS(ASIdentifiers)
     762                 :            : 
     763                 :            : typedef struct IPAddressRange_st {
     764                 :            :     ASN1_BIT_STRING *min, *max;
     765                 :            : } IPAddressRange;
     766                 :            : 
     767                 :            : # define IPAddressOrRange_addressPrefix  0
     768                 :            : # define IPAddressOrRange_addressRange   1
     769                 :            : 
     770                 :            : typedef struct IPAddressOrRange_st {
     771                 :            :     int type;
     772                 :            :     union {
     773                 :            :         ASN1_BIT_STRING *addressPrefix;
     774                 :            :         IPAddressRange *addressRange;
     775                 :            :     } u;
     776                 :            : } IPAddressOrRange;
     777                 :            : 
     778                 :            : typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges;
     779                 :            : DEFINE_STACK_OF(IPAddressOrRange)
     780                 :            : 
     781                 :            : # define IPAddressChoice_inherit                 0
     782                 :            : # define IPAddressChoice_addressesOrRanges       1
     783                 :            : 
     784                 :            : typedef struct IPAddressChoice_st {
     785                 :            :     int type;
     786                 :            :     union {
     787                 :            :         ASN1_NULL *inherit;
     788                 :            :         IPAddressOrRanges *addressesOrRanges;
     789                 :            :     } u;
     790                 :            : } IPAddressChoice;
     791                 :            : 
     792                 :            : typedef struct IPAddressFamily_st {
     793                 :            :     ASN1_OCTET_STRING *addressFamily;
     794                 :            :     IPAddressChoice *ipAddressChoice;
     795                 :            : } IPAddressFamily;
     796                 :            : 
     797                 :            : typedef STACK_OF(IPAddressFamily) IPAddrBlocks;
     798                 :            : DEFINE_STACK_OF(IPAddressFamily)
     799                 :            : 
     800                 :            : DECLARE_ASN1_FUNCTIONS(IPAddressRange)
     801                 :            : DECLARE_ASN1_FUNCTIONS(IPAddressOrRange)
     802                 :            : DECLARE_ASN1_FUNCTIONS(IPAddressChoice)
     803                 :            : DECLARE_ASN1_FUNCTIONS(IPAddressFamily)
     804                 :            : 
     805                 :            : /*
     806                 :            :  * API tag for elements of the ASIdentifer SEQUENCE.
     807                 :            :  */
     808                 :            : # define V3_ASID_ASNUM   0
     809                 :            : # define V3_ASID_RDI     1
     810                 :            : 
     811                 :            : /*
     812                 :            :  * AFI values, assigned by IANA.  It'd be nice to make the AFI
     813                 :            :  * handling code totally generic, but there are too many little things
     814                 :            :  * that would need to be defined for other address families for it to
     815                 :            :  * be worth the trouble.
     816                 :            :  */
     817                 :            : # define IANA_AFI_IPV4   1
     818                 :            : # define IANA_AFI_IPV6   2
     819                 :            : 
     820                 :            : /*
     821                 :            :  * Utilities to construct and extract values from RFC3779 extensions,
     822                 :            :  * since some of the encodings (particularly for IP address prefixes
     823                 :            :  * and ranges) are a bit tedious to work with directly.
     824                 :            :  */
     825                 :            : int X509v3_asid_add_inherit(ASIdentifiers *asid, int which);
     826                 :            : int X509v3_asid_add_id_or_range(ASIdentifiers *asid, int which,
     827                 :            :                                 ASN1_INTEGER *min, ASN1_INTEGER *max);
     828                 :            : int X509v3_addr_add_inherit(IPAddrBlocks *addr,
     829                 :            :                             const unsigned afi, const unsigned *safi);
     830                 :            : int X509v3_addr_add_prefix(IPAddrBlocks *addr,
     831                 :            :                            const unsigned afi, const unsigned *safi,
     832                 :            :                            unsigned char *a, const int prefixlen);
     833                 :            : int X509v3_addr_add_range(IPAddrBlocks *addr,
     834                 :            :                           const unsigned afi, const unsigned *safi,
     835                 :            :                           unsigned char *min, unsigned char *max);
     836                 :            : unsigned X509v3_addr_get_afi(const IPAddressFamily *f);
     837                 :            : int X509v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi,
     838                 :            :                           unsigned char *min, unsigned char *max,
     839                 :            :                           const int length);
     840                 :            : 
     841                 :            : /*
     842                 :            :  * Canonical forms.
     843                 :            :  */
     844                 :            : int X509v3_asid_is_canonical(ASIdentifiers *asid);
     845                 :            : int X509v3_addr_is_canonical(IPAddrBlocks *addr);
     846                 :            : int X509v3_asid_canonize(ASIdentifiers *asid);
     847                 :            : int X509v3_addr_canonize(IPAddrBlocks *addr);
     848                 :            : 
     849                 :            : /*
     850                 :            :  * Tests for inheritance and containment.
     851                 :            :  */
     852                 :            : int X509v3_asid_inherits(ASIdentifiers *asid);
     853                 :            : int X509v3_addr_inherits(IPAddrBlocks *addr);
     854                 :            : int X509v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b);
     855                 :            : int X509v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b);
     856                 :            : 
     857                 :            : /*
     858                 :            :  * Check whether RFC 3779 extensions nest properly in chains.
     859                 :            :  */
     860                 :            : int X509v3_asid_validate_path(X509_STORE_CTX *);
     861                 :            : int X509v3_addr_validate_path(X509_STORE_CTX *);
     862                 :            : int X509v3_asid_validate_resource_set(STACK_OF(X509) *chain,
     863                 :            :                                       ASIdentifiers *ext,
     864                 :            :                                       int allow_inheritance);
     865                 :            : int X509v3_addr_validate_resource_set(STACK_OF(X509) *chain,
     866                 :            :                                       IPAddrBlocks *ext, int allow_inheritance);
     867                 :            : 
     868                 :            : #endif                         /* OPENSSL_NO_RFC3779 */
     869                 :            : 
     870                 :            : DEFINE_STACK_OF(ASN1_STRING)
     871                 :            : 
     872                 :            : /*
     873                 :            :  * Admission Syntax
     874                 :            :  */
     875                 :            : typedef struct NamingAuthority_st NAMING_AUTHORITY;
     876                 :            : typedef struct ProfessionInfo_st PROFESSION_INFO;
     877                 :            : typedef struct Admissions_st ADMISSIONS;
     878                 :            : typedef struct AdmissionSyntax_st ADMISSION_SYNTAX;
     879                 :            : DECLARE_ASN1_FUNCTIONS(NAMING_AUTHORITY)
     880                 :            : DECLARE_ASN1_FUNCTIONS(PROFESSION_INFO)
     881                 :            : DECLARE_ASN1_FUNCTIONS(ADMISSIONS)
     882                 :            : DECLARE_ASN1_FUNCTIONS(ADMISSION_SYNTAX)
     883                 :            : DEFINE_STACK_OF(ADMISSIONS)
     884                 :            : DEFINE_STACK_OF(PROFESSION_INFO)
     885                 :            : typedef STACK_OF(PROFESSION_INFO) PROFESSION_INFOS;
     886                 :            : 
     887                 :            : const ASN1_OBJECT *NAMING_AUTHORITY_get0_authorityId(
     888                 :            :     const NAMING_AUTHORITY *n);
     889                 :            : const ASN1_IA5STRING *NAMING_AUTHORITY_get0_authorityURL(
     890                 :            :     const NAMING_AUTHORITY *n);
     891                 :            : const ASN1_STRING *NAMING_AUTHORITY_get0_authorityText(
     892                 :            :     const NAMING_AUTHORITY *n);
     893                 :            : void NAMING_AUTHORITY_set0_authorityId(NAMING_AUTHORITY *n,
     894                 :            :     ASN1_OBJECT* namingAuthorityId);
     895                 :            : void NAMING_AUTHORITY_set0_authorityURL(NAMING_AUTHORITY *n,
     896                 :            :     ASN1_IA5STRING* namingAuthorityUrl);
     897                 :            : void NAMING_AUTHORITY_set0_authorityText(NAMING_AUTHORITY *n,
     898                 :            :     ASN1_STRING* namingAuthorityText);
     899                 :            : 
     900                 :            : const GENERAL_NAME *ADMISSION_SYNTAX_get0_admissionAuthority(
     901                 :            :     const ADMISSION_SYNTAX *as);
     902                 :            : void ADMISSION_SYNTAX_set0_admissionAuthority(
     903                 :            :     ADMISSION_SYNTAX *as, GENERAL_NAME *aa);
     904                 :            : const STACK_OF(ADMISSIONS) *ADMISSION_SYNTAX_get0_contentsOfAdmissions(
     905                 :            :     const ADMISSION_SYNTAX *as);
     906                 :            : void ADMISSION_SYNTAX_set0_contentsOfAdmissions(
     907                 :            :     ADMISSION_SYNTAX *as, STACK_OF(ADMISSIONS) *a);
     908                 :            : const GENERAL_NAME *ADMISSIONS_get0_admissionAuthority(const ADMISSIONS *a);
     909                 :            : void ADMISSIONS_set0_admissionAuthority(ADMISSIONS *a, GENERAL_NAME *aa);
     910                 :            : const NAMING_AUTHORITY *ADMISSIONS_get0_namingAuthority(const ADMISSIONS *a);
     911                 :            : void ADMISSIONS_set0_namingAuthority(ADMISSIONS *a, NAMING_AUTHORITY *na);
     912                 :            : const PROFESSION_INFOS *ADMISSIONS_get0_professionInfos(const ADMISSIONS *a);
     913                 :            : void ADMISSIONS_set0_professionInfos(ADMISSIONS *a, PROFESSION_INFOS *pi);
     914                 :            : const ASN1_OCTET_STRING *PROFESSION_INFO_get0_addProfessionInfo(
     915                 :            :     const PROFESSION_INFO *pi);
     916                 :            : void PROFESSION_INFO_set0_addProfessionInfo(
     917                 :            :     PROFESSION_INFO *pi, ASN1_OCTET_STRING *aos);
     918                 :            : const NAMING_AUTHORITY *PROFESSION_INFO_get0_namingAuthority(
     919                 :            :     const PROFESSION_INFO *pi);
     920                 :            : void PROFESSION_INFO_set0_namingAuthority(
     921                 :            :     PROFESSION_INFO *pi, NAMING_AUTHORITY *na);
     922                 :            : const STACK_OF(ASN1_STRING) *PROFESSION_INFO_get0_professionItems(
     923                 :            :     const PROFESSION_INFO *pi);
     924                 :            : void PROFESSION_INFO_set0_professionItems(
     925                 :            :     PROFESSION_INFO *pi, STACK_OF(ASN1_STRING) *as);
     926                 :            : const STACK_OF(ASN1_OBJECT) *PROFESSION_INFO_get0_professionOIDs(
     927                 :            :     const PROFESSION_INFO *pi);
     928                 :            : void PROFESSION_INFO_set0_professionOIDs(
     929                 :            :     PROFESSION_INFO *pi, STACK_OF(ASN1_OBJECT) *po);
     930                 :            : const ASN1_PRINTABLESTRING *PROFESSION_INFO_get0_registrationNumber(
     931                 :            :     const PROFESSION_INFO *pi);
     932                 :            : void PROFESSION_INFO_set0_registrationNumber(
     933                 :            :     PROFESSION_INFO *pi, ASN1_PRINTABLESTRING *rn);
     934                 :            : 
     935                 :            : # ifdef  __cplusplus
     936                 :            : }
     937                 :            : # endif
     938                 :            : #endif

Generated by: LCOV version 1.15