Path: blob/master/thirdparty/mbedtls/library/cipher_wrap.c
9898 views
/**1* \file cipher_wrap.c2*3* \brief Generic cipher wrapper for Mbed TLS4*5* \author Adriaan de Jong <[email protected]>6*7* Copyright The Mbed TLS Contributors8* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later9*/1011#include "common.h"1213#if defined(MBEDTLS_CIPHER_C)1415#include "cipher_wrap.h"16#include "mbedtls/error.h"1718#if defined(MBEDTLS_CHACHAPOLY_C)19#include "mbedtls/chachapoly.h"20#endif2122#if defined(MBEDTLS_AES_C)23#include "mbedtls/aes.h"24#endif2526#if defined(MBEDTLS_CAMELLIA_C)27#include "mbedtls/camellia.h"28#endif2930#if defined(MBEDTLS_ARIA_C)31#include "mbedtls/aria.h"32#endif3334#if defined(MBEDTLS_DES_C)35#include "mbedtls/des.h"36#endif3738#if defined(MBEDTLS_CHACHA20_C)39#include "mbedtls/chacha20.h"40#endif4142#if defined(MBEDTLS_GCM_C)43#include "mbedtls/gcm.h"44#endif4546#if defined(MBEDTLS_CCM_C)47#include "mbedtls/ccm.h"48#endif4950#if defined(MBEDTLS_NIST_KW_C)51#include "mbedtls/nist_kw.h"52#endif5354#if defined(MBEDTLS_CIPHER_NULL_CIPHER)55#include <string.h>56#endif5758#include "mbedtls/platform.h"5960enum mbedtls_cipher_base_index {61#if defined(MBEDTLS_AES_C)62MBEDTLS_CIPHER_BASE_INDEX_AES,63#endif64#if defined(MBEDTLS_ARIA_C)65MBEDTLS_CIPHER_BASE_INDEX_ARIA,66#endif67#if defined(MBEDTLS_CAMELLIA_C)68MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,69#endif70#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)71MBEDTLS_CIPHER_BASE_INDEX_CCM_AES,72#endif73#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)74MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA,75#endif76#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)77MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA,78#endif79#if defined(MBEDTLS_CHACHA20_C)80MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE,81#endif82#if defined(MBEDTLS_CHACHAPOLY_C)83MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE,84#endif85#if defined(MBEDTLS_DES_C)86MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3,87#endif88#if defined(MBEDTLS_DES_C)89MBEDTLS_CIPHER_BASE_INDEX_DES_EDE,90#endif91#if defined(MBEDTLS_DES_C)92MBEDTLS_CIPHER_BASE_INDEX_DES,93#endif94#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)95MBEDTLS_CIPHER_BASE_INDEX_GCM_AES,96#endif97#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)98MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA,99#endif100#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)101MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA,102#endif103#if defined(MBEDTLS_NIST_KW_C)104MBEDTLS_CIPHER_BASE_INDEX_KW_AES,105#endif106#if defined(MBEDTLS_CIPHER_NULL_CIPHER)107MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE,108#endif109#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)110MBEDTLS_CIPHER_BASE_INDEX_XTS_AES,111#endif112/* Prevent compile failure due to empty enum */113MBEDTLS_CIPHER_BASE_PREVENT_EMPTY_ENUM114};115116#if defined(MBEDTLS_GCM_C) && \117(defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA) || \118defined(MBEDTLS_ARIA_C) || defined(MBEDTLS_CAMELLIA_C))119/* shared by all GCM ciphers */120static void *gcm_ctx_alloc(void)121{122void *ctx = mbedtls_calloc(1, sizeof(mbedtls_gcm_context));123124if (ctx != NULL) {125mbedtls_gcm_init((mbedtls_gcm_context *) ctx);126}127128return ctx;129}130131static void gcm_ctx_free(void *ctx)132{133mbedtls_gcm_free(ctx);134mbedtls_free(ctx);135}136#endif /* MBEDTLS_GCM_C */137138#if defined(MBEDTLS_CCM_C) && \139(defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA) || \140defined(MBEDTLS_ARIA_C) || defined(MBEDTLS_CAMELLIA_C))141/* shared by all CCM ciphers */142static void *ccm_ctx_alloc(void)143{144void *ctx = mbedtls_calloc(1, sizeof(mbedtls_ccm_context));145146if (ctx != NULL) {147mbedtls_ccm_init((mbedtls_ccm_context *) ctx);148}149150return ctx;151}152153static void ccm_ctx_free(void *ctx)154{155mbedtls_ccm_free(ctx);156mbedtls_free(ctx);157}158#endif /* MBEDTLS_CCM_C */159160#if defined(MBEDTLS_AES_C)161162static int aes_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,163const unsigned char *input, unsigned char *output)164{165return mbedtls_aes_crypt_ecb((mbedtls_aes_context *) ctx, operation, input, output);166}167168#if defined(MBEDTLS_CIPHER_MODE_CBC)169static int aes_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,170unsigned char *iv, const unsigned char *input, unsigned char *output)171{172return mbedtls_aes_crypt_cbc((mbedtls_aes_context *) ctx, operation, length, iv, input,173output);174}175#endif /* MBEDTLS_CIPHER_MODE_CBC */176177#if defined(MBEDTLS_CIPHER_MODE_CFB)178static int aes_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,179size_t length, size_t *iv_off, unsigned char *iv,180const unsigned char *input, unsigned char *output)181{182return mbedtls_aes_crypt_cfb128((mbedtls_aes_context *) ctx, operation, length, iv_off, iv,183input, output);184}185#endif /* MBEDTLS_CIPHER_MODE_CFB */186187#if defined(MBEDTLS_CIPHER_MODE_OFB)188static int aes_crypt_ofb_wrap(void *ctx, size_t length, size_t *iv_off,189unsigned char *iv, const unsigned char *input, unsigned char *output)190{191return mbedtls_aes_crypt_ofb((mbedtls_aes_context *) ctx, length, iv_off,192iv, input, output);193}194#endif /* MBEDTLS_CIPHER_MODE_OFB */195196#if defined(MBEDTLS_CIPHER_MODE_CTR)197static int aes_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,198unsigned char *nonce_counter, unsigned char *stream_block,199const unsigned char *input, unsigned char *output)200{201return mbedtls_aes_crypt_ctr((mbedtls_aes_context *) ctx, length, nc_off, nonce_counter,202stream_block, input, output);203}204#endif /* MBEDTLS_CIPHER_MODE_CTR */205206#if defined(MBEDTLS_CIPHER_MODE_XTS)207static int aes_crypt_xts_wrap(void *ctx, mbedtls_operation_t operation,208size_t length,209const unsigned char data_unit[16],210const unsigned char *input,211unsigned char *output)212{213mbedtls_aes_xts_context *xts_ctx = ctx;214int mode;215216switch (operation) {217case MBEDTLS_ENCRYPT:218mode = MBEDTLS_AES_ENCRYPT;219break;220case MBEDTLS_DECRYPT:221mode = MBEDTLS_AES_DECRYPT;222break;223default:224return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;225}226227return mbedtls_aes_crypt_xts(xts_ctx, mode, length,228data_unit, input, output);229}230#endif /* MBEDTLS_CIPHER_MODE_XTS */231232#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)233static int aes_setkey_dec_wrap(void *ctx, const unsigned char *key,234unsigned int key_bitlen)235{236return mbedtls_aes_setkey_dec((mbedtls_aes_context *) ctx, key, key_bitlen);237}238#endif239240static int aes_setkey_enc_wrap(void *ctx, const unsigned char *key,241unsigned int key_bitlen)242{243return mbedtls_aes_setkey_enc((mbedtls_aes_context *) ctx, key, key_bitlen);244}245246static void *aes_ctx_alloc(void)247{248mbedtls_aes_context *aes = mbedtls_calloc(1, sizeof(mbedtls_aes_context));249250if (aes == NULL) {251return NULL;252}253254mbedtls_aes_init(aes);255256return aes;257}258259static void aes_ctx_free(void *ctx)260{261mbedtls_aes_free((mbedtls_aes_context *) ctx);262mbedtls_free(ctx);263}264265static const mbedtls_cipher_base_t aes_info = {266MBEDTLS_CIPHER_ID_AES,267aes_crypt_ecb_wrap,268#if defined(MBEDTLS_CIPHER_MODE_CBC)269aes_crypt_cbc_wrap,270#endif271#if defined(MBEDTLS_CIPHER_MODE_CFB)272aes_crypt_cfb128_wrap,273#endif274#if defined(MBEDTLS_CIPHER_MODE_OFB)275aes_crypt_ofb_wrap,276#endif277#if defined(MBEDTLS_CIPHER_MODE_CTR)278aes_crypt_ctr_wrap,279#endif280#if defined(MBEDTLS_CIPHER_MODE_XTS)281NULL,282#endif283#if defined(MBEDTLS_CIPHER_MODE_STREAM)284NULL,285#endif286aes_setkey_enc_wrap,287#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)288aes_setkey_dec_wrap,289#endif290aes_ctx_alloc,291aes_ctx_free292};293294static const mbedtls_cipher_info_t aes_128_ecb_info = {295"AES-128-ECB",29616,2970 >> MBEDTLS_IV_SIZE_SHIFT,298128 >> MBEDTLS_KEY_BITLEN_SHIFT,299MBEDTLS_MODE_ECB,300MBEDTLS_CIPHER_AES_128_ECB,3010,302MBEDTLS_CIPHER_BASE_INDEX_AES303};304305#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)306static const mbedtls_cipher_info_t aes_192_ecb_info = {307"AES-192-ECB",30816,3090 >> MBEDTLS_IV_SIZE_SHIFT,310192 >> MBEDTLS_KEY_BITLEN_SHIFT,311MBEDTLS_MODE_ECB,312MBEDTLS_CIPHER_AES_192_ECB,3130,314MBEDTLS_CIPHER_BASE_INDEX_AES315};316317static const mbedtls_cipher_info_t aes_256_ecb_info = {318"AES-256-ECB",31916,3200 >> MBEDTLS_IV_SIZE_SHIFT,321256 >> MBEDTLS_KEY_BITLEN_SHIFT,322MBEDTLS_MODE_ECB,323MBEDTLS_CIPHER_AES_256_ECB,3240,325MBEDTLS_CIPHER_BASE_INDEX_AES326};327#endif328329#if defined(MBEDTLS_CIPHER_MODE_CBC)330static const mbedtls_cipher_info_t aes_128_cbc_info = {331"AES-128-CBC",33216,33316 >> MBEDTLS_IV_SIZE_SHIFT,334128 >> MBEDTLS_KEY_BITLEN_SHIFT,335MBEDTLS_MODE_CBC,336MBEDTLS_CIPHER_AES_128_CBC,3370,338MBEDTLS_CIPHER_BASE_INDEX_AES339};340341#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)342static const mbedtls_cipher_info_t aes_192_cbc_info = {343"AES-192-CBC",34416,34516 >> MBEDTLS_IV_SIZE_SHIFT,346192 >> MBEDTLS_KEY_BITLEN_SHIFT,347MBEDTLS_MODE_CBC,348MBEDTLS_CIPHER_AES_192_CBC,3490,350MBEDTLS_CIPHER_BASE_INDEX_AES351};352353static const mbedtls_cipher_info_t aes_256_cbc_info = {354"AES-256-CBC",35516,35616 >> MBEDTLS_IV_SIZE_SHIFT,357256 >> MBEDTLS_KEY_BITLEN_SHIFT,358MBEDTLS_MODE_CBC,359MBEDTLS_CIPHER_AES_256_CBC,3600,361MBEDTLS_CIPHER_BASE_INDEX_AES362};363#endif364#endif /* MBEDTLS_CIPHER_MODE_CBC */365366#if defined(MBEDTLS_CIPHER_MODE_CFB)367static const mbedtls_cipher_info_t aes_128_cfb128_info = {368"AES-128-CFB128",36916,37016 >> MBEDTLS_IV_SIZE_SHIFT,371128 >> MBEDTLS_KEY_BITLEN_SHIFT,372MBEDTLS_MODE_CFB,373MBEDTLS_CIPHER_AES_128_CFB128,3740,375MBEDTLS_CIPHER_BASE_INDEX_AES376};377378#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)379static const mbedtls_cipher_info_t aes_192_cfb128_info = {380"AES-192-CFB128",38116,38216 >> MBEDTLS_IV_SIZE_SHIFT,383192 >> MBEDTLS_KEY_BITLEN_SHIFT,384MBEDTLS_MODE_CFB,385MBEDTLS_CIPHER_AES_192_CFB128,3860,387MBEDTLS_CIPHER_BASE_INDEX_AES388};389390static const mbedtls_cipher_info_t aes_256_cfb128_info = {391"AES-256-CFB128",39216,39316 >> MBEDTLS_IV_SIZE_SHIFT,394256 >> MBEDTLS_KEY_BITLEN_SHIFT,395MBEDTLS_MODE_CFB,396MBEDTLS_CIPHER_AES_256_CFB128,3970,398MBEDTLS_CIPHER_BASE_INDEX_AES399};400#endif401#endif /* MBEDTLS_CIPHER_MODE_CFB */402403#if defined(MBEDTLS_CIPHER_MODE_OFB)404static const mbedtls_cipher_info_t aes_128_ofb_info = {405"AES-128-OFB",40616,40716 >> MBEDTLS_IV_SIZE_SHIFT,408128 >> MBEDTLS_KEY_BITLEN_SHIFT,409MBEDTLS_MODE_OFB,410MBEDTLS_CIPHER_AES_128_OFB,4110,412MBEDTLS_CIPHER_BASE_INDEX_AES413};414415#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)416static const mbedtls_cipher_info_t aes_192_ofb_info = {417"AES-192-OFB",41816,41916 >> MBEDTLS_IV_SIZE_SHIFT,420192 >> MBEDTLS_KEY_BITLEN_SHIFT,421MBEDTLS_MODE_OFB,422MBEDTLS_CIPHER_AES_192_OFB,4230,424MBEDTLS_CIPHER_BASE_INDEX_AES425};426427static const mbedtls_cipher_info_t aes_256_ofb_info = {428"AES-256-OFB",42916,43016 >> MBEDTLS_IV_SIZE_SHIFT,431256 >> MBEDTLS_KEY_BITLEN_SHIFT,432MBEDTLS_MODE_OFB,433MBEDTLS_CIPHER_AES_256_OFB,4340,435MBEDTLS_CIPHER_BASE_INDEX_AES436};437#endif438#endif /* MBEDTLS_CIPHER_MODE_OFB */439440#if defined(MBEDTLS_CIPHER_MODE_CTR)441static const mbedtls_cipher_info_t aes_128_ctr_info = {442"AES-128-CTR",44316,44416 >> MBEDTLS_IV_SIZE_SHIFT,445128 >> MBEDTLS_KEY_BITLEN_SHIFT,446MBEDTLS_MODE_CTR,447MBEDTLS_CIPHER_AES_128_CTR,4480,449MBEDTLS_CIPHER_BASE_INDEX_AES450};451452#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)453static const mbedtls_cipher_info_t aes_192_ctr_info = {454"AES-192-CTR",45516,45616 >> MBEDTLS_IV_SIZE_SHIFT,457192 >> MBEDTLS_KEY_BITLEN_SHIFT,458MBEDTLS_MODE_CTR,459MBEDTLS_CIPHER_AES_192_CTR,4600,461MBEDTLS_CIPHER_BASE_INDEX_AES462};463464static const mbedtls_cipher_info_t aes_256_ctr_info = {465"AES-256-CTR",46616,46716 >> MBEDTLS_IV_SIZE_SHIFT,468256 >> MBEDTLS_KEY_BITLEN_SHIFT,469MBEDTLS_MODE_CTR,470MBEDTLS_CIPHER_AES_256_CTR,4710,472MBEDTLS_CIPHER_BASE_INDEX_AES473};474#endif475#endif /* MBEDTLS_CIPHER_MODE_CTR */476477#if defined(MBEDTLS_CIPHER_MODE_XTS)478static int xts_aes_setkey_enc_wrap(void *ctx, const unsigned char *key,479unsigned int key_bitlen)480{481mbedtls_aes_xts_context *xts_ctx = ctx;482return mbedtls_aes_xts_setkey_enc(xts_ctx, key, key_bitlen);483}484485static int xts_aes_setkey_dec_wrap(void *ctx, const unsigned char *key,486unsigned int key_bitlen)487{488mbedtls_aes_xts_context *xts_ctx = ctx;489return mbedtls_aes_xts_setkey_dec(xts_ctx, key, key_bitlen);490}491492static void *xts_aes_ctx_alloc(void)493{494mbedtls_aes_xts_context *xts_ctx = mbedtls_calloc(1, sizeof(*xts_ctx));495496if (xts_ctx != NULL) {497mbedtls_aes_xts_init(xts_ctx);498}499500return xts_ctx;501}502503static void xts_aes_ctx_free(void *ctx)504{505mbedtls_aes_xts_context *xts_ctx = ctx;506507if (xts_ctx == NULL) {508return;509}510511mbedtls_aes_xts_free(xts_ctx);512mbedtls_free(xts_ctx);513}514515static const mbedtls_cipher_base_t xts_aes_info = {516MBEDTLS_CIPHER_ID_AES,517NULL,518#if defined(MBEDTLS_CIPHER_MODE_CBC)519NULL,520#endif521#if defined(MBEDTLS_CIPHER_MODE_CFB)522NULL,523#endif524#if defined(MBEDTLS_CIPHER_MODE_OFB)525NULL,526#endif527#if defined(MBEDTLS_CIPHER_MODE_CTR)528NULL,529#endif530#if defined(MBEDTLS_CIPHER_MODE_XTS)531aes_crypt_xts_wrap,532#endif533#if defined(MBEDTLS_CIPHER_MODE_STREAM)534NULL,535#endif536xts_aes_setkey_enc_wrap,537xts_aes_setkey_dec_wrap,538xts_aes_ctx_alloc,539xts_aes_ctx_free540};541542static const mbedtls_cipher_info_t aes_128_xts_info = {543"AES-128-XTS",54416,54516 >> MBEDTLS_IV_SIZE_SHIFT,546256 >> MBEDTLS_KEY_BITLEN_SHIFT,547MBEDTLS_MODE_XTS,548MBEDTLS_CIPHER_AES_128_XTS,5490,550MBEDTLS_CIPHER_BASE_INDEX_XTS_AES551};552553#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)554static const mbedtls_cipher_info_t aes_256_xts_info = {555"AES-256-XTS",55616,55716 >> MBEDTLS_IV_SIZE_SHIFT,558512 >> MBEDTLS_KEY_BITLEN_SHIFT,559MBEDTLS_MODE_XTS,560MBEDTLS_CIPHER_AES_256_XTS,5610,562MBEDTLS_CIPHER_BASE_INDEX_XTS_AES563};564#endif565#endif /* MBEDTLS_CIPHER_MODE_XTS */566#endif /* MBEDTLS_AES_C */567568#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CCM_GCM_CAN_AES)569static int gcm_aes_setkey_wrap(void *ctx, const unsigned char *key,570unsigned int key_bitlen)571{572return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES,573key, key_bitlen);574}575#endif /* MBEDTLS_GCM_C && MBEDTLS_CCM_GCM_CAN_AES */576577#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)578static const mbedtls_cipher_base_t gcm_aes_info = {579MBEDTLS_CIPHER_ID_AES,580NULL,581#if defined(MBEDTLS_CIPHER_MODE_CBC)582NULL,583#endif584#if defined(MBEDTLS_CIPHER_MODE_CFB)585NULL,586#endif587#if defined(MBEDTLS_CIPHER_MODE_OFB)588NULL,589#endif590#if defined(MBEDTLS_CIPHER_MODE_CTR)591NULL,592#endif593#if defined(MBEDTLS_CIPHER_MODE_XTS)594NULL,595#endif596#if defined(MBEDTLS_CIPHER_MODE_STREAM)597NULL,598#endif599#if defined(MBEDTLS_GCM_C)600gcm_aes_setkey_wrap,601#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)602gcm_aes_setkey_wrap,603#endif604gcm_ctx_alloc,605gcm_ctx_free,606#else607NULL,608NULL,609NULL,610NULL,611#endif /* MBEDTLS_GCM_C */612};613#endif /* MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA */614615#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)616static const mbedtls_cipher_info_t aes_128_gcm_info = {617"AES-128-GCM",61816,61912 >> MBEDTLS_IV_SIZE_SHIFT,620128 >> MBEDTLS_KEY_BITLEN_SHIFT,621MBEDTLS_MODE_GCM,622MBEDTLS_CIPHER_AES_128_GCM,623MBEDTLS_CIPHER_VARIABLE_IV_LEN,624MBEDTLS_CIPHER_BASE_INDEX_GCM_AES625};626627#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)628static const mbedtls_cipher_info_t aes_192_gcm_info = {629"AES-192-GCM",63016,63112 >> MBEDTLS_IV_SIZE_SHIFT,632192 >> MBEDTLS_KEY_BITLEN_SHIFT,633MBEDTLS_MODE_GCM,634MBEDTLS_CIPHER_AES_192_GCM,635MBEDTLS_CIPHER_VARIABLE_IV_LEN,636MBEDTLS_CIPHER_BASE_INDEX_GCM_AES637};638639static const mbedtls_cipher_info_t aes_256_gcm_info = {640"AES-256-GCM",64116,64212 >> MBEDTLS_IV_SIZE_SHIFT,643256 >> MBEDTLS_KEY_BITLEN_SHIFT,644MBEDTLS_MODE_GCM,645MBEDTLS_CIPHER_AES_256_GCM,646MBEDTLS_CIPHER_VARIABLE_IV_LEN,647MBEDTLS_CIPHER_BASE_INDEX_GCM_AES648};649#endif650#endif /* MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA */651652#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CCM_GCM_CAN_AES)653static int ccm_aes_setkey_wrap(void *ctx, const unsigned char *key,654unsigned int key_bitlen)655{656return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES,657key, key_bitlen);658}659#endif /* MBEDTLS_CCM_C && MBEDTLS_CCM_GCM_CAN_AES */660661#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)662static const mbedtls_cipher_base_t ccm_aes_info = {663MBEDTLS_CIPHER_ID_AES,664NULL,665#if defined(MBEDTLS_CIPHER_MODE_CBC)666NULL,667#endif668#if defined(MBEDTLS_CIPHER_MODE_CFB)669NULL,670#endif671#if defined(MBEDTLS_CIPHER_MODE_OFB)672NULL,673#endif674#if defined(MBEDTLS_CIPHER_MODE_CTR)675NULL,676#endif677#if defined(MBEDTLS_CIPHER_MODE_XTS)678NULL,679#endif680#if defined(MBEDTLS_CIPHER_MODE_STREAM)681NULL,682#endif683#if defined(MBEDTLS_CCM_C)684ccm_aes_setkey_wrap,685#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)686ccm_aes_setkey_wrap,687#endif688ccm_ctx_alloc,689ccm_ctx_free,690#else691NULL,692NULL,693NULL,694NULL,695#endif696};697#endif /* MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA */698699#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)700static const mbedtls_cipher_info_t aes_128_ccm_info = {701"AES-128-CCM",70216,70312 >> MBEDTLS_IV_SIZE_SHIFT,704128 >> MBEDTLS_KEY_BITLEN_SHIFT,705MBEDTLS_MODE_CCM,706MBEDTLS_CIPHER_AES_128_CCM,707MBEDTLS_CIPHER_VARIABLE_IV_LEN,708MBEDTLS_CIPHER_BASE_INDEX_CCM_AES709};710711#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)712static const mbedtls_cipher_info_t aes_192_ccm_info = {713"AES-192-CCM",71416,71512 >> MBEDTLS_IV_SIZE_SHIFT,716192 >> MBEDTLS_KEY_BITLEN_SHIFT,717MBEDTLS_MODE_CCM,718MBEDTLS_CIPHER_AES_192_CCM,719MBEDTLS_CIPHER_VARIABLE_IV_LEN,720MBEDTLS_CIPHER_BASE_INDEX_CCM_AES721};722723static const mbedtls_cipher_info_t aes_256_ccm_info = {724"AES-256-CCM",72516,72612 >> MBEDTLS_IV_SIZE_SHIFT,727256 >> MBEDTLS_KEY_BITLEN_SHIFT,728MBEDTLS_MODE_CCM,729MBEDTLS_CIPHER_AES_256_CCM,730MBEDTLS_CIPHER_VARIABLE_IV_LEN,731MBEDTLS_CIPHER_BASE_INDEX_CCM_AES732};733#endif734#endif /* MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA */735736#if defined(MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG_AES_VIA_LEGACY_OR_USE_PSA)737static const mbedtls_cipher_info_t aes_128_ccm_star_no_tag_info = {738"AES-128-CCM*-NO-TAG",73916,74012 >> MBEDTLS_IV_SIZE_SHIFT,741128 >> MBEDTLS_KEY_BITLEN_SHIFT,742MBEDTLS_MODE_CCM_STAR_NO_TAG,743MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG,744MBEDTLS_CIPHER_VARIABLE_IV_LEN,745MBEDTLS_CIPHER_BASE_INDEX_CCM_AES746};747748#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)749static const mbedtls_cipher_info_t aes_192_ccm_star_no_tag_info = {750"AES-192-CCM*-NO-TAG",75116,75212 >> MBEDTLS_IV_SIZE_SHIFT,753192 >> MBEDTLS_KEY_BITLEN_SHIFT,754MBEDTLS_MODE_CCM_STAR_NO_TAG,755MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG,756MBEDTLS_CIPHER_VARIABLE_IV_LEN,757MBEDTLS_CIPHER_BASE_INDEX_CCM_AES758};759760static const mbedtls_cipher_info_t aes_256_ccm_star_no_tag_info = {761"AES-256-CCM*-NO-TAG",76216,76312 >> MBEDTLS_IV_SIZE_SHIFT,764256 >> MBEDTLS_KEY_BITLEN_SHIFT,765MBEDTLS_MODE_CCM_STAR_NO_TAG,766MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG,767MBEDTLS_CIPHER_VARIABLE_IV_LEN,768MBEDTLS_CIPHER_BASE_INDEX_CCM_AES769};770#endif771#endif /* MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG_AES_VIA_LEGACY_OR_USE_PSA */772773774#if defined(MBEDTLS_CAMELLIA_C)775776static int camellia_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,777const unsigned char *input, unsigned char *output)778{779return mbedtls_camellia_crypt_ecb((mbedtls_camellia_context *) ctx, operation, input,780output);781}782783#if defined(MBEDTLS_CIPHER_MODE_CBC)784static int camellia_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,785size_t length, unsigned char *iv,786const unsigned char *input, unsigned char *output)787{788return mbedtls_camellia_crypt_cbc((mbedtls_camellia_context *) ctx, operation, length, iv,789input, output);790}791#endif /* MBEDTLS_CIPHER_MODE_CBC */792793#if defined(MBEDTLS_CIPHER_MODE_CFB)794static int camellia_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,795size_t length, size_t *iv_off, unsigned char *iv,796const unsigned char *input, unsigned char *output)797{798return mbedtls_camellia_crypt_cfb128((mbedtls_camellia_context *) ctx, operation, length,799iv_off, iv, input, output);800}801#endif /* MBEDTLS_CIPHER_MODE_CFB */802803#if defined(MBEDTLS_CIPHER_MODE_CTR)804static int camellia_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,805unsigned char *nonce_counter, unsigned char *stream_block,806const unsigned char *input, unsigned char *output)807{808return mbedtls_camellia_crypt_ctr((mbedtls_camellia_context *) ctx, length, nc_off,809nonce_counter, stream_block, input, output);810}811#endif /* MBEDTLS_CIPHER_MODE_CTR */812813#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)814static int camellia_setkey_dec_wrap(void *ctx, const unsigned char *key,815unsigned int key_bitlen)816{817return mbedtls_camellia_setkey_dec((mbedtls_camellia_context *) ctx, key, key_bitlen);818}819#endif820821static int camellia_setkey_enc_wrap(void *ctx, const unsigned char *key,822unsigned int key_bitlen)823{824return mbedtls_camellia_setkey_enc((mbedtls_camellia_context *) ctx, key, key_bitlen);825}826827static void *camellia_ctx_alloc(void)828{829mbedtls_camellia_context *ctx;830ctx = mbedtls_calloc(1, sizeof(mbedtls_camellia_context));831832if (ctx == NULL) {833return NULL;834}835836mbedtls_camellia_init(ctx);837838return ctx;839}840841static void camellia_ctx_free(void *ctx)842{843mbedtls_camellia_free((mbedtls_camellia_context *) ctx);844mbedtls_free(ctx);845}846847static const mbedtls_cipher_base_t camellia_info = {848MBEDTLS_CIPHER_ID_CAMELLIA,849camellia_crypt_ecb_wrap,850#if defined(MBEDTLS_CIPHER_MODE_CBC)851camellia_crypt_cbc_wrap,852#endif853#if defined(MBEDTLS_CIPHER_MODE_CFB)854camellia_crypt_cfb128_wrap,855#endif856#if defined(MBEDTLS_CIPHER_MODE_OFB)857NULL,858#endif859#if defined(MBEDTLS_CIPHER_MODE_CTR)860camellia_crypt_ctr_wrap,861#endif862#if defined(MBEDTLS_CIPHER_MODE_XTS)863NULL,864#endif865#if defined(MBEDTLS_CIPHER_MODE_STREAM)866NULL,867#endif868camellia_setkey_enc_wrap,869#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)870camellia_setkey_dec_wrap,871#endif872camellia_ctx_alloc,873camellia_ctx_free874};875876static const mbedtls_cipher_info_t camellia_128_ecb_info = {877"CAMELLIA-128-ECB",87816,8790 >> MBEDTLS_IV_SIZE_SHIFT,880128 >> MBEDTLS_KEY_BITLEN_SHIFT,881MBEDTLS_MODE_ECB,882MBEDTLS_CIPHER_CAMELLIA_128_ECB,8830,884MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA885};886887static const mbedtls_cipher_info_t camellia_192_ecb_info = {888"CAMELLIA-192-ECB",88916,8900 >> MBEDTLS_IV_SIZE_SHIFT,891192 >> MBEDTLS_KEY_BITLEN_SHIFT,892MBEDTLS_MODE_ECB,893MBEDTLS_CIPHER_CAMELLIA_192_ECB,8940,895MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA896};897898static const mbedtls_cipher_info_t camellia_256_ecb_info = {899"CAMELLIA-256-ECB",90016,9010 >> MBEDTLS_IV_SIZE_SHIFT,902256 >> MBEDTLS_KEY_BITLEN_SHIFT,903MBEDTLS_MODE_ECB,904MBEDTLS_CIPHER_CAMELLIA_256_ECB,9050,906MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA907};908909#if defined(MBEDTLS_CIPHER_MODE_CBC)910static const mbedtls_cipher_info_t camellia_128_cbc_info = {911"CAMELLIA-128-CBC",91216,91316 >> MBEDTLS_IV_SIZE_SHIFT,914128 >> MBEDTLS_KEY_BITLEN_SHIFT,915MBEDTLS_MODE_CBC,916MBEDTLS_CIPHER_CAMELLIA_128_CBC,9170,918MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA919};920921static const mbedtls_cipher_info_t camellia_192_cbc_info = {922"CAMELLIA-192-CBC",92316,92416 >> MBEDTLS_IV_SIZE_SHIFT,925192 >> MBEDTLS_KEY_BITLEN_SHIFT,926MBEDTLS_MODE_CBC,927MBEDTLS_CIPHER_CAMELLIA_192_CBC,9280,929MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA930};931932static const mbedtls_cipher_info_t camellia_256_cbc_info = {933"CAMELLIA-256-CBC",93416,93516 >> MBEDTLS_IV_SIZE_SHIFT,936256 >> MBEDTLS_KEY_BITLEN_SHIFT,937MBEDTLS_MODE_CBC,938MBEDTLS_CIPHER_CAMELLIA_256_CBC,9390,940MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA941};942#endif /* MBEDTLS_CIPHER_MODE_CBC */943944#if defined(MBEDTLS_CIPHER_MODE_CFB)945static const mbedtls_cipher_info_t camellia_128_cfb128_info = {946"CAMELLIA-128-CFB128",94716,94816 >> MBEDTLS_IV_SIZE_SHIFT,949128 >> MBEDTLS_KEY_BITLEN_SHIFT,950MBEDTLS_MODE_CFB,951MBEDTLS_CIPHER_CAMELLIA_128_CFB128,9520,953MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA954};955956static const mbedtls_cipher_info_t camellia_192_cfb128_info = {957"CAMELLIA-192-CFB128",95816,95916 >> MBEDTLS_IV_SIZE_SHIFT,960192 >> MBEDTLS_KEY_BITLEN_SHIFT,961MBEDTLS_MODE_CFB,962MBEDTLS_CIPHER_CAMELLIA_192_CFB128,9630,964MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA965};966967static const mbedtls_cipher_info_t camellia_256_cfb128_info = {968"CAMELLIA-256-CFB128",96916,97016 >> MBEDTLS_IV_SIZE_SHIFT,971256 >> MBEDTLS_KEY_BITLEN_SHIFT,972MBEDTLS_MODE_CFB,973MBEDTLS_CIPHER_CAMELLIA_256_CFB128,9740,975MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA976};977#endif /* MBEDTLS_CIPHER_MODE_CFB */978979#if defined(MBEDTLS_CIPHER_MODE_CTR)980static const mbedtls_cipher_info_t camellia_128_ctr_info = {981"CAMELLIA-128-CTR",98216,98316 >> MBEDTLS_IV_SIZE_SHIFT,984128 >> MBEDTLS_KEY_BITLEN_SHIFT,985MBEDTLS_MODE_CTR,986MBEDTLS_CIPHER_CAMELLIA_128_CTR,9870,988MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA989};990991static const mbedtls_cipher_info_t camellia_192_ctr_info = {992"CAMELLIA-192-CTR",99316,99416 >> MBEDTLS_IV_SIZE_SHIFT,995192 >> MBEDTLS_KEY_BITLEN_SHIFT,996MBEDTLS_MODE_CTR,997MBEDTLS_CIPHER_CAMELLIA_192_CTR,9980,999MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA1000};10011002static const mbedtls_cipher_info_t camellia_256_ctr_info = {1003"CAMELLIA-256-CTR",100416,100516 >> MBEDTLS_IV_SIZE_SHIFT,1006256 >> MBEDTLS_KEY_BITLEN_SHIFT,1007MBEDTLS_MODE_CTR,1008MBEDTLS_CIPHER_CAMELLIA_256_CTR,10090,1010MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA1011};1012#endif /* MBEDTLS_CIPHER_MODE_CTR */10131014#if defined(MBEDTLS_GCM_C)1015static int gcm_camellia_setkey_wrap(void *ctx, const unsigned char *key,1016unsigned int key_bitlen)1017{1018return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,1019key, key_bitlen);1020}10211022static const mbedtls_cipher_base_t gcm_camellia_info = {1023MBEDTLS_CIPHER_ID_CAMELLIA,1024NULL,1025#if defined(MBEDTLS_CIPHER_MODE_CBC)1026NULL,1027#endif1028#if defined(MBEDTLS_CIPHER_MODE_CFB)1029NULL,1030#endif1031#if defined(MBEDTLS_CIPHER_MODE_OFB)1032NULL,1033#endif1034#if defined(MBEDTLS_CIPHER_MODE_CTR)1035NULL,1036#endif1037#if defined(MBEDTLS_CIPHER_MODE_XTS)1038NULL,1039#endif1040#if defined(MBEDTLS_CIPHER_MODE_STREAM)1041NULL,1042#endif1043gcm_camellia_setkey_wrap,1044#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)1045gcm_camellia_setkey_wrap,1046#endif1047gcm_ctx_alloc,1048gcm_ctx_free,1049};10501051static const mbedtls_cipher_info_t camellia_128_gcm_info = {1052"CAMELLIA-128-GCM",105316,105412 >> MBEDTLS_IV_SIZE_SHIFT,1055128 >> MBEDTLS_KEY_BITLEN_SHIFT,1056MBEDTLS_MODE_GCM,1057MBEDTLS_CIPHER_CAMELLIA_128_GCM,1058MBEDTLS_CIPHER_VARIABLE_IV_LEN,1059MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA1060};10611062static const mbedtls_cipher_info_t camellia_192_gcm_info = {1063"CAMELLIA-192-GCM",106416,106512 >> MBEDTLS_IV_SIZE_SHIFT,1066192 >> MBEDTLS_KEY_BITLEN_SHIFT,1067MBEDTLS_MODE_GCM,1068MBEDTLS_CIPHER_CAMELLIA_192_GCM,1069MBEDTLS_CIPHER_VARIABLE_IV_LEN,1070MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA1071};10721073static const mbedtls_cipher_info_t camellia_256_gcm_info = {1074"CAMELLIA-256-GCM",107516,107612 >> MBEDTLS_IV_SIZE_SHIFT,1077256 >> MBEDTLS_KEY_BITLEN_SHIFT,1078MBEDTLS_MODE_GCM,1079MBEDTLS_CIPHER_CAMELLIA_256_GCM,1080MBEDTLS_CIPHER_VARIABLE_IV_LEN,1081MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA1082};1083#endif /* MBEDTLS_GCM_C */10841085#if defined(MBEDTLS_CCM_C)1086static int ccm_camellia_setkey_wrap(void *ctx, const unsigned char *key,1087unsigned int key_bitlen)1088{1089return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,1090key, key_bitlen);1091}10921093static const mbedtls_cipher_base_t ccm_camellia_info = {1094MBEDTLS_CIPHER_ID_CAMELLIA,1095NULL,1096#if defined(MBEDTLS_CIPHER_MODE_CBC)1097NULL,1098#endif1099#if defined(MBEDTLS_CIPHER_MODE_CFB)1100NULL,1101#endif1102#if defined(MBEDTLS_CIPHER_MODE_OFB)1103NULL,1104#endif1105#if defined(MBEDTLS_CIPHER_MODE_CTR)1106NULL,1107#endif1108#if defined(MBEDTLS_CIPHER_MODE_XTS)1109NULL,1110#endif1111#if defined(MBEDTLS_CIPHER_MODE_STREAM)1112NULL,1113#endif1114ccm_camellia_setkey_wrap,1115#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)1116ccm_camellia_setkey_wrap,1117#endif1118ccm_ctx_alloc,1119ccm_ctx_free,1120};11211122static const mbedtls_cipher_info_t camellia_128_ccm_info = {1123"CAMELLIA-128-CCM",112416,112512 >> MBEDTLS_IV_SIZE_SHIFT,1126128 >> MBEDTLS_KEY_BITLEN_SHIFT,1127MBEDTLS_MODE_CCM,1128MBEDTLS_CIPHER_CAMELLIA_128_CCM,1129MBEDTLS_CIPHER_VARIABLE_IV_LEN,1130MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA1131};11321133static const mbedtls_cipher_info_t camellia_192_ccm_info = {1134"CAMELLIA-192-CCM",113516,113612 >> MBEDTLS_IV_SIZE_SHIFT,1137192 >> MBEDTLS_KEY_BITLEN_SHIFT,1138MBEDTLS_MODE_CCM,1139MBEDTLS_CIPHER_CAMELLIA_192_CCM,1140MBEDTLS_CIPHER_VARIABLE_IV_LEN,1141MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA1142};11431144static const mbedtls_cipher_info_t camellia_256_ccm_info = {1145"CAMELLIA-256-CCM",114616,114712 >> MBEDTLS_IV_SIZE_SHIFT,1148256 >> MBEDTLS_KEY_BITLEN_SHIFT,1149MBEDTLS_MODE_CCM,1150MBEDTLS_CIPHER_CAMELLIA_256_CCM,1151MBEDTLS_CIPHER_VARIABLE_IV_LEN,1152MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA1153};11541155static const mbedtls_cipher_info_t camellia_128_ccm_star_no_tag_info = {1156"CAMELLIA-128-CCM*-NO-TAG",115716,115812 >> MBEDTLS_IV_SIZE_SHIFT,1159128 >> MBEDTLS_KEY_BITLEN_SHIFT,1160MBEDTLS_MODE_CCM_STAR_NO_TAG,1161MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG,1162MBEDTLS_CIPHER_VARIABLE_IV_LEN,1163MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA1164};11651166static const mbedtls_cipher_info_t camellia_192_ccm_star_no_tag_info = {1167"CAMELLIA-192-CCM*-NO-TAG",116816,116912 >> MBEDTLS_IV_SIZE_SHIFT,1170192 >> MBEDTLS_KEY_BITLEN_SHIFT,1171MBEDTLS_MODE_CCM_STAR_NO_TAG,1172MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG,1173MBEDTLS_CIPHER_VARIABLE_IV_LEN,1174MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA1175};11761177static const mbedtls_cipher_info_t camellia_256_ccm_star_no_tag_info = {1178"CAMELLIA-256-CCM*-NO-TAG",117916,118012 >> MBEDTLS_IV_SIZE_SHIFT,1181256 >> MBEDTLS_KEY_BITLEN_SHIFT,1182MBEDTLS_MODE_CCM_STAR_NO_TAG,1183MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG,1184MBEDTLS_CIPHER_VARIABLE_IV_LEN,1185MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA1186};1187#endif /* MBEDTLS_CCM_C */11881189#endif /* MBEDTLS_CAMELLIA_C */11901191#if defined(MBEDTLS_ARIA_C)11921193static int aria_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,1194const unsigned char *input, unsigned char *output)1195{1196(void) operation;1197return mbedtls_aria_crypt_ecb((mbedtls_aria_context *) ctx, input,1198output);1199}12001201#if defined(MBEDTLS_CIPHER_MODE_CBC)1202static int aria_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,1203size_t length, unsigned char *iv,1204const unsigned char *input, unsigned char *output)1205{1206return mbedtls_aria_crypt_cbc((mbedtls_aria_context *) ctx, operation, length, iv,1207input, output);1208}1209#endif /* MBEDTLS_CIPHER_MODE_CBC */12101211#if defined(MBEDTLS_CIPHER_MODE_CFB)1212static int aria_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,1213size_t length, size_t *iv_off, unsigned char *iv,1214const unsigned char *input, unsigned char *output)1215{1216return mbedtls_aria_crypt_cfb128((mbedtls_aria_context *) ctx, operation, length,1217iv_off, iv, input, output);1218}1219#endif /* MBEDTLS_CIPHER_MODE_CFB */12201221#if defined(MBEDTLS_CIPHER_MODE_CTR)1222static int aria_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,1223unsigned char *nonce_counter, unsigned char *stream_block,1224const unsigned char *input, unsigned char *output)1225{1226return mbedtls_aria_crypt_ctr((mbedtls_aria_context *) ctx, length, nc_off,1227nonce_counter, stream_block, input, output);1228}1229#endif /* MBEDTLS_CIPHER_MODE_CTR */12301231#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)1232static int aria_setkey_dec_wrap(void *ctx, const unsigned char *key,1233unsigned int key_bitlen)1234{1235return mbedtls_aria_setkey_dec((mbedtls_aria_context *) ctx, key, key_bitlen);1236}1237#endif12381239static int aria_setkey_enc_wrap(void *ctx, const unsigned char *key,1240unsigned int key_bitlen)1241{1242return mbedtls_aria_setkey_enc((mbedtls_aria_context *) ctx, key, key_bitlen);1243}12441245static void *aria_ctx_alloc(void)1246{1247mbedtls_aria_context *ctx;1248ctx = mbedtls_calloc(1, sizeof(mbedtls_aria_context));12491250if (ctx == NULL) {1251return NULL;1252}12531254mbedtls_aria_init(ctx);12551256return ctx;1257}12581259static void aria_ctx_free(void *ctx)1260{1261mbedtls_aria_free((mbedtls_aria_context *) ctx);1262mbedtls_free(ctx);1263}12641265static const mbedtls_cipher_base_t aria_info = {1266MBEDTLS_CIPHER_ID_ARIA,1267aria_crypt_ecb_wrap,1268#if defined(MBEDTLS_CIPHER_MODE_CBC)1269aria_crypt_cbc_wrap,1270#endif1271#if defined(MBEDTLS_CIPHER_MODE_CFB)1272aria_crypt_cfb128_wrap,1273#endif1274#if defined(MBEDTLS_CIPHER_MODE_OFB)1275NULL,1276#endif1277#if defined(MBEDTLS_CIPHER_MODE_CTR)1278aria_crypt_ctr_wrap,1279#endif1280#if defined(MBEDTLS_CIPHER_MODE_XTS)1281NULL,1282#endif1283#if defined(MBEDTLS_CIPHER_MODE_STREAM)1284NULL,1285#endif1286aria_setkey_enc_wrap,1287#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)1288aria_setkey_dec_wrap,1289#endif1290aria_ctx_alloc,1291aria_ctx_free1292};12931294static const mbedtls_cipher_info_t aria_128_ecb_info = {1295"ARIA-128-ECB",129616,12970 >> MBEDTLS_IV_SIZE_SHIFT,1298128 >> MBEDTLS_KEY_BITLEN_SHIFT,1299MBEDTLS_MODE_ECB,1300MBEDTLS_CIPHER_ARIA_128_ECB,13010,1302MBEDTLS_CIPHER_BASE_INDEX_ARIA1303};13041305static const mbedtls_cipher_info_t aria_192_ecb_info = {1306"ARIA-192-ECB",130716,13080 >> MBEDTLS_IV_SIZE_SHIFT,1309192 >> MBEDTLS_KEY_BITLEN_SHIFT,1310MBEDTLS_MODE_ECB,1311MBEDTLS_CIPHER_ARIA_192_ECB,13120,1313MBEDTLS_CIPHER_BASE_INDEX_ARIA1314};13151316static const mbedtls_cipher_info_t aria_256_ecb_info = {1317"ARIA-256-ECB",131816,13190 >> MBEDTLS_IV_SIZE_SHIFT,1320256 >> MBEDTLS_KEY_BITLEN_SHIFT,1321MBEDTLS_MODE_ECB,1322MBEDTLS_CIPHER_ARIA_256_ECB,13230,1324MBEDTLS_CIPHER_BASE_INDEX_ARIA1325};13261327#if defined(MBEDTLS_CIPHER_MODE_CBC)1328static const mbedtls_cipher_info_t aria_128_cbc_info = {1329"ARIA-128-CBC",133016,133116 >> MBEDTLS_IV_SIZE_SHIFT,1332128 >> MBEDTLS_KEY_BITLEN_SHIFT,1333MBEDTLS_MODE_CBC,1334MBEDTLS_CIPHER_ARIA_128_CBC,13350,1336MBEDTLS_CIPHER_BASE_INDEX_ARIA1337};13381339static const mbedtls_cipher_info_t aria_192_cbc_info = {1340"ARIA-192-CBC",134116,134216 >> MBEDTLS_IV_SIZE_SHIFT,1343192 >> MBEDTLS_KEY_BITLEN_SHIFT,1344MBEDTLS_MODE_CBC,1345MBEDTLS_CIPHER_ARIA_192_CBC,13460,1347MBEDTLS_CIPHER_BASE_INDEX_ARIA1348};13491350static const mbedtls_cipher_info_t aria_256_cbc_info = {1351"ARIA-256-CBC",135216,135316 >> MBEDTLS_IV_SIZE_SHIFT,1354256 >> MBEDTLS_KEY_BITLEN_SHIFT,1355MBEDTLS_MODE_CBC,1356MBEDTLS_CIPHER_ARIA_256_CBC,13570,1358MBEDTLS_CIPHER_BASE_INDEX_ARIA1359};1360#endif /* MBEDTLS_CIPHER_MODE_CBC */13611362#if defined(MBEDTLS_CIPHER_MODE_CFB)1363static const mbedtls_cipher_info_t aria_128_cfb128_info = {1364"ARIA-128-CFB128",136516,136616 >> MBEDTLS_IV_SIZE_SHIFT,1367128 >> MBEDTLS_KEY_BITLEN_SHIFT,1368MBEDTLS_MODE_CFB,1369MBEDTLS_CIPHER_ARIA_128_CFB128,13700,1371MBEDTLS_CIPHER_BASE_INDEX_ARIA1372};13731374static const mbedtls_cipher_info_t aria_192_cfb128_info = {1375"ARIA-192-CFB128",137616,137716 >> MBEDTLS_IV_SIZE_SHIFT,1378192 >> MBEDTLS_KEY_BITLEN_SHIFT,1379MBEDTLS_MODE_CFB,1380MBEDTLS_CIPHER_ARIA_192_CFB128,13810,1382MBEDTLS_CIPHER_BASE_INDEX_ARIA1383};13841385static const mbedtls_cipher_info_t aria_256_cfb128_info = {1386"ARIA-256-CFB128",138716,138816 >> MBEDTLS_IV_SIZE_SHIFT,1389256 >> MBEDTLS_KEY_BITLEN_SHIFT,1390MBEDTLS_MODE_CFB,1391MBEDTLS_CIPHER_ARIA_256_CFB128,13920,1393MBEDTLS_CIPHER_BASE_INDEX_ARIA1394};1395#endif /* MBEDTLS_CIPHER_MODE_CFB */13961397#if defined(MBEDTLS_CIPHER_MODE_CTR)1398static const mbedtls_cipher_info_t aria_128_ctr_info = {1399"ARIA-128-CTR",140016,140116 >> MBEDTLS_IV_SIZE_SHIFT,1402128 >> MBEDTLS_KEY_BITLEN_SHIFT,1403MBEDTLS_MODE_CTR,1404MBEDTLS_CIPHER_ARIA_128_CTR,14050,1406MBEDTLS_CIPHER_BASE_INDEX_ARIA1407};14081409static const mbedtls_cipher_info_t aria_192_ctr_info = {1410"ARIA-192-CTR",141116,141216 >> MBEDTLS_IV_SIZE_SHIFT,1413192 >> MBEDTLS_KEY_BITLEN_SHIFT,1414MBEDTLS_MODE_CTR,1415MBEDTLS_CIPHER_ARIA_192_CTR,14160,1417MBEDTLS_CIPHER_BASE_INDEX_ARIA1418};14191420static const mbedtls_cipher_info_t aria_256_ctr_info = {1421"ARIA-256-CTR",142216,142316 >> MBEDTLS_IV_SIZE_SHIFT,1424256 >> MBEDTLS_KEY_BITLEN_SHIFT,1425MBEDTLS_MODE_CTR,1426MBEDTLS_CIPHER_ARIA_256_CTR,14270,1428MBEDTLS_CIPHER_BASE_INDEX_ARIA1429};1430#endif /* MBEDTLS_CIPHER_MODE_CTR */14311432#if defined(MBEDTLS_GCM_C)1433static int gcm_aria_setkey_wrap(void *ctx, const unsigned char *key,1434unsigned int key_bitlen)1435{1436return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,1437key, key_bitlen);1438}14391440static const mbedtls_cipher_base_t gcm_aria_info = {1441MBEDTLS_CIPHER_ID_ARIA,1442NULL,1443#if defined(MBEDTLS_CIPHER_MODE_CBC)1444NULL,1445#endif1446#if defined(MBEDTLS_CIPHER_MODE_CFB)1447NULL,1448#endif1449#if defined(MBEDTLS_CIPHER_MODE_OFB)1450NULL,1451#endif1452#if defined(MBEDTLS_CIPHER_MODE_CTR)1453NULL,1454#endif1455#if defined(MBEDTLS_CIPHER_MODE_XTS)1456NULL,1457#endif1458#if defined(MBEDTLS_CIPHER_MODE_STREAM)1459NULL,1460#endif1461gcm_aria_setkey_wrap,1462#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)1463gcm_aria_setkey_wrap,1464#endif1465gcm_ctx_alloc,1466gcm_ctx_free,1467};14681469static const mbedtls_cipher_info_t aria_128_gcm_info = {1470"ARIA-128-GCM",147116,147212 >> MBEDTLS_IV_SIZE_SHIFT,1473128 >> MBEDTLS_KEY_BITLEN_SHIFT,1474MBEDTLS_MODE_GCM,1475MBEDTLS_CIPHER_ARIA_128_GCM,1476MBEDTLS_CIPHER_VARIABLE_IV_LEN,1477MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA1478};14791480static const mbedtls_cipher_info_t aria_192_gcm_info = {1481"ARIA-192-GCM",148216,148312 >> MBEDTLS_IV_SIZE_SHIFT,1484192 >> MBEDTLS_KEY_BITLEN_SHIFT,1485MBEDTLS_MODE_GCM,1486MBEDTLS_CIPHER_ARIA_192_GCM,1487MBEDTLS_CIPHER_VARIABLE_IV_LEN,1488MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA1489};14901491static const mbedtls_cipher_info_t aria_256_gcm_info = {1492"ARIA-256-GCM",149316,149412 >> MBEDTLS_IV_SIZE_SHIFT,1495256 >> MBEDTLS_KEY_BITLEN_SHIFT,1496MBEDTLS_MODE_GCM,1497MBEDTLS_CIPHER_ARIA_256_GCM,1498MBEDTLS_CIPHER_VARIABLE_IV_LEN,1499MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA1500};1501#endif /* MBEDTLS_GCM_C */15021503#if defined(MBEDTLS_CCM_C)1504static int ccm_aria_setkey_wrap(void *ctx, const unsigned char *key,1505unsigned int key_bitlen)1506{1507return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,1508key, key_bitlen);1509}15101511static const mbedtls_cipher_base_t ccm_aria_info = {1512MBEDTLS_CIPHER_ID_ARIA,1513NULL,1514#if defined(MBEDTLS_CIPHER_MODE_CBC)1515NULL,1516#endif1517#if defined(MBEDTLS_CIPHER_MODE_CFB)1518NULL,1519#endif1520#if defined(MBEDTLS_CIPHER_MODE_OFB)1521NULL,1522#endif1523#if defined(MBEDTLS_CIPHER_MODE_CTR)1524NULL,1525#endif1526#if defined(MBEDTLS_CIPHER_MODE_XTS)1527NULL,1528#endif1529#if defined(MBEDTLS_CIPHER_MODE_STREAM)1530NULL,1531#endif1532ccm_aria_setkey_wrap,1533#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)1534ccm_aria_setkey_wrap,1535#endif1536ccm_ctx_alloc,1537ccm_ctx_free,1538};15391540static const mbedtls_cipher_info_t aria_128_ccm_info = {1541"ARIA-128-CCM",154216,154312 >> MBEDTLS_IV_SIZE_SHIFT,1544128 >> MBEDTLS_KEY_BITLEN_SHIFT,1545MBEDTLS_MODE_CCM,1546MBEDTLS_CIPHER_ARIA_128_CCM,1547MBEDTLS_CIPHER_VARIABLE_IV_LEN,1548MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA1549};15501551static const mbedtls_cipher_info_t aria_192_ccm_info = {1552"ARIA-192-CCM",155316,155412 >> MBEDTLS_IV_SIZE_SHIFT,1555192 >> MBEDTLS_KEY_BITLEN_SHIFT,1556MBEDTLS_MODE_CCM,1557MBEDTLS_CIPHER_ARIA_192_CCM,1558MBEDTLS_CIPHER_VARIABLE_IV_LEN,1559MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA1560};15611562static const mbedtls_cipher_info_t aria_256_ccm_info = {1563"ARIA-256-CCM",156416,156512 >> MBEDTLS_IV_SIZE_SHIFT,1566256 >> MBEDTLS_KEY_BITLEN_SHIFT,1567MBEDTLS_MODE_CCM,1568MBEDTLS_CIPHER_ARIA_256_CCM,1569MBEDTLS_CIPHER_VARIABLE_IV_LEN,1570MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA1571};15721573static const mbedtls_cipher_info_t aria_128_ccm_star_no_tag_info = {1574"ARIA-128-CCM*-NO-TAG",157516,157612 >> MBEDTLS_IV_SIZE_SHIFT,1577128 >> MBEDTLS_KEY_BITLEN_SHIFT,1578MBEDTLS_MODE_CCM_STAR_NO_TAG,1579MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG,1580MBEDTLS_CIPHER_VARIABLE_IV_LEN,1581MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA1582};15831584static const mbedtls_cipher_info_t aria_192_ccm_star_no_tag_info = {1585"ARIA-192-CCM*-NO-TAG",158616,158712 >> MBEDTLS_IV_SIZE_SHIFT,1588192 >> MBEDTLS_KEY_BITLEN_SHIFT,1589MBEDTLS_MODE_CCM_STAR_NO_TAG,1590MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG,1591MBEDTLS_CIPHER_VARIABLE_IV_LEN,1592MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA1593};15941595static const mbedtls_cipher_info_t aria_256_ccm_star_no_tag_info = {1596"ARIA-256-CCM*-NO-TAG",159716,159812 >> MBEDTLS_IV_SIZE_SHIFT,1599256 >> MBEDTLS_KEY_BITLEN_SHIFT,1600MBEDTLS_MODE_CCM_STAR_NO_TAG,1601MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG,1602MBEDTLS_CIPHER_VARIABLE_IV_LEN,1603MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA1604};1605#endif /* MBEDTLS_CCM_C */16061607#endif /* MBEDTLS_ARIA_C */16081609#if defined(MBEDTLS_DES_C)16101611static int des_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,1612const unsigned char *input, unsigned char *output)1613{1614((void) operation);1615return mbedtls_des_crypt_ecb((mbedtls_des_context *) ctx, input, output);1616}16171618static int des3_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,1619const unsigned char *input, unsigned char *output)1620{1621((void) operation);1622return mbedtls_des3_crypt_ecb((mbedtls_des3_context *) ctx, input, output);1623}16241625#if defined(MBEDTLS_CIPHER_MODE_CBC)1626static int des_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,1627unsigned char *iv, const unsigned char *input, unsigned char *output)1628{1629return mbedtls_des_crypt_cbc((mbedtls_des_context *) ctx, operation, length, iv, input,1630output);1631}1632#endif /* MBEDTLS_CIPHER_MODE_CBC */16331634#if defined(MBEDTLS_CIPHER_MODE_CBC)1635static int des3_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,1636unsigned char *iv, const unsigned char *input, unsigned char *output)1637{1638return mbedtls_des3_crypt_cbc((mbedtls_des3_context *) ctx, operation, length, iv, input,1639output);1640}1641#endif /* MBEDTLS_CIPHER_MODE_CBC */16421643static int des_setkey_dec_wrap(void *ctx, const unsigned char *key,1644unsigned int key_bitlen)1645{1646((void) key_bitlen);16471648return mbedtls_des_setkey_dec((mbedtls_des_context *) ctx, key);1649}16501651static int des_setkey_enc_wrap(void *ctx, const unsigned char *key,1652unsigned int key_bitlen)1653{1654((void) key_bitlen);16551656return mbedtls_des_setkey_enc((mbedtls_des_context *) ctx, key);1657}16581659static int des3_set2key_dec_wrap(void *ctx, const unsigned char *key,1660unsigned int key_bitlen)1661{1662((void) key_bitlen);16631664return mbedtls_des3_set2key_dec((mbedtls_des3_context *) ctx, key);1665}16661667static int des3_set2key_enc_wrap(void *ctx, const unsigned char *key,1668unsigned int key_bitlen)1669{1670((void) key_bitlen);16711672return mbedtls_des3_set2key_enc((mbedtls_des3_context *) ctx, key);1673}16741675static int des3_set3key_dec_wrap(void *ctx, const unsigned char *key,1676unsigned int key_bitlen)1677{1678((void) key_bitlen);16791680return mbedtls_des3_set3key_dec((mbedtls_des3_context *) ctx, key);1681}16821683static int des3_set3key_enc_wrap(void *ctx, const unsigned char *key,1684unsigned int key_bitlen)1685{1686((void) key_bitlen);16871688return mbedtls_des3_set3key_enc((mbedtls_des3_context *) ctx, key);1689}16901691static void *des_ctx_alloc(void)1692{1693mbedtls_des_context *des = mbedtls_calloc(1, sizeof(mbedtls_des_context));16941695if (des == NULL) {1696return NULL;1697}16981699mbedtls_des_init(des);17001701return des;1702}17031704static void des_ctx_free(void *ctx)1705{1706mbedtls_des_free((mbedtls_des_context *) ctx);1707mbedtls_free(ctx);1708}17091710static void *des3_ctx_alloc(void)1711{1712mbedtls_des3_context *des3;1713des3 = mbedtls_calloc(1, sizeof(mbedtls_des3_context));17141715if (des3 == NULL) {1716return NULL;1717}17181719mbedtls_des3_init(des3);17201721return des3;1722}17231724static void des3_ctx_free(void *ctx)1725{1726mbedtls_des3_free((mbedtls_des3_context *) ctx);1727mbedtls_free(ctx);1728}17291730static const mbedtls_cipher_base_t des_info = {1731MBEDTLS_CIPHER_ID_DES,1732des_crypt_ecb_wrap,1733#if defined(MBEDTLS_CIPHER_MODE_CBC)1734des_crypt_cbc_wrap,1735#endif1736#if defined(MBEDTLS_CIPHER_MODE_CFB)1737NULL,1738#endif1739#if defined(MBEDTLS_CIPHER_MODE_OFB)1740NULL,1741#endif1742#if defined(MBEDTLS_CIPHER_MODE_CTR)1743NULL,1744#endif1745#if defined(MBEDTLS_CIPHER_MODE_XTS)1746NULL,1747#endif1748#if defined(MBEDTLS_CIPHER_MODE_STREAM)1749NULL,1750#endif1751des_setkey_enc_wrap,1752des_setkey_dec_wrap,1753des_ctx_alloc,1754des_ctx_free1755};17561757static const mbedtls_cipher_info_t des_ecb_info = {1758"DES-ECB",17598,17600 >> MBEDTLS_IV_SIZE_SHIFT,1761MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,1762MBEDTLS_MODE_ECB,1763MBEDTLS_CIPHER_DES_ECB,17640,1765MBEDTLS_CIPHER_BASE_INDEX_DES1766};17671768#if defined(MBEDTLS_CIPHER_MODE_CBC)1769static const mbedtls_cipher_info_t des_cbc_info = {1770"DES-CBC",17718,17728 >> MBEDTLS_IV_SIZE_SHIFT,1773MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,1774MBEDTLS_MODE_CBC,1775MBEDTLS_CIPHER_DES_CBC,17760,1777MBEDTLS_CIPHER_BASE_INDEX_DES1778};1779#endif /* MBEDTLS_CIPHER_MODE_CBC */17801781static const mbedtls_cipher_base_t des_ede_info = {1782MBEDTLS_CIPHER_ID_DES,1783des3_crypt_ecb_wrap,1784#if defined(MBEDTLS_CIPHER_MODE_CBC)1785des3_crypt_cbc_wrap,1786#endif1787#if defined(MBEDTLS_CIPHER_MODE_CFB)1788NULL,1789#endif1790#if defined(MBEDTLS_CIPHER_MODE_OFB)1791NULL,1792#endif1793#if defined(MBEDTLS_CIPHER_MODE_CTR)1794NULL,1795#endif1796#if defined(MBEDTLS_CIPHER_MODE_XTS)1797NULL,1798#endif1799#if defined(MBEDTLS_CIPHER_MODE_STREAM)1800NULL,1801#endif1802des3_set2key_enc_wrap,1803des3_set2key_dec_wrap,1804des3_ctx_alloc,1805des3_ctx_free1806};18071808static const mbedtls_cipher_info_t des_ede_ecb_info = {1809"DES-EDE-ECB",18108,18110 >> MBEDTLS_IV_SIZE_SHIFT,1812MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,1813MBEDTLS_MODE_ECB,1814MBEDTLS_CIPHER_DES_EDE_ECB,18150,1816MBEDTLS_CIPHER_BASE_INDEX_DES_EDE1817};18181819#if defined(MBEDTLS_CIPHER_MODE_CBC)1820static const mbedtls_cipher_info_t des_ede_cbc_info = {1821"DES-EDE-CBC",18228,18238 >> MBEDTLS_IV_SIZE_SHIFT,1824MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,1825MBEDTLS_MODE_CBC,1826MBEDTLS_CIPHER_DES_EDE_CBC,18270,1828MBEDTLS_CIPHER_BASE_INDEX_DES_EDE1829};1830#endif /* MBEDTLS_CIPHER_MODE_CBC */18311832static const mbedtls_cipher_base_t des_ede3_info = {1833MBEDTLS_CIPHER_ID_3DES,1834des3_crypt_ecb_wrap,1835#if defined(MBEDTLS_CIPHER_MODE_CBC)1836des3_crypt_cbc_wrap,1837#endif1838#if defined(MBEDTLS_CIPHER_MODE_CFB)1839NULL,1840#endif1841#if defined(MBEDTLS_CIPHER_MODE_OFB)1842NULL,1843#endif1844#if defined(MBEDTLS_CIPHER_MODE_CTR)1845NULL,1846#endif1847#if defined(MBEDTLS_CIPHER_MODE_XTS)1848NULL,1849#endif1850#if defined(MBEDTLS_CIPHER_MODE_STREAM)1851NULL,1852#endif1853des3_set3key_enc_wrap,1854des3_set3key_dec_wrap,1855des3_ctx_alloc,1856des3_ctx_free1857};18581859static const mbedtls_cipher_info_t des_ede3_ecb_info = {1860"DES-EDE3-ECB",18618,18620 >> MBEDTLS_IV_SIZE_SHIFT,1863MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,1864MBEDTLS_MODE_ECB,1865MBEDTLS_CIPHER_DES_EDE3_ECB,18660,1867MBEDTLS_CIPHER_BASE_INDEX_DES_EDE31868};1869#if defined(MBEDTLS_CIPHER_MODE_CBC)1870static const mbedtls_cipher_info_t des_ede3_cbc_info = {1871"DES-EDE3-CBC",18728,18738 >> MBEDTLS_IV_SIZE_SHIFT,1874MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,1875MBEDTLS_MODE_CBC,1876MBEDTLS_CIPHER_DES_EDE3_CBC,18770,1878MBEDTLS_CIPHER_BASE_INDEX_DES_EDE31879};1880#endif /* MBEDTLS_CIPHER_MODE_CBC */1881#endif /* MBEDTLS_DES_C */18821883#if defined(MBEDTLS_CHACHA20_C)18841885static int chacha20_setkey_wrap(void *ctx, const unsigned char *key,1886unsigned int key_bitlen)1887{1888if (key_bitlen != 256U) {1889return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;1890}18911892if (0 != mbedtls_chacha20_setkey((mbedtls_chacha20_context *) ctx, key)) {1893return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;1894}18951896return 0;1897}18981899static int chacha20_stream_wrap(void *ctx, size_t length,1900const unsigned char *input,1901unsigned char *output)1902{1903int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;19041905ret = mbedtls_chacha20_update(ctx, length, input, output);1906if (ret == MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA) {1907return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;1908}19091910return ret;1911}19121913static void *chacha20_ctx_alloc(void)1914{1915mbedtls_chacha20_context *ctx;1916ctx = mbedtls_calloc(1, sizeof(mbedtls_chacha20_context));19171918if (ctx == NULL) {1919return NULL;1920}19211922mbedtls_chacha20_init(ctx);19231924return ctx;1925}19261927static void chacha20_ctx_free(void *ctx)1928{1929mbedtls_chacha20_free((mbedtls_chacha20_context *) ctx);1930mbedtls_free(ctx);1931}19321933static const mbedtls_cipher_base_t chacha20_base_info = {1934MBEDTLS_CIPHER_ID_CHACHA20,1935NULL,1936#if defined(MBEDTLS_CIPHER_MODE_CBC)1937NULL,1938#endif1939#if defined(MBEDTLS_CIPHER_MODE_CFB)1940NULL,1941#endif1942#if defined(MBEDTLS_CIPHER_MODE_OFB)1943NULL,1944#endif1945#if defined(MBEDTLS_CIPHER_MODE_CTR)1946NULL,1947#endif1948#if defined(MBEDTLS_CIPHER_MODE_XTS)1949NULL,1950#endif1951#if defined(MBEDTLS_CIPHER_MODE_STREAM)1952chacha20_stream_wrap,1953#endif1954chacha20_setkey_wrap,1955#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)1956chacha20_setkey_wrap,1957#endif1958chacha20_ctx_alloc,1959chacha20_ctx_free1960};1961static const mbedtls_cipher_info_t chacha20_info = {1962"CHACHA20",19631,196412 >> MBEDTLS_IV_SIZE_SHIFT,1965256 >> MBEDTLS_KEY_BITLEN_SHIFT,1966MBEDTLS_MODE_STREAM,1967MBEDTLS_CIPHER_CHACHA20,19680,1969MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE1970};1971#endif /* MBEDTLS_CHACHA20_C */19721973#if defined(MBEDTLS_CHACHAPOLY_C)19741975static int chachapoly_setkey_wrap(void *ctx,1976const unsigned char *key,1977unsigned int key_bitlen)1978{1979if (key_bitlen != 256U) {1980return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;1981}19821983if (0 != mbedtls_chachapoly_setkey((mbedtls_chachapoly_context *) ctx, key)) {1984return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;1985}19861987return 0;1988}19891990static void *chachapoly_ctx_alloc(void)1991{1992mbedtls_chachapoly_context *ctx;1993ctx = mbedtls_calloc(1, sizeof(mbedtls_chachapoly_context));19941995if (ctx == NULL) {1996return NULL;1997}19981999mbedtls_chachapoly_init(ctx);20002001return ctx;2002}20032004static void chachapoly_ctx_free(void *ctx)2005{2006mbedtls_chachapoly_free((mbedtls_chachapoly_context *) ctx);2007mbedtls_free(ctx);2008}20092010static const mbedtls_cipher_base_t chachapoly_base_info = {2011MBEDTLS_CIPHER_ID_CHACHA20,2012NULL,2013#if defined(MBEDTLS_CIPHER_MODE_CBC)2014NULL,2015#endif2016#if defined(MBEDTLS_CIPHER_MODE_CFB)2017NULL,2018#endif2019#if defined(MBEDTLS_CIPHER_MODE_OFB)2020NULL,2021#endif2022#if defined(MBEDTLS_CIPHER_MODE_CTR)2023NULL,2024#endif2025#if defined(MBEDTLS_CIPHER_MODE_XTS)2026NULL,2027#endif2028#if defined(MBEDTLS_CIPHER_MODE_STREAM)2029NULL,2030#endif2031chachapoly_setkey_wrap,2032#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)2033chachapoly_setkey_wrap,2034#endif2035chachapoly_ctx_alloc,2036chachapoly_ctx_free2037};2038static const mbedtls_cipher_info_t chachapoly_info = {2039"CHACHA20-POLY1305",20401,204112 >> MBEDTLS_IV_SIZE_SHIFT,2042256 >> MBEDTLS_KEY_BITLEN_SHIFT,2043MBEDTLS_MODE_CHACHAPOLY,2044MBEDTLS_CIPHER_CHACHA20_POLY1305,20450,2046MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE2047};2048#endif /* MBEDTLS_CHACHAPOLY_C */20492050#if defined(MBEDTLS_CIPHER_NULL_CIPHER)2051static int null_crypt_stream(void *ctx, size_t length,2052const unsigned char *input,2053unsigned char *output)2054{2055((void) ctx);2056memmove(output, input, length);2057return 0;2058}20592060static int null_setkey(void *ctx, const unsigned char *key,2061unsigned int key_bitlen)2062{2063((void) ctx);2064((void) key);2065((void) key_bitlen);20662067return 0;2068}20692070static void *null_ctx_alloc(void)2071{2072return (void *) 1;2073}20742075static void null_ctx_free(void *ctx)2076{2077((void) ctx);2078}20792080static const mbedtls_cipher_base_t null_base_info = {2081MBEDTLS_CIPHER_ID_NULL,2082NULL,2083#if defined(MBEDTLS_CIPHER_MODE_CBC)2084NULL,2085#endif2086#if defined(MBEDTLS_CIPHER_MODE_CFB)2087NULL,2088#endif2089#if defined(MBEDTLS_CIPHER_MODE_OFB)2090NULL,2091#endif2092#if defined(MBEDTLS_CIPHER_MODE_CTR)2093NULL,2094#endif2095#if defined(MBEDTLS_CIPHER_MODE_XTS)2096NULL,2097#endif2098#if defined(MBEDTLS_CIPHER_MODE_STREAM)2099null_crypt_stream,2100#endif2101null_setkey,2102#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)2103null_setkey,2104#endif2105null_ctx_alloc,2106null_ctx_free2107};21082109static const mbedtls_cipher_info_t null_cipher_info = {2110"NULL",21111,21120 >> MBEDTLS_IV_SIZE_SHIFT,21130 >> MBEDTLS_KEY_BITLEN_SHIFT,2114MBEDTLS_MODE_STREAM,2115MBEDTLS_CIPHER_NULL,21160,2117MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE2118};2119#endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */21202121#if defined(MBEDTLS_NIST_KW_C)2122static void *kw_ctx_alloc(void)2123{2124void *ctx = mbedtls_calloc(1, sizeof(mbedtls_nist_kw_context));21252126if (ctx != NULL) {2127mbedtls_nist_kw_init((mbedtls_nist_kw_context *) ctx);2128}21292130return ctx;2131}21322133static void kw_ctx_free(void *ctx)2134{2135mbedtls_nist_kw_free(ctx);2136mbedtls_free(ctx);2137}21382139static int kw_aes_setkey_wrap(void *ctx, const unsigned char *key,2140unsigned int key_bitlen)2141{2142return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,2143MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 1);2144}21452146static int kw_aes_setkey_unwrap(void *ctx, const unsigned char *key,2147unsigned int key_bitlen)2148{2149return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,2150MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 0);2151}21522153static const mbedtls_cipher_base_t kw_aes_info = {2154MBEDTLS_CIPHER_ID_AES,2155NULL,2156#if defined(MBEDTLS_CIPHER_MODE_CBC)2157NULL,2158#endif2159#if defined(MBEDTLS_CIPHER_MODE_CFB)2160NULL,2161#endif2162#if defined(MBEDTLS_CIPHER_MODE_OFB)2163NULL,2164#endif2165#if defined(MBEDTLS_CIPHER_MODE_CTR)2166NULL,2167#endif2168#if defined(MBEDTLS_CIPHER_MODE_XTS)2169NULL,2170#endif2171#if defined(MBEDTLS_CIPHER_MODE_STREAM)2172NULL,2173#endif2174kw_aes_setkey_wrap,2175kw_aes_setkey_unwrap,2176kw_ctx_alloc,2177kw_ctx_free,2178};21792180static const mbedtls_cipher_info_t aes_128_nist_kw_info = {2181"AES-128-KW",218216,21830 >> MBEDTLS_IV_SIZE_SHIFT,2184128 >> MBEDTLS_KEY_BITLEN_SHIFT,2185MBEDTLS_MODE_KW,2186MBEDTLS_CIPHER_AES_128_KW,21870,2188MBEDTLS_CIPHER_BASE_INDEX_KW_AES2189};21902191#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)2192static const mbedtls_cipher_info_t aes_192_nist_kw_info = {2193"AES-192-KW",219416,21950 >> MBEDTLS_IV_SIZE_SHIFT,2196192 >> MBEDTLS_KEY_BITLEN_SHIFT,2197MBEDTLS_MODE_KW,2198MBEDTLS_CIPHER_AES_192_KW,21990,2200MBEDTLS_CIPHER_BASE_INDEX_KW_AES2201};22022203static const mbedtls_cipher_info_t aes_256_nist_kw_info = {2204"AES-256-KW",220516,22060 >> MBEDTLS_IV_SIZE_SHIFT,2207256 >> MBEDTLS_KEY_BITLEN_SHIFT,2208MBEDTLS_MODE_KW,2209MBEDTLS_CIPHER_AES_256_KW,22100,2211MBEDTLS_CIPHER_BASE_INDEX_KW_AES2212};2213#endif22142215static const mbedtls_cipher_info_t aes_128_nist_kwp_info = {2216"AES-128-KWP",221716,22180 >> MBEDTLS_IV_SIZE_SHIFT,2219128 >> MBEDTLS_KEY_BITLEN_SHIFT,2220MBEDTLS_MODE_KWP,2221MBEDTLS_CIPHER_AES_128_KWP,22220,2223MBEDTLS_CIPHER_BASE_INDEX_KW_AES2224};22252226#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)2227static const mbedtls_cipher_info_t aes_192_nist_kwp_info = {2228"AES-192-KWP",222916,22300 >> MBEDTLS_IV_SIZE_SHIFT,2231192 >> MBEDTLS_KEY_BITLEN_SHIFT,2232MBEDTLS_MODE_KWP,2233MBEDTLS_CIPHER_AES_192_KWP,22340,2235MBEDTLS_CIPHER_BASE_INDEX_KW_AES2236};22372238static const mbedtls_cipher_info_t aes_256_nist_kwp_info = {2239"AES-256-KWP",224016,22410 >> MBEDTLS_IV_SIZE_SHIFT,2242256 >> MBEDTLS_KEY_BITLEN_SHIFT,2243MBEDTLS_MODE_KWP,2244MBEDTLS_CIPHER_AES_256_KWP,22450,2246MBEDTLS_CIPHER_BASE_INDEX_KW_AES2247};2248#endif2249#endif /* MBEDTLS_NIST_KW_C */22502251const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =2252{2253#if defined(MBEDTLS_AES_C)2254{ MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },2255#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)2256{ MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },2257{ MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },2258#endif2259#if defined(MBEDTLS_CIPHER_MODE_CBC)2260{ MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },2261#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)2262{ MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },2263{ MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },2264#endif2265#endif2266#if defined(MBEDTLS_CIPHER_MODE_CFB)2267{ MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },2268#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)2269{ MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },2270{ MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },2271#endif2272#endif2273#if defined(MBEDTLS_CIPHER_MODE_OFB)2274{ MBEDTLS_CIPHER_AES_128_OFB, &aes_128_ofb_info },2275#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)2276{ MBEDTLS_CIPHER_AES_192_OFB, &aes_192_ofb_info },2277{ MBEDTLS_CIPHER_AES_256_OFB, &aes_256_ofb_info },2278#endif2279#endif2280#if defined(MBEDTLS_CIPHER_MODE_CTR)2281{ MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },2282#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)2283{ MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },2284{ MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },2285#endif2286#endif2287#if defined(MBEDTLS_CIPHER_MODE_XTS)2288{ MBEDTLS_CIPHER_AES_128_XTS, &aes_128_xts_info },2289#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)2290{ MBEDTLS_CIPHER_AES_256_XTS, &aes_256_xts_info },2291#endif2292#endif2293#endif /* MBEDTLS_AES_C */2294#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)2295{ MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },2296#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)2297{ MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },2298{ MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },2299#endif2300#endif2301#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)2302{ MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },2303#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)2304{ MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },2305{ MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },2306#endif2307#endif2308#if defined(MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG_AES_VIA_LEGACY_OR_USE_PSA)2309{ MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG, &aes_128_ccm_star_no_tag_info },2310#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)2311{ MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG, &aes_192_ccm_star_no_tag_info },2312{ MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG, &aes_256_ccm_star_no_tag_info },2313#endif2314#endif23152316#if defined(MBEDTLS_CAMELLIA_C)2317{ MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },2318{ MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },2319{ MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },2320#if defined(MBEDTLS_CIPHER_MODE_CBC)2321{ MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },2322{ MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },2323{ MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },2324#endif2325#if defined(MBEDTLS_CIPHER_MODE_CFB)2326{ MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },2327{ MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },2328{ MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },2329#endif2330#if defined(MBEDTLS_CIPHER_MODE_CTR)2331{ MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },2332{ MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },2333{ MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },2334#endif2335#if defined(MBEDTLS_GCM_C)2336{ MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },2337{ MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },2338{ MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },2339#endif2340#if defined(MBEDTLS_CCM_C)2341{ MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },2342{ MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },2343{ MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },2344{ MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG, &camellia_128_ccm_star_no_tag_info },2345{ MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG, &camellia_192_ccm_star_no_tag_info },2346{ MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG, &camellia_256_ccm_star_no_tag_info },2347#endif2348#endif /* MBEDTLS_CAMELLIA_C */23492350#if defined(MBEDTLS_ARIA_C)2351{ MBEDTLS_CIPHER_ARIA_128_ECB, &aria_128_ecb_info },2352{ MBEDTLS_CIPHER_ARIA_192_ECB, &aria_192_ecb_info },2353{ MBEDTLS_CIPHER_ARIA_256_ECB, &aria_256_ecb_info },2354#if defined(MBEDTLS_CIPHER_MODE_CBC)2355{ MBEDTLS_CIPHER_ARIA_128_CBC, &aria_128_cbc_info },2356{ MBEDTLS_CIPHER_ARIA_192_CBC, &aria_192_cbc_info },2357{ MBEDTLS_CIPHER_ARIA_256_CBC, &aria_256_cbc_info },2358#endif2359#if defined(MBEDTLS_CIPHER_MODE_CFB)2360{ MBEDTLS_CIPHER_ARIA_128_CFB128, &aria_128_cfb128_info },2361{ MBEDTLS_CIPHER_ARIA_192_CFB128, &aria_192_cfb128_info },2362{ MBEDTLS_CIPHER_ARIA_256_CFB128, &aria_256_cfb128_info },2363#endif2364#if defined(MBEDTLS_CIPHER_MODE_CTR)2365{ MBEDTLS_CIPHER_ARIA_128_CTR, &aria_128_ctr_info },2366{ MBEDTLS_CIPHER_ARIA_192_CTR, &aria_192_ctr_info },2367{ MBEDTLS_CIPHER_ARIA_256_CTR, &aria_256_ctr_info },2368#endif2369#if defined(MBEDTLS_GCM_C)2370{ MBEDTLS_CIPHER_ARIA_128_GCM, &aria_128_gcm_info },2371{ MBEDTLS_CIPHER_ARIA_192_GCM, &aria_192_gcm_info },2372{ MBEDTLS_CIPHER_ARIA_256_GCM, &aria_256_gcm_info },2373#endif2374#if defined(MBEDTLS_CCM_C)2375{ MBEDTLS_CIPHER_ARIA_128_CCM, &aria_128_ccm_info },2376{ MBEDTLS_CIPHER_ARIA_192_CCM, &aria_192_ccm_info },2377{ MBEDTLS_CIPHER_ARIA_256_CCM, &aria_256_ccm_info },2378{ MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG, &aria_128_ccm_star_no_tag_info },2379{ MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG, &aria_192_ccm_star_no_tag_info },2380{ MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG, &aria_256_ccm_star_no_tag_info },2381#endif2382#endif /* MBEDTLS_ARIA_C */23832384#if defined(MBEDTLS_DES_C)2385{ MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },2386{ MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },2387{ MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },2388#if defined(MBEDTLS_CIPHER_MODE_CBC)2389{ MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },2390{ MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },2391{ MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },2392#endif2393#endif /* MBEDTLS_DES_C */23942395#if defined(MBEDTLS_CHACHA20_C)2396{ MBEDTLS_CIPHER_CHACHA20, &chacha20_info },2397#endif23982399#if defined(MBEDTLS_CHACHAPOLY_C)2400{ MBEDTLS_CIPHER_CHACHA20_POLY1305, &chachapoly_info },2401#endif24022403#if defined(MBEDTLS_NIST_KW_C)2404{ MBEDTLS_CIPHER_AES_128_KW, &aes_128_nist_kw_info },2405#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)2406{ MBEDTLS_CIPHER_AES_192_KW, &aes_192_nist_kw_info },2407{ MBEDTLS_CIPHER_AES_256_KW, &aes_256_nist_kw_info },2408#endif2409{ MBEDTLS_CIPHER_AES_128_KWP, &aes_128_nist_kwp_info },2410#if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)2411{ MBEDTLS_CIPHER_AES_192_KWP, &aes_192_nist_kwp_info },2412{ MBEDTLS_CIPHER_AES_256_KWP, &aes_256_nist_kwp_info },2413#endif2414#endif24152416#if defined(MBEDTLS_CIPHER_NULL_CIPHER)2417{ MBEDTLS_CIPHER_NULL, &null_cipher_info },2418#endif /* MBEDTLS_CIPHER_NULL_CIPHER */24192420{ MBEDTLS_CIPHER_NONE, NULL }2421};24222423#define NUM_CIPHERS (sizeof(mbedtls_cipher_definitions) / \2424sizeof(mbedtls_cipher_definitions[0]))2425int mbedtls_cipher_supported[NUM_CIPHERS];24262427const mbedtls_cipher_base_t * const mbedtls_cipher_base_lookup_table[] = {2428#if defined(MBEDTLS_AES_C)2429[MBEDTLS_CIPHER_BASE_INDEX_AES] = &aes_info,2430#endif2431#if defined(MBEDTLS_ARIA_C)2432[MBEDTLS_CIPHER_BASE_INDEX_ARIA] = &aria_info,2433#endif2434#if defined(MBEDTLS_CAMELLIA_C)2435[MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA] = &camellia_info,2436#endif2437#if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)2438[MBEDTLS_CIPHER_BASE_INDEX_CCM_AES] = &ccm_aes_info,2439#endif2440#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)2441[MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA] = &ccm_aria_info,2442#endif2443#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)2444[MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA] = &ccm_camellia_info,2445#endif2446#if defined(MBEDTLS_CHACHA20_C)2447[MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE] = &chacha20_base_info,2448#endif2449#if defined(MBEDTLS_CHACHAPOLY_C)2450[MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE] = &chachapoly_base_info,2451#endif2452#if defined(MBEDTLS_DES_C)2453[MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3] = &des_ede3_info,2454#endif2455#if defined(MBEDTLS_DES_C)2456[MBEDTLS_CIPHER_BASE_INDEX_DES_EDE] = &des_ede_info,2457#endif2458#if defined(MBEDTLS_DES_C)2459[MBEDTLS_CIPHER_BASE_INDEX_DES] = &des_info,2460#endif2461#if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)2462[MBEDTLS_CIPHER_BASE_INDEX_GCM_AES] = &gcm_aes_info,2463#endif2464#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)2465[MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA] = &gcm_aria_info,2466#endif2467#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)2468[MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA] = &gcm_camellia_info,2469#endif2470#if defined(MBEDTLS_NIST_KW_C)2471[MBEDTLS_CIPHER_BASE_INDEX_KW_AES] = &kw_aes_info,2472#endif2473#if defined(MBEDTLS_CIPHER_NULL_CIPHER)2474[MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE] = &null_base_info,2475#endif2476#if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)2477[MBEDTLS_CIPHER_BASE_INDEX_XTS_AES] = &xts_aes_info2478#endif2479};24802481#endif /* MBEDTLS_CIPHER_C */248224832484