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, size_t data_len);
333     int(*MBEDTLS_PRIVATE(get_padding))(unsigned char *input, size_t ilen, size_t *data_len);
334 #endif
335 
336     /** Buffer for input that has not been processed yet. */
337     unsigned char MBEDTLS_PRIVATE(unprocessed_data)[MBEDTLS_MAX_BLOCK_LENGTH];
338 
339     /** Number of Bytes that have not been processed yet. */
340     size_t MBEDTLS_PRIVATE(unprocessed_len);
341 
342     /** Current IV or NONCE_COUNTER for CTR-mode, data unit (or sector) number
343      * for XTS-mode. */
344     unsigned char MBEDTLS_PRIVATE(iv)[MBEDTLS_MAX_IV_LENGTH];
345 
346     /** IV size in Bytes, for ciphers with variable-length IVs. */
347     size_t MBEDTLS_PRIVATE(iv_size);
348 
349     /** The cipher-specific context. */
350     void *MBEDTLS_PRIVATE(cipher_ctx);
351 
352 #if defined(MBEDTLS_CMAC_C)
353     /** CMAC-specific context. */
354     mbedtls_cmac_context_t *MBEDTLS_PRIVATE(cmac_ctx);
355 #endif
356 
357 #if defined(MBEDTLS_USE_PSA_CRYPTO) && !defined(MBEDTLS_DEPRECATED_REMOVED)
358     /** Indicates whether the cipher operations should be performed
359      *  by Mbed TLS' own crypto library or an external implementation
360      *  of the PSA Crypto API.
361      *  This is unset if the cipher context was established through
362      *  mbedtls_cipher_setup(), and set if it was established through
363      *  mbedtls_cipher_setup_psa().
364      */
365     unsigned char MBEDTLS_PRIVATE(psa_enabled);
366 #endif /* MBEDTLS_USE_PSA_CRYPTO && !MBEDTLS_DEPRECATED_REMOVED */
367 
368 } mbedtls_cipher_context_t;
369 
370 /**
371  * \brief This function retrieves the list of ciphers supported
372  *        by the generic cipher module.
373  *
374  *        For any cipher identifier in the returned list, you can
375  *        obtain the corresponding generic cipher information structure
376  *        via mbedtls_cipher_info_from_type(), which can then be used
377  *        to prepare a cipher context via mbedtls_cipher_setup().
378  *
379  *
380  * \return      A statically-allocated array of cipher identifiers
381  *              of type cipher_type_t. The last entry is zero.
382  */
383 const int *mbedtls_cipher_list(void);
384 
385 /**
386  * \brief               This function retrieves the cipher-information
387  *                      structure associated with the given cipher name.
388  *
389  * \param cipher_name   Name of the cipher to search for. This must not be
390  *                      \c NULL.
391  *
392  * \return              The cipher information structure associated with the
393  *                      given \p cipher_name.
394  * \return              \c NULL if the associated cipher information is not found.
395  */
396 const mbedtls_cipher_info_t *mbedtls_cipher_info_from_string(const char *cipher_name);
397 
398 /**
399  * \brief               This function retrieves the cipher-information
400  *                      structure associated with the given cipher type.
401  *
402  * \param cipher_type   Type of the cipher to search for.
403  *
404  * \return              The cipher information structure associated with the
405  *                      given \p cipher_type.
406  * \return              \c NULL if the associated cipher information is not found.
407  */
408 const mbedtls_cipher_info_t *mbedtls_cipher_info_from_type(const mbedtls_cipher_type_t cipher_type);
409 
410 /**
411  * \brief               This function retrieves the cipher-information
412  *                      structure associated with the given cipher ID,
413  *                      key size and mode.
414  *
415  * \param cipher_id     The ID of the cipher to search for. For example,
416  *                      #MBEDTLS_CIPHER_ID_AES.
417  * \param key_bitlen    The length of the key in bits.
418  * \param mode          The cipher mode. For example, #MBEDTLS_MODE_CBC.
419  *
420  * \return              The cipher information structure associated with the
421  *                      given \p cipher_id.
422  * \return              \c NULL if the associated cipher information is not found.
423  */
424 const mbedtls_cipher_info_t *mbedtls_cipher_info_from_values(const mbedtls_cipher_id_t cipher_id,
425                                                              int key_bitlen,
426                                                              const mbedtls_cipher_mode_t mode);
427 
428 /**
429  * \brief               Retrieve the identifier for a cipher info structure.
430  *
431  * \param[in] info      The cipher info structure to query.
432  *                      This may be \c NULL.
433  *
434  * \return              The full cipher identifier (\c MBEDTLS_CIPHER_xxx).
435  * \return              #MBEDTLS_CIPHER_NONE if \p info is \c NULL.
436  */
mbedtls_cipher_info_get_type(const mbedtls_cipher_info_t * info)437 static inline mbedtls_cipher_type_t mbedtls_cipher_info_get_type(
438     const mbedtls_cipher_info_t *info)
439 {
440     if (info == NULL) {
441         return MBEDTLS_CIPHER_NONE;
442     } else {
443         return (mbedtls_cipher_type_t) info->MBEDTLS_PRIVATE(type);
444     }
445 }
446 
447 /**
448  * \brief               Retrieve the operation mode for a cipher info structure.
449  *
450  * \param[in] info      The cipher info structure to query.
451  *                      This may be \c NULL.
452  *
453  * \return              The cipher mode (\c MBEDTLS_MODE_xxx).
454  * \return              #MBEDTLS_MODE_NONE if \p info is \c NULL.
455  */
mbedtls_cipher_info_get_mode(const mbedtls_cipher_info_t * info)456 static inline mbedtls_cipher_mode_t mbedtls_cipher_info_get_mode(
457     const mbedtls_cipher_info_t *info)
458 {
459     if (info == NULL) {
460         return MBEDTLS_MODE_NONE;
461     } else {
462         return (mbedtls_cipher_mode_t) info->MBEDTLS_PRIVATE(mode);
463     }
464 }
465 
466 /**
467  * \brief               Retrieve the key size for a cipher info structure.
468  *
469  * \param[in] info      The cipher info structure to query.
470  *                      This may be \c NULL.
471  *
472  * \return              The key length in bits.
473  *                      For variable-sized ciphers, this is the default length.
474  *                      For DES, this includes the parity bits.
475  * \return              \c 0 if \p info is \c NULL.
476  */
mbedtls_cipher_info_get_key_bitlen(const mbedtls_cipher_info_t * info)477 static inline size_t mbedtls_cipher_info_get_key_bitlen(
478     const mbedtls_cipher_info_t *info)
479 {
480     if (info == NULL) {
481         return 0;
482     } else {
483         return info->MBEDTLS_PRIVATE(key_bitlen) << MBEDTLS_KEY_BITLEN_SHIFT;
484     }
485 }
486 
487 /**
488  * \brief               Retrieve the human-readable name for a
489  *                      cipher info structure.
490  *
491  * \param[in] info      The cipher info structure to query.
492  *                      This may be \c NULL.
493  *
494  * \return              The cipher name, which is a human readable string,
495  *                      with static storage duration.
496  * \return              \c NULL if \p info is \c NULL.
497  */
mbedtls_cipher_info_get_name(const mbedtls_cipher_info_t * info)498 static inline const char *mbedtls_cipher_info_get_name(
499     const mbedtls_cipher_info_t *info)
500 {
501     if (info == NULL) {
502         return NULL;
503     } else {
504         return info->MBEDTLS_PRIVATE(name);
505     }
506 }
507 
508 /**
509  * \brief       This function returns the size of the IV or nonce
510  *              for the cipher info structure, in bytes.
511  *
512  * \param info  The cipher info structure. This may be \c NULL.
513  *
514  * \return      The recommended IV size.
515  * \return      \c 0 for ciphers not using an IV or a nonce.
516  * \return      \c 0 if \p info is \c NULL.
517  */
mbedtls_cipher_info_get_iv_size(const mbedtls_cipher_info_t * info)518 static inline size_t mbedtls_cipher_info_get_iv_size(
519     const mbedtls_cipher_info_t *info)
520 {
521     if (info == NULL) {
522         return 0;
523     }
524 
525     return ((size_t) info->MBEDTLS_PRIVATE(iv_size)) << MBEDTLS_IV_SIZE_SHIFT;
526 }
527 
528 /**
529  * \brief        This function returns the block size of the given
530  *               cipher info structure in bytes.
531  *
532  * \param info   The cipher info structure. This may be \c NULL.
533  *
534  * \return       The block size of the cipher.
535  * \return       \c 1 if the cipher is a stream cipher.
536  * \return       \c 0 if \p info is \c NULL.
537  */
mbedtls_cipher_info_get_block_size(const mbedtls_cipher_info_t * info)538 static inline size_t mbedtls_cipher_info_get_block_size(
539     const mbedtls_cipher_info_t *info)
540 {
541     if (info == NULL) {
542         return 0;
543     }
544 
545     return (size_t) (info->MBEDTLS_PRIVATE(block_size));
546 }
547 
548 /**
549  * \brief        This function returns a non-zero value if the key length for
550  *               the given cipher is variable.
551  *
552  * \param info   The cipher info structure. This may be \c NULL.
553  *
554  * \return       Non-zero if the key length is variable, \c 0 otherwise.
555  * \return       \c 0 if the given pointer is \c NULL.
556  */
mbedtls_cipher_info_has_variable_key_bitlen(const mbedtls_cipher_info_t * info)557 static inline int mbedtls_cipher_info_has_variable_key_bitlen(
558     const mbedtls_cipher_info_t *info)
559 {
560     if (info == NULL) {
561         return 0;
562     }
563 
564     return info->MBEDTLS_PRIVATE(flags) & MBEDTLS_CIPHER_VARIABLE_KEY_LEN;
565 }
566 
567 /**
568  * \brief        This function returns a non-zero value if the IV size for
569  *               the given cipher is variable.
570  *
571  * \param info   The cipher info structure. This may be \c NULL.
572  *
573  * \return       Non-zero if the IV size is variable, \c 0 otherwise.
574  * \return       \c 0 if the given pointer is \c NULL.
575  */
mbedtls_cipher_info_has_variable_iv_size(const mbedtls_cipher_info_t * info)576 static inline int mbedtls_cipher_info_has_variable_iv_size(
577     const mbedtls_cipher_info_t *info)
578 {
579     if (info == NULL) {
580         return 0;
581     }
582 
583     return info->MBEDTLS_PRIVATE(flags) & MBEDTLS_CIPHER_VARIABLE_IV_LEN;
584 }
585 
586 /**
587  * \brief               This function initializes a \p ctx as NONE.
588  *
589  * \param ctx           The context to be initialized. This must not be \c NULL.
590  */
591 void mbedtls_cipher_init(mbedtls_cipher_context_t *ctx);
592 
593 /**
594  * \brief               This function frees and clears the cipher-specific
595  *                      context of \p ctx. Freeing \p ctx itself remains the
596  *                      responsibility of the caller.
597  *
598  * \param ctx           The context to be freed. If this is \c NULL, the
599  *                      function has no effect, otherwise this must point to an
600  *                      initialized context.
601  */
602 void mbedtls_cipher_free(mbedtls_cipher_context_t *ctx);
603 
604 
605 /**
606  * \brief               This function prepares a cipher context for
607  *                      use with the given cipher primitive.
608  *
609  * \note                After calling this function, you should call
610  *                      mbedtls_cipher_setkey() and, if the mode uses padding,
611  *                      mbedtls_cipher_set_padding_mode(), then for each
612  *                      message to encrypt or decrypt with this key, either:
613  *                      - mbedtls_cipher_crypt() for one-shot processing with
614  *                      non-AEAD modes;
615  *                      - mbedtls_cipher_auth_encrypt_ext() or
616  *                      mbedtls_cipher_auth_decrypt_ext() for one-shot
617  *                      processing with AEAD modes or NIST_KW;
618  *                      - for multi-part processing, see the documentation of
619  *                      mbedtls_cipher_reset().
620  *
621  * \param ctx           The context to prepare. This must be initialized by
622  *                      a call to mbedtls_cipher_init() first.
623  * \param cipher_info   The cipher to use.
624  *
625  * \return              \c 0 on success.
626  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
627  *                      parameter-verification failure.
628  * \return              #MBEDTLS_ERR_CIPHER_ALLOC_FAILED if allocation of the
629  *                      cipher-specific context fails.
630  */
631 int mbedtls_cipher_setup(mbedtls_cipher_context_t *ctx,
632                          const mbedtls_cipher_info_t *cipher_info);
633 
634 #if defined(MBEDTLS_USE_PSA_CRYPTO)
635 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
636 /**
637  * \brief               This function initializes a cipher context for
638  *                      PSA-based use with the given cipher primitive.
639  *
640  * \deprecated          This function is deprecated and will be removed in a
641  *                      future version of the library.
642  *                      Please use psa_aead_xxx() / psa_cipher_xxx() directly
643  *                      instead.
644  *
645  * \note                See #MBEDTLS_USE_PSA_CRYPTO for information on PSA.
646  *
647  * \param ctx           The context to initialize. May not be \c NULL.
648  * \param cipher_info   The cipher to use.
649  * \param taglen        For AEAD ciphers, the length in bytes of the
650  *                      authentication tag to use. Subsequent uses of
651  *                      mbedtls_cipher_auth_encrypt_ext() or
652  *                      mbedtls_cipher_auth_decrypt_ext() must provide
653  *                      the same tag length.
654  *                      For non-AEAD ciphers, the value must be \c 0.
655  *
656  * \return              \c 0 on success.
657  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
658  *                      parameter-verification failure.
659  * \return              #MBEDTLS_ERR_CIPHER_ALLOC_FAILED if allocation of the
660  *                      cipher-specific context fails.
661  */
662 int MBEDTLS_DEPRECATED mbedtls_cipher_setup_psa(mbedtls_cipher_context_t *ctx,
663                                                 const mbedtls_cipher_info_t *cipher_info,
664                                                 size_t taglen);
665 #endif /* MBEDTLS_DEPRECATED_REMOVED */
666 #endif /* MBEDTLS_USE_PSA_CRYPTO */
667 
668 /**
669  * \brief        This function returns the block size of the given cipher
670  *               in bytes.
671  *
672  * \param ctx    The context of the cipher.
673  *
674  * \return       The block size of the underlying cipher.
675  * \return       \c 1 if the cipher is a stream cipher.
676  * \return       \c 0 if \p ctx has not been initialized.
677  */
mbedtls_cipher_get_block_size(const mbedtls_cipher_context_t * ctx)678 static inline unsigned int mbedtls_cipher_get_block_size(
679     const mbedtls_cipher_context_t *ctx)
680 {
681     MBEDTLS_INTERNAL_VALIDATE_RET(ctx != NULL, 0);
682     if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
683         return 0;
684     }
685 
686     return (unsigned int) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(block_size);
687 }
688 
689 /**
690  * \brief        This function returns the mode of operation for
691  *               the cipher. For example, MBEDTLS_MODE_CBC.
692  *
693  * \param ctx    The context of the cipher. This must be initialized.
694  *
695  * \return       The mode of operation.
696  * \return       #MBEDTLS_MODE_NONE if \p ctx has not been initialized.
697  */
mbedtls_cipher_get_cipher_mode(const mbedtls_cipher_context_t * ctx)698 static inline mbedtls_cipher_mode_t mbedtls_cipher_get_cipher_mode(
699     const mbedtls_cipher_context_t *ctx)
700 {
701     MBEDTLS_INTERNAL_VALIDATE_RET(ctx != NULL, MBEDTLS_MODE_NONE);
702     if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
703         return MBEDTLS_MODE_NONE;
704     }
705 
706     return (mbedtls_cipher_mode_t) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(mode);
707 }
708 
709 /**
710  * \brief       This function returns the size of the IV or nonce
711  *              of the cipher, in Bytes.
712  *
713  * \param ctx   The context of the cipher. This must be initialized.
714  *
715  * \return      The recommended IV size if no IV has been set.
716  * \return      \c 0 for ciphers not using an IV or a nonce.
717  * \return      The actual size if an IV has been set.
718  */
mbedtls_cipher_get_iv_size(const mbedtls_cipher_context_t * ctx)719 static inline int mbedtls_cipher_get_iv_size(
720     const mbedtls_cipher_context_t *ctx)
721 {
722     MBEDTLS_INTERNAL_VALIDATE_RET(ctx != NULL, 0);
723     if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
724         return 0;
725     }
726 
727     if (ctx->MBEDTLS_PRIVATE(iv_size) != 0) {
728         return (int) ctx->MBEDTLS_PRIVATE(iv_size);
729     }
730 
731     return (int) (((int) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(iv_size)) <<
732                   MBEDTLS_IV_SIZE_SHIFT);
733 }
734 
735 /**
736  * \brief               This function returns the type of the given cipher.
737  *
738  * \param ctx           The context of the cipher. This must be initialized.
739  *
740  * \return              The type of the cipher.
741  * \return              #MBEDTLS_CIPHER_NONE if \p ctx has not been initialized.
742  */
mbedtls_cipher_get_type(const mbedtls_cipher_context_t * ctx)743 static inline mbedtls_cipher_type_t mbedtls_cipher_get_type(
744     const mbedtls_cipher_context_t *ctx)
745 {
746     MBEDTLS_INTERNAL_VALIDATE_RET(
747         ctx != NULL, MBEDTLS_CIPHER_NONE);
748     if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
749         return MBEDTLS_CIPHER_NONE;
750     }
751 
752     return (mbedtls_cipher_type_t) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(type);
753 }
754 
755 /**
756  * \brief               This function returns the name of the given cipher
757  *                      as a string.
758  *
759  * \param ctx           The context of the cipher. This must be initialized.
760  *
761  * \return              The name of the cipher.
762  * \return              NULL if \p ctx has not been not initialized.
763  */
mbedtls_cipher_get_name(const mbedtls_cipher_context_t * ctx)764 static inline const char *mbedtls_cipher_get_name(
765     const mbedtls_cipher_context_t *ctx)
766 {
767     MBEDTLS_INTERNAL_VALIDATE_RET(ctx != NULL, 0);
768     if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
769         return 0;
770     }
771 
772     return ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(name);
773 }
774 
775 /**
776  * \brief               This function returns the key length of the cipher.
777  *
778  * \param ctx           The context of the cipher. This must be initialized.
779  *
780  * \return              The key length of the cipher in bits.
781  * \return              #MBEDTLS_KEY_LENGTH_NONE if \p ctx has not been
782  *                      initialized.
783  */
mbedtls_cipher_get_key_bitlen(const mbedtls_cipher_context_t * ctx)784 static inline int mbedtls_cipher_get_key_bitlen(
785     const mbedtls_cipher_context_t *ctx)
786 {
787     MBEDTLS_INTERNAL_VALIDATE_RET(
788         ctx != NULL, MBEDTLS_KEY_LENGTH_NONE);
789     if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
790         return MBEDTLS_KEY_LENGTH_NONE;
791     }
792 
793     return (int) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(key_bitlen) <<
794            MBEDTLS_KEY_BITLEN_SHIFT;
795 }
796 
797 /**
798  * \brief          This function returns the operation of the given cipher.
799  *
800  * \param ctx      The context of the cipher. This must be initialized.
801  *
802  * \return         The type of operation: #MBEDTLS_ENCRYPT or #MBEDTLS_DECRYPT.
803  * \return         #MBEDTLS_OPERATION_NONE if \p ctx has not been initialized.
804  */
mbedtls_cipher_get_operation(const mbedtls_cipher_context_t * ctx)805 static inline mbedtls_operation_t mbedtls_cipher_get_operation(
806     const mbedtls_cipher_context_t *ctx)
807 {
808     MBEDTLS_INTERNAL_VALIDATE_RET(
809         ctx != NULL, MBEDTLS_OPERATION_NONE);
810     if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
811         return MBEDTLS_OPERATION_NONE;
812     }
813 
814     return ctx->MBEDTLS_PRIVATE(operation);
815 }
816 
817 /**
818  * \brief               This function sets the key to use with the given context.
819  *
820  * \param ctx           The generic cipher context. This must be initialized and
821  *                      bound to a cipher information structure.
822  * \param key           The key to use. This must be a readable buffer of at
823  *                      least \p key_bitlen Bits.
824  * \param key_bitlen    The key length to use, in Bits.
825  * \param operation     The operation that the key will be used for:
826  *                      #MBEDTLS_ENCRYPT or #MBEDTLS_DECRYPT.
827  *
828  * \return              \c 0 on success.
829  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
830  *                      parameter-verification failure.
831  * \return              A cipher-specific error code on failure.
832  */
833 int mbedtls_cipher_setkey(mbedtls_cipher_context_t *ctx,
834                           const unsigned char *key,
835                           int key_bitlen,
836                           const mbedtls_operation_t operation);
837 
838 #if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING)
839 /**
840  * \brief               This function sets the padding mode, for cipher modes
841  *                      that use padding.
842  *
843  *
844  * \param ctx           The generic cipher context. This must be initialized and
845  *                      bound to a cipher information structure.
846  * \param mode          The padding mode.
847  *
848  * \return              \c 0 on success.
849  * \return              #MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE
850  *                      if the selected padding mode is not supported.
851  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA if the cipher mode
852  *                      does not support padding.
853  */
854 int mbedtls_cipher_set_padding_mode(mbedtls_cipher_context_t *ctx,
855                                     mbedtls_cipher_padding_t mode);
856 #endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */
857 
858 /**
859  * \brief           This function sets the initialization vector (IV)
860  *                  or nonce.
861  *
862  * \note            Some ciphers do not use IVs nor nonce. For these
863  *                  ciphers, this function has no effect.
864  *
865  * \note            For #MBEDTLS_CIPHER_CHACHA20, the nonce length must
866  *                  be 12, and the initial counter value is 0.
867  *
868  * \note            For #MBEDTLS_CIPHER_CHACHA20_POLY1305, the nonce length
869  *                  must be 12.
870  *
871  * \param ctx       The generic cipher context. This must be initialized and
872  *                  bound to a cipher information structure.
873  * \param iv        The IV to use, or NONCE_COUNTER for CTR-mode ciphers. This
874  *                  must be a readable buffer of at least \p iv_len Bytes.
875  * \param iv_len    The IV length for ciphers with variable-size IV.
876  *                  This parameter is discarded by ciphers with fixed-size IV.
877  *
878  * \return          \c 0 on success.
879  * \return          #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
880  *                  parameter-verification failure.
881  */
882 int mbedtls_cipher_set_iv(mbedtls_cipher_context_t *ctx,
883                           const unsigned char *iv,
884                           size_t iv_len);
885 
886 /**
887  * \brief         This function resets the cipher state.
888  *
889  * \note          With non-AEAD ciphers, the order of calls for each message
890  *                is as follows:
891  *                1. mbedtls_cipher_set_iv() if the mode uses an IV/nonce.
892  *                2. mbedtls_cipher_reset()
893  *                3. mbedtls_cipher_update() one or more times
894  *                4. mbedtls_cipher_finish()
895  *                .
896  *                This sequence can be repeated to encrypt or decrypt multiple
897  *                messages with the same key.
898  *
899  * \note          With AEAD ciphers, the order of calls for each message
900  *                is as follows:
901  *                1. mbedtls_cipher_set_iv() if the mode uses an IV/nonce.
902  *                2. mbedtls_cipher_reset()
903  *                3. mbedtls_cipher_update_ad()
904  *                4. mbedtls_cipher_update() one or more times
905  *                5. mbedtls_cipher_finish()
906  *                6. mbedtls_cipher_check_tag() (for decryption) or
907  *                mbedtls_cipher_write_tag() (for encryption).
908  *                .
909  *                This sequence can be repeated to encrypt or decrypt multiple
910  *                messages with the same key.
911  *
912  * \param ctx     The generic cipher context. This must be bound to a key.
913  *
914  * \return        \c 0 on success.
915  * \return        #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
916  *                parameter-verification failure.
917  */
918 int mbedtls_cipher_reset(mbedtls_cipher_context_t *ctx);
919 
920 #if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C)
921 /**
922  * \brief               This function adds additional data for AEAD ciphers.
923  *                      Currently supported with GCM and ChaCha20+Poly1305.
924  *
925  * \param ctx           The generic cipher context. This must be initialized.
926  * \param ad            The additional data to use. This must be a readable
927  *                      buffer of at least \p ad_len Bytes.
928  * \param ad_len        The length of \p ad in Bytes.
929  *
930  * \return              \c 0 on success.
931  * \return              A specific error code on failure.
932  */
933 int mbedtls_cipher_update_ad(mbedtls_cipher_context_t *ctx,
934                              const unsigned char *ad, size_t ad_len);
935 #endif /* MBEDTLS_GCM_C || MBEDTLS_CHACHAPOLY_C */
936 
937 /**
938  * \brief               The generic cipher update function. It encrypts or
939  *                      decrypts using the given cipher context. Writes as
940  *                      many block-sized blocks of data as possible to output.
941  *                      Any data that cannot be written immediately is either
942  *                      added to the next block, or flushed when
943  *                      mbedtls_cipher_finish() is called.
944  *                      Exception: For MBEDTLS_MODE_ECB, expects a single block
945  *                      in size. For example, 16 Bytes for AES.
946  *
947  * \param ctx           The generic cipher context. This must be initialized and
948  *                      bound to a key.
949  * \param input         The buffer holding the input data. This must be a
950  *                      readable buffer of at least \p ilen Bytes.
951  * \param ilen          The length of the input data.
952  * \param output        The buffer for the output data. This must be able to
953  *                      hold at least `ilen + block_size`. This must not be the
954  *                      same buffer as \p input.
955  * \param olen          The length of the output data, to be updated with the
956  *                      actual number of Bytes written. This must not be
957  *                      \c NULL.
958  *
959  * \return              \c 0 on success.
960  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
961  *                      parameter-verification failure.
962  * \return              #MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE on an
963  *                      unsupported mode for a cipher.
964  * \return              A cipher-specific error code on failure.
965  */
966 int mbedtls_cipher_update(mbedtls_cipher_context_t *ctx,
967                           const unsigned char *input,
968                           size_t ilen, unsigned char *output,
969                           size_t *olen);
970 
971 /**
972  * \brief               The generic cipher finalization function. If data still
973  *                      needs to be flushed from an incomplete block, the data
974  *                      contained in it is padded to the size of
975  *                      the last block, and written to the \p output buffer.
976  *
977  * \param ctx           The generic cipher context. This must be initialized and
978  *                      bound to a key.
979  * \param output        The buffer to write data to. This needs to be a writable
980  *                      buffer of at least block_size Bytes.
981  * \param olen          The length of the data written to the \p output buffer.
982  *                      This may not be \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_FULL_BLOCK_EXPECTED on decryption
988  *                      expecting a full block but not receiving one.
989  * \return              #MBEDTLS_ERR_CIPHER_INVALID_PADDING on invalid padding
990  *                      while decrypting.
991  * \return              A cipher-specific error code on failure.
992  */
993 int mbedtls_cipher_finish(mbedtls_cipher_context_t *ctx,
994                           unsigned char *output, size_t *olen);
995 
996 #if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C)
997 /**
998  * \brief               This function writes a tag for AEAD ciphers.
999  *                      Currently supported with GCM and ChaCha20+Poly1305.
1000  *                      This must be called after mbedtls_cipher_finish().
1001  *
1002  * \param ctx           The generic cipher context. This must be initialized,
1003  *                      bound to a key, and have just completed a cipher
1004  *                      operation through mbedtls_cipher_finish() the tag for
1005  *                      which should be written.
1006  * \param tag           The buffer to write the tag to. This must be a writable
1007  *                      buffer of at least \p tag_len Bytes.
1008  * \param tag_len       The length of the tag to write.
1009  *
1010  * \return              \c 0 on success.
1011  * \return              A specific error code on failure.
1012  */
1013 int mbedtls_cipher_write_tag(mbedtls_cipher_context_t *ctx,
1014                              unsigned char *tag, size_t tag_len);
1015 
1016 /**
1017  * \brief               This function checks the tag for AEAD ciphers.
1018  *                      Currently supported with GCM and ChaCha20+Poly1305.
1019  *                      This must be called after mbedtls_cipher_finish().
1020  *
1021  * \param ctx           The generic cipher context. This must be initialized.
1022  * \param tag           The buffer holding the tag. This must be a readable
1023  *                      buffer of at least \p tag_len Bytes.
1024  * \param tag_len       The length of the tag to check.
1025  *
1026  * \return              \c 0 on success.
1027  * \return              A specific error code on failure.
1028  */
1029 int mbedtls_cipher_check_tag(mbedtls_cipher_context_t *ctx,
1030                              const unsigned char *tag, size_t tag_len);
1031 #endif /* MBEDTLS_GCM_C || MBEDTLS_CHACHAPOLY_C */
1032 
1033 /**
1034  * \brief               The generic all-in-one encryption/decryption function,
1035  *                      for all ciphers except AEAD constructs.
1036  *
1037  * \param ctx           The generic cipher context. This must be initialized.
1038  * \param iv            The IV to use, or NONCE_COUNTER for CTR-mode ciphers.
1039  *                      This must be a readable buffer of at least \p iv_len
1040  *                      Bytes.
1041  * \param iv_len        The IV length for ciphers with variable-size IV.
1042  *                      This parameter is discarded by ciphers with fixed-size
1043  *                      IV.
1044  * \param input         The buffer holding the input data. This must be a
1045  *                      readable buffer of at least \p ilen Bytes.
1046  * \param ilen          The length of the input data in Bytes.
1047  * \param output        The buffer for the output data. This must be able to
1048  *                      hold at least `ilen + block_size`. This must not be the
1049  *                      same buffer as \p input.
1050  * \param olen          The length of the output data, to be updated with the
1051  *                      actual number of Bytes written. This must not be
1052  *                      \c NULL.
1053  *
1054  * \note                Some ciphers do not use IVs nor nonce. For these
1055  *                      ciphers, use \p iv = NULL and \p iv_len = 0.
1056  *
1057  * \return              \c 0 on success.
1058  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
1059  *                      parameter-verification failure.
1060  * \return              #MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED on decryption
1061  *                      expecting a full block but not receiving one.
1062  * \return              #MBEDTLS_ERR_CIPHER_INVALID_PADDING on invalid padding
1063  *                      while decrypting.
1064  * \return              A cipher-specific error code on failure.
1065  */
1066 int mbedtls_cipher_crypt(mbedtls_cipher_context_t *ctx,
1067                          const unsigned char *iv, size_t iv_len,
1068                          const unsigned char *input, size_t ilen,
1069                          unsigned char *output, size_t *olen);
1070 
1071 #if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C)
1072 /**
1073  * \brief               The authenticated encryption (AEAD/NIST_KW) function.
1074  *
1075  * \note                For AEAD modes, the tag will be appended to the
1076  *                      ciphertext, as recommended by RFC 5116.
1077  *                      (NIST_KW doesn't have a separate tag.)
1078  *
1079  * \param ctx           The generic cipher context. This must be initialized and
1080  *                      bound to a key, with an AEAD algorithm or NIST_KW.
1081  * \param iv            The nonce to use. This must be a readable buffer of
1082  *                      at least \p iv_len Bytes and may be \c NULL if \p
1083  *                      iv_len is \c 0.
1084  * \param iv_len        The length of the nonce. For AEAD ciphers, this must
1085  *                      satisfy the constraints imposed by the cipher used.
1086  *                      For NIST_KW, this must be \c 0.
1087  * \param ad            The additional data to authenticate. This must be a
1088  *                      readable buffer of at least \p ad_len Bytes, and may
1089  *                      be \c NULL is \p ad_len is \c 0.
1090  * \param ad_len        The length of \p ad. For NIST_KW, this must be \c 0.
1091  * \param input         The buffer holding the input data. This must be a
1092  *                      readable buffer of at least \p ilen Bytes, and may be
1093  *                      \c NULL if \p ilen is \c 0.
1094  * \param ilen          The length of the input data.
1095  * \param output        The buffer for the output data. This must be a
1096  *                      writable buffer of at least \p output_len Bytes, and
1097  *                      must not be \c NULL.
1098  * \param output_len    The length of the \p output buffer in Bytes. For AEAD
1099  *                      ciphers, this must be at least \p ilen + \p tag_len.
1100  *                      For NIST_KW, this must be at least \p ilen + 8
1101  *                      (rounded up to a multiple of 8 if KWP is used);
1102  *                      \p ilen + 15 is always a safe value.
1103  * \param olen          This will be filled with the actual number of Bytes
1104  *                      written to the \p output buffer. This must point to a
1105  *                      writable object of type \c size_t.
1106  * \param tag_len       The desired length of the authentication tag. For AEAD
1107  *                      ciphers, this must match the constraints imposed by
1108  *                      the cipher used, and in particular must not be \c 0.
1109  *                      For NIST_KW, this must be \c 0.
1110  *
1111  * \return              \c 0 on success.
1112  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
1113  *                      parameter-verification failure.
1114  * \return              A cipher-specific error code on failure.
1115  */
1116 int mbedtls_cipher_auth_encrypt_ext(mbedtls_cipher_context_t *ctx,
1117                                     const unsigned char *iv, size_t iv_len,
1118                                     const unsigned char *ad, size_t ad_len,
1119                                     const unsigned char *input, size_t ilen,
1120                                     unsigned char *output, size_t output_len,
1121                                     size_t *olen, size_t tag_len);
1122 
1123 /**
1124  * \brief               The authenticated encryption (AEAD/NIST_KW) function.
1125  *
1126  * \note                If the data is not authentic, then the output buffer
1127  *                      is zeroed out to prevent the unauthentic plaintext being
1128  *                      used, making this interface safer.
1129  *
1130  * \note                For AEAD modes, the tag must be appended to the
1131  *                      ciphertext, as recommended by RFC 5116.
1132  *                      (NIST_KW doesn't have a separate tag.)
1133  *
1134  * \param ctx           The generic cipher context. This must be initialized and
1135  *                      bound to a key, with an AEAD algorithm or NIST_KW.
1136  * \param iv            The nonce to use. This must be a readable buffer of
1137  *                      at least \p iv_len Bytes and may be \c NULL if \p
1138  *                      iv_len is \c 0.
1139  * \param iv_len        The length of the nonce. For AEAD ciphers, this must
1140  *                      satisfy the constraints imposed by the cipher used.
1141  *                      For NIST_KW, this must be \c 0.
1142  * \param ad            The additional data to authenticate. This must be a
1143  *                      readable buffer of at least \p ad_len Bytes, and may
1144  *                      be \c NULL is \p ad_len is \c 0.
1145  * \param ad_len        The length of \p ad. For NIST_KW, this must be \c 0.
1146  * \param input         The buffer holding the input data. This must be a
1147  *                      readable buffer of at least \p ilen Bytes, and may be
1148  *                      \c NULL if \p ilen is \c 0.
1149  * \param ilen          The length of the input data. For AEAD ciphers this
1150  *                      must be at least \p tag_len. For NIST_KW this must be
1151  *                      at least \c 8.
1152  * \param output        The buffer for the output data. This must be a
1153  *                      writable buffer of at least \p output_len Bytes, and
1154  *                      may be \c NULL if \p output_len is \c 0.
1155  * \param output_len    The length of the \p output buffer in Bytes. For AEAD
1156  *                      ciphers, this must be at least \p ilen - \p tag_len.
1157  *                      For NIST_KW, this must be at least \p ilen - 8.
1158  * \param olen          This will be filled with the actual number of Bytes
1159  *                      written to the \p output buffer. This must point to a
1160  *                      writable object of type \c size_t.
1161  * \param tag_len       The actual length of the authentication tag. For AEAD
1162  *                      ciphers, this must match the constraints imposed by
1163  *                      the cipher used, and in particular must not be \c 0.
1164  *                      For NIST_KW, this must be \c 0.
1165  *
1166  * \return              \c 0 on success.
1167  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
1168  *                      parameter-verification failure.
1169  * \return              #MBEDTLS_ERR_CIPHER_AUTH_FAILED if data is not authentic.
1170  * \return              A cipher-specific error code on failure.
1171  */
1172 int mbedtls_cipher_auth_decrypt_ext(mbedtls_cipher_context_t *ctx,
1173                                     const unsigned char *iv, size_t iv_len,
1174                                     const unsigned char *ad, size_t ad_len,
1175                                     const unsigned char *input, size_t ilen,
1176                                     unsigned char *output, size_t output_len,
1177                                     size_t *olen, size_t tag_len);
1178 #endif /* MBEDTLS_CIPHER_MODE_AEAD || MBEDTLS_NIST_KW_C */
1179 #ifdef __cplusplus
1180 }
1181 #endif
1182 
1183 #endif /* MBEDTLS_CIPHER_H */
1184