]> git.sur5r.net Git - freertos/blob - FreeRTOS-Labs/Source/mbedtls/include/mbedtls/cipher_internal.h
Add the Labs projects provided in the V10.2.1_191129 zip file.
[freertos] / FreeRTOS-Labs / Source / mbedtls / include / mbedtls / cipher_internal.h
1 /**\r
2  * \file cipher_internal.h\r
3  *\r
4  * \brief Cipher wrappers.\r
5  *\r
6  * \author Adriaan de Jong <dejong@fox-it.com>\r
7  */\r
8 /*\r
9  *  Copyright (C) 2006-2015, ARM Limited, All Rights Reserved\r
10  *  SPDX-License-Identifier: Apache-2.0\r
11  *\r
12  *  Licensed under the Apache License, Version 2.0 (the "License"); you may\r
13  *  not use this file except in compliance with the License.\r
14  *  You may obtain a copy of the License at\r
15  *\r
16  *  http://www.apache.org/licenses/LICENSE-2.0\r
17  *\r
18  *  Unless required by applicable law or agreed to in writing, software\r
19  *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT\r
20  *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
21  *  See the License for the specific language governing permissions and\r
22  *  limitations under the License.\r
23  *\r
24  *  This file is part of mbed TLS (https://tls.mbed.org)\r
25  */\r
26 #ifndef MBEDTLS_CIPHER_WRAP_H\r
27 #define MBEDTLS_CIPHER_WRAP_H\r
28 \r
29 #if !defined(MBEDTLS_CONFIG_FILE)\r
30 #include "config.h"\r
31 #else\r
32 #include MBEDTLS_CONFIG_FILE\r
33 #endif\r
34 \r
35 #include "cipher.h"\r
36 \r
37 #if defined(MBEDTLS_USE_PSA_CRYPTO)\r
38 #include "psa/crypto.h"\r
39 #endif /* MBEDTLS_USE_PSA_CRYPTO */\r
40 \r
41 #ifdef __cplusplus\r
42 extern "C" {\r
43 #endif\r
44 \r
45 /**\r
46  * Base cipher information. The non-mode specific functions and values.\r
47  */\r
48 struct mbedtls_cipher_base_t\r
49 {\r
50     /** Base Cipher type (e.g. MBEDTLS_CIPHER_ID_AES) */\r
51     mbedtls_cipher_id_t cipher;\r
52 \r
53     /** Encrypt using ECB */\r
54     int (*ecb_func)( void *ctx, mbedtls_operation_t mode,\r
55                      const unsigned char *input, unsigned char *output );\r
56 \r
57 #if defined(MBEDTLS_CIPHER_MODE_CBC)\r
58     /** Encrypt using CBC */\r
59     int (*cbc_func)( void *ctx, mbedtls_operation_t mode, size_t length,\r
60                      unsigned char *iv, const unsigned char *input,\r
61                      unsigned char *output );\r
62 #endif\r
63 \r
64 #if defined(MBEDTLS_CIPHER_MODE_CFB)\r
65     /** Encrypt using CFB (Full length) */\r
66     int (*cfb_func)( void *ctx, mbedtls_operation_t mode, size_t length, size_t *iv_off,\r
67                      unsigned char *iv, const unsigned char *input,\r
68                      unsigned char *output );\r
69 #endif\r
70 \r
71 #if defined(MBEDTLS_CIPHER_MODE_OFB)\r
72     /** Encrypt using OFB (Full length) */\r
73     int (*ofb_func)( void *ctx, size_t length, size_t *iv_off,\r
74                      unsigned char *iv,\r
75                      const unsigned char *input,\r
76                      unsigned char *output );\r
77 #endif\r
78 \r
79 #if defined(MBEDTLS_CIPHER_MODE_CTR)\r
80     /** Encrypt using CTR */\r
81     int (*ctr_func)( void *ctx, size_t length, size_t *nc_off,\r
82                      unsigned char *nonce_counter, unsigned char *stream_block,\r
83                      const unsigned char *input, unsigned char *output );\r
84 #endif\r
85 \r
86 #if defined(MBEDTLS_CIPHER_MODE_XTS)\r
87     /** Encrypt or decrypt using XTS. */\r
88     int (*xts_func)( void *ctx, mbedtls_operation_t mode, size_t length,\r
89                      const unsigned char data_unit[16],\r
90                      const unsigned char *input, unsigned char *output );\r
91 #endif\r
92 \r
93 #if defined(MBEDTLS_CIPHER_MODE_STREAM)\r
94     /** Encrypt using STREAM */\r
95     int (*stream_func)( void *ctx, size_t length,\r
96                         const unsigned char *input, unsigned char *output );\r
97 #endif\r
98 \r
99     /** Set key for encryption purposes */\r
100     int (*setkey_enc_func)( void *ctx, const unsigned char *key,\r
101                             unsigned int key_bitlen );\r
102 \r
103     /** Set key for decryption purposes */\r
104     int (*setkey_dec_func)( void *ctx, const unsigned char *key,\r
105                             unsigned int key_bitlen);\r
106 \r
107     /** Allocate a new context */\r
108     void * (*ctx_alloc_func)( void );\r
109 \r
110     /** Free the given context */\r
111     void (*ctx_free_func)( void *ctx );\r
112 \r
113 };\r
114 \r
115 typedef struct\r
116 {\r
117     mbedtls_cipher_type_t type;\r
118     const mbedtls_cipher_info_t *info;\r
119 } mbedtls_cipher_definition_t;\r
120 \r
121 #if defined(MBEDTLS_USE_PSA_CRYPTO)\r
122 typedef enum\r
123 {\r
124     MBEDTLS_CIPHER_PSA_KEY_UNSET = 0,\r
125     MBEDTLS_CIPHER_PSA_KEY_OWNED, /* Used for PSA-based cipher contexts which */\r
126                                   /* use raw key material internally imported */\r
127                                   /* into a allocated key slot, and which     */\r
128                                   /* hence need to destroy that key slot      */\r
129                                   /* when they are no longer needed.          */\r
130     MBEDTLS_CIPHER_PSA_KEY_NOT_OWNED, /* Used for PSA-based cipher contexts   */\r
131                                       /* which use a key from a key slot      */\r
132                                       /* provided by the user, and which      */\r
133                                       /* hence should not be destroyed when   */\r
134                                       /* the context is no longer needed.     */\r
135 } mbedtls_cipher_psa_key_ownership;\r
136 \r
137 typedef struct\r
138 {\r
139     psa_algorithm_t alg;\r
140     psa_key_handle_t slot;\r
141     mbedtls_cipher_psa_key_ownership slot_state;\r
142 } mbedtls_cipher_context_psa;\r
143 #endif /* MBEDTLS_USE_PSA_CRYPTO */\r
144 \r
145 extern const mbedtls_cipher_definition_t mbedtls_cipher_definitions[];\r
146 \r
147 extern int mbedtls_cipher_supported[];\r
148 \r
149 #ifdef __cplusplus\r
150 }\r
151 #endif\r
152 \r
153 #endif /* MBEDTLS_CIPHER_WRAP_H */\r