Annotation of embedaddon/strongswan/src/libstrongswan/crypto/xofs/xof.h, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * Copyright (C) 2017 Tobias Brunner
                      3:  * Copyright (C) 2016 Andreas Steffen
                      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 xof xof
                     19:  * @{ @ingroup crypto
                     20:  */
                     21: 
                     22: #ifndef XOF_H_
                     23: #define XOF_H_
                     24: 
                     25: typedef enum ext_out_function_t ext_out_function_t;
                     26: typedef struct xof_t xof_t;
                     27: 
                     28: #include <library.h>
                     29: 
                     30: /**
                     31:  * Extendable Output Functions.
                     32:  */
                     33: enum ext_out_function_t {
                     34:        XOF_UNDEFINED,
                     35:        /** RFC 8017 PKCS#1 */
                     36:        XOF_MGF1_SHA1,
                     37:        /** RFC 8017 PKCS#1 */
                     38:        XOF_MGF1_SHA224,
                     39:        /** RFC 8017 PKCS#1 */
                     40:        XOF_MGF1_SHA256,
                     41:        /** RFC 8017 PKCS#1 */
                     42:        XOF_MGF1_SHA384,
                     43:        /** RFC 8017 PKCS#1 */
                     44:        XOF_MGF1_SHA512,
                     45:        /** FIPS 202 */
                     46:        XOF_SHAKE_128,
                     47:        /** FIPS 202 */
                     48:        XOF_SHAKE_256,
                     49:        /** RFC 7539 ChaCha20 */
                     50:        XOF_CHACHA20,
                     51: };
                     52: 
                     53: /**
                     54:  * enum name for ext_out_function_t.
                     55:  */
                     56: extern enum_name_t *ext_out_function_names;
                     57: 
                     58: /**
                     59:  * Generic interface for Extended Output Function (XOF)
                     60:  */
                     61: struct xof_t {
                     62: 
                     63:        /**
                     64:         * Return the type of the Extended Output Function
                     65:         *
                     66:         * @return                      XOF type
                     67:         */
                     68:        ext_out_function_t (*get_type)(xof_t *this);
                     69: 
                     70:        /**
                     71:         * Generates pseudo random bytes and writes them in the buffer.
                     72:         *
                     73:         * @param out_len       number of output bytes requested
                     74:         * @param buffer        pointer where the generated bytes will be written
                     75:         * @return                      TRUE if bytes generated successfully
                     76:         */
                     77:        bool (*get_bytes)(xof_t *this, size_t out_len,
                     78:                                          uint8_t *buffer) __attribute__((warn_unused_result));
                     79: 
                     80:        /**
                     81:         * Generates pseudo random bytes and allocate space for them.
                     82:         *
                     83:         * @param out_len       number of output bytes requested
                     84:         * @param chunk         chunk which will hold generated bytes
                     85:         * @return                      TRUE if bytes allocated and generated successfully
                     86:         */
                     87:        bool (*allocate_bytes)(xof_t *this, size_t out_len,
                     88:                                                   chunk_t *chunk) __attribute__((warn_unused_result));
                     89: 
                     90:        /**
                     91:         * Get the output block size
                     92:         *
                     93:         * @return                      block size in bytes
                     94:         */
                     95:        size_t (*get_block_size)(xof_t *this);
                     96: 
                     97:        /**
                     98:         * Get the recommended minimum seed size
                     99:         *
                    100:         * @return                      seed size in bytes
                    101:         */
                    102:        size_t (*get_seed_size)(xof_t *this);
                    103: 
                    104:        /**
                    105:         * Set the key for this xof_t object.
                    106:         *
                    107:         * @param sed           seed to set
                    108:         * @return                      TRUE if XOF initialized with seed successfully
                    109:         */
                    110:        bool (*set_seed)(xof_t *this,
                    111:                                         chunk_t seed) __attribute__((warn_unused_result));
                    112: 
                    113:        /**
                    114:         * Destroys a xof object.
                    115:         */
                    116:        void (*destroy)(xof_t *this);
                    117: };
                    118: 
                    119: /**
                    120:  * Determine an MGF1 XOF type for the given hash algorithm.
                    121:  *
                    122:  * @param alg                  hash algorithm to map
                    123:  * @return                             MGF1 XOF type if available, XOF_UNDEFINED otherwise
                    124:  */
                    125: ext_out_function_t xof_mgf1_from_hash_algorithm(hash_algorithm_t alg);
                    126: 
                    127: #endif /** XOF_H_ @}*/

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