mbed TLS v2.28.0
aes.h
Go to the documentation of this file.
1 
23 /*
24  * Copyright The Mbed TLS Contributors
25  * SPDX-License-Identifier: Apache-2.0
26  *
27  * Licensed under the Apache License, Version 2.0 (the "License"); you may
28  * not use this file except in compliance with the License.
29  * You may obtain a copy of the License at
30  *
31  * http://www.apache.org/licenses/LICENSE-2.0
32  *
33  * Unless required by applicable law or agreed to in writing, software
34  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
35  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
36  * See the License for the specific language governing permissions and
37  * limitations under the License.
38  */
39 
40 #ifndef MBEDTLS_AES_H
41 #define MBEDTLS_AES_H
42 
43 #if !defined(MBEDTLS_CONFIG_FILE)
44 #include "mbedtls/config.h"
45 #else
46 #include MBEDTLS_CONFIG_FILE
47 #endif
48 #include "mbedtls/platform_util.h"
49 
50 #include <stddef.h>
51 #include <stdint.h>
52 
53 /* padlock.c and aesni.c rely on these values! */
54 #define MBEDTLS_AES_ENCRYPT 1
55 #define MBEDTLS_AES_DECRYPT 0
57 /* Error codes in range 0x0020-0x0022 */
58 
59 #define MBEDTLS_ERR_AES_INVALID_KEY_LENGTH -0x0020
60 
61 #define MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH -0x0022
62 
63 /* Error codes in range 0x0021-0x0025 */
65 #define MBEDTLS_ERR_AES_BAD_INPUT_DATA -0x0021
66 
67 /* MBEDTLS_ERR_AES_FEATURE_UNAVAILABLE is deprecated and should not be used. */
69 #define MBEDTLS_ERR_AES_FEATURE_UNAVAILABLE -0x0023
70 
71 /* MBEDTLS_ERR_AES_HW_ACCEL_FAILED is deprecated and should not be used. */
73 #define MBEDTLS_ERR_AES_HW_ACCEL_FAILED -0x0025
74 
75 #if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \
76  !defined(inline) && !defined(__cplusplus)
77 #define inline __inline
78 #endif
79 
80 #ifdef __cplusplus
81 extern "C" {
82 #endif
83 
84 #if !defined(MBEDTLS_AES_ALT)
85 // Regular implementation
86 //
87 
91 typedef struct mbedtls_aes_context
92 {
93  int nr;
94  uint32_t *rk;
95  uint32_t buf[68];
103 }
105 
106 #if defined(MBEDTLS_CIPHER_MODE_XTS)
107 
111 {
117 #endif /* MBEDTLS_CIPHER_MODE_XTS */
118 
119 #else /* MBEDTLS_AES_ALT */
120 #include "aes_alt.h"
121 #endif /* MBEDTLS_AES_ALT */
122 
132 
141 
142 #if defined(MBEDTLS_CIPHER_MODE_XTS)
143 
152 
161 #endif /* MBEDTLS_CIPHER_MODE_XTS */
162 
179 int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key,
180  unsigned int keybits );
181 
198 int mbedtls_aes_setkey_dec( mbedtls_aes_context *ctx, const unsigned char *key,
199  unsigned int keybits );
200 
201 #if defined(MBEDTLS_CIPHER_MODE_XTS)
202 
220  const unsigned char *key,
221  unsigned int keybits );
222 
241  const unsigned char *key,
242  unsigned int keybits );
243 #endif /* MBEDTLS_CIPHER_MODE_XTS */
244 
270  int mode,
271  const unsigned char input[16],
272  unsigned char output[16] );
273 
274 #if defined(MBEDTLS_CIPHER_MODE_CBC)
275 
318  int mode,
319  size_t length,
320  unsigned char iv[16],
321  const unsigned char *input,
322  unsigned char *output );
323 #endif /* MBEDTLS_CIPHER_MODE_CBC */
324 
325 #if defined(MBEDTLS_CIPHER_MODE_XTS)
326 
363  int mode,
364  size_t length,
365  const unsigned char data_unit[16],
366  const unsigned char *input,
367  unsigned char *output );
368 #endif /* MBEDTLS_CIPHER_MODE_XTS */
369 
370 #if defined(MBEDTLS_CIPHER_MODE_CFB)
371 
412  int mode,
413  size_t length,
414  size_t *iv_off,
415  unsigned char iv[16],
416  const unsigned char *input,
417  unsigned char *output );
418 
457  int mode,
458  size_t length,
459  unsigned char iv[16],
460  const unsigned char *input,
461  unsigned char *output );
462 #endif /*MBEDTLS_CIPHER_MODE_CFB */
463 
464 #if defined(MBEDTLS_CIPHER_MODE_OFB)
465 
512  size_t length,
513  size_t *iv_off,
514  unsigned char iv[16],
515  const unsigned char *input,
516  unsigned char *output );
517 
518 #endif /* MBEDTLS_CIPHER_MODE_OFB */
519 
520 #if defined(MBEDTLS_CIPHER_MODE_CTR)
521 
595  size_t length,
596  size_t *nc_off,
597  unsigned char nonce_counter[16],
598  unsigned char stream_block[16],
599  const unsigned char *input,
600  unsigned char *output );
601 #endif /* MBEDTLS_CIPHER_MODE_CTR */
602 
616  const unsigned char input[16],
617  unsigned char output[16] );
618 
632  const unsigned char input[16],
633  unsigned char output[16] );
634 
635 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
636 #if defined(MBEDTLS_DEPRECATED_WARNING)
637 #define MBEDTLS_DEPRECATED __attribute__((deprecated))
638 #else
639 #define MBEDTLS_DEPRECATED
640 #endif
641 
652  const unsigned char input[16],
653  unsigned char output[16] );
654 
666  const unsigned char input[16],
667  unsigned char output[16] );
668 
669 #undef MBEDTLS_DEPRECATED
670 #endif /* !MBEDTLS_DEPRECATED_REMOVED */
671 
672 
673 #if defined(MBEDTLS_SELF_TEST)
674 
681 int mbedtls_aes_self_test( int verbose );
682 
683 #endif /* MBEDTLS_SELF_TEST */
684 
685 #ifdef __cplusplus
686 }
687 #endif
688 
689 #endif /* aes.h */
uint32_t buf[68]
Definition: aes.h:95
mbedtls_aes_context crypt
Definition: aes.h:112
MBEDTLS_DEPRECATED void mbedtls_aes_encrypt(mbedtls_aes_context *ctx, const unsigned char input[16], unsigned char output[16])
Deprecated internal AES block encryption function without return value.
MBEDTLS_CHECK_RETURN_TYPICAL int mbedtls_aes_crypt_cfb128(mbedtls_aes_context *ctx, int mode, size_t length, size_t *iv_off, unsigned char iv[16], const unsigned char *input, unsigned char *output)
This function performs an AES-CFB128 encryption or decryption operation.
MBEDTLS_CHECK_RETURN_TYPICAL int mbedtls_aes_crypt_xts(mbedtls_aes_xts_context *ctx, int mode, size_t length, const unsigned char data_unit[16], const unsigned char *input, unsigned char *output)
This function performs an AES-XTS encryption or decryption operation for an entire XTS data unit...
#define MBEDTLS_CHECK_RETURN_TYPICAL
#define MBEDTLS_DEPRECATED
Definition: aes.h:639
MBEDTLS_CHECK_RETURN_TYPICAL int mbedtls_aes_crypt_cbc(mbedtls_aes_context *ctx, int mode, size_t length, unsigned char iv[16], const unsigned char *input, unsigned char *output)
This function performs an AES-CBC encryption or decryption operation on full blocks.
Configuration options (set of defines)
void mbedtls_aes_init(mbedtls_aes_context *ctx)
This function initializes the specified AES context.
Common and shared functions used by multiple modules in the Mbed TLS library.
MBEDTLS_CHECK_RETURN_TYPICAL int mbedtls_internal_aes_encrypt(mbedtls_aes_context *ctx, const unsigned char input[16], unsigned char output[16])
Internal AES block encryption function. This is only exposed to allow overriding it using MBEDTLS_AES...
void mbedtls_aes_xts_init(mbedtls_aes_xts_context *ctx)
This function initializes the specified AES XTS context.
The AES XTS context-type definition.
Definition: aes.h:110
MBEDTLS_CHECK_RETURN_TYPICAL int mbedtls_aes_setkey_dec(mbedtls_aes_context *ctx, const unsigned char *key, unsigned int keybits)
This function sets the decryption key.
MBEDTLS_CHECK_RETURN_TYPICAL int mbedtls_aes_xts_setkey_dec(mbedtls_aes_xts_context *ctx, const unsigned char *key, unsigned int keybits)
This function prepares an XTS context for decryption and sets the decryption key. ...
MBEDTLS_CHECK_RETURN_CRITICAL int mbedtls_aes_self_test(int verbose)
Checkup routine.
MBEDTLS_CHECK_RETURN_TYPICAL int mbedtls_aes_crypt_ctr(mbedtls_aes_context *ctx, size_t length, size_t *nc_off, unsigned char nonce_counter[16], unsigned char stream_block[16], const unsigned char *input, unsigned char *output)
This function performs an AES-CTR encryption or decryption operation.
void mbedtls_aes_xts_free(mbedtls_aes_xts_context *ctx)
This function releases and clears the specified AES XTS context.
mbedtls_aes_context tweak
Definition: aes.h:114
MBEDTLS_CHECK_RETURN_TYPICAL int mbedtls_aes_crypt_cfb8(mbedtls_aes_context *ctx, int mode, size_t length, unsigned char iv[16], const unsigned char *input, unsigned char *output)
This function performs an AES-CFB8 encryption or decryption operation.
uint32_t * rk
Definition: aes.h:94
MBEDTLS_CHECK_RETURN_TYPICAL int mbedtls_aes_setkey_enc(mbedtls_aes_context *ctx, const unsigned char *key, unsigned int keybits)
This function sets the encryption key.
#define MBEDTLS_CHECK_RETURN_CRITICAL
MBEDTLS_CHECK_RETURN_TYPICAL int mbedtls_aes_crypt_ecb(mbedtls_aes_context *ctx, int mode, const unsigned char input[16], unsigned char output[16])
This function performs an AES single-block encryption or decryption operation.
MBEDTLS_CHECK_RETURN_TYPICAL int mbedtls_internal_aes_decrypt(mbedtls_aes_context *ctx, const unsigned char input[16], unsigned char output[16])
Internal AES block decryption function. This is only exposed to allow overriding it using see MBEDTLS...
MBEDTLS_CHECK_RETURN_TYPICAL int mbedtls_aes_xts_setkey_enc(mbedtls_aes_xts_context *ctx, const unsigned char *key, unsigned int keybits)
This function prepares an XTS context for encryption and sets the encryption key. ...
void mbedtls_aes_free(mbedtls_aes_context *ctx)
This function releases and clears the specified AES context.
The AES context-type definition.
Definition: aes.h:91
MBEDTLS_CHECK_RETURN_TYPICAL int mbedtls_aes_crypt_ofb(mbedtls_aes_context *ctx, size_t length, size_t *iv_off, unsigned char iv[16], const unsigned char *input, unsigned char *output)
This function performs an AES-OFB (Output Feedback Mode) encryption or decryption operation...
struct mbedtls_aes_xts_context mbedtls_aes_xts_context
The AES XTS context-type definition.
struct mbedtls_aes_context mbedtls_aes_context
The AES context-type definition.
MBEDTLS_DEPRECATED void mbedtls_aes_decrypt(mbedtls_aes_context *ctx, const unsigned char input[16], unsigned char output[16])
Deprecated internal AES block decryption function without return value.