From: Martin Matuska Date: Wed, 4 Nov 2020 06:49:36 +0000 (+0100) Subject: archive_cryptor: use new Nettle AES interface on Nettle 3.0 and higher X-Git-Tag: v3.5.0~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f6154ee30278a98279891aa6e5705196337469b2;p=thirdparty%2Flibarchive.git archive_cryptor: use new Nettle AES interface on Nettle 3.0 and higher --- diff --git a/libarchive/archive_cryptor.c b/libarchive/archive_cryptor.c index 486e2999d..d4bca906b 100644 --- a/libarchive/archive_cryptor.c +++ b/libarchive/archive_cryptor.c @@ -347,29 +347,25 @@ aes_ctr_init(archive_crypto_ctx *ctx, const uint8_t *key, size_t key_len) static int aes_ctr_encrypt_counter(archive_crypto_ctx *ctx) { -#if NETTLE_VERSION_MAJOR < 3 || \ - (NETTLE_VERSION_MAJOR == 3 && NETTLE_VERSION_MINOR < 5) +#if NETTLE_VERSION_MAJOR < 3 aes_set_encrypt_key(&ctx->ctx, ctx->key_len, ctx->key); aes_encrypt(&ctx->ctx, AES_BLOCK_SIZE, ctx->encr_buf, ctx->nonce); #else switch(ctx->key_len) { - case 16: - aes128_set_encrypt_key((struct aes128_ctx *)&ctx->ctx.u.ctx128, - ctx->key); - aes128_encrypt((struct aes128_ctx *)&ctx->ctx.u.ctx128, - AES_BLOCK_SIZE, ctx->encr_buf, ctx->nonce); + case AES128_KEY_SIZE: + aes128_set_encrypt_key(&ctx->ctx.c128, ctx->key); + aes128_encrypt(&ctx->ctx.c128, AES_BLOCK_SIZE, ctx->encr_buf, + ctx->nonce); break; - case 24: - aes192_set_encrypt_key((struct aes192_ctx *)&ctx->ctx.u.ctx192, - ctx->key); - aes192_encrypt((struct aes192_ctx *)&ctx->ctx.u.ctx192, - AES_BLOCK_SIZE, ctx->encr_buf, ctx->nonce); + case AES192_KEY_SIZE: + aes192_set_encrypt_key(&ctx->ctx.c192, ctx->key); + aes192_encrypt(&ctx->ctx.c192, AES_BLOCK_SIZE, ctx->encr_buf, + ctx->nonce); break; - case 32: - aes256_set_encrypt_key((struct aes256_ctx *)&ctx->ctx.u.ctx256, - ctx->key); - aes256_encrypt((struct aes256_ctx *)&ctx->ctx.u.ctx256, - AES_BLOCK_SIZE, ctx->encr_buf, ctx->nonce); + case AES256_KEY_SIZE: + aes256_set_encrypt_key(&ctx->ctx.c256, ctx->key); + aes256_encrypt(&ctx->ctx.c256, AES_BLOCK_SIZE, ctx->encr_buf, + ctx->nonce); break; default: return -1; diff --git a/libarchive/archive_cryptor_private.h b/libarchive/archive_cryptor_private.h index bcd6c5839..16b6d16ff 100644 --- a/libarchive/archive_cryptor_private.h +++ b/libarchive/archive_cryptor_private.h @@ -107,7 +107,15 @@ typedef struct { #include typedef struct { +#if NETTLE_VERSION_MAJOR < 3 struct aes_ctx ctx; +#else + union { + struct aes128_ctx c128; + struct aes192_ctx c192; + struct aes256_ctx c256; + } ctx; +#endif uint8_t key[AES_MAX_KEY_SIZE]; unsigned key_len; uint8_t nonce[AES_BLOCK_SIZE];