]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
archive_cryptor: use new Nettle AES interface on Nettle 3.0 and higher
authorMartin Matuska <martin@matuska.org>
Wed, 4 Nov 2020 06:49:36 +0000 (07:49 +0100)
committerMartin Matuska <martin@matuska.org>
Wed, 4 Nov 2020 07:05:31 +0000 (08:05 +0100)
libarchive/archive_cryptor.c
libarchive/archive_cryptor_private.h

index 486e2999d579d33c03d47114dc26329087005073..d4bca906b6ee95c00e71561404ba939a91f40e81 100644 (file)
@@ -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;
index bcd6c5839cc7164c1728414394e3ac805aa7459e..16b6d16ff23cca5e42838fdc28139c3b845f1151 100644 (file)
@@ -107,7 +107,15 @@ typedef struct {
 #include <nettle/version.h>
 
 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];