Use look-up table for base

Signed-off-by: Dave Rodgman <dave.rodgman@arm.com>
diff --git a/library/cipher.c b/library/cipher.c
index dfbbbfd..3ed9aef 100644
--- a/library/cipher.c
+++ b/library/cipher.c
@@ -67,6 +67,10 @@
 
 static int supported_init = 0;
 
+static inline const mbedtls_cipher_base_t* mbedtls_cipher_get_base(const mbedtls_cipher_info_t *info) {
+    return mbedtls_cipher_base_lookup_table[info->base_idx];
+}
+
 const int *mbedtls_cipher_list(void)
 {
     const mbedtls_cipher_definition_t *def;
@@ -128,7 +132,7 @@
     const mbedtls_cipher_definition_t *def;
 
     for (def = mbedtls_cipher_definitions; def->info != NULL; def++) {
-        if (def->info->base->cipher == cipher_id &&
+        if (mbedtls_cipher_get_base(def->info)->cipher == cipher_id &&
             mbedtls_cipher_info_get_key_bitlen(def->info) == (unsigned) key_bitlen &&
             def->info->mode == mode) {
             return def->info;
@@ -178,7 +182,7 @@
 #endif
 
     if (ctx->cipher_ctx) {
-        ctx->cipher_info->base->ctx_free_func(ctx->cipher_ctx);
+        mbedtls_cipher_get_base(ctx->cipher_info)->ctx_free_func(ctx->cipher_ctx);
     }
 
     mbedtls_platform_zeroize(ctx, sizeof(mbedtls_cipher_context_t));
@@ -193,7 +197,7 @@
 
     memset(ctx, 0, sizeof(mbedtls_cipher_context_t));
 
-    if (NULL == (ctx->cipher_ctx = cipher_info->base->ctx_alloc_func())) {
+    if (NULL == (ctx->cipher_ctx = mbedtls_cipher_get_base(cipher_info)->ctx_alloc_func())) {
         return MBEDTLS_ERR_CIPHER_ALLOC_FAILED;
     }
 
@@ -337,12 +341,12 @@
         MBEDTLS_MODE_CFB == ctx->cipher_info->mode ||
         MBEDTLS_MODE_OFB == ctx->cipher_info->mode ||
         MBEDTLS_MODE_CTR == ctx->cipher_info->mode) {
-        return ctx->cipher_info->base->setkey_enc_func(ctx->cipher_ctx, key,
+        return mbedtls_cipher_get_base(ctx->cipher_info)->setkey_enc_func(ctx->cipher_ctx, key,
                                                        ctx->key_bitlen);
     }
 
     if (MBEDTLS_DECRYPT == operation) {
-        return ctx->cipher_info->base->setkey_dec_func(ctx->cipher_ctx, key,
+        return mbedtls_cipher_get_base(ctx->cipher_info)->setkey_dec_func(ctx->cipher_ctx, key,
                                                        ctx->key_bitlen);
     }
 
@@ -548,7 +552,7 @@
 
         *olen = ilen;
 
-        if (0 != (ret = ctx->cipher_info->base->ecb_func(ctx->cipher_ctx,
+        if (0 != (ret = mbedtls_cipher_get_base(ctx->cipher_info)->ecb_func(ctx->cipher_ctx,
                                                          ctx->operation, input, output))) {
             return ret;
         }
@@ -614,7 +618,7 @@
             memcpy(&(ctx->unprocessed_data[ctx->unprocessed_len]), input,
                    copy_len);
 
-            if (0 != (ret = ctx->cipher_info->base->cbc_func(ctx->cipher_ctx,
+            if (0 != (ret = mbedtls_cipher_get_base(ctx->cipher_info)->cbc_func(ctx->cipher_ctx,
                                                              ctx->operation, block_size, ctx->iv,
                                                              ctx->unprocessed_data, output))) {
                 return ret;
@@ -654,7 +658,7 @@
          * Process remaining full blocks
          */
         if (ilen) {
-            if (0 != (ret = ctx->cipher_info->base->cbc_func(ctx->cipher_ctx,
+            if (0 != (ret = mbedtls_cipher_get_base(ctx->cipher_info)->cbc_func(ctx->cipher_ctx,
                                                              ctx->operation, ilen, ctx->iv, input,
                                                              output))) {
                 return ret;
@@ -669,7 +673,7 @@
 
 #if defined(MBEDTLS_CIPHER_MODE_CFB)
     if (ctx->cipher_info->mode == MBEDTLS_MODE_CFB) {
-        if (0 != (ret = ctx->cipher_info->base->cfb_func(ctx->cipher_ctx,
+        if (0 != (ret = mbedtls_cipher_get_base(ctx->cipher_info)->cfb_func(ctx->cipher_ctx,
                                                          ctx->operation, ilen,
                                                          &ctx->unprocessed_len, ctx->iv,
                                                          input, output))) {
@@ -684,7 +688,7 @@
 
 #if defined(MBEDTLS_CIPHER_MODE_OFB)
     if (ctx->cipher_info->mode == MBEDTLS_MODE_OFB) {
-        if (0 != (ret = ctx->cipher_info->base->ofb_func(ctx->cipher_ctx,
+        if (0 != (ret = mbedtls_cipher_get_base(ctx->cipher_info)->ofb_func(ctx->cipher_ctx,
                                                          ilen, &ctx->unprocessed_len, ctx->iv,
                                                          input, output))) {
             return ret;
@@ -698,7 +702,7 @@
 
 #if defined(MBEDTLS_CIPHER_MODE_CTR)
     if (ctx->cipher_info->mode == MBEDTLS_MODE_CTR) {
-        if (0 != (ret = ctx->cipher_info->base->ctr_func(ctx->cipher_ctx,
+        if (0 != (ret = mbedtls_cipher_get_base(ctx->cipher_info)->ctr_func(ctx->cipher_ctx,
                                                          ilen, &ctx->unprocessed_len, ctx->iv,
                                                          ctx->unprocessed_data, input, output))) {
             return ret;
@@ -717,7 +721,7 @@
             return MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE;
         }
 
-        ret = ctx->cipher_info->base->xts_func(ctx->cipher_ctx,
+        ret = mbedtls_cipher_get_base(ctx->cipher_info)->xts_func(ctx->cipher_ctx,
                                                ctx->operation, ilen, ctx->iv, input, output);
         if (ret != 0) {
             return ret;
@@ -731,7 +735,7 @@
 
 #if defined(MBEDTLS_CIPHER_MODE_STREAM)
     if (ctx->cipher_info->mode == MBEDTLS_MODE_STREAM) {
-        if (0 != (ret = ctx->cipher_info->base->stream_func(ctx->cipher_ctx,
+        if (0 != (ret = mbedtls_cipher_get_base(ctx->cipher_info)->stream_func(ctx->cipher_ctx,
                                                             ilen, input, output))) {
             return ret;
         }
@@ -996,7 +1000,7 @@
         }
 
         /* cipher block */
-        if (0 != (ret = ctx->cipher_info->base->cbc_func(ctx->cipher_ctx,
+        if (0 != (ret = mbedtls_cipher_get_base(ctx->cipher_info)->cbc_func(ctx->cipher_ctx,
                                                          ctx->operation,
                                                          mbedtls_cipher_get_block_size(ctx),
                                                          ctx->iv,
diff --git a/library/cipher_wrap.c b/library/cipher_wrap.c
index b4f1619..0bb9c02 100644
--- a/library/cipher_wrap.c
+++ b/library/cipher_wrap.c
@@ -70,6 +70,24 @@
 
 #include "mbedtls/platform.h"
 
+#define MBEDTLS_CIPHER_BASE_INDEX_AES 0
+#define MBEDTLS_CIPHER_BASE_INDEX_ARIA 1
+#define MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA 2
+#define MBEDTLS_CIPHER_BASE_INDEX_CCM_AES 3
+#define MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA 4
+#define MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA 5
+#define MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE 6
+#define MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE 7
+#define MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3 8
+#define MBEDTLS_CIPHER_BASE_INDEX_DES_EDE 9
+#define MBEDTLS_CIPHER_BASE_INDEX_DES 10
+#define MBEDTLS_CIPHER_BASE_INDEX_GCM_AES 11
+#define MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA 12
+#define MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA 13
+#define MBEDTLS_CIPHER_BASE_INDEX_KW_AES 14
+#define MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE 15
+#define MBEDTLS_CIPHER_BASE_INDEX_XTS_AES 16
+
 #if defined(MBEDTLS_GCM_C)
 /* shared by all GCM ciphers */
 static void *gcm_ctx_alloc(void)
@@ -242,7 +260,7 @@
 
 static const mbedtls_cipher_info_t aes_128_ecb_info = {
     "AES-128-ECB",
-    &aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_AES,
     MBEDTLS_CIPHER_AES_128_ECB,
     MBEDTLS_MODE_ECB,
     128 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -253,7 +271,7 @@
 
 static const mbedtls_cipher_info_t aes_192_ecb_info = {
     "AES-192-ECB",
-    &aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_AES,
     MBEDTLS_CIPHER_AES_192_ECB,
     MBEDTLS_MODE_ECB,
     192 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -264,7 +282,7 @@
 
 static const mbedtls_cipher_info_t aes_256_ecb_info = {
     "AES-256-ECB",
-    &aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_AES,
     MBEDTLS_CIPHER_AES_256_ECB,
     MBEDTLS_MODE_ECB,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -276,7 +294,7 @@
 #if defined(MBEDTLS_CIPHER_MODE_CBC)
 static const mbedtls_cipher_info_t aes_128_cbc_info = {
     "AES-128-CBC",
-    &aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_AES,
     MBEDTLS_CIPHER_AES_128_CBC,
     MBEDTLS_MODE_CBC,
     128 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -287,7 +305,7 @@
 
 static const mbedtls_cipher_info_t aes_192_cbc_info = {
     "AES-192-CBC",
-    &aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_AES,
     MBEDTLS_CIPHER_AES_192_CBC,
     MBEDTLS_MODE_CBC,
     192 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -298,7 +316,7 @@
 
 static const mbedtls_cipher_info_t aes_256_cbc_info = {
     "AES-256-CBC",
-    &aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_AES,
     MBEDTLS_CIPHER_AES_256_CBC,
     MBEDTLS_MODE_CBC,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -311,7 +329,7 @@
 #if defined(MBEDTLS_CIPHER_MODE_CFB)
 static const mbedtls_cipher_info_t aes_128_cfb128_info = {
     "AES-128-CFB128",
-    &aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_AES,
     MBEDTLS_CIPHER_AES_128_CFB128,
     MBEDTLS_MODE_CFB,
     128 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -322,7 +340,7 @@
 
 static const mbedtls_cipher_info_t aes_192_cfb128_info = {
     "AES-192-CFB128",
-    &aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_AES,
     MBEDTLS_CIPHER_AES_192_CFB128,
     MBEDTLS_MODE_CFB,
     192 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -333,7 +351,7 @@
 
 static const mbedtls_cipher_info_t aes_256_cfb128_info = {
     "AES-256-CFB128",
-    &aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_AES,
     MBEDTLS_CIPHER_AES_256_CFB128,
     MBEDTLS_MODE_CFB,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -346,7 +364,7 @@
 #if defined(MBEDTLS_CIPHER_MODE_OFB)
 static const mbedtls_cipher_info_t aes_128_ofb_info = {
     "AES-128-OFB",
-    &aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_AES,
     MBEDTLS_CIPHER_AES_128_OFB,
     MBEDTLS_MODE_OFB,
     128 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -357,7 +375,7 @@
 
 static const mbedtls_cipher_info_t aes_192_ofb_info = {
     "AES-192-OFB",
-    &aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_AES,
     MBEDTLS_CIPHER_AES_192_OFB,
     MBEDTLS_MODE_OFB,
     192 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -368,7 +386,7 @@
 
 static const mbedtls_cipher_info_t aes_256_ofb_info = {
     "AES-256-OFB",
-    &aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_AES,
     MBEDTLS_CIPHER_AES_256_OFB,
     MBEDTLS_MODE_OFB,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -381,7 +399,7 @@
 #if defined(MBEDTLS_CIPHER_MODE_CTR)
 static const mbedtls_cipher_info_t aes_128_ctr_info = {
     "AES-128-CTR",
-    &aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_AES,
     MBEDTLS_CIPHER_AES_128_CTR,
     MBEDTLS_MODE_CTR,
     128 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -392,7 +410,7 @@
 
 static const mbedtls_cipher_info_t aes_192_ctr_info = {
     "AES-192-CTR",
-    &aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_AES,
     MBEDTLS_CIPHER_AES_192_CTR,
     MBEDTLS_MODE_CTR,
     192 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -403,7 +421,7 @@
 
 static const mbedtls_cipher_info_t aes_256_ctr_info = {
     "AES-256-CTR",
-    &aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_AES,
     MBEDTLS_CIPHER_AES_256_CTR,
     MBEDTLS_MODE_CTR,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -480,7 +498,7 @@
 
 static const mbedtls_cipher_info_t aes_128_xts_info = {
     "AES-128-XTS",
-    &xts_aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_XTS_AES,
     MBEDTLS_CIPHER_AES_128_XTS,
     MBEDTLS_MODE_XTS,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -491,7 +509,7 @@
 
 static const mbedtls_cipher_info_t aes_256_xts_info = {
     "AES-256-XTS",
-    &xts_aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_XTS_AES,
     MBEDTLS_CIPHER_AES_256_XTS,
     MBEDTLS_MODE_XTS,
     512 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -538,7 +556,7 @@
 
 static const mbedtls_cipher_info_t aes_128_gcm_info = {
     "AES-128-GCM",
-    &gcm_aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_GCM_AES,
     MBEDTLS_CIPHER_AES_128_GCM,
     MBEDTLS_MODE_GCM,
     128 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -549,7 +567,7 @@
 
 static const mbedtls_cipher_info_t aes_192_gcm_info = {
     "AES-192-GCM",
-    &gcm_aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_GCM_AES,
     MBEDTLS_CIPHER_AES_192_GCM,
     MBEDTLS_MODE_GCM,
     192 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -560,7 +578,7 @@
 
 static const mbedtls_cipher_info_t aes_256_gcm_info = {
     "AES-256-GCM",
-    &gcm_aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_GCM_AES,
     MBEDTLS_CIPHER_AES_256_GCM,
     MBEDTLS_MODE_GCM,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -607,7 +625,7 @@
 
 static const mbedtls_cipher_info_t aes_128_ccm_info = {
     "AES-128-CCM",
-    &ccm_aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CCM_AES,
     MBEDTLS_CIPHER_AES_128_CCM,
     MBEDTLS_MODE_CCM,
     128 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -618,7 +636,7 @@
 
 static const mbedtls_cipher_info_t aes_192_ccm_info = {
     "AES-192-CCM",
-    &ccm_aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CCM_AES,
     MBEDTLS_CIPHER_AES_192_CCM,
     MBEDTLS_MODE_CCM,
     192 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -629,7 +647,7 @@
 
 static const mbedtls_cipher_info_t aes_256_ccm_info = {
     "AES-256-CCM",
-    &ccm_aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CCM_AES,
     MBEDTLS_CIPHER_AES_256_CCM,
     MBEDTLS_MODE_CCM,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -640,7 +658,7 @@
 
 static const mbedtls_cipher_info_t aes_128_ccm_star_no_tag_info = {
     "AES-128-CCM*-NO-TAG",
-    &ccm_aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CCM_AES,
     MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG,
     MBEDTLS_MODE_CCM_STAR_NO_TAG,
     128 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -651,7 +669,7 @@
 
 static const mbedtls_cipher_info_t aes_192_ccm_star_no_tag_info = {
     "AES-192-CCM*-NO-TAG",
-    &ccm_aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CCM_AES,
     MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG,
     MBEDTLS_MODE_CCM_STAR_NO_TAG,
     192 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -662,7 +680,7 @@
 
 static const mbedtls_cipher_info_t aes_256_ccm_star_no_tag_info = {
     "AES-256-CCM*-NO-TAG",
-    &ccm_aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CCM_AES,
     MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG,
     MBEDTLS_MODE_CCM_STAR_NO_TAG,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -774,7 +792,7 @@
 
 static const mbedtls_cipher_info_t camellia_128_ecb_info = {
     "CAMELLIA-128-ECB",
-    &camellia_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
     MBEDTLS_CIPHER_CAMELLIA_128_ECB,
     MBEDTLS_MODE_ECB,
     128 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -785,7 +803,7 @@
 
 static const mbedtls_cipher_info_t camellia_192_ecb_info = {
     "CAMELLIA-192-ECB",
-    &camellia_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
     MBEDTLS_CIPHER_CAMELLIA_192_ECB,
     MBEDTLS_MODE_ECB,
     192 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -796,7 +814,7 @@
 
 static const mbedtls_cipher_info_t camellia_256_ecb_info = {
     "CAMELLIA-256-ECB",
-    &camellia_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
     MBEDTLS_CIPHER_CAMELLIA_256_ECB,
     MBEDTLS_MODE_ECB,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -808,7 +826,7 @@
 #if defined(MBEDTLS_CIPHER_MODE_CBC)
 static const mbedtls_cipher_info_t camellia_128_cbc_info = {
     "CAMELLIA-128-CBC",
-    &camellia_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
     MBEDTLS_CIPHER_CAMELLIA_128_CBC,
     MBEDTLS_MODE_CBC,
     128 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -819,7 +837,7 @@
 
 static const mbedtls_cipher_info_t camellia_192_cbc_info = {
     "CAMELLIA-192-CBC",
-    &camellia_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
     MBEDTLS_CIPHER_CAMELLIA_192_CBC,
     MBEDTLS_MODE_CBC,
     192 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -830,7 +848,7 @@
 
 static const mbedtls_cipher_info_t camellia_256_cbc_info = {
     "CAMELLIA-256-CBC",
-    &camellia_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
     MBEDTLS_CIPHER_CAMELLIA_256_CBC,
     MBEDTLS_MODE_CBC,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -843,7 +861,7 @@
 #if defined(MBEDTLS_CIPHER_MODE_CFB)
 static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
     "CAMELLIA-128-CFB128",
-    &camellia_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
     MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
     MBEDTLS_MODE_CFB,
     128 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -854,7 +872,7 @@
 
 static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
     "CAMELLIA-192-CFB128",
-    &camellia_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
     MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
     MBEDTLS_MODE_CFB,
     192 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -865,7 +883,7 @@
 
 static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
     "CAMELLIA-256-CFB128",
-    &camellia_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
     MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
     MBEDTLS_MODE_CFB,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -878,7 +896,7 @@
 #if defined(MBEDTLS_CIPHER_MODE_CTR)
 static const mbedtls_cipher_info_t camellia_128_ctr_info = {
     "CAMELLIA-128-CTR",
-    &camellia_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
     MBEDTLS_CIPHER_CAMELLIA_128_CTR,
     MBEDTLS_MODE_CTR,
     128 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -889,7 +907,7 @@
 
 static const mbedtls_cipher_info_t camellia_192_ctr_info = {
     "CAMELLIA-192-CTR",
-    &camellia_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
     MBEDTLS_CIPHER_CAMELLIA_192_CTR,
     MBEDTLS_MODE_CTR,
     192 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -900,7 +918,7 @@
 
 static const mbedtls_cipher_info_t camellia_256_ctr_info = {
     "CAMELLIA-256-CTR",
-    &camellia_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
     MBEDTLS_CIPHER_CAMELLIA_256_CTR,
     MBEDTLS_MODE_CTR,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -947,7 +965,7 @@
 
 static const mbedtls_cipher_info_t camellia_128_gcm_info = {
     "CAMELLIA-128-GCM",
-    &gcm_camellia_info,
+    MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA,
     MBEDTLS_CIPHER_CAMELLIA_128_GCM,
     MBEDTLS_MODE_GCM,
     128 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -958,7 +976,7 @@
 
 static const mbedtls_cipher_info_t camellia_192_gcm_info = {
     "CAMELLIA-192-GCM",
-    &gcm_camellia_info,
+    MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA,
     MBEDTLS_CIPHER_CAMELLIA_192_GCM,
     MBEDTLS_MODE_GCM,
     192 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -969,7 +987,7 @@
 
 static const mbedtls_cipher_info_t camellia_256_gcm_info = {
     "CAMELLIA-256-GCM",
-    &gcm_camellia_info,
+    MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA,
     MBEDTLS_CIPHER_CAMELLIA_256_GCM,
     MBEDTLS_MODE_GCM,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1016,7 +1034,7 @@
 
 static const mbedtls_cipher_info_t camellia_128_ccm_info = {
     "CAMELLIA-128-CCM",
-    &ccm_camellia_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA,
     MBEDTLS_CIPHER_CAMELLIA_128_CCM,
     MBEDTLS_MODE_CCM,
     128 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1027,7 +1045,7 @@
 
 static const mbedtls_cipher_info_t camellia_192_ccm_info = {
     "CAMELLIA-192-CCM",
-    &ccm_camellia_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA,
     MBEDTLS_CIPHER_CAMELLIA_192_CCM,
     MBEDTLS_MODE_CCM,
     192 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1038,7 +1056,7 @@
 
 static const mbedtls_cipher_info_t camellia_256_ccm_info = {
     "CAMELLIA-256-CCM",
-    &ccm_camellia_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA,
     MBEDTLS_CIPHER_CAMELLIA_256_CCM,
     MBEDTLS_MODE_CCM,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1049,7 +1067,7 @@
 
 static const mbedtls_cipher_info_t camellia_128_ccm_star_no_tag_info = {
     "CAMELLIA-128-CCM*-NO-TAG",
-    &ccm_camellia_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA,
     MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG,
     MBEDTLS_MODE_CCM_STAR_NO_TAG,
     128 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1060,7 +1078,7 @@
 
 static const mbedtls_cipher_info_t camellia_192_ccm_star_no_tag_info = {
     "CAMELLIA-192-CCM*-NO-TAG",
-    &ccm_camellia_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA,
     MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG,
     MBEDTLS_MODE_CCM_STAR_NO_TAG,
     192 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1071,7 +1089,7 @@
 
 static const mbedtls_cipher_info_t camellia_256_ccm_star_no_tag_info = {
     "CAMELLIA-256-CCM*-NO-TAG",
-    &ccm_camellia_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA,
     MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG,
     MBEDTLS_MODE_CCM_STAR_NO_TAG,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1184,7 +1202,7 @@
 
 static const mbedtls_cipher_info_t aria_128_ecb_info = {
     "ARIA-128-ECB",
-    &aria_info,
+    MBEDTLS_CIPHER_BASE_INDEX_ARIA,
     MBEDTLS_CIPHER_ARIA_128_ECB,
     MBEDTLS_MODE_ECB,
     128 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1195,7 +1213,7 @@
 
 static const mbedtls_cipher_info_t aria_192_ecb_info = {
     "ARIA-192-ECB",
-    &aria_info,
+    MBEDTLS_CIPHER_BASE_INDEX_ARIA,
     MBEDTLS_CIPHER_ARIA_192_ECB,
     MBEDTLS_MODE_ECB,
     192 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1206,7 +1224,7 @@
 
 static const mbedtls_cipher_info_t aria_256_ecb_info = {
     "ARIA-256-ECB",
-    &aria_info,
+    MBEDTLS_CIPHER_BASE_INDEX_ARIA,
     MBEDTLS_CIPHER_ARIA_256_ECB,
     MBEDTLS_MODE_ECB,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1218,7 +1236,7 @@
 #if defined(MBEDTLS_CIPHER_MODE_CBC)
 static const mbedtls_cipher_info_t aria_128_cbc_info = {
     "ARIA-128-CBC",
-    &aria_info,
+    MBEDTLS_CIPHER_BASE_INDEX_ARIA,
     MBEDTLS_CIPHER_ARIA_128_CBC,
     MBEDTLS_MODE_CBC,
     128 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1229,7 +1247,7 @@
 
 static const mbedtls_cipher_info_t aria_192_cbc_info = {
     "ARIA-192-CBC",
-    &aria_info,
+    MBEDTLS_CIPHER_BASE_INDEX_ARIA,
     MBEDTLS_CIPHER_ARIA_192_CBC,
     MBEDTLS_MODE_CBC,
     192 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1240,7 +1258,7 @@
 
 static const mbedtls_cipher_info_t aria_256_cbc_info = {
     "ARIA-256-CBC",
-    &aria_info,
+    MBEDTLS_CIPHER_BASE_INDEX_ARIA,
     MBEDTLS_CIPHER_ARIA_256_CBC,
     MBEDTLS_MODE_CBC,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1253,7 +1271,7 @@
 #if defined(MBEDTLS_CIPHER_MODE_CFB)
 static const mbedtls_cipher_info_t aria_128_cfb128_info = {
     "ARIA-128-CFB128",
-    &aria_info,
+    MBEDTLS_CIPHER_BASE_INDEX_ARIA,
     MBEDTLS_CIPHER_ARIA_128_CFB128,
     MBEDTLS_MODE_CFB,
     128 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1264,7 +1282,7 @@
 
 static const mbedtls_cipher_info_t aria_192_cfb128_info = {
     "ARIA-192-CFB128",
-    &aria_info,
+    MBEDTLS_CIPHER_BASE_INDEX_ARIA,
     MBEDTLS_CIPHER_ARIA_192_CFB128,
     MBEDTLS_MODE_CFB,
     192 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1275,7 +1293,7 @@
 
 static const mbedtls_cipher_info_t aria_256_cfb128_info = {
     "ARIA-256-CFB128",
-    &aria_info,
+    MBEDTLS_CIPHER_BASE_INDEX_ARIA,
     MBEDTLS_CIPHER_ARIA_256_CFB128,
     MBEDTLS_MODE_CFB,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1288,7 +1306,7 @@
 #if defined(MBEDTLS_CIPHER_MODE_CTR)
 static const mbedtls_cipher_info_t aria_128_ctr_info = {
     "ARIA-128-CTR",
-    &aria_info,
+    MBEDTLS_CIPHER_BASE_INDEX_ARIA,
     MBEDTLS_CIPHER_ARIA_128_CTR,
     MBEDTLS_MODE_CTR,
     128 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1299,7 +1317,7 @@
 
 static const mbedtls_cipher_info_t aria_192_ctr_info = {
     "ARIA-192-CTR",
-    &aria_info,
+    MBEDTLS_CIPHER_BASE_INDEX_ARIA,
     MBEDTLS_CIPHER_ARIA_192_CTR,
     MBEDTLS_MODE_CTR,
     192 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1310,7 +1328,7 @@
 
 static const mbedtls_cipher_info_t aria_256_ctr_info = {
     "ARIA-256-CTR",
-    &aria_info,
+    MBEDTLS_CIPHER_BASE_INDEX_ARIA,
     MBEDTLS_CIPHER_ARIA_256_CTR,
     MBEDTLS_MODE_CTR,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1357,7 +1375,7 @@
 
 static const mbedtls_cipher_info_t aria_128_gcm_info = {
     "ARIA-128-GCM",
-    &gcm_aria_info,
+    MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA,
     MBEDTLS_CIPHER_ARIA_128_GCM,
     MBEDTLS_MODE_GCM,
     128 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1368,7 +1386,7 @@
 
 static const mbedtls_cipher_info_t aria_192_gcm_info = {
     "ARIA-192-GCM",
-    &gcm_aria_info,
+    MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA,
     MBEDTLS_CIPHER_ARIA_192_GCM,
     MBEDTLS_MODE_GCM,
     192 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1379,7 +1397,7 @@
 
 static const mbedtls_cipher_info_t aria_256_gcm_info = {
     "ARIA-256-GCM",
-    &gcm_aria_info,
+    MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA,
     MBEDTLS_CIPHER_ARIA_256_GCM,
     MBEDTLS_MODE_GCM,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1426,7 +1444,7 @@
 
 static const mbedtls_cipher_info_t aria_128_ccm_info = {
     "ARIA-128-CCM",
-    &ccm_aria_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA,
     MBEDTLS_CIPHER_ARIA_128_CCM,
     MBEDTLS_MODE_CCM,
     128 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1437,7 +1455,7 @@
 
 static const mbedtls_cipher_info_t aria_192_ccm_info = {
     "ARIA-192-CCM",
-    &ccm_aria_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA,
     MBEDTLS_CIPHER_ARIA_192_CCM,
     MBEDTLS_MODE_CCM,
     192 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1448,7 +1466,7 @@
 
 static const mbedtls_cipher_info_t aria_256_ccm_info = {
     "ARIA-256-CCM",
-    &ccm_aria_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA,
     MBEDTLS_CIPHER_ARIA_256_CCM,
     MBEDTLS_MODE_CCM,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1459,7 +1477,7 @@
 
 static const mbedtls_cipher_info_t aria_128_ccm_star_no_tag_info = {
     "ARIA-128-CCM*-NO-TAG",
-    &ccm_aria_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA,
     MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG,
     MBEDTLS_MODE_CCM_STAR_NO_TAG,
     128 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1470,7 +1488,7 @@
 
 static const mbedtls_cipher_info_t aria_192_ccm_star_no_tag_info = {
     "ARIA-192-CCM*-NO-TAG",
-    &ccm_aria_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA,
     MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG,
     MBEDTLS_MODE_CCM_STAR_NO_TAG,
     192 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1481,7 +1499,7 @@
 
 static const mbedtls_cipher_info_t aria_256_ccm_star_no_tag_info = {
     "ARIA-256-CCM*-NO-TAG",
-    &ccm_aria_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA,
     MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG,
     MBEDTLS_MODE_CCM_STAR_NO_TAG,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1643,7 +1661,7 @@
 
 static const mbedtls_cipher_info_t des_ecb_info = {
     "DES-ECB",
-    &des_info,
+    MBEDTLS_CIPHER_BASE_INDEX_DES,
     MBEDTLS_CIPHER_DES_ECB,
     MBEDTLS_MODE_ECB,
     MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1655,7 +1673,7 @@
 #if defined(MBEDTLS_CIPHER_MODE_CBC)
 static const mbedtls_cipher_info_t des_cbc_info = {
     "DES-CBC",
-    &des_info,
+    MBEDTLS_CIPHER_BASE_INDEX_DES,
     MBEDTLS_CIPHER_DES_CBC,
     MBEDTLS_MODE_CBC,
     MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1694,7 +1712,7 @@
 
 static const mbedtls_cipher_info_t des_ede_ecb_info = {
     "DES-EDE-ECB",
-    &des_ede_info,
+    MBEDTLS_CIPHER_BASE_INDEX_DES_EDE,
     MBEDTLS_CIPHER_DES_EDE_ECB,
     MBEDTLS_MODE_ECB,
     MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1706,7 +1724,7 @@
 #if defined(MBEDTLS_CIPHER_MODE_CBC)
 static const mbedtls_cipher_info_t des_ede_cbc_info = {
     "DES-EDE-CBC",
-    &des_ede_info,
+    MBEDTLS_CIPHER_BASE_INDEX_DES_EDE,
     MBEDTLS_CIPHER_DES_EDE_CBC,
     MBEDTLS_MODE_CBC,
     MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1745,7 +1763,7 @@
 
 static const mbedtls_cipher_info_t des_ede3_ecb_info = {
     "DES-EDE3-ECB",
-    &des_ede3_info,
+    MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3,
     MBEDTLS_CIPHER_DES_EDE3_ECB,
     MBEDTLS_MODE_ECB,
     MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1756,7 +1774,7 @@
 #if defined(MBEDTLS_CIPHER_MODE_CBC)
 static const mbedtls_cipher_info_t des_ede3_cbc_info = {
     "DES-EDE3-CBC",
-    &des_ede3_info,
+    MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3,
     MBEDTLS_CIPHER_DES_EDE3_CBC,
     MBEDTLS_MODE_CBC,
     MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1845,7 +1863,7 @@
 };
 static const mbedtls_cipher_info_t chacha20_info = {
     "CHACHA20",
-    &chacha20_base_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE,
     MBEDTLS_CIPHER_CHACHA20,
     MBEDTLS_MODE_STREAM,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1920,7 +1938,7 @@
 };
 static const mbedtls_cipher_info_t chachapoly_info = {
     "CHACHA20-POLY1305",
-    &chachapoly_base_info,
+    MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE,
     MBEDTLS_CIPHER_CHACHA20_POLY1305,
     MBEDTLS_MODE_CHACHAPOLY,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -1989,7 +2007,7 @@
 
 static const mbedtls_cipher_info_t null_cipher_info = {
     "NULL",
-    &null_base_info,
+    MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE,
     MBEDTLS_CIPHER_NULL,
     MBEDTLS_MODE_STREAM,
     0 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -2060,7 +2078,7 @@
 
 static const mbedtls_cipher_info_t aes_128_nist_kw_info = {
     "AES-128-KW",
-    &kw_aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_KW_AES,
     MBEDTLS_CIPHER_AES_128_KW,
     MBEDTLS_MODE_KW,
     128 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -2071,7 +2089,7 @@
 
 static const mbedtls_cipher_info_t aes_192_nist_kw_info = {
     "AES-192-KW",
-    &kw_aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_KW_AES,
     MBEDTLS_CIPHER_AES_192_KW,
     MBEDTLS_MODE_KW,
     192 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -2082,7 +2100,7 @@
 
 static const mbedtls_cipher_info_t aes_256_nist_kw_info = {
     "AES-256-KW",
-    &kw_aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_KW_AES,
     MBEDTLS_CIPHER_AES_256_KW,
     MBEDTLS_MODE_KW,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -2093,7 +2111,7 @@
 
 static const mbedtls_cipher_info_t aes_128_nist_kwp_info = {
     "AES-128-KWP",
-    &kw_aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_KW_AES,
     MBEDTLS_CIPHER_AES_128_KWP,
     MBEDTLS_MODE_KWP,
     128 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -2104,7 +2122,7 @@
 
 static const mbedtls_cipher_info_t aes_192_nist_kwp_info = {
     "AES-192-KWP",
-    &kw_aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_KW_AES,
     MBEDTLS_CIPHER_AES_192_KWP,
     MBEDTLS_MODE_KWP,
     192 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -2115,7 +2133,7 @@
 
 static const mbedtls_cipher_info_t aes_256_nist_kwp_info = {
     "AES-256-KWP",
-    &kw_aes_info,
+    MBEDTLS_CIPHER_BASE_INDEX_KW_AES,
     MBEDTLS_CIPHER_AES_256_KWP,
     MBEDTLS_MODE_KWP,
     256 >> MBEDTLS_KEY_BITLEN_SHIFT,
@@ -2277,4 +2295,92 @@
                      sizeof(mbedtls_cipher_definitions[0]))
 int mbedtls_cipher_supported[NUM_CIPHERS];
 
+const mbedtls_cipher_base_t* mbedtls_cipher_base_lookup_table[] = {
+#if defined(MBEDTLS_AES_C)
+    &aes_info,
+#else
+    NULL,
+#endif
+#if defined(MBEDTLS_ARIA_C)
+    &aria_info,
+#else
+    NULL,
+#endif
+#if defined(MBEDTLS_CAMELLIA_C)
+    &camellia_info,
+#else
+    NULL,
+#endif
+#if defined(MBEDTLS_CCM_C)
+    &ccm_aes_info,
+#else
+    NULL,
+#endif
+#if defined(MBEDTLS_CCM_C)
+    &ccm_aria_info,
+#else
+    NULL,
+#endif
+#if defined(MBEDTLS_CCM_C)
+    &ccm_camellia_info,
+#else
+    NULL,
+#endif
+#if defined(MBEDTLS_CHACHA20_C)
+    &chacha20_base_info,
+#else
+    NULL,
+#endif
+#if defined(MBEDTLS_CHACHAPOLY_C)
+    &chachapoly_base_info,
+#else
+    NULL,
+#endif
+#if defined(MBEDTLS_DES_C)
+    &des_ede3_info,
+#else
+    NULL,
+#endif
+#if defined(MBEDTLS_DES_C)
+    &des_ede_info,
+#else
+    NULL,
+#endif
+#if defined(MBEDTLS_DES_C)
+    &des_info,
+#else
+    NULL,
+#endif
+#if defined(MBEDTLS_GCM_C)
+    &gcm_aes_info,
+#else
+    NULL,
+#endif
+#if defined(MBEDTLS_GCM_C)
+    &gcm_aria_info,
+#else
+    NULL,
+#endif
+#if defined(MBEDTLS_GCM_C)
+    &gcm_camellia_info,
+#else
+    NULL,
+#endif
+#if defined(MBEDTLS_NIST_KW_C)
+    &kw_aes_info,
+#else
+    NULL,
+#endif
+#if defined(MBEDTLS_CIPHER_NULL_CIPHER)
+    &null_base_info,
+#else
+    NULL,
+#endif
+#if defined(MBEDTLS_CIPHER_MODE_XTS)
+    &xts_aes_info,
+#else
+    NULL,
+#endif
+};
+
 #endif /* MBEDTLS_CIPHER_C */
diff --git a/library/cipher_wrap.h b/library/cipher_wrap.h
index 052cddb..06c8108 100644
--- a/library/cipher_wrap.h
+++ b/library/cipher_wrap.h
@@ -135,6 +135,8 @@
 
 extern int mbedtls_cipher_supported[];
 
+extern const mbedtls_cipher_base_t * mbedtls_cipher_base_lookup_table[];
+
 #ifdef __cplusplus
 }
 #endif