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