From 6c80f34c07a629926f4a5948f97f823396622749 Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Sun, 7 Apr 2024 22:47:26 +0200 Subject: [PATCH] uencrypt: Fix mbedtls 3.6 compatibility This makes it compile with mbedtls 3.6.0. Signed-off-by: Hauke Mehrtens --- package/utils/uencrypt/src/uencrypt-mbedtls.c | 62 +++++++++++++++++-- 1 file changed, 57 insertions(+), 5 deletions(-) diff --git a/package/utils/uencrypt/src/uencrypt-mbedtls.c b/package/utils/uencrypt/src/uencrypt-mbedtls.c index 34851261b79d..119d07b422c8 100644 --- a/package/utils/uencrypt/src/uencrypt-mbedtls.c +++ b/package/utils/uencrypt/src/uencrypt-mbedtls.c @@ -9,6 +9,58 @@ #include #include "uencrypt.h" +#if MBEDTLS_VERSION_NUMBER < 0x03010000 /* mbedtls 3.1.0 */ +static inline mbedtls_cipher_mode_t mbedtls_cipher_info_get_mode( + const mbedtls_cipher_info_t *info) +{ + if (info == NULL) { + return MBEDTLS_MODE_NONE; + } else { + return info->mode; + } +} + +static inline size_t mbedtls_cipher_info_get_key_bitlen( + const mbedtls_cipher_info_t *info) +{ + if (info == NULL) { + return 0; + } else { + return info->key_bitlen; + } +} + +static inline const char *mbedtls_cipher_info_get_name( + const mbedtls_cipher_info_t *info) +{ + if (info == NULL) { + return NULL; + } else { + return info->name; + } +} + +static inline size_t mbedtls_cipher_info_get_iv_size( + const mbedtls_cipher_info_t *info) +{ + if (info == NULL) { + return 0; + } + + return info->iv_size; +} + +static inline size_t mbedtls_cipher_info_get_block_size( + const mbedtls_cipher_info_t *info) +{ + if (info == NULL) { + return 0; + } + + return info->block_size; +} +#endif + unsigned char *hexstr2buf(const char *str, long *len) { unsigned char *buf; @@ -50,7 +102,7 @@ const cipher_t *get_cipher_or_print_error(char *name) cipher = mbedtls_cipher_info_from_type(*list); if (!cipher) continue; - fprintf(stderr, "\t%s\n", cipher->name); + fprintf(stderr, "\t%s\n", mbedtls_cipher_info_get_name(cipher)); } return NULL; } @@ -59,14 +111,14 @@ int get_cipher_ivsize(const cipher_t *cipher) { const mbedtls_cipher_info_t *c = cipher; - return c->iv_size; + return mbedtls_cipher_info_get_iv_size(c); } int get_cipher_keysize(const cipher_t *cipher) { const mbedtls_cipher_info_t *c = cipher; - return c->key_bitlen >> 3; + return mbedtls_cipher_info_get_key_bitlen(c) >> 3; } ctx_t *create_ctx(const cipher_t *cipher, const unsigned char *key, @@ -103,7 +155,7 @@ ctx_t *create_ctx(const cipher_t *cipher, const unsigned char *key, } } - if (cipher_info->mode == MBEDTLS_MODE_CBC) { + if (mbedtls_cipher_info_get_mode(cipher_info) == MBEDTLS_MODE_CBC) { ret = mbedtls_cipher_set_padding_mode(ctx, padding ? MBEDTLS_PADDING_PKCS7 : MBEDTLS_PADDING_NONE); @@ -113,7 +165,7 @@ ctx_t *create_ctx(const cipher_t *cipher, const unsigned char *key, goto abort; } } else { - if (cipher_info->block_size > 1 && padding) { + if (mbedtls_cipher_info_get_block_size(cipher_info) > 1 && padding) { fprintf(stderr, "Error: mbedTLS only allows padding with CBC ciphers.\n"); goto abort; -- 2.30.2