xref: /optee_os/lib/libmbedtls/mbedtls/include/mbedtls/cipher.h (revision 19116a65b6728f04be40b827236dce7a34da49e1)
1 /**
2  * \file cipher.h
3  *
4  * \brief This file contains an abstraction interface for use with the cipher
5  * primitives provided by the library. It provides a common interface to all of
6  * the available cipher operations.
7  *
8  * \author Adriaan de Jong <dejong@fox-it.com>
9  */
10 /*
11  *  Copyright The Mbed TLS Contributors
12  *  SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
13  */
14 
15 #ifndef MBEDTLS_CIPHER_H
16 #define MBEDTLS_CIPHER_H
17 #include "mbedtls/private_access.h"
18 
19 #include "mbedtls/build_info.h"
20 
21 #include <stddef.h>
22 #include "mbedtls/platform_util.h"
23 
24 #if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CCM_C) || defined(MBEDTLS_CHACHAPOLY_C)
25 #define MBEDTLS_CIPHER_MODE_AEAD
26 #endif
27 
28 #if defined(MBEDTLS_CIPHER_MODE_CBC)
29 #define MBEDTLS_CIPHER_MODE_WITH_PADDING
30 #endif
31 
32 #if defined(MBEDTLS_CIPHER_NULL_CIPHER) || \
33     defined(MBEDTLS_CHACHA20_C)
34 #define MBEDTLS_CIPHER_MODE_STREAM
35 #endif
36 
37 /** The selected feature is not available. */
38 #define MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE  -0x6080
39 /** Bad input parameters. */
40 #define MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA       -0x6100
41 /** Failed to allocate memory. */
42 #define MBEDTLS_ERR_CIPHER_ALLOC_FAILED         -0x6180
43 /** Input data contains invalid padding and is rejected. */
44 #define MBEDTLS_ERR_CIPHER_INVALID_PADDING      -0x6200
45 /** Decryption of block requires a full block. */
46 #define MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED  -0x6280
47 /** Authentication failed (for AEAD modes). */
48 #define MBEDTLS_ERR_CIPHER_AUTH_FAILED          -0x6300
49 /** The context is invalid. For example, because it was freed. */
50 #define MBEDTLS_ERR_CIPHER_INVALID_CONTEXT      -0x6380
51 
52 #define MBEDTLS_CIPHER_VARIABLE_IV_LEN     0x01    /**< Cipher accepts IVs of variable length. */
53 #define MBEDTLS_CIPHER_VARIABLE_KEY_LEN    0x02    /**< Cipher accepts keys of variable length. */
54 
55 #ifdef __cplusplus
56 extern "C" {
57 #endif
58 
59 /**
60  * \brief     Supported cipher types.
61  *
62  * \warning   DES/3DES are considered weak ciphers and their use
63  *            constitutes a security risk. We recommend considering stronger
64  *            ciphers instead.
65  */
66 typedef enum {
67     MBEDTLS_CIPHER_ID_NONE = 0,  /**< Placeholder to mark the end of cipher ID lists. */
68     MBEDTLS_CIPHER_ID_NULL,      /**< The identity cipher, treated as a stream cipher. */
69     MBEDTLS_CIPHER_ID_AES,       /**< The AES cipher. */
70     MBEDTLS_CIPHER_ID_DES,       /**< The DES cipher. \warning DES is considered weak. */
71     MBEDTLS_CIPHER_ID_3DES,      /**< The Triple DES cipher. \warning 3DES is considered weak. */
72     MBEDTLS_CIPHER_ID_CAMELLIA,  /**< The Camellia cipher. */
73     MBEDTLS_CIPHER_ID_ARIA,      /**< The Aria cipher. */
74     MBEDTLS_CIPHER_ID_CHACHA20,  /**< The ChaCha20 cipher. */
75 } mbedtls_cipher_id_t;
76 
77 /**
78  * \brief     Supported {cipher type, cipher mode} pairs.
79  *
80  * \warning   DES/3DES are considered weak ciphers and their use
81  *            constitutes a security risk. We recommend considering stronger
82  *            ciphers instead.
83  */
84 typedef enum {
85     MBEDTLS_CIPHER_NONE = 0,             /**< Placeholder to mark the end of cipher-pair lists. */
86     MBEDTLS_CIPHER_NULL,                 /**< The identity stream cipher. */
87     MBEDTLS_CIPHER_AES_128_ECB,          /**< AES cipher with 128-bit ECB mode. */
88     MBEDTLS_CIPHER_AES_192_ECB,          /**< AES cipher with 192-bit ECB mode. */
89     MBEDTLS_CIPHER_AES_256_ECB,          /**< AES cipher with 256-bit ECB mode. */
90     MBEDTLS_CIPHER_AES_128_CBC,          /**< AES cipher with 128-bit CBC mode. */
91     MBEDTLS_CIPHER_AES_192_CBC,          /**< AES cipher with 192-bit CBC mode. */
92     MBEDTLS_CIPHER_AES_256_CBC,          /**< AES cipher with 256-bit CBC mode. */
93     MBEDTLS_CIPHER_AES_128_CFB128,       /**< AES cipher with 128-bit CFB128 mode. */
94     MBEDTLS_CIPHER_AES_192_CFB128,       /**< AES cipher with 192-bit CFB128 mode. */
95     MBEDTLS_CIPHER_AES_256_CFB128,       /**< AES cipher with 256-bit CFB128 mode. */
96     MBEDTLS_CIPHER_AES_128_CTR,          /**< AES cipher with 128-bit CTR mode. */
97     MBEDTLS_CIPHER_AES_192_CTR,          /**< AES cipher with 192-bit CTR mode. */
98     MBEDTLS_CIPHER_AES_256_CTR,          /**< AES cipher with 256-bit CTR mode. */
99     MBEDTLS_CIPHER_AES_128_GCM,          /**< AES cipher with 128-bit GCM mode. */
100     MBEDTLS_CIPHER_AES_192_GCM,          /**< AES cipher with 192-bit GCM mode. */
101     MBEDTLS_CIPHER_AES_256_GCM,          /**< AES cipher with 256-bit GCM mode. */
102     MBEDTLS_CIPHER_CAMELLIA_128_ECB,     /**< Camellia cipher with 128-bit ECB mode. */
103     MBEDTLS_CIPHER_CAMELLIA_192_ECB,     /**< Camellia cipher with 192-bit ECB mode. */
104     MBEDTLS_CIPHER_CAMELLIA_256_ECB,     /**< Camellia cipher with 256-bit ECB mode. */
105     MBEDTLS_CIPHER_CAMELLIA_128_CBC,     /**< Camellia cipher with 128-bit CBC mode. */
106     MBEDTLS_CIPHER_CAMELLIA_192_CBC,     /**< Camellia cipher with 192-bit CBC mode. */
107     MBEDTLS_CIPHER_CAMELLIA_256_CBC,     /**< Camellia cipher with 256-bit CBC mode. */
108     MBEDTLS_CIPHER_CAMELLIA_128_CFB128,  /**< Camellia cipher with 128-bit CFB128 mode. */
109     MBEDTLS_CIPHER_CAMELLIA_192_CFB128,  /**< Camellia cipher with 192-bit CFB128 mode. */
110     MBEDTLS_CIPHER_CAMELLIA_256_CFB128,  /**< Camellia cipher with 256-bit CFB128 mode. */
111     MBEDTLS_CIPHER_CAMELLIA_128_CTR,     /**< Camellia cipher with 128-bit CTR mode. */
112     MBEDTLS_CIPHER_CAMELLIA_192_CTR,     /**< Camellia cipher with 192-bit CTR mode. */
113     MBEDTLS_CIPHER_CAMELLIA_256_CTR,     /**< Camellia cipher with 256-bit CTR mode. */
114     MBEDTLS_CIPHER_CAMELLIA_128_GCM,     /**< Camellia cipher with 128-bit GCM mode. */
115     MBEDTLS_CIPHER_CAMELLIA_192_GCM,     /**< Camellia cipher with 192-bit GCM mode. */
116     MBEDTLS_CIPHER_CAMELLIA_256_GCM,     /**< Camellia cipher with 256-bit GCM mode. */
117     MBEDTLS_CIPHER_DES_ECB,              /**< DES cipher with ECB mode. \warning DES is considered weak. */
118     MBEDTLS_CIPHER_DES_CBC,              /**< DES cipher with CBC mode. \warning DES is considered weak. */
119     MBEDTLS_CIPHER_DES_EDE_ECB,          /**< DES cipher with EDE ECB mode. \warning 3DES is considered weak. */
120     MBEDTLS_CIPHER_DES_EDE_CBC,          /**< DES cipher with EDE CBC mode. \warning 3DES is considered weak. */
121     MBEDTLS_CIPHER_DES_EDE3_ECB,         /**< DES cipher with EDE3 ECB mode. \warning 3DES is considered weak. */
122     MBEDTLS_CIPHER_DES_EDE3_CBC,         /**< DES cipher with EDE3 CBC mode. \warning 3DES is considered weak. */
123     MBEDTLS_CIPHER_AES_128_CCM,          /**< AES cipher with 128-bit CCM mode. */
124     MBEDTLS_CIPHER_AES_192_CCM,          /**< AES cipher with 192-bit CCM mode. */
125     MBEDTLS_CIPHER_AES_256_CCM,          /**< AES cipher with 256-bit CCM mode. */
126     MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG, /**< AES cipher with 128-bit CCM_STAR_NO_TAG mode. */
127     MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG, /**< AES cipher with 192-bit CCM_STAR_NO_TAG mode. */
128     MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG, /**< AES cipher with 256-bit CCM_STAR_NO_TAG mode. */
129     MBEDTLS_CIPHER_CAMELLIA_128_CCM,     /**< Camellia cipher with 128-bit CCM mode. */
130     MBEDTLS_CIPHER_CAMELLIA_192_CCM,     /**< Camellia cipher with 192-bit CCM mode. */
131     MBEDTLS_CIPHER_CAMELLIA_256_CCM,     /**< Camellia cipher with 256-bit CCM mode. */
132     MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG, /**< Camellia cipher with 128-bit CCM_STAR_NO_TAG mode. */
133     MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG, /**< Camellia cipher with 192-bit CCM_STAR_NO_TAG mode. */
134     MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG, /**< Camellia cipher with 256-bit CCM_STAR_NO_TAG mode. */
135     MBEDTLS_CIPHER_ARIA_128_ECB,         /**< Aria cipher with 128-bit key and ECB mode. */
136     MBEDTLS_CIPHER_ARIA_192_ECB,         /**< Aria cipher with 192-bit key and ECB mode. */
137     MBEDTLS_CIPHER_ARIA_256_ECB,         /**< Aria cipher with 256-bit key and ECB mode. */
138     MBEDTLS_CIPHER_ARIA_128_CBC,         /**< Aria cipher with 128-bit key and CBC mode. */
139     MBEDTLS_CIPHER_ARIA_192_CBC,         /**< Aria cipher with 192-bit key and CBC mode. */
140     MBEDTLS_CIPHER_ARIA_256_CBC,         /**< Aria cipher with 256-bit key and CBC mode. */
141     MBEDTLS_CIPHER_ARIA_128_CFB128,      /**< Aria cipher with 128-bit key and CFB-128 mode. */
142     MBEDTLS_CIPHER_ARIA_192_CFB128,      /**< Aria cipher with 192-bit key and CFB-128 mode. */
143     MBEDTLS_CIPHER_ARIA_256_CFB128,      /**< Aria cipher with 256-bit key and CFB-128 mode. */
144     MBEDTLS_CIPHER_ARIA_128_CTR,         /**< Aria cipher with 128-bit key and CTR mode. */
145     MBEDTLS_CIPHER_ARIA_192_CTR,         /**< Aria cipher with 192-bit key and CTR mode. */
146     MBEDTLS_CIPHER_ARIA_256_CTR,         /**< Aria cipher with 256-bit key and CTR mode. */
147     MBEDTLS_CIPHER_ARIA_128_GCM,         /**< Aria cipher with 128-bit key and GCM mode. */
148     MBEDTLS_CIPHER_ARIA_192_GCM,         /**< Aria cipher with 192-bit key and GCM mode. */
149     MBEDTLS_CIPHER_ARIA_256_GCM,         /**< Aria cipher with 256-bit key and GCM mode. */
150     MBEDTLS_CIPHER_ARIA_128_CCM,         /**< Aria cipher with 128-bit key and CCM mode. */
151     MBEDTLS_CIPHER_ARIA_192_CCM,         /**< Aria cipher with 192-bit key and CCM mode. */
152     MBEDTLS_CIPHER_ARIA_256_CCM,         /**< Aria cipher with 256-bit key and CCM mode. */
153     MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG, /**< Aria cipher with 128-bit key and CCM_STAR_NO_TAG mode. */
154     MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG, /**< Aria cipher with 192-bit key and CCM_STAR_NO_TAG mode. */
155     MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG, /**< Aria cipher with 256-bit key and CCM_STAR_NO_TAG mode. */
156     MBEDTLS_CIPHER_AES_128_OFB,          /**< AES 128-bit cipher in OFB mode. */
157     MBEDTLS_CIPHER_AES_192_OFB,          /**< AES 192-bit cipher in OFB mode. */
158     MBEDTLS_CIPHER_AES_256_OFB,          /**< AES 256-bit cipher in OFB mode. */
159     MBEDTLS_CIPHER_AES_128_XTS,          /**< AES 128-bit cipher in XTS block mode. */
160     MBEDTLS_CIPHER_AES_256_XTS,          /**< AES 256-bit cipher in XTS block mode. */
161     MBEDTLS_CIPHER_CHACHA20,             /**< ChaCha20 stream cipher. */
162     MBEDTLS_CIPHER_CHACHA20_POLY1305,    /**< ChaCha20-Poly1305 AEAD cipher. */
163     MBEDTLS_CIPHER_AES_128_KW,           /**< AES cipher with 128-bit NIST KW mode. */
164     MBEDTLS_CIPHER_AES_192_KW,           /**< AES cipher with 192-bit NIST KW mode. */
165     MBEDTLS_CIPHER_AES_256_KW,           /**< AES cipher with 256-bit NIST KW mode. */
166     MBEDTLS_CIPHER_AES_128_KWP,          /**< AES cipher with 128-bit NIST KWP mode. */
167     MBEDTLS_CIPHER_AES_192_KWP,          /**< AES cipher with 192-bit NIST KWP mode. */
168     MBEDTLS_CIPHER_AES_256_KWP,          /**< AES cipher with 256-bit NIST KWP mode. */
169 } mbedtls_cipher_type_t;
170 
171 /** Supported cipher modes. */
172 typedef enum {
173     MBEDTLS_MODE_NONE = 0,               /**< None.                        */
174     MBEDTLS_MODE_ECB,                    /**< The ECB cipher mode.         */
175     MBEDTLS_MODE_CBC,                    /**< The CBC cipher mode.         */
176     MBEDTLS_MODE_CFB,                    /**< The CFB cipher mode.         */
177     MBEDTLS_MODE_OFB,                    /**< The OFB cipher mode.         */
178     MBEDTLS_MODE_CTR,                    /**< The CTR cipher mode.         */
179     MBEDTLS_MODE_GCM,                    /**< The GCM cipher mode.         */
180     MBEDTLS_MODE_STREAM,                 /**< The stream cipher mode.      */
181     MBEDTLS_MODE_CCM,                    /**< The CCM cipher mode.         */
182     MBEDTLS_MODE_CCM_STAR_NO_TAG,        /**< The CCM*-no-tag cipher mode. */
183     MBEDTLS_MODE_XTS,                    /**< The XTS cipher mode.         */
184     MBEDTLS_MODE_CHACHAPOLY,             /**< The ChaCha-Poly cipher mode. */
185     MBEDTLS_MODE_KW,                     /**< The SP800-38F KW mode */
186     MBEDTLS_MODE_KWP,                    /**< The SP800-38F KWP mode */
187 } mbedtls_cipher_mode_t;
188 
189 /** Supported cipher padding types. */
190 typedef enum {
191     MBEDTLS_PADDING_PKCS7 = 0,     /**< PKCS7 padding (default).        */
192     MBEDTLS_PADDING_ONE_AND_ZEROS, /**< ISO/IEC 7816-4 padding.         */
193     MBEDTLS_PADDING_ZEROS_AND_LEN, /**< ANSI X.923 padding.             */
194     MBEDTLS_PADDING_ZEROS,         /**< Zero padding (not reversible). */
195     MBEDTLS_PADDING_NONE,          /**< Never pad (full blocks only).   */
196 } mbedtls_cipher_padding_t;
197 
198 /** Type of operation. */
199 typedef enum {
200     MBEDTLS_OPERATION_NONE = -1,
201     MBEDTLS_DECRYPT = 0,
202     MBEDTLS_ENCRYPT,
203 } mbedtls_operation_t;
204 
205 enum {
206     /** Undefined key length. */
207     MBEDTLS_KEY_LENGTH_NONE = 0,
208     /** Key length, in bits (including parity), for DES keys. \warning DES is considered weak. */
209     MBEDTLS_KEY_LENGTH_DES  = 64,
210     /** Key length in bits, including parity, for DES in two-key EDE. \warning 3DES is considered weak. */
211     MBEDTLS_KEY_LENGTH_DES_EDE = 128,
212     /** Key length in bits, including parity, for DES in three-key EDE. \warning 3DES is considered weak. */
213     MBEDTLS_KEY_LENGTH_DES_EDE3 = 192,
214 };
215 
216 /** Maximum length of any IV, in Bytes. */
217 /* This should ideally be derived automatically from list of ciphers.
218  * This should be kept in sync with MBEDTLS_SSL_MAX_IV_LENGTH defined
219  * in library/ssl_misc.h. */
220 #define MBEDTLS_MAX_IV_LENGTH      16
221 
222 /** Maximum block size of any cipher, in Bytes. */
223 /* This should ideally be derived automatically from list of ciphers.
224  * This should be kept in sync with MBEDTLS_SSL_MAX_BLOCK_LENGTH defined
225  * in library/ssl_misc.h. */
226 #define MBEDTLS_MAX_BLOCK_LENGTH   16
227 
228 /** Maximum key length, in Bytes. */
229 /* This should ideally be derived automatically from list of ciphers.
230  * For now, only check whether XTS is enabled which uses 64 Byte keys,
231  * and use 32 Bytes as an upper bound for the maximum key length otherwise.
232  * This should be kept in sync with MBEDTLS_SSL_MAX_BLOCK_LENGTH defined
233  * in library/ssl_misc.h, which however deliberately ignores the case of XTS
234  * since the latter isn't used in SSL/TLS. */
235 #if defined(MBEDTLS_CIPHER_MODE_XTS)
236 #define MBEDTLS_MAX_KEY_LENGTH     64
237 #else
238 #define MBEDTLS_MAX_KEY_LENGTH     32
239 #endif /* MBEDTLS_CIPHER_MODE_XTS */
240 
241 /**
242  * Base cipher information (opaque struct).
243  */
244 typedef struct mbedtls_cipher_base_t mbedtls_cipher_base_t;
245 
246 /**
247  * CMAC context (opaque struct).
248  */
249 typedef struct mbedtls_cmac_context_t mbedtls_cmac_context_t;
250 
251 /**
252  * Cipher information. Allows calling cipher functions
253  * in a generic way.
254  *
255  * \note        The library does not support custom cipher info structures,
256  *              only built-in structures returned by the functions
257  *              mbedtls_cipher_info_from_string(),
258  *              mbedtls_cipher_info_from_type(),
259  *              mbedtls_cipher_info_from_values(),
260  *              mbedtls_cipher_info_from_psa().
261  *
262  * \note        Some fields store a value that has been right-shifted to save
263  *              code-size, so should not be used directly. The accessor
264  *              functions adjust for this and return the "natural" value.
265  */
266 typedef struct mbedtls_cipher_info_t {
267     /** Name of the cipher. */
268     const char *MBEDTLS_PRIVATE(name);
269 
270     /** The block size, in bytes. */
271     unsigned int MBEDTLS_PRIVATE(block_size) : 5;
272 
273     /** IV or nonce size, in bytes (right shifted by #MBEDTLS_IV_SIZE_SHIFT).
274      * For ciphers that accept variable IV sizes,
275      * this is the recommended size.
276      */
277     unsigned int MBEDTLS_PRIVATE(iv_size) : 3;
278 
279     /** The cipher key length, in bits (right shifted by #MBEDTLS_KEY_BITLEN_SHIFT).
280      * This is the default length for variable sized ciphers.
281      * Includes parity bits for ciphers like DES.
282      */
283     unsigned int MBEDTLS_PRIVATE(key_bitlen) : 4;
284 
285     /** The cipher mode (as per mbedtls_cipher_mode_t).
286      * For example, MBEDTLS_MODE_CBC.
287      */
288     unsigned int MBEDTLS_PRIVATE(mode) : 4;
289 
290     /** Full cipher identifier (as per mbedtls_cipher_type_t).
291      * For example, MBEDTLS_CIPHER_AES_256_CBC.
292      *
293      * This could be 7 bits, but 8 bits retains byte alignment for the
294      * next field, which reduces code size to access that field.
295      */
296     unsigned int MBEDTLS_PRIVATE(type) : 8;
297 
298     /** Bitflag comprised of MBEDTLS_CIPHER_VARIABLE_IV_LEN and
299      *  MBEDTLS_CIPHER_VARIABLE_KEY_LEN indicating whether the
300      *  cipher supports variable IV or variable key sizes, respectively.
301      */
302     unsigned int MBEDTLS_PRIVATE(flags) : 2;
303 
304     /** Index to LUT for base cipher information and functions. */
305     unsigned int MBEDTLS_PRIVATE(base_idx) : 5;
306 
307 } mbedtls_cipher_info_t;
308 
309 /* For internal use only.
310  * These are used to more compactly represent the fields above. */
311 #define MBEDTLS_KEY_BITLEN_SHIFT  6
312 #define MBEDTLS_IV_SIZE_SHIFT     2
313 /**
314  * Generic cipher context.
315  */
316 typedef struct mbedtls_cipher_context_t {
317     /** Information about the associated cipher. */
318     const mbedtls_cipher_info_t *MBEDTLS_PRIVATE(cipher_info);
319 
320     /** Key length to use. */
321     int MBEDTLS_PRIVATE(key_bitlen);
322 
323     /** Operation that the key of the context has been
324      * initialized for.
325      */
326     mbedtls_operation_t MBEDTLS_PRIVATE(operation);
327 
328 #if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING)
329     /** Padding functions to use, if relevant for
330      * the specific cipher mode.
331      */
332     void(*MBEDTLS_PRIVATE(add_padding))(unsigned char *output, size_t olen,
333                                         size_t data_len);
334     /* Report invalid-padding condition through the output parameter
335      * invalid_padding. To minimize changes in Mbed TLS 3.6, where this
336      * declaration is in a public header, use the public type size_t
337      * rather than the internal type mbedtls_ct_condition_t. */
338     int(*MBEDTLS_PRIVATE(get_padding))(unsigned char *input, size_t ilen,
339                                        size_t *data_len,
340                                        size_t *invalid_padding);
341 #endif
342 
343     /** Buffer for input that has not been processed yet. */
344     unsigned char MBEDTLS_PRIVATE(unprocessed_data)[MBEDTLS_MAX_BLOCK_LENGTH];
345 
346     /** Number of Bytes that have not been processed yet. */
347     size_t MBEDTLS_PRIVATE(unprocessed_len);
348 
349     /** Current IV or NONCE_COUNTER for CTR-mode, data unit (or sector) number
350      * for XTS-mode. */
351     unsigned char MBEDTLS_PRIVATE(iv)[MBEDTLS_MAX_IV_LENGTH];
352 
353     /** IV size in Bytes, for ciphers with variable-length IVs. */
354     size_t MBEDTLS_PRIVATE(iv_size);
355 
356     /** The cipher-specific context. */
357     void *MBEDTLS_PRIVATE(cipher_ctx);
358 
359 #if defined(MBEDTLS_CMAC_C)
360     /** CMAC-specific context. */
361     mbedtls_cmac_context_t *MBEDTLS_PRIVATE(cmac_ctx);
362 #endif
363 
364 #if defined(MBEDTLS_USE_PSA_CRYPTO) && !defined(MBEDTLS_DEPRECATED_REMOVED)
365     /** Indicates whether the cipher operations should be performed
366      *  by Mbed TLS' own crypto library or an external implementation
367      *  of the PSA Crypto API.
368      *  This is unset if the cipher context was established through
369      *  mbedtls_cipher_setup(), and set if it was established through
370      *  mbedtls_cipher_setup_psa().
371      */
372     unsigned char MBEDTLS_PRIVATE(psa_enabled);
373 #endif /* MBEDTLS_USE_PSA_CRYPTO && !MBEDTLS_DEPRECATED_REMOVED */
374 
375 } mbedtls_cipher_context_t;
376 
377 /**
378  * \brief This function retrieves the list of ciphers supported
379  *        by the generic cipher module.
380  *
381  *        For any cipher identifier in the returned list, you can
382  *        obtain the corresponding generic cipher information structure
383  *        via mbedtls_cipher_info_from_type(), which can then be used
384  *        to prepare a cipher context via mbedtls_cipher_setup().
385  *
386  *
387  * \return      A statically-allocated array of cipher identifiers
388  *              of type cipher_type_t. The last entry is zero.
389  */
390 const int *mbedtls_cipher_list(void);
391 
392 /**
393  * \brief               This function retrieves the cipher-information
394  *                      structure associated with the given cipher name.
395  *
396  * \param cipher_name   Name of the cipher to search for. This must not be
397  *                      \c NULL.
398  *
399  * \return              The cipher information structure associated with the
400  *                      given \p cipher_name.
401  * \return              \c NULL if the associated cipher information is not found.
402  */
403 const mbedtls_cipher_info_t *mbedtls_cipher_info_from_string(const char *cipher_name);
404 
405 /**
406  * \brief               This function retrieves the cipher-information
407  *                      structure associated with the given cipher type.
408  *
409  * \param cipher_type   Type of the cipher to search for.
410  *
411  * \return              The cipher information structure associated with the
412  *                      given \p cipher_type.
413  * \return              \c NULL if the associated cipher information is not found.
414  */
415 const mbedtls_cipher_info_t *mbedtls_cipher_info_from_type(const mbedtls_cipher_type_t cipher_type);
416 
417 /**
418  * \brief               This function retrieves the cipher-information
419  *                      structure associated with the given cipher ID,
420  *                      key size and mode.
421  *
422  * \param cipher_id     The ID of the cipher to search for. For example,
423  *                      #MBEDTLS_CIPHER_ID_AES.
424  * \param key_bitlen    The length of the key in bits.
425  * \param mode          The cipher mode. For example, #MBEDTLS_MODE_CBC.
426  *
427  * \return              The cipher information structure associated with the
428  *                      given \p cipher_id.
429  * \return              \c NULL if the associated cipher information is not found.
430  */
431 const mbedtls_cipher_info_t *mbedtls_cipher_info_from_values(const mbedtls_cipher_id_t cipher_id,
432                                                              int key_bitlen,
433                                                              const mbedtls_cipher_mode_t mode);
434 
435 /**
436  * \brief               Retrieve the identifier for a cipher info structure.
437  *
438  * \param[in] info      The cipher info structure to query.
439  *                      This may be \c NULL.
440  *
441  * \return              The full cipher identifier (\c MBEDTLS_CIPHER_xxx).
442  * \return              #MBEDTLS_CIPHER_NONE if \p info is \c NULL.
443  */
mbedtls_cipher_info_get_type(const mbedtls_cipher_info_t * info)444 static inline mbedtls_cipher_type_t mbedtls_cipher_info_get_type(
445     const mbedtls_cipher_info_t *info)
446 {
447     if (info == NULL) {
448         return MBEDTLS_CIPHER_NONE;
449     } else {
450         return (mbedtls_cipher_type_t) info->MBEDTLS_PRIVATE(type);
451     }
452 }
453 
454 /**
455  * \brief               Retrieve the operation mode for a cipher info structure.
456  *
457  * \param[in] info      The cipher info structure to query.
458  *                      This may be \c NULL.
459  *
460  * \return              The cipher mode (\c MBEDTLS_MODE_xxx).
461  * \return              #MBEDTLS_MODE_NONE if \p info is \c NULL.
462  */
mbedtls_cipher_info_get_mode(const mbedtls_cipher_info_t * info)463 static inline mbedtls_cipher_mode_t mbedtls_cipher_info_get_mode(
464     const mbedtls_cipher_info_t *info)
465 {
466     if (info == NULL) {
467         return MBEDTLS_MODE_NONE;
468     } else {
469         return (mbedtls_cipher_mode_t) info->MBEDTLS_PRIVATE(mode);
470     }
471 }
472 
473 /**
474  * \brief               Retrieve the key size for a cipher info structure.
475  *
476  * \param[in] info      The cipher info structure to query.
477  *                      This may be \c NULL.
478  *
479  * \return              The key length in bits.
480  *                      For variable-sized ciphers, this is the default length.
481  *                      For DES, this includes the parity bits.
482  * \return              \c 0 if \p info is \c NULL.
483  */
mbedtls_cipher_info_get_key_bitlen(const mbedtls_cipher_info_t * info)484 static inline size_t mbedtls_cipher_info_get_key_bitlen(
485     const mbedtls_cipher_info_t *info)
486 {
487     if (info == NULL) {
488         return 0;
489     } else {
490         return ((size_t) info->MBEDTLS_PRIVATE(key_bitlen)) << MBEDTLS_KEY_BITLEN_SHIFT;
491     }
492 }
493 
494 /**
495  * \brief               Retrieve the human-readable name for a
496  *                      cipher info structure.
497  *
498  * \param[in] info      The cipher info structure to query.
499  *                      This may be \c NULL.
500  *
501  * \return              The cipher name, which is a human readable string,
502  *                      with static storage duration.
503  * \return              \c NULL if \p info is \c NULL.
504  */
mbedtls_cipher_info_get_name(const mbedtls_cipher_info_t * info)505 static inline const char *mbedtls_cipher_info_get_name(
506     const mbedtls_cipher_info_t *info)
507 {
508     if (info == NULL) {
509         return NULL;
510     } else {
511         return info->MBEDTLS_PRIVATE(name);
512     }
513 }
514 
515 /**
516  * \brief       This function returns the size of the IV or nonce
517  *              for the cipher info structure, in bytes.
518  *
519  * \param info  The cipher info structure. This may be \c NULL.
520  *
521  * \return      The recommended IV size.
522  * \return      \c 0 for ciphers not using an IV or a nonce.
523  * \return      \c 0 if \p info is \c NULL.
524  */
mbedtls_cipher_info_get_iv_size(const mbedtls_cipher_info_t * info)525 static inline size_t mbedtls_cipher_info_get_iv_size(
526     const mbedtls_cipher_info_t *info)
527 {
528     if (info == NULL) {
529         return 0;
530     }
531 
532     return ((size_t) info->MBEDTLS_PRIVATE(iv_size)) << MBEDTLS_IV_SIZE_SHIFT;
533 }
534 
535 /**
536  * \brief        This function returns the block size of the given
537  *               cipher info structure in bytes.
538  *
539  * \param info   The cipher info structure. This may be \c NULL.
540  *
541  * \return       The block size of the cipher.
542  * \return       \c 1 if the cipher is a stream cipher.
543  * \return       \c 0 if \p info is \c NULL.
544  */
mbedtls_cipher_info_get_block_size(const mbedtls_cipher_info_t * info)545 static inline size_t mbedtls_cipher_info_get_block_size(
546     const mbedtls_cipher_info_t *info)
547 {
548     if (info == NULL) {
549         return 0;
550     }
551 
552     return (size_t) (info->MBEDTLS_PRIVATE(block_size));
553 }
554 
555 /**
556  * \brief        This function returns a non-zero value if the key length for
557  *               the given cipher is variable.
558  *
559  * \param info   The cipher info structure. This may be \c NULL.
560  *
561  * \return       Non-zero if the key length is variable, \c 0 otherwise.
562  * \return       \c 0 if the given pointer is \c NULL.
563  */
mbedtls_cipher_info_has_variable_key_bitlen(const mbedtls_cipher_info_t * info)564 static inline int mbedtls_cipher_info_has_variable_key_bitlen(
565     const mbedtls_cipher_info_t *info)
566 {
567     if (info == NULL) {
568         return 0;
569     }
570 
571     return info->MBEDTLS_PRIVATE(flags) & MBEDTLS_CIPHER_VARIABLE_KEY_LEN;
572 }
573 
574 /**
575  * \brief        This function returns a non-zero value if the IV size for
576  *               the given cipher is variable.
577  *
578  * \param info   The cipher info structure. This may be \c NULL.
579  *
580  * \return       Non-zero if the IV size is variable, \c 0 otherwise.
581  * \return       \c 0 if the given pointer is \c NULL.
582  */
mbedtls_cipher_info_has_variable_iv_size(const mbedtls_cipher_info_t * info)583 static inline int mbedtls_cipher_info_has_variable_iv_size(
584     const mbedtls_cipher_info_t *info)
585 {
586     if (info == NULL) {
587         return 0;
588     }
589 
590     return info->MBEDTLS_PRIVATE(flags) & MBEDTLS_CIPHER_VARIABLE_IV_LEN;
591 }
592 
593 /**
594  * \brief               This function initializes a \p ctx as NONE.
595  *
596  * \param ctx           The context to be initialized. This must not be \c NULL.
597  */
598 void mbedtls_cipher_init(mbedtls_cipher_context_t *ctx);
599 
600 /**
601  * \brief               This function frees and clears the cipher-specific
602  *                      context of \p ctx. Freeing \p ctx itself remains the
603  *                      responsibility of the caller.
604  *
605  * \param ctx           The context to be freed. If this is \c NULL, the
606  *                      function has no effect, otherwise this must point to an
607  *                      initialized context.
608  */
609 void mbedtls_cipher_free(mbedtls_cipher_context_t *ctx);
610 
611 /**
612  * \brief           Clone the state of an cipher context
613  *
614  * \note            The two contexts must have been setup to the same type
615  *                  (cloning from AES to DES make no sense).
616  *
617  * \param dst       The destination context
618  * \param src       The context to be cloned
619  *
620  * \return          \c 0 on success,
621  *                  \c MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on parameter failure.
622  */
623 int mbedtls_cipher_clone(mbedtls_cipher_context_t *dst,
624                          const mbedtls_cipher_context_t *src);
625 
626 /**
627  * \brief               This function prepares a cipher context for
628  *                      use with the given cipher primitive.
629  *
630  * \note                After calling this function, you should call
631  *                      mbedtls_cipher_setkey() and, if the mode uses padding,
632  *                      mbedtls_cipher_set_padding_mode(), then for each
633  *                      message to encrypt or decrypt with this key, either:
634  *                      - mbedtls_cipher_crypt() for one-shot processing with
635  *                      non-AEAD modes;
636  *                      - mbedtls_cipher_auth_encrypt_ext() or
637  *                      mbedtls_cipher_auth_decrypt_ext() for one-shot
638  *                      processing with AEAD modes or NIST_KW;
639  *                      - for multi-part processing, see the documentation of
640  *                      mbedtls_cipher_reset().
641  *
642  * \param ctx           The context to prepare. This must be initialized by
643  *                      a call to mbedtls_cipher_init() first.
644  * \param cipher_info   The cipher to use.
645  *
646  * \return              \c 0 on success.
647  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
648  *                      parameter-verification failure.
649  * \return              #MBEDTLS_ERR_CIPHER_ALLOC_FAILED if allocation of the
650  *                      cipher-specific context fails.
651  */
652 int mbedtls_cipher_setup(mbedtls_cipher_context_t *ctx,
653                          const mbedtls_cipher_info_t *cipher_info);
654 
655 #if defined(MBEDTLS_USE_PSA_CRYPTO)
656 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
657 /**
658  * \brief               This function initializes a cipher context for
659  *                      PSA-based use with the given cipher primitive.
660  *
661  * \deprecated          This function is deprecated and will be removed in a
662  *                      future version of the library.
663  *                      Please use psa_aead_xxx() / psa_cipher_xxx() directly
664  *                      instead.
665  *
666  * \note                See #MBEDTLS_USE_PSA_CRYPTO for information on PSA.
667  *
668  * \param ctx           The context to initialize. May not be \c NULL.
669  * \param cipher_info   The cipher to use.
670  * \param taglen        For AEAD ciphers, the length in bytes of the
671  *                      authentication tag to use. Subsequent uses of
672  *                      mbedtls_cipher_auth_encrypt_ext() or
673  *                      mbedtls_cipher_auth_decrypt_ext() must provide
674  *                      the same tag length.
675  *                      For non-AEAD ciphers, the value must be \c 0.
676  *
677  * \return              \c 0 on success.
678  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
679  *                      parameter-verification failure.
680  * \return              #MBEDTLS_ERR_CIPHER_ALLOC_FAILED if allocation of the
681  *                      cipher-specific context fails.
682  */
683 int MBEDTLS_DEPRECATED mbedtls_cipher_setup_psa(mbedtls_cipher_context_t *ctx,
684                                                 const mbedtls_cipher_info_t *cipher_info,
685                                                 size_t taglen);
686 #endif /* MBEDTLS_DEPRECATED_REMOVED */
687 #endif /* MBEDTLS_USE_PSA_CRYPTO */
688 
689 /**
690  * \brief               setup the cipher info structure.
691  *
692  * \param ctx           cipher's context. Must have been initialised.
693  * \param cipher_info   cipher to use.
694  *
695  * \return              0 on success,
696  *                      MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on parameter failure
697  */
698 int mbedtls_cipher_setup_info(mbedtls_cipher_context_t *ctx,
699                               const mbedtls_cipher_info_t *cipher_info);
700 
701 /**
702  * \brief        This function returns the block size of the given cipher
703  *               in bytes.
704  *
705  * \param ctx    The context of the cipher.
706  *
707  * \return       The block size of the underlying cipher.
708  * \return       \c 1 if the cipher is a stream cipher.
709  * \return       \c 0 if \p ctx has not been initialized.
710  */
mbedtls_cipher_get_block_size(const mbedtls_cipher_context_t * ctx)711 static inline unsigned int mbedtls_cipher_get_block_size(
712     const mbedtls_cipher_context_t *ctx)
713 {
714     if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
715         return 0;
716     }
717 
718     return (unsigned int) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(block_size);
719 }
720 
721 /**
722  * \brief        This function returns the mode of operation for
723  *               the cipher. For example, MBEDTLS_MODE_CBC.
724  *
725  * \param ctx    The context of the cipher. This must be initialized.
726  *
727  * \return       The mode of operation.
728  * \return       #MBEDTLS_MODE_NONE if \p ctx has not been initialized.
729  */
mbedtls_cipher_get_cipher_mode(const mbedtls_cipher_context_t * ctx)730 static inline mbedtls_cipher_mode_t mbedtls_cipher_get_cipher_mode(
731     const mbedtls_cipher_context_t *ctx)
732 {
733     if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
734         return MBEDTLS_MODE_NONE;
735     }
736 
737     return (mbedtls_cipher_mode_t) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(mode);
738 }
739 
740 /**
741  * \brief       This function returns the size of the IV or nonce
742  *              of the cipher, in Bytes.
743  *
744  * \param ctx   The context of the cipher. This must be initialized.
745  *
746  * \return      The recommended IV size if no IV has been set.
747  * \return      \c 0 for ciphers not using an IV or a nonce.
748  * \return      The actual size if an IV has been set.
749  */
mbedtls_cipher_get_iv_size(const mbedtls_cipher_context_t * ctx)750 static inline int mbedtls_cipher_get_iv_size(
751     const mbedtls_cipher_context_t *ctx)
752 {
753     if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
754         return 0;
755     }
756 
757     if (ctx->MBEDTLS_PRIVATE(iv_size) != 0) {
758         return (int) ctx->MBEDTLS_PRIVATE(iv_size);
759     }
760 
761     return (int) (((int) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(iv_size)) <<
762                   MBEDTLS_IV_SIZE_SHIFT);
763 }
764 
765 /**
766  * \brief               This function returns the type of the given cipher.
767  *
768  * \param ctx           The context of the cipher. This must be initialized.
769  *
770  * \return              The type of the cipher.
771  * \return              #MBEDTLS_CIPHER_NONE if \p ctx has not been initialized.
772  */
mbedtls_cipher_get_type(const mbedtls_cipher_context_t * ctx)773 static inline mbedtls_cipher_type_t mbedtls_cipher_get_type(
774     const mbedtls_cipher_context_t *ctx)
775 {
776     if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
777         return MBEDTLS_CIPHER_NONE;
778     }
779 
780     return (mbedtls_cipher_type_t) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(type);
781 }
782 
783 /**
784  * \brief               This function returns the name of the given cipher
785  *                      as a string.
786  *
787  * \param ctx           The context of the cipher. This must be initialized.
788  *
789  * \return              The name of the cipher.
790  * \return              NULL if \p ctx has not been not initialized.
791  */
mbedtls_cipher_get_name(const mbedtls_cipher_context_t * ctx)792 static inline const char *mbedtls_cipher_get_name(
793     const mbedtls_cipher_context_t *ctx)
794 {
795     if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
796         return 0;
797     }
798 
799     return ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(name);
800 }
801 
802 /**
803  * \brief               This function returns the key length of the cipher.
804  *
805  * \param ctx           The context of the cipher. This must be initialized.
806  *
807  * \return              The key length of the cipher in bits.
808  * \return              #MBEDTLS_KEY_LENGTH_NONE if \p ctx has not been
809  *                      initialized.
810  */
mbedtls_cipher_get_key_bitlen(const mbedtls_cipher_context_t * ctx)811 static inline int mbedtls_cipher_get_key_bitlen(
812     const mbedtls_cipher_context_t *ctx)
813 {
814     if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
815         return MBEDTLS_KEY_LENGTH_NONE;
816     }
817 
818     return (int) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(key_bitlen) <<
819            MBEDTLS_KEY_BITLEN_SHIFT;
820 }
821 
822 /**
823  * \brief          This function returns the operation of the given cipher.
824  *
825  * \param ctx      The context of the cipher. This must be initialized.
826  *
827  * \return         The type of operation: #MBEDTLS_ENCRYPT or #MBEDTLS_DECRYPT.
828  * \return         #MBEDTLS_OPERATION_NONE if \p ctx has not been initialized.
829  */
mbedtls_cipher_get_operation(const mbedtls_cipher_context_t * ctx)830 static inline mbedtls_operation_t mbedtls_cipher_get_operation(
831     const mbedtls_cipher_context_t *ctx)
832 {
833     if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
834         return MBEDTLS_OPERATION_NONE;
835     }
836 
837     return ctx->MBEDTLS_PRIVATE(operation);
838 }
839 
840 /**
841  * \brief               This function sets the key to use with the given context.
842  *
843  * \param ctx           The generic cipher context. This must be initialized and
844  *                      bound to a cipher information structure.
845  * \param key           The key to use. This must be a readable buffer of at
846  *                      least \p key_bitlen Bits.
847  * \param key_bitlen    The key length to use, in Bits.
848  * \param operation     The operation that the key will be used for:
849  *                      #MBEDTLS_ENCRYPT or #MBEDTLS_DECRYPT.
850  *
851  * \return              \c 0 on success.
852  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
853  *                      parameter-verification failure.
854  * \return              A cipher-specific error code on failure.
855  */
856 int mbedtls_cipher_setkey(mbedtls_cipher_context_t *ctx,
857                           const unsigned char *key,
858                           int key_bitlen,
859                           const mbedtls_operation_t operation);
860 
861 #if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING)
862 /**
863  * \brief               This function sets the padding mode, for cipher modes
864  *                      that use padding.
865  *
866  *
867  * \param ctx           The generic cipher context. This must be initialized and
868  *                      bound to a cipher information structure.
869  * \param mode          The padding mode.
870  *
871  * \return              \c 0 on success.
872  * \return              #MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE
873  *                      if the selected padding mode is not supported.
874  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA if the cipher mode
875  *                      does not support padding.
876  */
877 int mbedtls_cipher_set_padding_mode(mbedtls_cipher_context_t *ctx,
878                                     mbedtls_cipher_padding_t mode);
879 #endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */
880 
881 /**
882  * \brief           This function sets the initialization vector (IV)
883  *                  or nonce.
884  *
885  * \note            Some ciphers do not use IVs nor nonce. For these
886  *                  ciphers, this function has no effect.
887  *
888  * \note            For #MBEDTLS_CIPHER_CHACHA20, the nonce length must
889  *                  be 12, and the initial counter value is 0.
890  *
891  * \note            For #MBEDTLS_CIPHER_CHACHA20_POLY1305, the nonce length
892  *                  must be 12.
893  *
894  * \param ctx       The generic cipher context. This must be initialized and
895  *                  bound to a cipher information structure.
896  * \param iv        The IV to use, or NONCE_COUNTER for CTR-mode ciphers. This
897  *                  must be a readable buffer of at least \p iv_len Bytes.
898  * \param iv_len    The IV length for ciphers with variable-size IV.
899  *                  This parameter is discarded by ciphers with fixed-size IV.
900  *
901  * \return          \c 0 on success.
902  * \return          #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
903  *                  parameter-verification failure.
904  */
905 int mbedtls_cipher_set_iv(mbedtls_cipher_context_t *ctx,
906                           const unsigned char *iv,
907                           size_t iv_len);
908 
909 /**
910  * \brief         This function resets the cipher state.
911  *
912  * \note          With non-AEAD ciphers, the order of calls for each message
913  *                is as follows:
914  *                1. mbedtls_cipher_set_iv() if the mode uses an IV/nonce;
915  *                2. mbedtls_cipher_reset();
916  *                3. mbedtls_cipher_update() zero, one or more times;
917  *                4. mbedtls_cipher_finish_padded() (recommended for decryption
918  *                   if the mode uses padding) or mbedtls_cipher_finish().
919  *                .
920  *                This sequence can be repeated to encrypt or decrypt multiple
921  *                messages with the same key.
922  *
923  * \note          With AEAD ciphers, the order of calls for each message
924  *                is as follows:
925  *                1. mbedtls_cipher_set_iv() if the mode uses an IV/nonce;
926  *                2. mbedtls_cipher_reset();
927  *                3. mbedtls_cipher_update_ad();
928  *                4. mbedtls_cipher_update() zero, one or more times;
929  *                5. mbedtls_cipher_finish() (or mbedtls_cipher_finish_padded());
930  *                6. mbedtls_cipher_check_tag() (for decryption) or
931  *                   mbedtls_cipher_write_tag() (for encryption).
932  *                .
933  *                This sequence can be repeated to encrypt or decrypt multiple
934  *                messages with the same key.
935  *
936  * \param ctx     The generic cipher context. This must be bound to a key.
937  *
938  * \return        \c 0 on success.
939  * \return        #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
940  *                parameter-verification failure.
941  */
942 int mbedtls_cipher_reset(mbedtls_cipher_context_t *ctx);
943 
944 #if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C)
945 /**
946  * \brief               This function adds additional data for AEAD ciphers.
947  *                      Currently supported with GCM and ChaCha20+Poly1305.
948  *
949  * \param ctx           The generic cipher context. This must be initialized.
950  * \param ad            The additional data to use. This must be a readable
951  *                      buffer of at least \p ad_len Bytes.
952  * \param ad_len        The length of \p ad in Bytes.
953  *
954  * \return              \c 0 on success.
955  * \return              A specific error code on failure.
956  */
957 int mbedtls_cipher_update_ad(mbedtls_cipher_context_t *ctx,
958                              const unsigned char *ad, size_t ad_len);
959 #endif /* MBEDTLS_GCM_C || MBEDTLS_CHACHAPOLY_C */
960 
961 /**
962  * \brief               The generic cipher update function. It encrypts or
963  *                      decrypts using the given cipher context. Writes as
964  *                      many block-sized blocks of data as possible to output.
965  *                      Any data that cannot be written immediately is either
966  *                      added to the next block, or flushed when
967  *                      mbedtls_cipher_finish() or mbedtls_cipher_finish_padded()
968  *                      is called.
969  *                      Exception: For MBEDTLS_MODE_ECB, expects a single block
970  *                      in size. For example, 16 Bytes for AES.
971  *
972  * \param ctx           The generic cipher context. This must be initialized and
973  *                      bound to a key.
974  * \param input         The buffer holding the input data. This must be a
975  *                      readable buffer of at least \p ilen Bytes.
976  * \param ilen          The length of the input data.
977  * \param output        The buffer for the output data. This must be able to
978  *                      hold at least `ilen + block_size`. This must not be the
979  *                      same buffer as \p input.
980  * \param olen          The length of the output data, to be updated with the
981  *                      actual number of Bytes written. This must not be
982  *                      \c NULL.
983  *
984  * \return              \c 0 on success.
985  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
986  *                      parameter-verification failure.
987  * \return              #MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE on an
988  *                      unsupported mode for a cipher.
989  * \return              A cipher-specific error code on failure.
990  */
991 int mbedtls_cipher_update(mbedtls_cipher_context_t *ctx,
992                           const unsigned char *input,
993                           size_t ilen, unsigned char *output,
994                           size_t *olen);
995 
996 /**
997  * \brief               The generic cipher finalization function. If data still
998  *                      needs to be flushed from an incomplete block, the data
999  *                      contained in it is padded to the size of
1000  *                      the last block, and written to the \p output buffer.
1001  *
1002  * \warning             This function reports invalid padding through an error
1003  *                      code. Adversaries may be able to decrypt encrypted
1004  *                      data if they can submit chosen ciphertexts and
1005  *                      detect whether it has valid padding or not,
1006  *                      either through direct observation or through a side
1007  *                      channel such as timing. This is known as a
1008  *                      padding oracle attack.
1009  *                      Therefore applications that call this function for
1010  *                      decryption with a cipher that involves padding
1011  *                      should take care around error handling. Preferably,
1012  *                      such applications should use
1013  *                      mbedtls_cipher_finish_padded() instead of this function.
1014  *
1015  * \param ctx           The generic cipher context. This must be initialized and
1016  *                      bound to a key.
1017  * \param output        The buffer to write data to. This needs to be a writable
1018  *                      buffer of at least block_size Bytes.
1019  * \param olen          The length of the data written to the \p output buffer.
1020  *                      This may not be \c NULL.
1021  *                      Note that when decrypting in a mode with padding,
1022  *                      the actual output length is sensitive and may be
1023  *                      used to mount a padding oracle attack (see warning
1024  *                      above), although less efficiently than through
1025  *                      the invalid-padding condition.
1026  *
1027  * \return              \c 0 on success.
1028  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
1029  *                      parameter-verification failure.
1030  * \return              #MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED on decryption
1031  *                      expecting a full block but not receiving one.
1032  * \return              #MBEDTLS_ERR_CIPHER_INVALID_PADDING on invalid padding
1033  *                      while decrypting. Note that invalid-padding errors
1034  *                      should be handled carefully; see the warning above.
1035  * \return              A cipher-specific error code on failure.
1036  */
1037 int mbedtls_cipher_finish(mbedtls_cipher_context_t *ctx,
1038                           unsigned char *output, size_t *olen);
1039 
1040 /**
1041  * \brief               The generic cipher finalization function. If data still
1042  *                      needs to be flushed from an incomplete block, the data
1043  *                      contained in it is padded to the size of
1044  *                      the last block, and written to the \p output buffer.
1045  *
1046  * \note                This function is similar to mbedtls_cipher_finish().
1047  *                      The only difference is that it reports invalid padding
1048  *                      decryption differently, through the \p invalid_padding
1049  *                      parameter rather than an error code.
1050  *                      For encryption, and in modes without padding (including
1051  *                      all authenticated modes), this function is identical
1052  *                      to mbedtls_cipher_finish().
1053  *
1054  * \param[in,out] ctx   The generic cipher context. This must be initialized and
1055  *                      bound to a key.
1056  * \param[out] output   The buffer to write data to. This needs to be a writable
1057  *                      buffer of at least block_size Bytes.
1058  * \param[out] olen     The length of the data written to the \p output buffer.
1059  *                      This may not be \c NULL.
1060  *                      Note that when decrypting in a mode with padding,
1061  *                      the actual output length is sensitive and may be
1062  *                      used to mount a padding oracle attack (see warning
1063  *                      on mbedtls_cipher_finish()).
1064  * \param[out] invalid_padding
1065  *                      If this function returns \c 0 on decryption,
1066  *                      \p *invalid_padding is \c 0 if the ciphertext was
1067  *                      valid, and all-bits-one if the ciphertext had invalid
1068  *                      padding.
1069  *                      On encryption, or in a mode without padding (including
1070  *                      all authenticated modes), \p *invalid_padding is \c 0
1071  *                      on success.
1072  *                      The value in \p *invalid_padding is unspecified if
1073  *                      this function returns a nonzero status.
1074  *
1075  * \return              \c 0 on success.
1076  *                      Also \c 0 for decryption with invalid padding.
1077  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
1078  *                      parameter-verification failure.
1079  * \return              #MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED on decryption
1080  *                      expecting a full block but not receiving one.
1081  * \return              A cipher-specific error code on failure.
1082  */
1083 int mbedtls_cipher_finish_padded(mbedtls_cipher_context_t *ctx,
1084                                  unsigned char *output, size_t *olen,
1085                                  size_t *invalid_padding);
1086 
1087 #if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C)
1088 /**
1089  * \brief               This function writes a tag for AEAD ciphers.
1090  *                      Currently supported with GCM and ChaCha20+Poly1305.
1091  *                      This must be called after mbedtls_cipher_finish()
1092  *                      or mbedtls_cipher_finish_padded().
1093  *
1094  * \param ctx           The generic cipher context. This must be initialized,
1095  *                      bound to a key, and have just completed a cipher
1096  *                      operation through mbedtls_cipher_finish() the tag for
1097  *                      which should be written.
1098  * \param tag           The buffer to write the tag to. This must be a writable
1099  *                      buffer of at least \p tag_len Bytes.
1100  * \param tag_len       The length of the tag to write.
1101  *
1102  * \return              \c 0 on success.
1103  * \return              A specific error code on failure.
1104  */
1105 int mbedtls_cipher_write_tag(mbedtls_cipher_context_t *ctx,
1106                              unsigned char *tag, size_t tag_len);
1107 
1108 /**
1109  * \brief               This function checks the tag for AEAD ciphers.
1110  *                      Currently supported with GCM and ChaCha20+Poly1305.
1111  *                      This must be called after mbedtls_cipher_finish()
1112  *                      or mbedtls_cipher_finish_padded().
1113  *
1114  * \param ctx           The generic cipher context. This must be initialized.
1115  * \param tag           The buffer holding the tag. This must be a readable
1116  *                      buffer of at least \p tag_len Bytes.
1117  * \param tag_len       The length of the tag to check.
1118  *
1119  * \return              \c 0 on success.
1120  * \return              A specific error code on failure.
1121  */
1122 int mbedtls_cipher_check_tag(mbedtls_cipher_context_t *ctx,
1123                              const unsigned char *tag, size_t tag_len);
1124 #endif /* MBEDTLS_GCM_C || MBEDTLS_CHACHAPOLY_C */
1125 
1126 /**
1127  * \brief               The generic all-in-one encryption/decryption function,
1128  *                      for all ciphers except AEAD constructs.
1129  *
1130  * \param ctx           The generic cipher context. This must be initialized.
1131  * \param iv            The IV to use, or NONCE_COUNTER for CTR-mode ciphers.
1132  *                      This must be a readable buffer of at least \p iv_len
1133  *                      Bytes.
1134  * \param iv_len        The IV length for ciphers with variable-size IV.
1135  *                      This parameter is discarded by ciphers with fixed-size
1136  *                      IV.
1137  * \param input         The buffer holding the input data. This must be a
1138  *                      readable buffer of at least \p ilen Bytes.
1139  * \param ilen          The length of the input data in Bytes.
1140  * \param output        The buffer for the output data. This must be able to
1141  *                      hold at least `ilen + block_size`. This must not be the
1142  *                      same buffer as \p input.
1143  * \param olen          The length of the output data, to be updated with the
1144  *                      actual number of Bytes written. This must not be
1145  *                      \c NULL.
1146  *
1147  * \note                Some ciphers do not use IVs nor nonce. For these
1148  *                      ciphers, use \p iv = NULL and \p iv_len = 0.
1149  *
1150  * \return              \c 0 on success.
1151  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
1152  *                      parameter-verification failure.
1153  * \return              #MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED on decryption
1154  *                      expecting a full block but not receiving one.
1155  * \return              #MBEDTLS_ERR_CIPHER_INVALID_PADDING on invalid padding
1156  *                      while decrypting.
1157  * \return              A cipher-specific error code on failure.
1158  */
1159 int mbedtls_cipher_crypt(mbedtls_cipher_context_t *ctx,
1160                          const unsigned char *iv, size_t iv_len,
1161                          const unsigned char *input, size_t ilen,
1162                          unsigned char *output, size_t *olen);
1163 
1164 #if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C)
1165 /**
1166  * \brief               The authenticated encryption (AEAD/NIST_KW) function.
1167  *
1168  * \note                For AEAD modes, the tag will be appended to the
1169  *                      ciphertext, as recommended by RFC 5116.
1170  *                      (NIST_KW doesn't have a separate tag.)
1171  *
1172  * \param ctx           The generic cipher context. This must be initialized and
1173  *                      bound to a key, with an AEAD algorithm or NIST_KW.
1174  * \param iv            The nonce to use. This must be a readable buffer of
1175  *                      at least \p iv_len Bytes and may be \c NULL if \p
1176  *                      iv_len is \c 0.
1177  * \param iv_len        The length of the nonce. For AEAD ciphers, this must
1178  *                      satisfy the constraints imposed by the cipher used.
1179  *                      For NIST_KW, this must be \c 0.
1180  * \param ad            The additional data to authenticate. This must be a
1181  *                      readable buffer of at least \p ad_len Bytes, and may
1182  *                      be \c NULL is \p ad_len is \c 0.
1183  * \param ad_len        The length of \p ad. For NIST_KW, this must be \c 0.
1184  * \param input         The buffer holding the input data. This must be a
1185  *                      readable buffer of at least \p ilen Bytes, and may be
1186  *                      \c NULL if \p ilen is \c 0.
1187  * \param ilen          The length of the input data.
1188  * \param output        The buffer for the output data. This must be a
1189  *                      writable buffer of at least \p output_len Bytes, and
1190  *                      must not be \c NULL.
1191  * \param output_len    The length of the \p output buffer in Bytes. For AEAD
1192  *                      ciphers, this must be at least \p ilen + \p tag_len.
1193  *                      For NIST_KW, this must be at least \p ilen + 8
1194  *                      (rounded up to a multiple of 8 if KWP is used);
1195  *                      \p ilen + 15 is always a safe value.
1196  * \param olen          This will be filled with the actual number of Bytes
1197  *                      written to the \p output buffer. This must point to a
1198  *                      writable object of type \c size_t.
1199  * \param tag_len       The desired length of the authentication tag. For AEAD
1200  *                      ciphers, this must match the constraints imposed by
1201  *                      the cipher used, and in particular must not be \c 0.
1202  *                      For NIST_KW, this must be \c 0.
1203  *
1204  * \return              \c 0 on success.
1205  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
1206  *                      parameter-verification failure.
1207  * \return              A cipher-specific error code on failure.
1208  */
1209 int mbedtls_cipher_auth_encrypt_ext(mbedtls_cipher_context_t *ctx,
1210                                     const unsigned char *iv, size_t iv_len,
1211                                     const unsigned char *ad, size_t ad_len,
1212                                     const unsigned char *input, size_t ilen,
1213                                     unsigned char *output, size_t output_len,
1214                                     size_t *olen, size_t tag_len);
1215 
1216 /**
1217  * \brief               The authenticated encryption (AEAD/NIST_KW) function.
1218  *
1219  * \note                If the data is not authentic, then the output buffer
1220  *                      is zeroed out to prevent the unauthentic plaintext being
1221  *                      used, making this interface safer.
1222  *
1223  * \note                For AEAD modes, the tag must be appended to the
1224  *                      ciphertext, as recommended by RFC 5116.
1225  *                      (NIST_KW doesn't have a separate tag.)
1226  *
1227  * \param ctx           The generic cipher context. This must be initialized and
1228  *                      bound to a key, with an AEAD algorithm or NIST_KW.
1229  * \param iv            The nonce to use. This must be a readable buffer of
1230  *                      at least \p iv_len Bytes and may be \c NULL if \p
1231  *                      iv_len is \c 0.
1232  * \param iv_len        The length of the nonce. For AEAD ciphers, this must
1233  *                      satisfy the constraints imposed by the cipher used.
1234  *                      For NIST_KW, this must be \c 0.
1235  * \param ad            The additional data to authenticate. This must be a
1236  *                      readable buffer of at least \p ad_len Bytes, and may
1237  *                      be \c NULL is \p ad_len is \c 0.
1238  * \param ad_len        The length of \p ad. For NIST_KW, this must be \c 0.
1239  * \param input         The buffer holding the input data. This must be a
1240  *                      readable buffer of at least \p ilen Bytes, and may be
1241  *                      \c NULL if \p ilen is \c 0.
1242  * \param ilen          The length of the input data. For AEAD ciphers this
1243  *                      must be at least \p tag_len. For NIST_KW this must be
1244  *                      at least \c 8.
1245  * \param output        The buffer for the output data. This must be a
1246  *                      writable buffer of at least \p output_len Bytes, and
1247  *                      may be \c NULL if \p output_len is \c 0.
1248  * \param output_len    The length of the \p output buffer in Bytes. For AEAD
1249  *                      ciphers, this must be at least \p ilen - \p tag_len.
1250  *                      For NIST_KW, this must be at least \p ilen - 8.
1251  * \param olen          This will be filled with the actual number of Bytes
1252  *                      written to the \p output buffer. This must point to a
1253  *                      writable object of type \c size_t.
1254  * \param tag_len       The actual length of the authentication tag. For AEAD
1255  *                      ciphers, this must match the constraints imposed by
1256  *                      the cipher used, and in particular must not be \c 0.
1257  *                      For NIST_KW, this must be \c 0.
1258  *
1259  * \return              \c 0 on success.
1260  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
1261  *                      parameter-verification failure.
1262  * \return              #MBEDTLS_ERR_CIPHER_AUTH_FAILED if data is not authentic.
1263  * \return              A cipher-specific error code on failure.
1264  */
1265 int mbedtls_cipher_auth_decrypt_ext(mbedtls_cipher_context_t *ctx,
1266                                     const unsigned char *iv, size_t iv_len,
1267                                     const unsigned char *ad, size_t ad_len,
1268                                     const unsigned char *input, size_t ilen,
1269                                     unsigned char *output, size_t output_len,
1270                                     size_t *olen, size_t tag_len);
1271 #endif /* MBEDTLS_CIPHER_MODE_AEAD || MBEDTLS_NIST_KW_C */
1272 #ifdef __cplusplus
1273 }
1274 #endif
1275 
1276 #endif /* MBEDTLS_CIPHER_H */
1277