Coverage Report

Created: 2026-10-17 06:10

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