Annotation of embedaddon/strongswan/src/libcharon/encoding/payloads/cert_payload.h, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * Copyright (C) 2008 Tobias Brunner
                      3:  * Copyright (C) 2005-2007 Martin Willi
                      4:  * Copyright (C) 2005 Jan Hutter
                      5:  * HSR Hochschule fuer Technik Rapperswil
                      6:  *
                      7:  * This program is free software; you can redistribute it and/or modify it
                      8:  * under the terms of the GNU General Public License as published by the
                      9:  * Free Software Foundation; either version 2 of the License, or (at your
                     10:  * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
                     11:  *
                     12:  * This program is distributed in the hope that it will be useful, but
                     13:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
                     14:  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
                     15:  * for more details.
                     16:  */
                     17: 
                     18: /**
                     19:  * @defgroup cert_payload cert_payload
                     20:  * @{ @ingroup payloads
                     21:  */
                     22: 
                     23: #ifndef CERT_PAYLOAD_H_
                     24: #define CERT_PAYLOAD_H_
                     25: 
                     26: typedef struct cert_payload_t cert_payload_t;
                     27: typedef enum cert_encoding_t cert_encoding_t;
                     28: 
                     29: #include <library.h>
                     30: #include <credentials/certificates/certificate.h>
                     31: #include <credentials/containers/container.h>
                     32: #include <encoding/payloads/payload.h>
                     33: 
                     34: /**
                     35:  * Certificate encodings, as in RFC4306
                     36:  */
                     37: enum cert_encoding_t {
                     38:        ENC_PKCS7_WRAPPED_X509 =                 1,
                     39:        ENC_PGP =                                                2,
                     40:        ENC_DNS_SIGNED_KEY =                     3,
                     41:        ENC_X509_SIGNATURE =                     4,
                     42:        ENC_KERBEROS_TOKEN      =                        6,
                     43:        ENC_CRL =                                                7,
                     44:        ENC_ARL =                                                8,
                     45:        ENC_SPKI =                                               9,
                     46:        ENC_X509_ATTRIBUTE =                    10,
                     47:        ENC_RAW_RSA_KEY =                               11,
                     48:        ENC_X509_HASH_AND_URL =                 12,
                     49:        ENC_X509_HASH_AND_URL_BUNDLE =  13,
                     50:        ENC_OCSP_CONTENT =                              14,  /* from RFC 4806 */
                     51: };
                     52: 
                     53: /**
                     54:  * Enum names for cert_encoding_t
                     55:  */
                     56: extern enum_name_t *cert_encoding_names;
                     57: 
                     58: /**
                     59:  * Class representing an IKEv1/IKEv2 CERT payload.
                     60:  */
                     61: struct cert_payload_t {
                     62: 
                     63:        /**
                     64:         * The payload_t interface.
                     65:         */
                     66:        payload_t payload_interface;
                     67: 
                     68:        /**
                     69:         * Get the payloads encoded certificate.
                     70:         *
                     71:         * @return                              certificate copy
                     72:         */
                     73:        certificate_t *(*get_cert)(cert_payload_t *this);
                     74: 
                     75:        /**
                     76:         * Get the payloads certificate container.
                     77:         *
                     78:         * @return                              container copy
                     79:         */
                     80:        container_t *(*get_container)(cert_payload_t *this);
                     81: 
                     82:        /**
                     83:         * Get the encoding of the certificate.
                     84:         *
                     85:         * @return                              encoding
                     86:         */
                     87:        cert_encoding_t (*get_cert_encoding)(cert_payload_t *this);
                     88: 
                     89:        /**
                     90:         * Get the hash if this is a hash and URL encoded certificate.
                     91:         *
                     92:         * This function returns internal data, do not free.
                     93:         *
                     94:         * @return                              hash
                     95:         */
                     96:        chunk_t (*get_hash)(cert_payload_t *this);
                     97: 
                     98:        /**
                     99:         * Get the URL if this is a hash and URL encoded certificate.
                    100:         *
                    101:         * This function returns internal data, do not free.
                    102:         *
                    103:         * @return                              url
                    104:         */
                    105:        char *(*get_url)(cert_payload_t *this);
                    106: 
                    107:        /**
                    108:         * Destroys the cert_payload object.
                    109:         */
                    110:        void (*destroy) (cert_payload_t *this);
                    111: };
                    112: 
                    113: /**
                    114:  * Creates an empty certificate payload.
                    115:  *
                    116:  * @param type                         payload type (for IKEv1 or IKEv2)
                    117:  * @return                                     cert_payload_t object
                    118:  */
                    119: cert_payload_t *cert_payload_create(payload_type_t type);
                    120: 
                    121: /**
                    122:  * Creates a certificate payload with an embedded certificate.
                    123:  *
                    124:  * @param type                         payload type (for IKEv1 or IKEv2)
                    125:  * @param cert                         certificate to embed
                    126:  * @return                                     cert_payload_t object
                    127:  */
                    128: cert_payload_t *cert_payload_create_from_cert(payload_type_t type,
                    129:                                                                                          certificate_t *cert);
                    130: 
                    131: /**
                    132:  * Creates an IKEv2 certificate payload with hash and URL encoding.
                    133:  *
                    134:  * @param hash                         hash of the DER encoded certificate (gets cloned)
                    135:  * @param url                          URL to the certificate
                    136:  * @return                                     cert_payload_t object
                    137:  */
                    138: cert_payload_t *cert_payload_create_from_hash_and_url(chunk_t hash, char *url);
                    139: 
                    140: /**
                    141:  * Creates a custom certificate payload using type and associated data.
                    142:  *
                    143:  * @param type                         payload type (for IKEv1 or IKEv2)
                    144:  * @param encoding                     encoding type of certificate
                    145:  * @param data                         associated data (gets owned)
                    146:  * @return                                     cert_payload_t object
                    147:  */
                    148: cert_payload_t *cert_payload_create_custom(payload_type_t type,
                    149:                                                                                cert_encoding_t encoding, chunk_t data);
                    150: 
                    151: #endif /** CERT_PAYLOAD_H_ @}*/

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