Annotation of embedaddon/strongswan/src/libstrongswan/credentials/certificates/x509.h, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * Copyright (C) 2007-2008 Martin Willi
                      3:  * HSR Hochschule fuer Technik Rapperswil
                      4:  *
                      5:  * This program is free software; you can redistribute it and/or modify it
                      6:  * under the terms of the GNU General Public License as published by the
                      7:  * Free Software Foundation; either version 2 of the License, or (at your
                      8:  * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
                      9:  *
                     10:  * This program is distributed in the hope that it will be useful, but
                     11:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
                     12:  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
                     13:  * for more details.
                     14:  */
                     15: 
                     16: /**
                     17:  * @defgroup x509 x509
                     18:  * @{ @ingroup certificates
                     19:  */
                     20: 
                     21: #ifndef X509_H_
                     22: #define X509_H_
                     23: 
                     24: #include <collections/enumerator.h>
                     25: #include <credentials/certificates/certificate.h>
                     26: 
                     27: /* constraints are currently restricted to the range 0..127 */
                     28: #define X509_NO_CONSTRAINT     255
                     29: 
                     30: typedef struct x509_t x509_t;
                     31: typedef struct x509_cert_policy_t x509_cert_policy_t;
                     32: typedef struct x509_policy_mapping_t x509_policy_mapping_t;
                     33: typedef struct x509_cdp_t x509_cdp_t;
                     34: typedef enum x509_flag_t x509_flag_t;
                     35: typedef enum x509_constraint_t x509_constraint_t;
                     36: 
                     37: /**
                     38:  * X.509 certificate flags.
                     39:  */
                     40: enum x509_flag_t {
                     41:        /** cert has no constraints */
                     42:        X509_NONE =                    0,
                     43:        /** cert has CA constraint */
                     44:        X509_CA =                 (1<<0),
                     45:        /** cert has AA constraint */
                     46:        X509_AA =                 (1<<1),
                     47:        /** cert has OCSP signer constraint */
                     48:        X509_OCSP_SIGNER =        (1<<2),
                     49:     /** cert has either CA, AA or OCSP constraint */
                     50:        X509_ANY = X509_CA | X509_AA | X509_OCSP_SIGNER,
                     51:        /** cert has serverAuth key usage */
                     52:        X509_SERVER_AUTH =        (1<<3),
                     53:        /** cert has clientAuth key usage */
                     54:        X509_CLIENT_AUTH =        (1<<4),
                     55:        /** cert is self-signed */
                     56:        X509_SELF_SIGNED =        (1<<5),
                     57:        /** cert has an ipAddrBlocks extension */
                     58:        X509_IP_ADDR_BLOCKS =     (1<<6),
                     59:        /** cert has CRL sign key usage */
                     60:        X509_CRL_SIGN =           (1<<7),
                     61:        /** cert has iKEIntermediate key usage */
                     62:        X509_IKE_INTERMEDIATE =   (1<<8),
                     63:        /** cert has Microsoft Smartcard Logon usage */
                     64:        X509_MS_SMARTCARD_LOGON = (1<<9),
                     65:        /** cert either lacks keyUsage bits, or includes either digitalSignature
                     66:         *  or nonRepudiation as per RFC 4945, section 5.1.3.2. */
                     67:        X509_IKE_COMPLIANT =      (1<<10),
                     68: };
                     69: 
                     70: extern enum_name_t *x509_flag_names;
                     71: 
                     72: /**
                     73:  * Different numerical X.509 constraints.
                     74:  */
                     75: enum x509_constraint_t {
                     76:        /** pathLenConstraint basicConstraints */
                     77:        X509_PATH_LEN,
                     78:        /** inhibitPolicyMapping policyConstraint */
                     79:        X509_INHIBIT_POLICY_MAPPING,
                     80:        /** requireExplicitPolicy policyConstraint */
                     81:        X509_REQUIRE_EXPLICIT_POLICY,
                     82:        /** inhibitAnyPolicy constraint */
                     83:        X509_INHIBIT_ANY_POLICY,
                     84: };
                     85: 
                     86: /**
                     87:  * X.509 certPolicy extension.
                     88:  */
                     89: struct x509_cert_policy_t {
                     90:        /** Certification Practice Statement URI qualifier */
                     91:        char *cps_uri;
                     92:        /** UserNotice Text qualifier */
                     93:        char *unotice_text;
                     94:        /** OID of certPolicy */
                     95:        chunk_t oid;
                     96: };
                     97: 
                     98: /**
                     99:  * X.509 policyMapping extension
                    100:  */
                    101: struct x509_policy_mapping_t {
                    102:        /** OID of issuerDomainPolicy */
                    103:        chunk_t issuer;
                    104:        /** OID of subjectDomainPolicy */
                    105:        chunk_t subject;
                    106: };
                    107: 
                    108: /**
                    109:  * X.509 CRL distributionPoint
                    110:  */
                    111: struct x509_cdp_t {
                    112:        /** CDP URI, as string */
                    113:        char *uri;
                    114:        /** CRL issuer */
                    115:        identification_t *issuer;
                    116: };
                    117: 
                    118: /**
                    119:  * X.509 certificate interface.
                    120:  *
                    121:  * This interface adds additional methods to the certificate_t type to
                    122:  * allow further operations on these certificates.
                    123:  */
                    124: struct x509_t {
                    125: 
                    126:        /**
                    127:         * Implements certificate_t.
                    128:         */
                    129:        certificate_t interface;
                    130: 
                    131:        /**
                    132:         * Get the flags set for this certificate.
                    133:         *
                    134:         * @return                      set of flags
                    135:         */
                    136:        x509_flag_t (*get_flags)(x509_t *this);
                    137: 
                    138:        /**
                    139:         * Get the certificate serial number.
                    140:         *
                    141:         * @return                      chunk pointing to internal serial number
                    142:         */
                    143:        chunk_t (*get_serial)(x509_t *this);
                    144: 
                    145:        /**
                    146:         * Get the the subjectKeyIdentifier.
                    147:         *
                    148:         * @return                      subjectKeyIdentifier as chunk_t, internal data
                    149:         */
                    150:        chunk_t (*get_subjectKeyIdentifier)(x509_t *this);
                    151: 
                    152:        /**
                    153:         * Get the the authorityKeyIdentifier.
                    154:         *
                    155:         * @return                      authKeyIdentifier as chunk_t, internal data
                    156:         */
                    157:        chunk_t (*get_authKeyIdentifier)(x509_t *this);
                    158: 
                    159:        /**
                    160:         * Get a numerical X.509 constraint.
                    161:         *
                    162:         * @param type          type of constraint to get
                    163:         * @return                      constraint, X509_NO_CONSTRAINT if none found
                    164:         */
                    165:        u_int (*get_constraint)(x509_t *this, x509_constraint_t type);
                    166: 
                    167:        /**
                    168:         * Create an enumerator over all subjectAltNames.
                    169:         *
                    170:         * @return                      enumerator over subjectAltNames as identification_t*
                    171:         */
                    172:        enumerator_t* (*create_subjectAltName_enumerator)(x509_t *this);
                    173: 
                    174:        /**
                    175:         * Create an enumerator over all CRL URIs and CRL Issuers.
                    176:         *
                    177:         * @return                      enumerator over x509_cdp_t
                    178:         */
                    179:        enumerator_t* (*create_crl_uri_enumerator)(x509_t *this);
                    180: 
                    181:        /**
                    182:         * Create an enumerator over all OCSP URIs.
                    183:         *
                    184:         * @return                      enumerator over URIs as char*
                    185:         */
                    186:        enumerator_t* (*create_ocsp_uri_enumerator)(x509_t *this);
                    187: 
                    188:        /**
                    189:         * Create an enumerator over all ipAddrBlocks.
                    190:         *
                    191:         * @return                      enumerator over ipAddrBlocks as traffic_selector_t*
                    192:         */
                    193:        enumerator_t* (*create_ipAddrBlock_enumerator)(x509_t *this);
                    194: 
                    195:        /**
                    196:         * Create an enumerator over name constraints.
                    197:         *
                    198:         * @param perm          TRUE for permitted, FALSE for excluded subtrees
                    199:         * @return                      enumerator over subtrees as identification_t
                    200:         */
                    201:        enumerator_t* (*create_name_constraint_enumerator)(x509_t *this, bool perm);
                    202: 
                    203:        /**
                    204:         * Create an enumerator over certificate policies.
                    205:         *
                    206:         * @return                      enumerator over x509_cert_policy_t
                    207:         */
                    208:        enumerator_t* (*create_cert_policy_enumerator)(x509_t *this);
                    209: 
                    210:        /**
                    211:         * Create an enumerator over policy mappings.
                    212:         *
                    213:         * @return                      enumerator over x509_policy_mapping
                    214:         */
                    215:        enumerator_t* (*create_policy_mapping_enumerator)(x509_t *this);
                    216: };
                    217: 
                    218: /**
                    219:  * Destroy an x509_cdp_t instance.
                    220:  */
                    221: void x509_cdp_destroy(x509_cdp_t *this);
                    222: 
                    223: #endif /** X509_H_ @}*/

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>