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

1.1       misho       1: /*
                      2:  * Copyright (C) 2008-2015 Tobias Brunner
                      3:  * Copyright (C) 2007-2009 Martin Willi
                      4:  * HSR Hochschule fuer Technik Rapperswil
                      5:  *
                      6:  * This program is free software; you can redistribute it and/or modify it
                      7:  * under the terms of the GNU General Public License as published by the
                      8:  * Free Software Foundation; either version 2 of the License, or (at your
                      9:  * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
                     10:  *
                     11:  * This program is distributed in the hope that it will be useful, but
                     12:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
                     13:  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
                     14:  * for more details.
                     15:  */
                     16: 
                     17: /**
                     18:  * @defgroup auth_cfg auth_cfg
                     19:  * @{ @ingroup credentials
                     20:  */
                     21: 
                     22: #ifndef AUTH_CFG_H_
                     23: #define AUTH_CFG_H_
                     24: 
                     25: #include <collections/enumerator.h>
                     26: 
                     27: typedef struct auth_cfg_t auth_cfg_t;
                     28: typedef enum auth_rule_t auth_rule_t;
                     29: typedef enum auth_class_t auth_class_t;
                     30: 
                     31: /**
                     32:  * Class of authentication to use. This is different to auth_method_t in that
                     33:  * it does not specify a method, but a class of acceptable methods. The found
                     34:  * certificate finally dictates which method is used.
                     35:  */
                     36: enum auth_class_t {
                     37:        /** any class acceptable */
                     38:        AUTH_CLASS_ANY = 0,
                     39:        /** authentication using public keys (RSA, ECDSA) */
                     40:        AUTH_CLASS_PUBKEY = 1,
                     41:        /** authentication using a pre-shared secrets */
                     42:        AUTH_CLASS_PSK = 2,
                     43:        /** authentication using EAP */
                     44:        AUTH_CLASS_EAP = 3,
                     45:        /** authentication using IKEv1 XAUTH */
                     46:        AUTH_CLASS_XAUTH = 4,
                     47: };
                     48: 
                     49: /**
                     50:  * enum strings for auth_class_t
                     51:  */
                     52: extern enum_name_t *auth_class_names;
                     53: 
                     54: /**
                     55:  * Authentication config to use during authentication process.
                     56:  *
                     57:  * Each authentication config contains a set of rules. These rule-sets are used
                     58:  * in two ways:
                     59:  * - For configs specifying local authentication behavior, the rules define
                     60:  *   which authentication method in which way.
                     61:  * - For configs specifying remote peer authentication, the rules define
                     62:  *   constraints the peer has to fulfill.
                     63:  *
                     64:  * Additionally to the rules, there is a set of helper items. These are used
                     65:  * to transport credentials during the authentication process.
                     66:  */
                     67: enum auth_rule_t {
                     68:        /** identity to use for IKEv2 authentication exchange, identification_t* */
                     69:        AUTH_RULE_IDENTITY,
                     70:        /** if TRUE don't send IDr as initiator, but verify the identity after
                     71:         * receiving IDr (but also verify it against subjectAltNames), bool */
                     72:        AUTH_RULE_IDENTITY_LOOSE,
                     73:        /** authentication class, auth_class_t */
                     74:        AUTH_RULE_AUTH_CLASS,
                     75:        /** AAA-backend identity for EAP methods supporting it, identification_t* */
                     76:        AUTH_RULE_AAA_IDENTITY,
                     77:        /** EAP identity to use within EAP-Identity exchange, identification_t* */
                     78:        AUTH_RULE_EAP_IDENTITY,
                     79:        /** EAP type to propose for peer authentication, eap_type_t */
                     80:        AUTH_RULE_EAP_TYPE,
                     81:        /** EAP vendor for vendor specific type, uint32_t */
                     82:        AUTH_RULE_EAP_VENDOR,
                     83:        /** XAUTH backend name to use, char* */
                     84:        AUTH_RULE_XAUTH_BACKEND,
                     85:        /** XAuth identity to use or require, identification_t* */
                     86:        AUTH_RULE_XAUTH_IDENTITY,
                     87:        /** subject of certificate authority, identification_t* */
                     88:        AUTH_RULE_CA_IDENTITY,
                     89:        /** certificate authority, certificate_t* */
                     90:        AUTH_RULE_CA_CERT,
                     91:        /** intermediate certificate in trustchain, certificate_t* */
                     92:        AUTH_RULE_IM_CERT,
                     93:        /** subject certificate, certificate_t* */
                     94:        AUTH_RULE_SUBJECT_CERT,
                     95:        /** result of a CRL validation, cert_validation_t */
                     96:        AUTH_RULE_CRL_VALIDATION,
                     97:        /** result of a OCSP validation, cert_validation_t */
                     98:        AUTH_RULE_OCSP_VALIDATION,
                     99:        /** CRL/OCSP validation is disabled, bool */
                    100:        AUTH_RULE_CERT_VALIDATION_SUSPENDED,
                    101:        /** subject is member of a group, identification_t*
                    102:         * The group membership constraint is fulfilled if the subject is member of
                    103:         * one group defined in the constraints. */
                    104:        AUTH_RULE_GROUP,
                    105:        /** required RSA public key strength, u_int in bits */
                    106:        AUTH_RULE_RSA_STRENGTH,
                    107:        /** required ECDSA public key strength, u_int in bits */
                    108:        AUTH_RULE_ECDSA_STRENGTH,
                    109:        /** required BLISS public key strength, u_int in bits */
                    110:        AUTH_RULE_BLISS_STRENGTH,
                    111:        /** required signature scheme, signature_params_t* */
                    112:        AUTH_RULE_SIGNATURE_SCHEME,
                    113:        /** required signature scheme for IKE authentication, signature_params_t* */
                    114:        AUTH_RULE_IKE_SIGNATURE_SCHEME,
                    115:        /** certificatePolicy constraint, numerical OID as char* */
                    116:        AUTH_RULE_CERT_POLICY,
                    117: 
                    118:        /** intermediate certificate, certificate_t* */
                    119:        AUTH_HELPER_IM_CERT,
                    120:        /** subject certificate, certificate_t* */
                    121:        AUTH_HELPER_SUBJECT_CERT,
                    122:        /** Hash and URL of a intermediate certificate, char* */
                    123:        AUTH_HELPER_IM_HASH_URL,
                    124:        /** Hash and URL of a end-entity certificate, char* */
                    125:        AUTH_HELPER_SUBJECT_HASH_URL,
                    126:        /** revocation certificate (CRL, OCSP), certificate_t* */
                    127:        AUTH_HELPER_REVOCATION_CERT,
                    128:        /** attribute certificate for authorization decisions, certificate_t */
                    129:        AUTH_HELPER_AC_CERT,
                    130: 
                    131:        /** helper to determine the number of elements in this enum */
                    132:        AUTH_RULE_MAX,
                    133: };
                    134: 
                    135: /**
                    136:  * enum name for auth_rule_t.
                    137:  */
                    138: extern enum_name_t *auth_rule_names;
                    139: 
                    140: /**
                    141:  * Authentication/Authorization round.
                    142:  *
                    143:  * RFC4739 defines multiple authentication rounds. This class defines such
                    144:  * a round from a configuration perspective, either for the local or the remote
                    145:  * peer. Local configs are called "rulesets". They define how we authenticate.
                    146:  * Remote peer configs are called "constraints". They define what is needed to
                    147:  * complete the authentication round successfully.
                    148:  *
                    149:  * @verbatim
                    150: 
                    151:    [Repeat for each configuration]
                    152:    +--------------------------------------------------+
                    153:    |                                                  |
                    154:    |                                                  |
                    155:    |   +----------+     IKE_AUTH       +--------- +   |
                    156:    |   |  config  |   ----------->     |          |   |
                    157:    |   |  ruleset |                    |          |   |
                    158:    |   +----------+ [ <----------- ]   |          |   |
                    159:    |                [ optional EAP ]   |   Peer   |   |
                    160:    |   +----------+ [ -----------> ]   |          |   |
                    161:    |   |  config  |                    |          |   |
                    162:    |   |  constr. |   <-----------     |          |   |
                    163:    |   +----------+     IKE_AUTH       +--------- +   |
                    164:    |                                                  |
                    165:    |                                                  |
                    166:    +--------------------------------------------------+
                    167: 
                    168:    @endverbatim
                    169:  *
                    170:  * Values for each item are either pointers (casted to void*) or short
                    171:  * integers (use uintptr_t cast).
                    172:  */
                    173: struct auth_cfg_t {
                    174: 
                    175:        /**
                    176:         * Add a rule to the set.
                    177:         *
                    178:         * Rules we expect only once (e.g. identities) implicitly replace previous
                    179:         * rules of the same type (but pointers to previous values will remain
                    180:         * valid until the auth_cfg_t object is destroyed).
                    181:         * Rules that may occur multiple times (e.g. CA certificates) are inserted
                    182:         * so that they can be enumerated in the order in which they were added.
                    183:         * For these get() will return the value added first.
                    184:         *
                    185:         * @param rule          rule type
                    186:         * @param ...           associated value to rule
                    187:         */
                    188:        void (*add)(auth_cfg_t *this, auth_rule_t rule, ...);
                    189: 
                    190:        /**
                    191:         * Add public key and signature scheme constraints to the set.
                    192:         *
                    193:         * @param constraints   constraints string (e.g. "rsa-sha384")
                    194:         * @param ike                   whether to add/parse constraints for IKE signatures
                    195:         */
                    196:        void (*add_pubkey_constraints)(auth_cfg_t *this, char *constraints,
                    197:                                                                   bool ike);
                    198: 
                    199:        /**
                    200:         * Get a rule value.
                    201:         *
                    202:         * For rules we expect only once the latest value is returned.
                    203:         *
                    204:         * @param rule          rule type
                    205:         * @return                      rule or NULL (or an appropriate default) if not found
                    206:         */
                    207:        void* (*get)(auth_cfg_t *this, auth_rule_t rule);
                    208: 
                    209:        /**
                    210:         * Create an enumerator over added rules.
                    211:         *
                    212:         * Refer to add() regarding the order in which rules are enumerated.
                    213:         * For rules we expect only once the latest value is enumerated only.
                    214:         *
                    215:         * @return                      enumerator over (auth_rule_t, union{void*,uintpr_t})
                    216:         */
                    217:        enumerator_t* (*create_enumerator)(auth_cfg_t *this);
                    218: 
                    219:        /**
                    220:         * Replace a rule at enumerator position.
                    221:         *
                    222:         * @param pos           enumerator position
                    223:         * @param rule          rule type
                    224:         * @param ...           associated value to rule
                    225:         */
                    226:        void (*replace)(auth_cfg_t *this, enumerator_t *pos,
                    227:                                        auth_rule_t rule, ...);
                    228: 
                    229:        /**
                    230:         * Check if a used config fulfills a set of configured constraints.
                    231:         *
                    232:         * @param constraints   required authorization rules
                    233:         * @param log_error             whether to log compliance errors
                    234:         * @return                              TRUE if this complies with constraints
                    235:         */
                    236:        bool (*complies)(auth_cfg_t *this, auth_cfg_t *constraints, bool log_error);
                    237: 
                    238:        /**
                    239:         * Merge items from other into this.
                    240:         *
                    241:         * @param other         items to read for merge
                    242:         * @param copy          TRUE to copy items, FALSE to move them
                    243:         */
                    244:        void (*merge)(auth_cfg_t *this, auth_cfg_t *other, bool copy);
                    245: 
                    246:        /**
                    247:         * Purge all rules in a config.
                    248:         *
                    249:         * @param keep_ca       whether to keep AUTH_RULE_CA_CERT entries
                    250:         */
                    251:        void (*purge)(auth_cfg_t *this, bool keep_ca);
                    252: 
                    253:        /**
                    254:         * Check two configs for equality.
                    255:         *
                    256:         * For rules we expect only once the latest value is compared only.
                    257:         *
                    258:         * @param other         other config to compare against this
                    259:         * @return                      TRUE if auth infos identical
                    260:         */
                    261:        bool (*equals)(auth_cfg_t *this, auth_cfg_t *other);
                    262: 
                    263:        /**
                    264:         * Clone an authentication config, including all rules.
                    265:         *
                    266:         * @return                      cloned configuration
                    267:         */
                    268:        auth_cfg_t* (*clone)(auth_cfg_t *this);
                    269: 
                    270:        /**
                    271:         * Destroy a config with all associated rules/values.
                    272:         */
                    273:        void (*destroy)(auth_cfg_t *this);
                    274: };
                    275: 
                    276: /**
                    277:  * Create a authentication config.
                    278:  */
                    279: auth_cfg_t *auth_cfg_create();
                    280: 
                    281: #endif /** AUTH_CFG_H_ @}*/

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