Return to xof.h CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / strongswan / src / libstrongswan / crypto / xofs |
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_ @}*/