Annotation of embedaddon/strongswan/src/libstrongswan/credentials/keys/private_key.h, revision 1.1

1.1     ! misho       1: /*
        !             2:  * Copyright (C) 2017 Tobias Brunner
        !             3:  * Copyright (C) 2007 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 private_key private_key
        !            19:  * @{ @ingroup keys
        !            20:  */
        !            21: 
        !            22: #ifndef PRIVATE_KEY_H_
        !            23: #define PRIVATE_KEY_H_
        !            24: 
        !            25: typedef struct private_key_t private_key_t;
        !            26: 
        !            27: #include <credentials/cred_encoding.h>
        !            28: #include <credentials/keys/public_key.h>
        !            29: 
        !            30: /**
        !            31:  * Abstract private key interface.
        !            32:  */
        !            33: struct private_key_t {
        !            34: 
        !            35:        /**
        !            36:         * Get the key type.
        !            37:         *
        !            38:         * @return                      type of the key
        !            39:         */
        !            40:        key_type_t (*get_type)(private_key_t *this);
        !            41: 
        !            42:        /**
        !            43:         * Get signature schemes supported by this key.
        !            44:         *
        !            45:         * This is useful for keys that only support certain hash algorithms or
        !            46:         * require specific parameters for RSA/PSS signatures.
        !            47:         *
        !            48:         * @note Implementing this method is optional. If multiple schemes are
        !            49:         * returned, they should be ordered by decreasing preference.
        !            50:         *
        !            51:         * @return                      enumerator over signature_params_t*
        !            52:         */
        !            53:        enumerator_t *(*supported_signature_schemes)(private_key_t *this);
        !            54: 
        !            55:        /**
        !            56:         * Create a signature over a chunk of data.
        !            57:         *
        !            58:         * @param scheme        signature scheme to use
        !            59:         * @param params        optional parameters required by the specified scheme
        !            60:         * @param data          chunk of data to sign
        !            61:         * @param signature     where to allocate created signature
        !            62:         * @return                      TRUE if signature created
        !            63:         */
        !            64:        bool (*sign)(private_key_t *this, signature_scheme_t scheme, void *params,
        !            65:                                 chunk_t data, chunk_t *signature);
        !            66:        /**
        !            67:         * Decrypt a chunk of data.
        !            68:         *
        !            69:         * @param scheme        expected encryption scheme used
        !            70:         * @param crypto        chunk containing encrypted data
        !            71:         * @param plain         where to allocate decrypted data
        !            72:         * @return                      TRUE if data decrypted and plaintext allocated
        !            73:         */
        !            74:        bool (*decrypt)(private_key_t *this, encryption_scheme_t scheme,
        !            75:                                        chunk_t crypto, chunk_t *plain);
        !            76: 
        !            77:        /**
        !            78:         * Get the strength of the key in bits.
        !            79:         *
        !            80:         * @return                      strength of the key in bits
        !            81:         */
        !            82:        int (*get_keysize) (private_key_t *this);
        !            83: 
        !            84:        /**
        !            85:         * Get the public part from the private key.
        !            86:         *
        !            87:         * @return                      public key
        !            88:         */
        !            89:        public_key_t* (*get_public_key)(private_key_t *this);
        !            90: 
        !            91:        /**
        !            92:         * Check if two private keys are equal.
        !            93:         *
        !            94:         * @param other         other private key
        !            95:         * @return                      TRUE, if equality
        !            96:         */
        !            97:        bool (*equals) (private_key_t *this, private_key_t *other);
        !            98: 
        !            99:        /**
        !           100:         * Check if a private key belongs to a public key.
        !           101:         *
        !           102:         * @param public        public key
        !           103:         * @return                      TRUE, if keys belong together
        !           104:         */
        !           105:        bool (*belongs_to) (private_key_t *this, public_key_t *public);
        !           106: 
        !           107:        /**
        !           108:         * Get the fingerprint of the key.
        !           109:         *
        !           110:         * @param type          type of fingerprint, one of KEYID_*
        !           111:         * @param fp            fingerprint, points to internal data
        !           112:         * @return                      TRUE if fingerprint type supported
        !           113:         */
        !           114:        bool (*get_fingerprint)(private_key_t *this, cred_encoding_type_t type,
        !           115:                                                        chunk_t *fp);
        !           116: 
        !           117:        /**
        !           118:         * Check if a key has a given fingerprint of any kind.
        !           119:         *
        !           120:         * @param fp            fingerprint to check
        !           121:         * @return                      TRUE if key has given fingerprint
        !           122:         */
        !           123:        bool (*has_fingerprint)(private_key_t *this, chunk_t fp);
        !           124: 
        !           125:        /**
        !           126:         * Get the key in an encoded form as a chunk.
        !           127:         *
        !           128:         * @param type          type of the encoding, one of PRIVKEY_*
        !           129:         * @param encoding      encoding of the key, allocated
        !           130:         * @return                      TRUE if encoding supported
        !           131:         */
        !           132:        bool (*get_encoding)(private_key_t *this, cred_encoding_type_t type,
        !           133:                                                 chunk_t *encoding);
        !           134: 
        !           135:        /**
        !           136:         * Increase the refcount to this private key.
        !           137:         *
        !           138:         * @return                      this, with an increased refcount
        !           139:         */
        !           140:        private_key_t* (*get_ref)(private_key_t *this);
        !           141: 
        !           142:        /**
        !           143:         * Decrease refcount, destroy private_key if no more references.
        !           144:         */
        !           145:        void (*destroy)(private_key_t *this);
        !           146: };
        !           147: 
        !           148: /**
        !           149:  * Generic private key equals() implementation, usable by implementers.
        !           150:  *
        !           151:  * @param private              private key to check
        !           152:  * @param other                        key to compare
        !           153:  * @return                             TRUE if this is equal to other
        !           154:  */
        !           155: bool private_key_equals(private_key_t *private, private_key_t *other);
        !           156: 
        !           157: /**
        !           158:  * Generic private key belongs_to() implementation, usable by implementers.
        !           159:  *
        !           160:  * @param private              private key to check
        !           161:  * @param public               public key to compare
        !           162:  * @return                             TRUE if this is equal to other
        !           163:  */
        !           164: bool private_key_belongs_to(private_key_t *private, public_key_t *public);
        !           165: 
        !           166: /**
        !           167:  * Generic private key has_fingerprint() implementation, usable by implementers.
        !           168:  *
        !           169:  * @param private              private key to check
        !           170:  * @param fingerprint  fingerprint to check
        !           171:  * @return                             TRUE if key has given fingerprint
        !           172:  */
        !           173: bool private_key_has_fingerprint(private_key_t *private, chunk_t fingerprint);
        !           174: 
        !           175: #endif /** PRIVATE_KEY_H_ @}*/

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