1 /**
2  * \file cipher_internal.h
3  *
4  * \brief Cipher wrappers.
5  *
6  * \author Adriaan de Jong <dejong@fox-it.com>
7  */
8 /*
9  *  Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
10  *  SPDX-License-Identifier: Apache-2.0
11  *
12  *  Licensed under the Apache License, Version 2.0 (the "License"); you may
13  *  not use this file except in compliance with the License.
14  *  You may obtain a copy of the License at
15  *
16  *  http://www.apache.org/licenses/LICENSE-2.0
17  *
18  *  Unless required by applicable law or agreed to in writing, software
19  *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
20  *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21  *  See the License for the specific language governing permissions and
22  *  limitations under the License.
23  *
24  *  This file is part of mbed TLS (https://tls.mbed.org)
25  */
26 #ifndef MBEDTLS_CIPHER_WRAP_H
27 #define MBEDTLS_CIPHER_WRAP_H
28 
29 #if !defined(MBEDTLS_CONFIG_FILE)
30 #include "config.h"
31 #else
32 #include MBEDTLS_CONFIG_FILE
33 #endif
34 
35 #include "cipher.h"
36 
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40 
41 /**
42  * Base cipher information. The non-mode specific functions and values.
43  */
44 struct mbedtls_cipher_base_t
45 {
46     /** Base Cipher type (e.g. MBEDTLS_CIPHER_ID_AES) */
47     mbedtls_cipher_id_t cipher;
48 
49     /** Encrypt using ECB */
50     int (*ecb_func)( void *ctx, mbedtls_operation_t mode,
51                      const unsigned char *input, unsigned char *output );
52 
53 #if defined(MBEDTLS_CIPHER_MODE_CBC)
54     /** Encrypt using CBC */
55     int (*cbc_func)( void *ctx, mbedtls_operation_t mode, size_t length,
56                      unsigned char *iv, const unsigned char *input,
57                      unsigned char *output );
58 #endif
59 
60 #if defined(MBEDTLS_CIPHER_MODE_CFB)
61     /** Encrypt using CFB (Full length) */
62     int (*cfb_func)( void *ctx, mbedtls_operation_t mode, size_t length, size_t *iv_off,
63                      unsigned char *iv, const unsigned char *input,
64                      unsigned char *output );
65 #endif
66 
67 #if defined(MBEDTLS_CIPHER_MODE_OFB)
68     /** Encrypt using OFB (Full length) */
69     int (*ofb_func)( void *ctx, size_t length, size_t *iv_off,
70                      unsigned char *iv,
71                      const unsigned char *input,
72                      unsigned char *output );
73 #endif
74 
75 #if defined(MBEDTLS_CIPHER_MODE_CTR)
76     /** Encrypt using CTR */
77     int (*ctr_func)( void *ctx, size_t length, size_t *nc_off,
78                      unsigned char *nonce_counter, unsigned char *stream_block,
79                      const unsigned char *input, unsigned char *output );
80 #endif
81 
82 #if defined(MBEDTLS_CIPHER_MODE_XTS)
83     /** Encrypt or decrypt using XTS. */
84     int (*xts_func)( void *ctx, mbedtls_operation_t mode, size_t length,
85                      const unsigned char data_unit[16],
86                      const unsigned char *input, unsigned char *output );
87 #endif
88 
89 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
90     /** Encrypt using STREAM */
91     int (*stream_func)( void *ctx, size_t length,
92                         const unsigned char *input, unsigned char *output );
93 #endif
94 
95     /** Set key for encryption purposes */
96     int (*setkey_enc_func)( void *ctx, const unsigned char *key,
97                             unsigned int key_bitlen );
98 
99     /** Set key for decryption purposes */
100     int (*setkey_dec_func)( void *ctx, const unsigned char *key,
101                             unsigned int key_bitlen);
102 
103     /** Allocate a new context */
104     void * (*ctx_alloc_func)( void );
105 
106     /** Free the given context */
107     void (*ctx_free_func)( void *ctx );
108 
109 };
110 
111 typedef struct
112 {
113     mbedtls_cipher_type_t type;
114     const mbedtls_cipher_info_t *info;
115 } mbedtls_cipher_definition_t;
116 
117 extern const mbedtls_cipher_definition_t mbedtls_cipher_definitions[];
118 
119 extern int mbedtls_cipher_supported[];
120 
121 #ifdef __cplusplus
122 }
123 #endif
124 
125 #endif /* MBEDTLS_CIPHER_WRAP_H */
126