get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/1.0/patches/2197958/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2197958,
    "url": "http://patchwork.ozlabs.org/api/1.0/patches/2197958/?format=api",
    "project": {
        "id": 12,
        "url": "http://patchwork.ozlabs.org/api/1.0/projects/12/?format=api",
        "name": "Linux CIFS Client",
        "link_name": "linux-cifs-client",
        "list_id": "linux-cifs.vger.kernel.org",
        "list_email": "linux-cifs@vger.kernel.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": ""
    },
    "msgid": "<20260218213501.136844-5-ebiggers@kernel.org>",
    "date": "2026-02-18T21:34:50",
    "name": "[04/15] lib/crypto: arm64/aes: Move assembly code for AES modes into libaes",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "04ab3d0717fc3d1084c402b0c4d512a949558eb7",
    "submitter": {
        "id": 74690,
        "url": "http://patchwork.ozlabs.org/api/1.0/people/74690/?format=api",
        "name": "Eric Biggers",
        "email": "ebiggers@kernel.org"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linux-cifs-client/patch/20260218213501.136844-5-ebiggers@kernel.org/mbox/",
    "series": [
        {
            "id": 492621,
            "url": "http://patchwork.ozlabs.org/api/1.0/series/492621/?format=api",
            "date": "2026-02-18T21:34:46",
            "name": "AES-CMAC library",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/492621/mbox/"
        }
    ],
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2197958/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "\n <linux-cifs+bounces-9445-incoming=patchwork.ozlabs.org@vger.kernel.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "linux-cifs@vger.kernel.org"
        ],
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=YDk5vBec;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c0a:e001:db::12fc:5321; helo=sea.lore.kernel.org;\n envelope-from=linux-cifs+bounces-9445-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)",
            "smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=\"YDk5vBec\"",
            "smtp.subspace.kernel.org;\n arc=none smtp.client-ip=10.30.226.201"
        ],
        "Received": [
            "from sea.lore.kernel.org (sea.lore.kernel.org\n [IPv6:2600:3c0a:e001:db::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fGVJC61Hkz1xvS\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 19 Feb 2026 08:38:51 +1100 (AEDT)",
            "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id B0B503061750\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 18 Feb 2026 21:37:01 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id BB99D335089;\n\tWed, 18 Feb 2026 21:36:52 +0000 (UTC)",
            "from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org\n [10.30.226.201])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 948AE335077;\n\tWed, 18 Feb 2026 21:36:52 +0000 (UTC)",
            "by smtp.kernel.org (Postfix) with ESMTPSA id D194EC2BC87;\n\tWed, 18 Feb 2026 21:36:51 +0000 (UTC)"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1771450612; cv=none;\n b=VzKG2Cr5rSt9ZQATyKPPGJThp/I3psM7eLDMBFBcN65jUEythosDWsadxbIfTCiEOUze8tGh+gtkzOdjr8nePhzL+mN3DcmDMUYgdfPEmdveoTzGIqqE/kyBWSgLwDm7famkqH0SCk6puAp8Py/Vn0PojqXi+ZoIkxqz8aqn3o0=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1771450612; c=relaxed/simple;\n\tbh=phuk8jYQce0F4jNXOX5zObjH9GAYqfm6mN8RyTfqKxI=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t MIME-Version;\n b=IRr2XnJAssRjOLJgzCzEgDDw+Lrlc8apRlhiqMnrbutNe+MiNUgEjAidnBzBnDL9D+QALZruLX11riCYy8Y20j3YjuPBxOpZASLxki3TXCRKZG2pA50FP1/d19rCn4KIceewfHm1V5me7wmkuGW7RfDG6FQqFPk4nMC03vsPNG8=",
        "ARC-Authentication-Results": "i=1; smtp.subspace.kernel.org;\n dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=YDk5vBec; arc=none smtp.client-ip=10.30.226.201",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1771450612;\n\tbh=phuk8jYQce0F4jNXOX5zObjH9GAYqfm6mN8RyTfqKxI=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=YDk5vBecbvLAatyHy+8rPljkUDUjwovG/5lkR86yOs+aba04Sw8ScWMjzZHM5nsP8\n\t TYE1PW3d0A8+E2LJNr6h+18HQzhjPszUeXD5MhP7JZniMxF6auAInqxEzYB7eSczZI\n\t 2nushArwUNjn1uy1Imf7sPrjgUXBPjn70s1vJV/mLqClKipQ6F3hA38dLFoIUd9tc4\n\t H6F4K0xUkPXDYa60HRZNx3CVa/9rrarlW4ne1mBraYE60RoXWL1OyhsouQQbnR38ti\n\t WkBoUP7XrG7B1xH5zO3pGZyNlJkUfRKGV2w3Xnx7+3/HkMcyNoaNPWLP4KLBh0kWrm\n\t Sv7Y7ERBgPDmw==",
        "From": "Eric Biggers <ebiggers@kernel.org>",
        "To": "linux-crypto@vger.kernel.org",
        "Cc": "linux-kernel@vger.kernel.org,\n\tArd Biesheuvel <ardb@kernel.org>,\n\t\"Jason A . Donenfeld\" <Jason@zx2c4.com>,\n\tHerbert Xu <herbert@gondor.apana.org.au>,\n\tlinux-arm-kernel@lists.infradead.org,\n\tlinux-cifs@vger.kernel.org,\n\tlinux-wireless@vger.kernel.org,\n\tEric Biggers <ebiggers@kernel.org>",
        "Subject": "[PATCH 04/15] lib/crypto: arm64/aes: Move assembly code for AES modes\n into libaes",
        "Date": "Wed, 18 Feb 2026 13:34:50 -0800",
        "Message-ID": "<20260218213501.136844-5-ebiggers@kernel.org>",
        "X-Mailer": "git-send-email 2.53.0",
        "In-Reply-To": "<20260218213501.136844-1-ebiggers@kernel.org>",
        "References": "<20260218213501.136844-1-ebiggers@kernel.org>",
        "Precedence": "bulk",
        "X-Mailing-List": "linux-cifs@vger.kernel.org",
        "List-Id": "<linux-cifs.vger.kernel.org>",
        "List-Subscribe": "<mailto:linux-cifs+subscribe@vger.kernel.org>",
        "List-Unsubscribe": "<mailto:linux-cifs+unsubscribe@vger.kernel.org>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit"
    },
    "content": "To migrate the support for CBC-based MACs into libaes, the corresponding\narm64 assembly code needs to be moved there.  However, the arm64 AES\nassembly code groups many AES modes together; individual modes aren't\neasily separable.  (This isn't unique to arm64; other architectures\norganize their AES modes similarly.)\n\nSince the other AES modes will be migrated into the library eventually\ntoo, just move the full assembly files for the AES modes into the\nlibrary.  (This is similar to what I already did for PowerPC and SPARC.)\n\nSpecifically: move the assembly files aes-ce.S, aes-modes.S, and\naes-neon.S and their build rules; declare the assembly functions in\n<crypto/aes.h>; and export the assembly functions from libaes.\n\nNote that the exports and public declarations of the assembly functions\nare temporary.  They exist only to keep arch/arm64/crypto/ working until\nthe AES modes are fully moved into the library.\n\nSigned-off-by: Eric Biggers <ebiggers@kernel.org>\n---\n arch/arm64/crypto/Makefile                    |  4 +-\n arch/arm64/crypto/aes-ce-ccm-glue.c           |  4 --\n arch/arm64/crypto/aes-glue.c                  | 47 +------------\n arch/arm64/crypto/aes-neonbs-glue.c           | 15 +---\n include/crypto/aes.h                          | 69 +++++++++++++++++++\n lib/crypto/Makefile                           |  4 +-\n .../crypto => lib/crypto/arm64}/aes-ce.S      |  0\n .../crypto => lib/crypto/arm64}/aes-modes.S   |  0\n .../crypto => lib/crypto/arm64}/aes-neon.S    |  0\n lib/crypto/arm64/aes.h                        | 30 ++++++++\n 10 files changed, 106 insertions(+), 67 deletions(-)\n rename {arch/arm64/crypto => lib/crypto/arm64}/aes-ce.S (100%)\n rename {arch/arm64/crypto => lib/crypto/arm64}/aes-modes.S (100%)\n rename {arch/arm64/crypto => lib/crypto/arm64}/aes-neon.S (100%)",
    "diff": "diff --git a/arch/arm64/crypto/Makefile b/arch/arm64/crypto/Makefile\nindex 3574e917bc37..8a8e3e551ed3 100644\n--- a/arch/arm64/crypto/Makefile\n+++ b/arch/arm64/crypto/Makefile\n@@ -31,12 +31,12 @@ ghash-ce-y := ghash-ce-glue.o ghash-ce-core.o\n \n obj-$(CONFIG_CRYPTO_AES_ARM64_CE_CCM) += aes-ce-ccm.o\n aes-ce-ccm-y := aes-ce-ccm-glue.o aes-ce-ccm-core.o\n \n obj-$(CONFIG_CRYPTO_AES_ARM64_CE_BLK) += aes-ce-blk.o\n-aes-ce-blk-y := aes-glue-ce.o aes-ce.o\n+aes-ce-blk-y := aes-glue-ce.o\n \n obj-$(CONFIG_CRYPTO_AES_ARM64_NEON_BLK) += aes-neon-blk.o\n-aes-neon-blk-y := aes-glue-neon.o aes-neon.o\n+aes-neon-blk-y := aes-glue-neon.o\n \n obj-$(CONFIG_CRYPTO_AES_ARM64_BS) += aes-neon-bs.o\n aes-neon-bs-y := aes-neonbs-core.o aes-neonbs-glue.o\ndiff --git a/arch/arm64/crypto/aes-ce-ccm-glue.c b/arch/arm64/crypto/aes-ce-ccm-glue.c\nindex db371ac051fc..45aed0073283 100644\n--- a/arch/arm64/crypto/aes-ce-ccm-glue.c\n+++ b/arch/arm64/crypto/aes-ce-ccm-glue.c\n@@ -29,14 +29,10 @@ static int num_rounds(struct crypto_aes_ctx *ctx)\n \t * => n byte key\t=> 6 + (n/4) rounds\n \t */\n \treturn 6 + ctx->key_length / 4;\n }\n \n-asmlinkage u32 ce_aes_mac_update(u8 const in[], u32 const rk[], int rounds,\n-\t\t\t\t int blocks, u8 dg[], int enc_before,\n-\t\t\t\t int enc_after);\n-\n asmlinkage void ce_aes_ccm_encrypt(u8 out[], u8 const in[], u32 cbytes,\n \t\t\t\t   u32 const rk[], u32 rounds, u8 mac[],\n \t\t\t\t   u8 ctr[], u8 const final_iv[]);\n \n asmlinkage void ce_aes_ccm_decrypt(u8 out[], u8 const in[], u32 cbytes,\ndiff --git a/arch/arm64/crypto/aes-glue.c b/arch/arm64/crypto/aes-glue.c\nindex 92f43e1cd097..fd7c3a560a71 100644\n--- a/arch/arm64/crypto/aes-glue.c\n+++ b/arch/arm64/crypto/aes-glue.c\n@@ -69,52 +69,13 @@ MODULE_ALIAS_CRYPTO(\"essiv(cbc(aes),sha256)\");\n MODULE_ALIAS_CRYPTO(\"cmac(aes)\");\n MODULE_ALIAS_CRYPTO(\"xcbc(aes)\");\n MODULE_ALIAS_CRYPTO(\"cbcmac(aes)\");\n \n MODULE_AUTHOR(\"Ard Biesheuvel <ard.biesheuvel@linaro.org>\");\n+MODULE_IMPORT_NS(\"CRYPTO_INTERNAL\");\n MODULE_LICENSE(\"GPL v2\");\n \n-/* defined in aes-modes.S */\n-asmlinkage void aes_ecb_encrypt(u8 out[], u8 const in[], u32 const rk[],\n-\t\t\t\tint rounds, int blocks);\n-asmlinkage void aes_ecb_decrypt(u8 out[], u8 const in[], u32 const rk[],\n-\t\t\t\tint rounds, int blocks);\n-\n-asmlinkage void aes_cbc_encrypt(u8 out[], u8 const in[], u32 const rk[],\n-\t\t\t\tint rounds, int blocks, u8 iv[]);\n-asmlinkage void aes_cbc_decrypt(u8 out[], u8 const in[], u32 const rk[],\n-\t\t\t\tint rounds, int blocks, u8 iv[]);\n-\n-asmlinkage void aes_cbc_cts_encrypt(u8 out[], u8 const in[], u32 const rk[],\n-\t\t\t\tint rounds, int bytes, u8 const iv[]);\n-asmlinkage void aes_cbc_cts_decrypt(u8 out[], u8 const in[], u32 const rk[],\n-\t\t\t\tint rounds, int bytes, u8 const iv[]);\n-\n-asmlinkage void aes_ctr_encrypt(u8 out[], u8 const in[], u32 const rk[],\n-\t\t\t\tint rounds, int bytes, u8 ctr[]);\n-\n-asmlinkage void aes_xctr_encrypt(u8 out[], u8 const in[], u32 const rk[],\n-\t\t\t\t int rounds, int bytes, u8 ctr[], int byte_ctr);\n-\n-asmlinkage void aes_xts_encrypt(u8 out[], u8 const in[], u32 const rk1[],\n-\t\t\t\tint rounds, int bytes, u32 const rk2[], u8 iv[],\n-\t\t\t\tint first);\n-asmlinkage void aes_xts_decrypt(u8 out[], u8 const in[], u32 const rk1[],\n-\t\t\t\tint rounds, int bytes, u32 const rk2[], u8 iv[],\n-\t\t\t\tint first);\n-\n-asmlinkage void aes_essiv_cbc_encrypt(u8 out[], u8 const in[], u32 const rk1[],\n-\t\t\t\t      int rounds, int blocks, u8 iv[],\n-\t\t\t\t      u32 const rk2[]);\n-asmlinkage void aes_essiv_cbc_decrypt(u8 out[], u8 const in[], u32 const rk1[],\n-\t\t\t\t      int rounds, int blocks, u8 iv[],\n-\t\t\t\t      u32 const rk2[]);\n-\n-asmlinkage int aes_mac_update(u8 const in[], u32 const rk[], int rounds,\n-\t\t\t      int blocks, u8 dg[], int enc_before,\n-\t\t\t      int enc_after);\n-\n struct crypto_aes_xts_ctx {\n \tstruct crypto_aes_ctx key1;\n \tstruct crypto_aes_ctx __aligned(8) key2;\n };\n \n@@ -969,15 +930,9 @@ static int __init aes_init(void)\n \treturn err;\n }\n \n #ifdef USE_V8_CRYPTO_EXTENSIONS\n module_cpu_feature_match(AES, aes_init);\n-EXPORT_SYMBOL_NS(ce_aes_mac_update, \"CRYPTO_INTERNAL\");\n #else\n module_init(aes_init);\n-EXPORT_SYMBOL(neon_aes_ecb_encrypt);\n-EXPORT_SYMBOL(neon_aes_cbc_encrypt);\n-EXPORT_SYMBOL(neon_aes_ctr_encrypt);\n-EXPORT_SYMBOL(neon_aes_xts_encrypt);\n-EXPORT_SYMBOL(neon_aes_xts_decrypt);\n #endif\n module_exit(aes_exit);\ndiff --git a/arch/arm64/crypto/aes-neonbs-glue.c b/arch/arm64/crypto/aes-neonbs-glue.c\nindex cb87c8fc66b3..7630a7bf5da9 100644\n--- a/arch/arm64/crypto/aes-neonbs-glue.c\n+++ b/arch/arm64/crypto/aes-neonbs-glue.c\n@@ -15,10 +15,11 @@\n #include <crypto/xts.h>\n #include <linux/module.h>\n \n MODULE_AUTHOR(\"Ard Biesheuvel <ard.biesheuvel@linaro.org>\");\n MODULE_DESCRIPTION(\"Bit sliced AES using NEON instructions\");\n+MODULE_IMPORT_NS(\"CRYPTO_INTERNAL\");\n MODULE_LICENSE(\"GPL v2\");\n \n MODULE_ALIAS_CRYPTO(\"ecb(aes)\");\n MODULE_ALIAS_CRYPTO(\"cbc(aes)\");\n MODULE_ALIAS_CRYPTO(\"ctr(aes)\");\n@@ -40,24 +41,10 @@ asmlinkage void aesbs_ctr_encrypt(u8 out[], u8 const in[], u8 const rk[],\n asmlinkage void aesbs_xts_encrypt(u8 out[], u8 const in[], u8 const rk[],\n \t\t\t\t  int rounds, int blocks, u8 iv[]);\n asmlinkage void aesbs_xts_decrypt(u8 out[], u8 const in[], u8 const rk[],\n \t\t\t\t  int rounds, int blocks, u8 iv[]);\n \n-/* borrowed from aes-neon-blk.ko */\n-asmlinkage void neon_aes_ecb_encrypt(u8 out[], u8 const in[], u32 const rk[],\n-\t\t\t\t     int rounds, int blocks);\n-asmlinkage void neon_aes_cbc_encrypt(u8 out[], u8 const in[], u32 const rk[],\n-\t\t\t\t     int rounds, int blocks, u8 iv[]);\n-asmlinkage void neon_aes_ctr_encrypt(u8 out[], u8 const in[], u32 const rk[],\n-\t\t\t\t     int rounds, int bytes, u8 ctr[]);\n-asmlinkage void neon_aes_xts_encrypt(u8 out[], u8 const in[],\n-\t\t\t\t     u32 const rk1[], int rounds, int bytes,\n-\t\t\t\t     u32 const rk2[], u8 iv[], int first);\n-asmlinkage void neon_aes_xts_decrypt(u8 out[], u8 const in[],\n-\t\t\t\t     u32 const rk1[], int rounds, int bytes,\n-\t\t\t\t     u32 const rk2[], u8 iv[], int first);\n-\n struct aesbs_ctx {\n \tu8\trk[13 * (8 * AES_BLOCK_SIZE) + 32];\n \tint\trounds;\n } __aligned(AES_BLOCK_SIZE);\n \ndiff --git a/include/crypto/aes.h b/include/crypto/aes.h\nindex cbf1cc96db52..91bf4667d3e9 100644\n--- a/include/crypto/aes.h\n+++ b/include/crypto/aes.h\n@@ -165,10 +165,79 @@ int aes_expandkey(struct crypto_aes_ctx *ctx, const u8 *in_key,\n  * that code is migrated into lib/crypto/.\n  */\n #ifdef CONFIG_ARM64\n int ce_aes_expandkey(struct crypto_aes_ctx *ctx, const u8 *in_key,\n \t\t     unsigned int key_len);\n+asmlinkage void neon_aes_ecb_encrypt(u8 out[], u8 const in[], u32 const rk[],\n+\t\t\t\t     int rounds, int blocks);\n+asmlinkage void neon_aes_ecb_decrypt(u8 out[], u8 const in[], u32 const rk[],\n+\t\t\t\t     int rounds, int blocks);\n+asmlinkage void neon_aes_cbc_encrypt(u8 out[], u8 const in[], u32 const rk[],\n+\t\t\t\t     int rounds, int blocks, u8 iv[]);\n+asmlinkage void neon_aes_cbc_decrypt(u8 out[], u8 const in[], u32 const rk[],\n+\t\t\t\t     int rounds, int blocks, u8 iv[]);\n+asmlinkage void neon_aes_cbc_cts_encrypt(u8 out[], u8 const in[],\n+\t\t\t\t\t u32 const rk[], int rounds, int bytes,\n+\t\t\t\t\t u8 const iv[]);\n+asmlinkage void neon_aes_cbc_cts_decrypt(u8 out[], u8 const in[],\n+\t\t\t\t\t u32 const rk[], int rounds, int bytes,\n+\t\t\t\t\t u8 const iv[]);\n+asmlinkage void neon_aes_ctr_encrypt(u8 out[], u8 const in[], u32 const rk[],\n+\t\t\t\t     int rounds, int bytes, u8 ctr[]);\n+asmlinkage void neon_aes_xctr_encrypt(u8 out[], u8 const in[], u32 const rk[],\n+\t\t\t\t      int rounds, int bytes, u8 ctr[],\n+\t\t\t\t      int byte_ctr);\n+asmlinkage void neon_aes_xts_encrypt(u8 out[], u8 const in[], u32 const rk1[],\n+\t\t\t\t     int rounds, int bytes, u32 const rk2[],\n+\t\t\t\t     u8 iv[], int first);\n+asmlinkage void neon_aes_xts_decrypt(u8 out[], u8 const in[], u32 const rk1[],\n+\t\t\t\t     int rounds, int bytes, u32 const rk2[],\n+\t\t\t\t     u8 iv[], int first);\n+asmlinkage void neon_aes_essiv_cbc_encrypt(u8 out[], u8 const in[],\n+\t\t\t\t\t   u32 const rk1[], int rounds,\n+\t\t\t\t\t   int blocks, u8 iv[],\n+\t\t\t\t\t   u32 const rk2[]);\n+asmlinkage void neon_aes_essiv_cbc_decrypt(u8 out[], u8 const in[],\n+\t\t\t\t\t   u32 const rk1[], int rounds,\n+\t\t\t\t\t   int blocks, u8 iv[],\n+\t\t\t\t\t   u32 const rk2[]);\n+asmlinkage int neon_aes_mac_update(u8 const in[], u32 const rk[], int rounds,\n+\t\t\t\t   int blocks, u8 dg[], int enc_before,\n+\t\t\t\t   int enc_after);\n+\n+asmlinkage void ce_aes_ecb_encrypt(u8 out[], u8 const in[], u32 const rk[],\n+\t\t\t\t   int rounds, int blocks);\n+asmlinkage void ce_aes_ecb_decrypt(u8 out[], u8 const in[], u32 const rk[],\n+\t\t\t\t   int rounds, int blocks);\n+asmlinkage void ce_aes_cbc_encrypt(u8 out[], u8 const in[], u32 const rk[],\n+\t\t\t\t   int rounds, int blocks, u8 iv[]);\n+asmlinkage void ce_aes_cbc_decrypt(u8 out[], u8 const in[], u32 const rk[],\n+\t\t\t\t   int rounds, int blocks, u8 iv[]);\n+asmlinkage void ce_aes_cbc_cts_encrypt(u8 out[], u8 const in[], u32 const rk[],\n+\t\t\t\t       int rounds, int bytes, u8 const iv[]);\n+asmlinkage void ce_aes_cbc_cts_decrypt(u8 out[], u8 const in[], u32 const rk[],\n+\t\t\t\t       int rounds, int bytes, u8 const iv[]);\n+asmlinkage void ce_aes_ctr_encrypt(u8 out[], u8 const in[], u32 const rk[],\n+\t\t\t\t   int rounds, int bytes, u8 ctr[]);\n+asmlinkage void ce_aes_xctr_encrypt(u8 out[], u8 const in[], u32 const rk[],\n+\t\t\t\t    int rounds, int bytes, u8 ctr[],\n+\t\t\t\t    int byte_ctr);\n+asmlinkage void ce_aes_xts_encrypt(u8 out[], u8 const in[], u32 const rk1[],\n+\t\t\t\t   int rounds, int bytes, u32 const rk2[],\n+\t\t\t\t   u8 iv[], int first);\n+asmlinkage void ce_aes_xts_decrypt(u8 out[], u8 const in[], u32 const rk1[],\n+\t\t\t\t   int rounds, int bytes, u32 const rk2[],\n+\t\t\t\t   u8 iv[], int first);\n+asmlinkage void ce_aes_essiv_cbc_encrypt(u8 out[], u8 const in[],\n+\t\t\t\t\t u32 const rk1[], int rounds,\n+\t\t\t\t\t int blocks, u8 iv[], u32 const rk2[]);\n+asmlinkage void ce_aes_essiv_cbc_decrypt(u8 out[], u8 const in[],\n+\t\t\t\t\t u32 const rk1[], int rounds,\n+\t\t\t\t\t int blocks, u8 iv[], u32 const rk2[]);\n+asmlinkage int ce_aes_mac_update(u8 const in[], u32 const rk[], int rounds,\n+\t\t\t\t int blocks, u8 dg[], int enc_before,\n+\t\t\t\t int enc_after);\n #elif defined(CONFIG_PPC)\n void ppc_expand_key_128(u32 *key_enc, const u8 *key);\n void ppc_expand_key_192(u32 *key_enc, const u8 *key);\n void ppc_expand_key_256(u32 *key_enc, const u8 *key);\n void ppc_generate_decrypt_key(u32 *key_dec, u32 *key_enc, unsigned int key_len);\ndiff --git a/lib/crypto/Makefile b/lib/crypto/Makefile\nindex 725eef05b758..c05d4b4e8e82 100644\n--- a/lib/crypto/Makefile\n+++ b/lib/crypto/Makefile\n@@ -24,11 +24,13 @@ CFLAGS_aes.o += -I$(src)/$(SRCARCH)\n \n libaes-$(CONFIG_ARM) += arm/aes-cipher-core.o\n \n ifeq ($(CONFIG_ARM64),y)\n libaes-y += arm64/aes-cipher-core.o\n-libaes-$(CONFIG_KERNEL_MODE_NEON) += arm64/aes-ce-core.o\n+libaes-$(CONFIG_KERNEL_MODE_NEON) += arm64/aes-ce-core.o \\\n+\t\t\t\t     arm64/aes-ce.o \\\n+\t\t\t\t     arm64/aes-neon.o\n endif\n \n ifeq ($(CONFIG_PPC),y)\n ifeq ($(CONFIG_SPE),y)\n libaes-y += powerpc/aes-spe-core.o \\\ndiff --git a/arch/arm64/crypto/aes-ce.S b/lib/crypto/arm64/aes-ce.S\nsimilarity index 100%\nrename from arch/arm64/crypto/aes-ce.S\nrename to lib/crypto/arm64/aes-ce.S\ndiff --git a/arch/arm64/crypto/aes-modes.S b/lib/crypto/arm64/aes-modes.S\nsimilarity index 100%\nrename from arch/arm64/crypto/aes-modes.S\nrename to lib/crypto/arm64/aes-modes.S\ndiff --git a/arch/arm64/crypto/aes-neon.S b/lib/crypto/arm64/aes-neon.S\nsimilarity index 100%\nrename from arch/arm64/crypto/aes-neon.S\nrename to lib/crypto/arm64/aes-neon.S\ndiff --git a/lib/crypto/arm64/aes.h b/lib/crypto/arm64/aes.h\nindex 63eea6271ef9..69f465c668f0 100644\n--- a/lib/crypto/arm64/aes.h\n+++ b/lib/crypto/arm64/aes.h\n@@ -124,10 +124,40 @@ int ce_aes_expandkey(struct crypto_aes_ctx *ctx, const u8 *in_key,\n \t\t\t    6 + key_len / 4);\n \treturn 0;\n }\n EXPORT_SYMBOL(ce_aes_expandkey);\n \n+#if IS_ENABLED(CONFIG_KERNEL_MODE_NEON)\n+EXPORT_SYMBOL_NS_GPL(neon_aes_ecb_encrypt, \"CRYPTO_INTERNAL\");\n+EXPORT_SYMBOL_NS_GPL(neon_aes_ecb_decrypt, \"CRYPTO_INTERNAL\");\n+EXPORT_SYMBOL_NS_GPL(neon_aes_cbc_encrypt, \"CRYPTO_INTERNAL\");\n+EXPORT_SYMBOL_NS_GPL(neon_aes_cbc_decrypt, \"CRYPTO_INTERNAL\");\n+EXPORT_SYMBOL_NS_GPL(neon_aes_cbc_cts_encrypt, \"CRYPTO_INTERNAL\");\n+EXPORT_SYMBOL_NS_GPL(neon_aes_cbc_cts_decrypt, \"CRYPTO_INTERNAL\");\n+EXPORT_SYMBOL_NS_GPL(neon_aes_ctr_encrypt, \"CRYPTO_INTERNAL\");\n+EXPORT_SYMBOL_NS_GPL(neon_aes_xctr_encrypt, \"CRYPTO_INTERNAL\");\n+EXPORT_SYMBOL_NS_GPL(neon_aes_xts_encrypt, \"CRYPTO_INTERNAL\");\n+EXPORT_SYMBOL_NS_GPL(neon_aes_xts_decrypt, \"CRYPTO_INTERNAL\");\n+EXPORT_SYMBOL_NS_GPL(neon_aes_essiv_cbc_encrypt, \"CRYPTO_INTERNAL\");\n+EXPORT_SYMBOL_NS_GPL(neon_aes_essiv_cbc_decrypt, \"CRYPTO_INTERNAL\");\n+EXPORT_SYMBOL_NS_GPL(neon_aes_mac_update, \"CRYPTO_INTERNAL\");\n+\n+EXPORT_SYMBOL_NS_GPL(ce_aes_ecb_encrypt, \"CRYPTO_INTERNAL\");\n+EXPORT_SYMBOL_NS_GPL(ce_aes_ecb_decrypt, \"CRYPTO_INTERNAL\");\n+EXPORT_SYMBOL_NS_GPL(ce_aes_cbc_encrypt, \"CRYPTO_INTERNAL\");\n+EXPORT_SYMBOL_NS_GPL(ce_aes_cbc_decrypt, \"CRYPTO_INTERNAL\");\n+EXPORT_SYMBOL_NS_GPL(ce_aes_cbc_cts_encrypt, \"CRYPTO_INTERNAL\");\n+EXPORT_SYMBOL_NS_GPL(ce_aes_cbc_cts_decrypt, \"CRYPTO_INTERNAL\");\n+EXPORT_SYMBOL_NS_GPL(ce_aes_ctr_encrypt, \"CRYPTO_INTERNAL\");\n+EXPORT_SYMBOL_NS_GPL(ce_aes_xctr_encrypt, \"CRYPTO_INTERNAL\");\n+EXPORT_SYMBOL_NS_GPL(ce_aes_xts_encrypt, \"CRYPTO_INTERNAL\");\n+EXPORT_SYMBOL_NS_GPL(ce_aes_xts_decrypt, \"CRYPTO_INTERNAL\");\n+EXPORT_SYMBOL_NS_GPL(ce_aes_essiv_cbc_encrypt, \"CRYPTO_INTERNAL\");\n+EXPORT_SYMBOL_NS_GPL(ce_aes_essiv_cbc_decrypt, \"CRYPTO_INTERNAL\");\n+EXPORT_SYMBOL_NS_GPL(ce_aes_mac_update, \"CRYPTO_INTERNAL\");\n+#endif\n+\n static void aes_encrypt_arch(const struct aes_enckey *key,\n \t\t\t     u8 out[AES_BLOCK_SIZE],\n \t\t\t     const u8 in[AES_BLOCK_SIZE])\n {\n \tif (IS_ENABLED(CONFIG_KERNEL_MODE_NEON) &&\n",
    "prefixes": [
        "04/15"
    ]
}