Path: blob/master/thirdparty/mbedtls/library/cipher_wrap.h
9903 views
/**1* \file cipher_wrap.h2*3* \brief Cipher wrappers.4*5* \author Adriaan de Jong <[email protected]>6*/7/*8* Copyright The Mbed TLS Contributors9* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later10*/11#ifndef MBEDTLS_CIPHER_WRAP_H12#define MBEDTLS_CIPHER_WRAP_H1314#include "mbedtls/build_info.h"1516#include "mbedtls/cipher.h"1718#if defined(MBEDTLS_USE_PSA_CRYPTO)19#include "psa/crypto.h"20#endif /* MBEDTLS_USE_PSA_CRYPTO */2122#ifdef __cplusplus23extern "C" {24#endif2526/* Support for GCM either through Mbed TLS SW implementation or PSA */27#if defined(MBEDTLS_GCM_C) || \28(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_GCM))29#define MBEDTLS_CIPHER_HAVE_GCM_VIA_LEGACY_OR_USE_PSA30#endif3132#if (defined(MBEDTLS_GCM_C) && defined(MBEDTLS_AES_C)) || \33(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_GCM) && defined(PSA_WANT_KEY_TYPE_AES))34#define MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA35#endif3637#if defined(MBEDTLS_CCM_C) || \38(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_CCM))39#define MBEDTLS_CIPHER_HAVE_CCM_VIA_LEGACY_OR_USE_PSA40#endif4142#if (defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C)) || \43(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_CCM) && defined(PSA_WANT_KEY_TYPE_AES))44#define MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA45#endif4647#if defined(MBEDTLS_CCM_C) || \48(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_CCM_STAR_NO_TAG))49#define MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG_VIA_LEGACY_OR_USE_PSA50#endif5152#if (defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C)) || \53(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_CCM_STAR_NO_TAG) && \54defined(PSA_WANT_KEY_TYPE_AES))55#define MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG_AES_VIA_LEGACY_OR_USE_PSA56#endif5758#if defined(MBEDTLS_CHACHAPOLY_C) || \59(defined(MBEDTLS_USE_PSA_CRYPTO) && defined(PSA_WANT_ALG_CHACHA20_POLY1305))60#define MBEDTLS_CIPHER_HAVE_CHACHAPOLY_VIA_LEGACY_OR_USE_PSA61#endif6263#if defined(MBEDTLS_CIPHER_HAVE_GCM_VIA_LEGACY_OR_USE_PSA) || \64defined(MBEDTLS_CIPHER_HAVE_CCM_VIA_LEGACY_OR_USE_PSA) || \65defined(MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG_VIA_LEGACY_OR_USE_PSA) || \66defined(MBEDTLS_CIPHER_HAVE_CHACHAPOLY_VIA_LEGACY_OR_USE_PSA)67#define MBEDTLS_CIPHER_HAVE_SOME_AEAD_VIA_LEGACY_OR_USE_PSA68#endif6970/**71* Base cipher information. The non-mode specific functions and values.72*/73struct mbedtls_cipher_base_t {74/** Base Cipher type (e.g. MBEDTLS_CIPHER_ID_AES) */75mbedtls_cipher_id_t cipher;7677/** Encrypt using ECB */78int (*ecb_func)(void *ctx, mbedtls_operation_t mode,79const unsigned char *input, unsigned char *output);8081#if defined(MBEDTLS_CIPHER_MODE_CBC)82/** Encrypt using CBC */83int (*cbc_func)(void *ctx, mbedtls_operation_t mode, size_t length,84unsigned char *iv, const unsigned char *input,85unsigned char *output);86#endif8788#if defined(MBEDTLS_CIPHER_MODE_CFB)89/** Encrypt using CFB (Full length) */90int (*cfb_func)(void *ctx, mbedtls_operation_t mode, size_t length, size_t *iv_off,91unsigned char *iv, const unsigned char *input,92unsigned char *output);93#endif9495#if defined(MBEDTLS_CIPHER_MODE_OFB)96/** Encrypt using OFB (Full length) */97int (*ofb_func)(void *ctx, size_t length, size_t *iv_off,98unsigned char *iv,99const unsigned char *input,100unsigned char *output);101#endif102103#if defined(MBEDTLS_CIPHER_MODE_CTR)104/** Encrypt using CTR */105int (*ctr_func)(void *ctx, size_t length, size_t *nc_off,106unsigned char *nonce_counter, unsigned char *stream_block,107const unsigned char *input, unsigned char *output);108#endif109110#if defined(MBEDTLS_CIPHER_MODE_XTS)111/** Encrypt or decrypt using XTS. */112int (*xts_func)(void *ctx, mbedtls_operation_t mode, size_t length,113const unsigned char data_unit[16],114const unsigned char *input, unsigned char *output);115#endif116117#if defined(MBEDTLS_CIPHER_MODE_STREAM)118/** Encrypt using STREAM */119int (*stream_func)(void *ctx, size_t length,120const unsigned char *input, unsigned char *output);121#endif122123/** Set key for encryption purposes */124int (*setkey_enc_func)(void *ctx, const unsigned char *key,125unsigned int key_bitlen);126127#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)128/** Set key for decryption purposes */129int (*setkey_dec_func)(void *ctx, const unsigned char *key,130unsigned int key_bitlen);131#endif132133/** Allocate a new context */134void * (*ctx_alloc_func)(void);135136/** Free the given context */137void (*ctx_free_func)(void *ctx);138139};140141typedef struct {142mbedtls_cipher_type_t type;143const mbedtls_cipher_info_t *info;144} mbedtls_cipher_definition_t;145146#if defined(MBEDTLS_USE_PSA_CRYPTO)147typedef enum {148MBEDTLS_CIPHER_PSA_KEY_UNSET = 0,149MBEDTLS_CIPHER_PSA_KEY_OWNED, /* Used for PSA-based cipher contexts which */150/* use raw key material internally imported */151/* as a volatile key, and which hence need */152/* to destroy that key when the context is */153/* freed. */154MBEDTLS_CIPHER_PSA_KEY_NOT_OWNED, /* Used for PSA-based cipher contexts */155/* which use a key provided by the */156/* user, and which hence will not be */157/* destroyed when the context is freed. */158} mbedtls_cipher_psa_key_ownership;159160typedef struct {161psa_algorithm_t alg;162mbedtls_svc_key_id_t slot;163mbedtls_cipher_psa_key_ownership slot_state;164} mbedtls_cipher_context_psa;165#endif /* MBEDTLS_USE_PSA_CRYPTO */166167extern const mbedtls_cipher_definition_t mbedtls_cipher_definitions[];168169extern int mbedtls_cipher_supported[];170171extern const mbedtls_cipher_base_t * const mbedtls_cipher_base_lookup_table[];172173#ifdef __cplusplus174}175#endif176177#endif /* MBEDTLS_CIPHER_WRAP_H */178179180