blob: 49f5ff149305483c946c3d1376e61558f3338284 [file] [log] [blame]
Jens Wiklander817466c2018-05-22 13:49:31 +02001/**
Jens Wiklander32b31802023-10-06 16:59:46 +02002 * \file cipher_wrap.h
Jens Wiklander817466c2018-05-22 13:49:31 +02003 *
4 * \brief Cipher wrappers.
5 *
6 * \author Adriaan de Jong <dejong@fox-it.com>
Jens Wiklander3d3b0592019-03-20 15:30:29 +01007 */
8/*
Jerome Forissier79013242021-07-28 10:24:04 +02009 * Copyright The Mbed TLS Contributors
10 * SPDX-License-Identifier: Apache-2.0
Jens Wiklander817466c2018-05-22 13:49:31 +020011 *
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.
Jens Wiklander817466c2018-05-22 13:49:31 +020023 */
24#ifndef MBEDTLS_CIPHER_WRAP_H
25#define MBEDTLS_CIPHER_WRAP_H
26
Jens Wiklander32b31802023-10-06 16:59:46 +020027#include "mbedtls/build_info.h"
Jens Wiklander817466c2018-05-22 13:49:31 +020028
Jerome Forissier11fa71b2020-04-20 17:17:56 +020029#include "mbedtls/cipher.h"
30
31#if defined(MBEDTLS_USE_PSA_CRYPTO)
32#include "psa/crypto.h"
33#endif /* MBEDTLS_USE_PSA_CRYPTO */
Jens Wiklander817466c2018-05-22 13:49:31 +020034
35#ifdef __cplusplus
36extern "C" {
37#endif
38
39/**
40 * Base cipher information. The non-mode specific functions and values.
41 */
Jens Wiklander32b31802023-10-06 16:59:46 +020042struct mbedtls_cipher_base_t {
Jens Wiklander817466c2018-05-22 13:49:31 +020043 /** Base Cipher type (e.g. MBEDTLS_CIPHER_ID_AES) */
44 mbedtls_cipher_id_t cipher;
45
46 /** Encrypt using ECB */
Jens Wiklander32b31802023-10-06 16:59:46 +020047 int (*ecb_func)(void *ctx, mbedtls_operation_t mode,
48 const unsigned char *input, unsigned char *output);
Jens Wiklander817466c2018-05-22 13:49:31 +020049
50#if defined(MBEDTLS_CIPHER_MODE_CBC)
51 /** Encrypt using CBC */
Jens Wiklander32b31802023-10-06 16:59:46 +020052 int (*cbc_func)(void *ctx, mbedtls_operation_t mode, size_t length,
53 unsigned char *iv, const unsigned char *input,
54 unsigned char *output);
Jens Wiklander817466c2018-05-22 13:49:31 +020055#endif
56
57#if defined(MBEDTLS_CIPHER_MODE_CFB)
58 /** Encrypt using CFB (Full length) */
Jens Wiklander32b31802023-10-06 16:59:46 +020059 int (*cfb_func)(void *ctx, mbedtls_operation_t mode, size_t length, size_t *iv_off,
60 unsigned char *iv, const unsigned char *input,
61 unsigned char *output);
Jens Wiklander817466c2018-05-22 13:49:31 +020062#endif
63
Jens Wiklander3d3b0592019-03-20 15:30:29 +010064#if defined(MBEDTLS_CIPHER_MODE_OFB)
65 /** Encrypt using OFB (Full length) */
Jens Wiklander32b31802023-10-06 16:59:46 +020066 int (*ofb_func)(void *ctx, size_t length, size_t *iv_off,
67 unsigned char *iv,
68 const unsigned char *input,
69 unsigned char *output);
Jens Wiklander3d3b0592019-03-20 15:30:29 +010070#endif
71
Jens Wiklander817466c2018-05-22 13:49:31 +020072#if defined(MBEDTLS_CIPHER_MODE_CTR)
73 /** Encrypt using CTR */
Jens Wiklander32b31802023-10-06 16:59:46 +020074 int (*ctr_func)(void *ctx, size_t length, size_t *nc_off,
75 unsigned char *nonce_counter, unsigned char *stream_block,
76 const unsigned char *input, unsigned char *output);
Jens Wiklander817466c2018-05-22 13:49:31 +020077#endif
78
Jens Wiklander3d3b0592019-03-20 15:30:29 +010079#if defined(MBEDTLS_CIPHER_MODE_XTS)
80 /** Encrypt or decrypt using XTS. */
Jens Wiklander32b31802023-10-06 16:59:46 +020081 int (*xts_func)(void *ctx, mbedtls_operation_t mode, size_t length,
82 const unsigned char data_unit[16],
83 const unsigned char *input, unsigned char *output);
Jens Wiklander3d3b0592019-03-20 15:30:29 +010084#endif
85
Jens Wiklander817466c2018-05-22 13:49:31 +020086#if defined(MBEDTLS_CIPHER_MODE_STREAM)
87 /** Encrypt using STREAM */
Jens Wiklander32b31802023-10-06 16:59:46 +020088 int (*stream_func)(void *ctx, size_t length,
89 const unsigned char *input, unsigned char *output);
Jens Wiklander817466c2018-05-22 13:49:31 +020090#endif
91
92 /** Set key for encryption purposes */
Jens Wiklander32b31802023-10-06 16:59:46 +020093 int (*setkey_enc_func)(void *ctx, const unsigned char *key,
94 unsigned int key_bitlen);
Jens Wiklander817466c2018-05-22 13:49:31 +020095
96 /** Set key for decryption purposes */
Jens Wiklander32b31802023-10-06 16:59:46 +020097 int (*setkey_dec_func)(void *ctx, const unsigned char *key,
98 unsigned int key_bitlen);
Jens Wiklander817466c2018-05-22 13:49:31 +020099
100 /** Allocate a new context */
Jens Wiklander32b31802023-10-06 16:59:46 +0200101 void * (*ctx_alloc_func)(void);
Jens Wiklander817466c2018-05-22 13:49:31 +0200102
Edison Ai12484fc2018-12-19 15:36:28 +0800103 /** Clone context **/
104 void (*ctx_clone_func)( void *dst, const void *src );
105
Jens Wiklander817466c2018-05-22 13:49:31 +0200106 /** Free the given context */
Jens Wiklander32b31802023-10-06 16:59:46 +0200107 void (*ctx_free_func)(void *ctx);
Jens Wiklander817466c2018-05-22 13:49:31 +0200108
109};
110
Jens Wiklander32b31802023-10-06 16:59:46 +0200111typedef struct {
Jens Wiklander817466c2018-05-22 13:49:31 +0200112 mbedtls_cipher_type_t type;
113 const mbedtls_cipher_info_t *info;
114} mbedtls_cipher_definition_t;
115
Jerome Forissier11fa71b2020-04-20 17:17:56 +0200116#if defined(MBEDTLS_USE_PSA_CRYPTO)
Jens Wiklander32b31802023-10-06 16:59:46 +0200117typedef enum {
Jerome Forissier11fa71b2020-04-20 17:17:56 +0200118 MBEDTLS_CIPHER_PSA_KEY_UNSET = 0,
119 MBEDTLS_CIPHER_PSA_KEY_OWNED, /* Used for PSA-based cipher contexts which */
120 /* use raw key material internally imported */
121 /* as a volatile key, and which hence need */
122 /* to destroy that key when the context is */
123 /* freed. */
124 MBEDTLS_CIPHER_PSA_KEY_NOT_OWNED, /* Used for PSA-based cipher contexts */
125 /* which use a key provided by the */
126 /* user, and which hence will not be */
127 /* destroyed when the context is freed. */
128} mbedtls_cipher_psa_key_ownership;
129
Jens Wiklander32b31802023-10-06 16:59:46 +0200130typedef struct {
Jerome Forissier11fa71b2020-04-20 17:17:56 +0200131 psa_algorithm_t alg;
Jens Wiklander32b31802023-10-06 16:59:46 +0200132 mbedtls_svc_key_id_t slot;
Jerome Forissier11fa71b2020-04-20 17:17:56 +0200133 mbedtls_cipher_psa_key_ownership slot_state;
134} mbedtls_cipher_context_psa;
135#endif /* MBEDTLS_USE_PSA_CRYPTO */
136
Jens Wiklander817466c2018-05-22 13:49:31 +0200137extern const mbedtls_cipher_definition_t mbedtls_cipher_definitions[];
138
139extern int mbedtls_cipher_supported[];
140
141#ifdef __cplusplus
142}
143#endif
144
145#endif /* MBEDTLS_CIPHER_WRAP_H */