xref: /optee_os/lib/libmbedtls/mbedtls/include/mbedtls/cipher.h (revision b0563631928755fe864b97785160fb3088e9efdc)
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 ((size_t) 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  * \brief           Clone the state of an cipher context
606  *
607  * \note            The two contexts must have been setup to the same type
608  *                  (cloning from AES to DES make no sense).
609  *
610  * \param dst       The destination context
611  * \param src       The context to be cloned
612  *
613  * \return          \c 0 on success,
614  *                  \c MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on parameter failure.
615  */
616 int mbedtls_cipher_clone(mbedtls_cipher_context_t *dst,
617                          const mbedtls_cipher_context_t *src);
618 
619 /**
620  * \brief               This function prepares a cipher context for
621  *                      use with the given cipher primitive.
622  *
623  * \note                After calling this function, you should call
624  *                      mbedtls_cipher_setkey() and, if the mode uses padding,
625  *                      mbedtls_cipher_set_padding_mode(), then for each
626  *                      message to encrypt or decrypt with this key, either:
627  *                      - mbedtls_cipher_crypt() for one-shot processing with
628  *                      non-AEAD modes;
629  *                      - mbedtls_cipher_auth_encrypt_ext() or
630  *                      mbedtls_cipher_auth_decrypt_ext() for one-shot
631  *                      processing with AEAD modes or NIST_KW;
632  *                      - for multi-part processing, see the documentation of
633  *                      mbedtls_cipher_reset().
634  *
635  * \param ctx           The context to prepare. This must be initialized by
636  *                      a call to mbedtls_cipher_init() first.
637  * \param cipher_info   The cipher to use.
638  *
639  * \return              \c 0 on success.
640  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
641  *                      parameter-verification failure.
642  * \return              #MBEDTLS_ERR_CIPHER_ALLOC_FAILED if allocation of the
643  *                      cipher-specific context fails.
644  */
645 int mbedtls_cipher_setup(mbedtls_cipher_context_t *ctx,
646                          const mbedtls_cipher_info_t *cipher_info);
647 
648 #if defined(MBEDTLS_USE_PSA_CRYPTO)
649 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
650 /**
651  * \brief               This function initializes a cipher context for
652  *                      PSA-based use with the given cipher primitive.
653  *
654  * \deprecated          This function is deprecated and will be removed in a
655  *                      future version of the library.
656  *                      Please use psa_aead_xxx() / psa_cipher_xxx() directly
657  *                      instead.
658  *
659  * \note                See #MBEDTLS_USE_PSA_CRYPTO for information on PSA.
660  *
661  * \param ctx           The context to initialize. May not be \c NULL.
662  * \param cipher_info   The cipher to use.
663  * \param taglen        For AEAD ciphers, the length in bytes of the
664  *                      authentication tag to use. Subsequent uses of
665  *                      mbedtls_cipher_auth_encrypt_ext() or
666  *                      mbedtls_cipher_auth_decrypt_ext() must provide
667  *                      the same tag length.
668  *                      For non-AEAD ciphers, the value must be \c 0.
669  *
670  * \return              \c 0 on success.
671  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
672  *                      parameter-verification failure.
673  * \return              #MBEDTLS_ERR_CIPHER_ALLOC_FAILED if allocation of the
674  *                      cipher-specific context fails.
675  */
676 int MBEDTLS_DEPRECATED mbedtls_cipher_setup_psa(mbedtls_cipher_context_t *ctx,
677                                                 const mbedtls_cipher_info_t *cipher_info,
678                                                 size_t taglen);
679 #endif /* MBEDTLS_DEPRECATED_REMOVED */
680 #endif /* MBEDTLS_USE_PSA_CRYPTO */
681 
682 /**
683  * \brief               setup the cipher info structure.
684  *
685  * \param ctx           cipher's context. Must have been initialised.
686  * \param cipher_info   cipher to use.
687  *
688  * \return              0 on success,
689  *                      MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on parameter failure
690  */
691 int mbedtls_cipher_setup_info(mbedtls_cipher_context_t *ctx,
692                               const mbedtls_cipher_info_t *cipher_info);
693 
694 /**
695  * \brief        This function returns the block size of the given cipher
696  *               in bytes.
697  *
698  * \param ctx    The context of the cipher.
699  *
700  * \return       The block size of the underlying cipher.
701  * \return       \c 1 if the cipher is a stream cipher.
702  * \return       \c 0 if \p ctx has not been initialized.
703  */
mbedtls_cipher_get_block_size(const mbedtls_cipher_context_t * ctx)704 static inline unsigned int mbedtls_cipher_get_block_size(
705     const mbedtls_cipher_context_t *ctx)
706 {
707     if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
708         return 0;
709     }
710 
711     return (unsigned int) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(block_size);
712 }
713 
714 /**
715  * \brief        This function returns the mode of operation for
716  *               the cipher. For example, MBEDTLS_MODE_CBC.
717  *
718  * \param ctx    The context of the cipher. This must be initialized.
719  *
720  * \return       The mode of operation.
721  * \return       #MBEDTLS_MODE_NONE if \p ctx has not been initialized.
722  */
mbedtls_cipher_get_cipher_mode(const mbedtls_cipher_context_t * ctx)723 static inline mbedtls_cipher_mode_t mbedtls_cipher_get_cipher_mode(
724     const mbedtls_cipher_context_t *ctx)
725 {
726     if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
727         return MBEDTLS_MODE_NONE;
728     }
729 
730     return (mbedtls_cipher_mode_t) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(mode);
731 }
732 
733 /**
734  * \brief       This function returns the size of the IV or nonce
735  *              of the cipher, in Bytes.
736  *
737  * \param ctx   The context of the cipher. This must be initialized.
738  *
739  * \return      The recommended IV size if no IV has been set.
740  * \return      \c 0 for ciphers not using an IV or a nonce.
741  * \return      The actual size if an IV has been set.
742  */
mbedtls_cipher_get_iv_size(const mbedtls_cipher_context_t * ctx)743 static inline int mbedtls_cipher_get_iv_size(
744     const mbedtls_cipher_context_t *ctx)
745 {
746     if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
747         return 0;
748     }
749 
750     if (ctx->MBEDTLS_PRIVATE(iv_size) != 0) {
751         return (int) ctx->MBEDTLS_PRIVATE(iv_size);
752     }
753 
754     return (int) (((int) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(iv_size)) <<
755                   MBEDTLS_IV_SIZE_SHIFT);
756 }
757 
758 /**
759  * \brief               This function returns the type of the given cipher.
760  *
761  * \param ctx           The context of the cipher. This must be initialized.
762  *
763  * \return              The type of the cipher.
764  * \return              #MBEDTLS_CIPHER_NONE if \p ctx has not been initialized.
765  */
mbedtls_cipher_get_type(const mbedtls_cipher_context_t * ctx)766 static inline mbedtls_cipher_type_t mbedtls_cipher_get_type(
767     const mbedtls_cipher_context_t *ctx)
768 {
769     if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
770         return MBEDTLS_CIPHER_NONE;
771     }
772 
773     return (mbedtls_cipher_type_t) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(type);
774 }
775 
776 /**
777  * \brief               This function returns the name of the given cipher
778  *                      as a string.
779  *
780  * \param ctx           The context of the cipher. This must be initialized.
781  *
782  * \return              The name of the cipher.
783  * \return              NULL if \p ctx has not been not initialized.
784  */
mbedtls_cipher_get_name(const mbedtls_cipher_context_t * ctx)785 static inline const char *mbedtls_cipher_get_name(
786     const mbedtls_cipher_context_t *ctx)
787 {
788     if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
789         return 0;
790     }
791 
792     return ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(name);
793 }
794 
795 /**
796  * \brief               This function returns the key length of the cipher.
797  *
798  * \param ctx           The context of the cipher. This must be initialized.
799  *
800  * \return              The key length of the cipher in bits.
801  * \return              #MBEDTLS_KEY_LENGTH_NONE if \p ctx has not been
802  *                      initialized.
803  */
mbedtls_cipher_get_key_bitlen(const mbedtls_cipher_context_t * ctx)804 static inline int mbedtls_cipher_get_key_bitlen(
805     const mbedtls_cipher_context_t *ctx)
806 {
807     if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
808         return MBEDTLS_KEY_LENGTH_NONE;
809     }
810 
811     return (int) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(key_bitlen) <<
812            MBEDTLS_KEY_BITLEN_SHIFT;
813 }
814 
815 /**
816  * \brief          This function returns the operation of the given cipher.
817  *
818  * \param ctx      The context of the cipher. This must be initialized.
819  *
820  * \return         The type of operation: #MBEDTLS_ENCRYPT or #MBEDTLS_DECRYPT.
821  * \return         #MBEDTLS_OPERATION_NONE if \p ctx has not been initialized.
822  */
mbedtls_cipher_get_operation(const mbedtls_cipher_context_t * ctx)823 static inline mbedtls_operation_t mbedtls_cipher_get_operation(
824     const mbedtls_cipher_context_t *ctx)
825 {
826     if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
827         return MBEDTLS_OPERATION_NONE;
828     }
829 
830     return ctx->MBEDTLS_PRIVATE(operation);
831 }
832 
833 /**
834  * \brief               This function sets the key to use with the given context.
835  *
836  * \param ctx           The generic cipher context. This must be initialized and
837  *                      bound to a cipher information structure.
838  * \param key           The key to use. This must be a readable buffer of at
839  *                      least \p key_bitlen Bits.
840  * \param key_bitlen    The key length to use, in Bits.
841  * \param operation     The operation that the key will be used for:
842  *                      #MBEDTLS_ENCRYPT or #MBEDTLS_DECRYPT.
843  *
844  * \return              \c 0 on success.
845  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
846  *                      parameter-verification failure.
847  * \return              A cipher-specific error code on failure.
848  */
849 int mbedtls_cipher_setkey(mbedtls_cipher_context_t *ctx,
850                           const unsigned char *key,
851                           int key_bitlen,
852                           const mbedtls_operation_t operation);
853 
854 #if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING)
855 /**
856  * \brief               This function sets the padding mode, for cipher modes
857  *                      that use padding.
858  *
859  *
860  * \param ctx           The generic cipher context. This must be initialized and
861  *                      bound to a cipher information structure.
862  * \param mode          The padding mode.
863  *
864  * \return              \c 0 on success.
865  * \return              #MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE
866  *                      if the selected padding mode is not supported.
867  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA if the cipher mode
868  *                      does not support padding.
869  */
870 int mbedtls_cipher_set_padding_mode(mbedtls_cipher_context_t *ctx,
871                                     mbedtls_cipher_padding_t mode);
872 #endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */
873 
874 /**
875  * \brief           This function sets the initialization vector (IV)
876  *                  or nonce.
877  *
878  * \note            Some ciphers do not use IVs nor nonce. For these
879  *                  ciphers, this function has no effect.
880  *
881  * \note            For #MBEDTLS_CIPHER_CHACHA20, the nonce length must
882  *                  be 12, and the initial counter value is 0.
883  *
884  * \note            For #MBEDTLS_CIPHER_CHACHA20_POLY1305, the nonce length
885  *                  must be 12.
886  *
887  * \param ctx       The generic cipher context. This must be initialized and
888  *                  bound to a cipher information structure.
889  * \param iv        The IV to use, or NONCE_COUNTER for CTR-mode ciphers. This
890  *                  must be a readable buffer of at least \p iv_len Bytes.
891  * \param iv_len    The IV length for ciphers with variable-size IV.
892  *                  This parameter is discarded by ciphers with fixed-size IV.
893  *
894  * \return          \c 0 on success.
895  * \return          #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
896  *                  parameter-verification failure.
897  */
898 int mbedtls_cipher_set_iv(mbedtls_cipher_context_t *ctx,
899                           const unsigned char *iv,
900                           size_t iv_len);
901 
902 /**
903  * \brief         This function resets the cipher state.
904  *
905  * \note          With non-AEAD ciphers, the order of calls for each message
906  *                is as follows:
907  *                1. mbedtls_cipher_set_iv() if the mode uses an IV/nonce.
908  *                2. mbedtls_cipher_reset()
909  *                3. mbedtls_cipher_update() one or more times
910  *                4. mbedtls_cipher_finish()
911  *                .
912  *                This sequence can be repeated to encrypt or decrypt multiple
913  *                messages with the same key.
914  *
915  * \note          With AEAD ciphers, the order of calls for each message
916  *                is as follows:
917  *                1. mbedtls_cipher_set_iv() if the mode uses an IV/nonce.
918  *                2. mbedtls_cipher_reset()
919  *                3. mbedtls_cipher_update_ad()
920  *                4. mbedtls_cipher_update() one or more times
921  *                5. mbedtls_cipher_finish()
922  *                6. mbedtls_cipher_check_tag() (for decryption) or
923  *                mbedtls_cipher_write_tag() (for encryption).
924  *                .
925  *                This sequence can be repeated to encrypt or decrypt multiple
926  *                messages with the same key.
927  *
928  * \param ctx     The generic cipher context. This must be bound to a key.
929  *
930  * \return        \c 0 on success.
931  * \return        #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
932  *                parameter-verification failure.
933  */
934 int mbedtls_cipher_reset(mbedtls_cipher_context_t *ctx);
935 
936 #if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C)
937 /**
938  * \brief               This function adds additional data for AEAD ciphers.
939  *                      Currently supported with GCM and ChaCha20+Poly1305.
940  *
941  * \param ctx           The generic cipher context. This must be initialized.
942  * \param ad            The additional data to use. This must be a readable
943  *                      buffer of at least \p ad_len Bytes.
944  * \param ad_len        The length of \p ad in Bytes.
945  *
946  * \return              \c 0 on success.
947  * \return              A specific error code on failure.
948  */
949 int mbedtls_cipher_update_ad(mbedtls_cipher_context_t *ctx,
950                              const unsigned char *ad, size_t ad_len);
951 #endif /* MBEDTLS_GCM_C || MBEDTLS_CHACHAPOLY_C */
952 
953 /**
954  * \brief               The generic cipher update function. It encrypts or
955  *                      decrypts using the given cipher context. Writes as
956  *                      many block-sized blocks of data as possible to output.
957  *                      Any data that cannot be written immediately is either
958  *                      added to the next block, or flushed when
959  *                      mbedtls_cipher_finish() is called.
960  *                      Exception: For MBEDTLS_MODE_ECB, expects a single block
961  *                      in size. For example, 16 Bytes for AES.
962  *
963  * \param ctx           The generic cipher context. This must be initialized and
964  *                      bound to a key.
965  * \param input         The buffer holding the input data. This must be a
966  *                      readable buffer of at least \p ilen Bytes.
967  * \param ilen          The length of the input data.
968  * \param output        The buffer for the output data. This must be able to
969  *                      hold at least `ilen + block_size`. This must not be the
970  *                      same buffer as \p input.
971  * \param olen          The length of the output data, to be updated with the
972  *                      actual number of Bytes written. This must not be
973  *                      \c NULL.
974  *
975  * \return              \c 0 on success.
976  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
977  *                      parameter-verification failure.
978  * \return              #MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE on an
979  *                      unsupported mode for a cipher.
980  * \return              A cipher-specific error code on failure.
981  */
982 int mbedtls_cipher_update(mbedtls_cipher_context_t *ctx,
983                           const unsigned char *input,
984                           size_t ilen, unsigned char *output,
985                           size_t *olen);
986 
987 /**
988  * \brief               The generic cipher finalization function. If data still
989  *                      needs to be flushed from an incomplete block, the data
990  *                      contained in it is padded to the size of
991  *                      the last block, and written to the \p output buffer.
992  *
993  * \param ctx           The generic cipher context. This must be initialized and
994  *                      bound to a key.
995  * \param output        The buffer to write data to. This needs to be a writable
996  *                      buffer of at least block_size Bytes.
997  * \param olen          The length of the data written to the \p output buffer.
998  *                      This may not be \c NULL.
999  *
1000  * \return              \c 0 on success.
1001  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
1002  *                      parameter-verification failure.
1003  * \return              #MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED on decryption
1004  *                      expecting a full block but not receiving one.
1005  * \return              #MBEDTLS_ERR_CIPHER_INVALID_PADDING on invalid padding
1006  *                      while decrypting.
1007  * \return              A cipher-specific error code on failure.
1008  */
1009 int mbedtls_cipher_finish(mbedtls_cipher_context_t *ctx,
1010                           unsigned char *output, size_t *olen);
1011 
1012 #if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C)
1013 /**
1014  * \brief               This function writes a tag for AEAD ciphers.
1015  *                      Currently supported with GCM and ChaCha20+Poly1305.
1016  *                      This must be called after mbedtls_cipher_finish().
1017  *
1018  * \param ctx           The generic cipher context. This must be initialized,
1019  *                      bound to a key, and have just completed a cipher
1020  *                      operation through mbedtls_cipher_finish() the tag for
1021  *                      which should be written.
1022  * \param tag           The buffer to write the tag to. This must be a writable
1023  *                      buffer of at least \p tag_len Bytes.
1024  * \param tag_len       The length of the tag to write.
1025  *
1026  * \return              \c 0 on success.
1027  * \return              A specific error code on failure.
1028  */
1029 int mbedtls_cipher_write_tag(mbedtls_cipher_context_t *ctx,
1030                              unsigned char *tag, size_t tag_len);
1031 
1032 /**
1033  * \brief               This function checks the tag for AEAD ciphers.
1034  *                      Currently supported with GCM and ChaCha20+Poly1305.
1035  *                      This must be called after mbedtls_cipher_finish().
1036  *
1037  * \param ctx           The generic cipher context. This must be initialized.
1038  * \param tag           The buffer holding the tag. This must be a readable
1039  *                      buffer of at least \p tag_len Bytes.
1040  * \param tag_len       The length of the tag to check.
1041  *
1042  * \return              \c 0 on success.
1043  * \return              A specific error code on failure.
1044  */
1045 int mbedtls_cipher_check_tag(mbedtls_cipher_context_t *ctx,
1046                              const unsigned char *tag, size_t tag_len);
1047 #endif /* MBEDTLS_GCM_C || MBEDTLS_CHACHAPOLY_C */
1048 
1049 /**
1050  * \brief               The generic all-in-one encryption/decryption function,
1051  *                      for all ciphers except AEAD constructs.
1052  *
1053  * \param ctx           The generic cipher context. This must be initialized.
1054  * \param iv            The IV to use, or NONCE_COUNTER for CTR-mode ciphers.
1055  *                      This must be a readable buffer of at least \p iv_len
1056  *                      Bytes.
1057  * \param iv_len        The IV length for ciphers with variable-size IV.
1058  *                      This parameter is discarded by ciphers with fixed-size
1059  *                      IV.
1060  * \param input         The buffer holding the input data. This must be a
1061  *                      readable buffer of at least \p ilen Bytes.
1062  * \param ilen          The length of the input data in Bytes.
1063  * \param output        The buffer for the output data. This must be able to
1064  *                      hold at least `ilen + block_size`. This must not be the
1065  *                      same buffer as \p input.
1066  * \param olen          The length of the output data, to be updated with the
1067  *                      actual number of Bytes written. This must not be
1068  *                      \c NULL.
1069  *
1070  * \note                Some ciphers do not use IVs nor nonce. For these
1071  *                      ciphers, use \p iv = NULL and \p iv_len = 0.
1072  *
1073  * \return              \c 0 on success.
1074  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
1075  *                      parameter-verification failure.
1076  * \return              #MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED on decryption
1077  *                      expecting a full block but not receiving one.
1078  * \return              #MBEDTLS_ERR_CIPHER_INVALID_PADDING on invalid padding
1079  *                      while decrypting.
1080  * \return              A cipher-specific error code on failure.
1081  */
1082 int mbedtls_cipher_crypt(mbedtls_cipher_context_t *ctx,
1083                          const unsigned char *iv, size_t iv_len,
1084                          const unsigned char *input, size_t ilen,
1085                          unsigned char *output, size_t *olen);
1086 
1087 #if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C)
1088 /**
1089  * \brief               The authenticated encryption (AEAD/NIST_KW) function.
1090  *
1091  * \note                For AEAD modes, the tag will be appended to the
1092  *                      ciphertext, as recommended by RFC 5116.
1093  *                      (NIST_KW doesn't have a separate tag.)
1094  *
1095  * \param ctx           The generic cipher context. This must be initialized and
1096  *                      bound to a key, with an AEAD algorithm or NIST_KW.
1097  * \param iv            The nonce to use. This must be a readable buffer of
1098  *                      at least \p iv_len Bytes and may be \c NULL if \p
1099  *                      iv_len is \c 0.
1100  * \param iv_len        The length of the nonce. For AEAD ciphers, this must
1101  *                      satisfy the constraints imposed by the cipher used.
1102  *                      For NIST_KW, this must be \c 0.
1103  * \param ad            The additional data to authenticate. This must be a
1104  *                      readable buffer of at least \p ad_len Bytes, and may
1105  *                      be \c NULL is \p ad_len is \c 0.
1106  * \param ad_len        The length of \p ad. For NIST_KW, this must be \c 0.
1107  * \param input         The buffer holding the input data. This must be a
1108  *                      readable buffer of at least \p ilen Bytes, and may be
1109  *                      \c NULL if \p ilen is \c 0.
1110  * \param ilen          The length of the input data.
1111  * \param output        The buffer for the output data. This must be a
1112  *                      writable buffer of at least \p output_len Bytes, and
1113  *                      must not be \c NULL.
1114  * \param output_len    The length of the \p output buffer in Bytes. For AEAD
1115  *                      ciphers, this must be at least \p ilen + \p tag_len.
1116  *                      For NIST_KW, this must be at least \p ilen + 8
1117  *                      (rounded up to a multiple of 8 if KWP is used);
1118  *                      \p ilen + 15 is always a safe value.
1119  * \param olen          This will be filled with the actual number of Bytes
1120  *                      written to the \p output buffer. This must point to a
1121  *                      writable object of type \c size_t.
1122  * \param tag_len       The desired length of the authentication tag. For AEAD
1123  *                      ciphers, this must match the constraints imposed by
1124  *                      the cipher used, and in particular must not be \c 0.
1125  *                      For NIST_KW, this must be \c 0.
1126  *
1127  * \return              \c 0 on success.
1128  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
1129  *                      parameter-verification failure.
1130  * \return              A cipher-specific error code on failure.
1131  */
1132 int mbedtls_cipher_auth_encrypt_ext(mbedtls_cipher_context_t *ctx,
1133                                     const unsigned char *iv, size_t iv_len,
1134                                     const unsigned char *ad, size_t ad_len,
1135                                     const unsigned char *input, size_t ilen,
1136                                     unsigned char *output, size_t output_len,
1137                                     size_t *olen, size_t tag_len);
1138 
1139 /**
1140  * \brief               The authenticated encryption (AEAD/NIST_KW) function.
1141  *
1142  * \note                If the data is not authentic, then the output buffer
1143  *                      is zeroed out to prevent the unauthentic plaintext being
1144  *                      used, making this interface safer.
1145  *
1146  * \note                For AEAD modes, the tag must be appended to the
1147  *                      ciphertext, as recommended by RFC 5116.
1148  *                      (NIST_KW doesn't have a separate tag.)
1149  *
1150  * \param ctx           The generic cipher context. This must be initialized and
1151  *                      bound to a key, with an AEAD algorithm or NIST_KW.
1152  * \param iv            The nonce to use. This must be a readable buffer of
1153  *                      at least \p iv_len Bytes and may be \c NULL if \p
1154  *                      iv_len is \c 0.
1155  * \param iv_len        The length of the nonce. For AEAD ciphers, this must
1156  *                      satisfy the constraints imposed by the cipher used.
1157  *                      For NIST_KW, this must be \c 0.
1158  * \param ad            The additional data to authenticate. This must be a
1159  *                      readable buffer of at least \p ad_len Bytes, and may
1160  *                      be \c NULL is \p ad_len is \c 0.
1161  * \param ad_len        The length of \p ad. For NIST_KW, this must be \c 0.
1162  * \param input         The buffer holding the input data. This must be a
1163  *                      readable buffer of at least \p ilen Bytes, and may be
1164  *                      \c NULL if \p ilen is \c 0.
1165  * \param ilen          The length of the input data. For AEAD ciphers this
1166  *                      must be at least \p tag_len. For NIST_KW this must be
1167  *                      at least \c 8.
1168  * \param output        The buffer for the output data. This must be a
1169  *                      writable buffer of at least \p output_len Bytes, and
1170  *                      may be \c NULL if \p output_len is \c 0.
1171  * \param output_len    The length of the \p output buffer in Bytes. For AEAD
1172  *                      ciphers, this must be at least \p ilen - \p tag_len.
1173  *                      For NIST_KW, this must be at least \p ilen - 8.
1174  * \param olen          This will be filled with the actual number of Bytes
1175  *                      written to the \p output buffer. This must point to a
1176  *                      writable object of type \c size_t.
1177  * \param tag_len       The actual length of the authentication tag. For AEAD
1178  *                      ciphers, this must match the constraints imposed by
1179  *                      the cipher used, and in particular must not be \c 0.
1180  *                      For NIST_KW, this must be \c 0.
1181  *
1182  * \return              \c 0 on success.
1183  * \return              #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
1184  *                      parameter-verification failure.
1185  * \return              #MBEDTLS_ERR_CIPHER_AUTH_FAILED if data is not authentic.
1186  * \return              A cipher-specific error code on failure.
1187  */
1188 int mbedtls_cipher_auth_decrypt_ext(mbedtls_cipher_context_t *ctx,
1189                                     const unsigned char *iv, size_t iv_len,
1190                                     const unsigned char *ad, size_t ad_len,
1191                                     const unsigned char *input, size_t ilen,
1192                                     unsigned char *output, size_t output_len,
1193                                     size_t *olen, size_t tag_len);
1194 #endif /* MBEDTLS_CIPHER_MODE_AEAD || MBEDTLS_NIST_KW_C */
1195 #ifdef __cplusplus
1196 }
1197 #endif
1198 
1199 #endif /* MBEDTLS_CIPHER_H */
1200