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 The Mbed TLS Contributors 10 * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 11 * 12 * This file is provided under the Apache License 2.0, or the 13 * GNU General Public License v2.0 or later. 14 * 15 * ********** 16 * Apache License 2.0: 17 * 18 * Licensed under the Apache License, Version 2.0 (the "License"); you may 19 * not use this file except in compliance with the License. 20 * You may obtain a copy of the License at 21 * 22 * http://www.apache.org/licenses/LICENSE-2.0 23 * 24 * Unless required by applicable law or agreed to in writing, software 25 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 26 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 27 * See the License for the specific language governing permissions and 28 * limitations under the License. 29 * 30 * ********** 31 * 32 * ********** 33 * GNU General Public License v2.0 or later: 34 * 35 * This program is free software; you can redistribute it and/or modify 36 * it under the terms of the GNU General Public License as published by 37 * the Free Software Foundation; either version 2 of the License, or 38 * (at your option) any later version. 39 * 40 * This program is distributed in the hope that it will be useful, 41 * but WITHOUT ANY WARRANTY; without even the implied warranty of 42 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 43 * GNU General Public License for more details. 44 * 45 * You should have received a copy of the GNU General Public License along 46 * with this program; if not, write to the Free Software Foundation, Inc., 47 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 48 * 49 * ********** 50 */ 51 #ifndef MBEDTLS_CIPHER_WRAP_H 52 #define MBEDTLS_CIPHER_WRAP_H 53 54 #if !defined(MBEDTLS_CONFIG_FILE) 55 #include "config.h" 56 #else 57 #include MBEDTLS_CONFIG_FILE 58 #endif 59 60 #include "cipher.h" 61 62 #ifdef __cplusplus 63 extern "C" { 64 #endif 65 66 /** 67 * Base cipher information. The non-mode specific functions and values. 68 */ 69 struct mbedtls_cipher_base_t 70 { 71 /** Base Cipher type (e.g. MBEDTLS_CIPHER_ID_AES) */ 72 mbedtls_cipher_id_t cipher; 73 74 /** Encrypt using ECB */ 75 int (*ecb_func)( void *ctx, mbedtls_operation_t mode, 76 const unsigned char *input, unsigned char *output ); 77 78 #if defined(MBEDTLS_CIPHER_MODE_CBC) 79 /** Encrypt using CBC */ 80 int (*cbc_func)( void *ctx, mbedtls_operation_t mode, size_t length, 81 unsigned char *iv, const unsigned char *input, 82 unsigned char *output ); 83 #endif 84 85 #if defined(MBEDTLS_CIPHER_MODE_CFB) 86 /** Encrypt using CFB (Full length) */ 87 int (*cfb_func)( void *ctx, mbedtls_operation_t mode, size_t length, size_t *iv_off, 88 unsigned char *iv, const unsigned char *input, 89 unsigned char *output ); 90 #endif 91 92 #if defined(MBEDTLS_CIPHER_MODE_OFB) 93 /** Encrypt using OFB (Full length) */ 94 int (*ofb_func)( void *ctx, size_t length, size_t *iv_off, 95 unsigned char *iv, 96 const unsigned char *input, 97 unsigned char *output ); 98 #endif 99 100 #if defined(MBEDTLS_CIPHER_MODE_CTR) 101 /** Encrypt using CTR */ 102 int (*ctr_func)( void *ctx, size_t length, size_t *nc_off, 103 unsigned char *nonce_counter, unsigned char *stream_block, 104 const unsigned char *input, unsigned char *output ); 105 #endif 106 107 #if defined(MBEDTLS_CIPHER_MODE_XTS) 108 /** Encrypt or decrypt using XTS. */ 109 int (*xts_func)( void *ctx, mbedtls_operation_t mode, size_t length, 110 const unsigned char data_unit[16], 111 const unsigned char *input, unsigned char *output ); 112 #endif 113 114 #if defined(MBEDTLS_CIPHER_MODE_STREAM) 115 /** Encrypt using STREAM */ 116 int (*stream_func)( void *ctx, size_t length, 117 const unsigned char *input, unsigned char *output ); 118 #endif 119 120 /** Set key for encryption purposes */ 121 int (*setkey_enc_func)( void *ctx, const unsigned char *key, 122 unsigned int key_bitlen ); 123 124 /** Set key for decryption purposes */ 125 int (*setkey_dec_func)( void *ctx, const unsigned char *key, 126 unsigned int key_bitlen); 127 128 /** Allocate a new context */ 129 void * (*ctx_alloc_func)( void ); 130 131 /** Free the given context */ 132 void (*ctx_free_func)( void *ctx ); 133 134 }; 135 136 typedef struct 137 { 138 mbedtls_cipher_type_t type; 139 const mbedtls_cipher_info_t *info; 140 } mbedtls_cipher_definition_t; 141 142 extern const mbedtls_cipher_definition_t mbedtls_cipher_definitions[]; 143 144 extern int mbedtls_cipher_supported[]; 145 146 #ifdef __cplusplus 147 } 148 #endif 149 150 #endif /* MBEDTLS_CIPHER_WRAP_H */ 151