]>
Commit | Line | Data |
---|---|---|
04208ac5 | 1 | /* |
883e7fcd | 2 | * Copyright (C) 2017 Tobias Brunner |
04208ac5 AS |
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, | |
720a76c2 | 35 | /** RFC 8017 PKCS#1 */ |
04208ac5 | 36 | XOF_MGF1_SHA1, |
720a76c2 TB |
37 | /** RFC 8017 PKCS#1 */ |
38 | XOF_MGF1_SHA224, | |
39 | /** RFC 8017 PKCS#1 */ | |
04208ac5 | 40 | XOF_MGF1_SHA256, |
720a76c2 TB |
41 | /** RFC 8017 PKCS#1 */ |
42 | XOF_MGF1_SHA384, | |
43 | /** RFC 8017 PKCS#1 */ | |
04208ac5 | 44 | XOF_MGF1_SHA512, |
188b190a AS |
45 | /** FIPS 202 */ |
46 | XOF_SHAKE_128, | |
47 | /** FIPS 202 */ | |
48 | XOF_SHAKE_256, | |
1fddb0b9 AS |
49 | /** RFC 7539 ChaCha20 */ |
50 | XOF_CHACHA20, | |
04208ac5 AS |
51 | }; |
52 | ||
53 | /** | |
54 | * enum name for ext_out_function_t. | |
55 | */ | |
56 | extern enum_name_t *ext_out_function_names; | |
57 | ||
58 | /** | |
188b190a | 59 | * Generic interface for Extended Output Function (XOF) |
04208ac5 AS |
60 | */ |
61 | struct xof_t { | |
62 | ||
188b190a AS |
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 | ||
04208ac5 AS |
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 | * | |
963adc76 | 107 | * @param seed seed to set |
04208ac5 AS |
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 | ||
883e7fcd TB |
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 | ||
04208ac5 | 127 | #endif /** XOF_H_ @}*/ |