From patchwork Tue Sep 22 16:03:19 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrei Botila X-Patchwork-Id: 11792781 X-Patchwork-Delegate: herbert@gondor.apana.org.au Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 50F7A112C for ; Tue, 22 Sep 2020 16:04:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2B0202399A for ; Tue, 22 Sep 2020 16:04:08 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="PLJeQv7P" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726623AbgIVQEH (ORCPT ); Tue, 22 Sep 2020 12:04:07 -0400 Received: from mail-eopbgr60083.outbound.protection.outlook.com ([40.107.6.83]:40665 "EHLO EUR04-DB3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726586AbgIVQEG (ORCPT ); Tue, 22 Sep 2020 12:04:06 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SHb2DASt23ZLFKeyuTwh+lSVOk8+p38r/GTehayBRIGB2CwblxSczvkgriCjNvBsWxK99uunN4LkDwsXI9uKxze7NfcDZaa2F0fUrBAzwdnn4udTxVKzllDV9bcq9yc0QnqLsnAdbL7TJZuSLniXsz62jxJTu8fPiqYMG83x7drEe9k1Pmnno6MlbrcMLQ1RUqBP8HQ7EdYdnryhrIpVasmujDOIWZdxtDUlA36bABdNIVKFQ/NZc7aLFNm09USCjI8wt2FLbAwxtRpbwcCpJSo412wAsNfPFDT8CrRRelD/UtR0YWLxBzjVZxyN6zAOnruPkRNxiyXcerDd8hu+MQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=G9IswZaaECesAyJAPZilmBumSFjPTWEh7lQ3za6oqHQ=; b=IofoAx3z8uxEHMp4WclU888CUF5ZbgmuN/Soa2+DJsachfuGS+OOeJCNxdWusIJqBEQQRJq0k1h5S9ywl6rlOl0vPmsVzl8Q/qZ3O3oKs0Su54DhvLcwpjtvvIE6L3mtGwrU0jyssUOrCdQGgMQRzZL/peD52go3QBQhyitbH5V/3+DcQiEpuJ6pxpLkmDPaMXuiKbhC2c4eOLq/rgQLChRk3pUV3KEs/UZgyc+NS2htmLmeTKIZXv0M84kw65od7mrdNgxt9+DcIbCIb746koxLUWwM3uVrOOeUSCD7npveyYC5e+4ngSsv9m6u4KjSkoLgauIrvGBknO8LxpJpjA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector2-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=G9IswZaaECesAyJAPZilmBumSFjPTWEh7lQ3za6oqHQ=; b=PLJeQv7Pkx/86u8CsUhiqa+k6l+tZmLgcaxw4Yj5T+25lOblocoVZRDECLfAFuWEBCCkTdFGTW4KVifS30vFJp6vEMdAtnYbby3pWMu4pMLL3XL7AVHLamKNMyJxo0iyybH6DVqkKh/WCQlnUFvVbDRk7dn6xmo+uZsm7DLnQoI= Authentication-Results: nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=none action=none header.from=oss.nxp.com; Received: from VE1PR04MB6608.eurprd04.prod.outlook.com (2603:10a6:803:125::12) by VI1PR04MB7072.eurprd04.prod.outlook.com (2603:10a6:800:12c::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3370.16; Tue, 22 Sep 2020 16:04:00 +0000 Received: from VE1PR04MB6608.eurprd04.prod.outlook.com ([fe80::34b6:beed:6762:a67c]) by VE1PR04MB6608.eurprd04.prod.outlook.com ([fe80::34b6:beed:6762:a67c%7]) with mapi id 15.20.3391.027; Tue, 22 Sep 2020 16:04:00 +0000 From: Andrei Botila To: Horia Geanta , Aymen Sghaier , Herbert Xu , "David S. Miller" Cc: linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 01/10] crypto: caam/jr - add fallback for XTS with more than 8B IV Date: Tue, 22 Sep 2020 19:03:19 +0300 Message-Id: <20200922160328.28926-2-andrei.botila@oss.nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200922160328.28926-1-andrei.botila@oss.nxp.com> References: <20200922160328.28926-1-andrei.botila@oss.nxp.com> X-ClientProxiedBy: AM4PR0302CA0022.eurprd03.prod.outlook.com (2603:10a6:205:2::35) To VE1PR04MB6608.eurprd04.prod.outlook.com (2603:10a6:803:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from lsv15007.swis.ro-buh01.nxp.com (83.217.231.2) by AM4PR0302CA0022.eurprd03.prod.outlook.com (2603:10a6:205:2::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3391.13 via Frontend Transport; Tue, 22 Sep 2020 16:03:59 +0000 X-Mailer: git-send-email 2.17.1 X-Originating-IP: [83.217.231.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: fc5000a8-eb89-4e8f-a3d1-08d85f111e50 X-MS-TrafficTypeDiagnostic: VI1PR04MB7072: X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4714; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: nz4ZX4p/dfHnZiBbZXCerT/JcaxfgDDE6OIkzl2HrakCyuK3VMCjPjIwk5I12IyPhNLuNIQxcHJ0DO1pVeGaaosw8TLkJI1thki+h2/z0ZoachGEtIFjDdSlPgMsZBm7yoLJQPBvhgczPwiZ7mLQslFGON6j7Om1NamabFhai1b7C2jtb3wgLpy0UXIObaEUyIddzwWJjvOrdiqvuFiTfiwxq71JsN/nye8vrYUN0mOmvLd0kXFH/LAdRNvYCf3rx8RcMuPK3ns1Ayj6UoP9kiVJCvCfVDKLpBuNWIxIPO7Fp1SQuq8UngRLcC4/r474wD8cewHigFXTt/1cAtErB4zI92mm7V+br43L+8W6LXhoUhG/yMcHcWK4YkNckzfg X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6608.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(376002)(366004)(346002)(39860400002)(136003)(1076003)(4326008)(2616005)(6512007)(83380400001)(186003)(16526019)(2906002)(956004)(5660300002)(66556008)(66476007)(8936002)(316002)(6506007)(44832011)(66946007)(52116002)(6486002)(478600001)(110136005)(8676002)(26005)(86362001)(6666004)(309714004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: jnvEX1axivGDzgGlX10JrGG6EfklCEAyyuu+4iULAAOllTZ3k0kCPGU8Q94MNKvosLnXIDY5BGLhsDg0XvTtCWXsH5+idHu0VLbltnuhbjg3sLNG7wX29xQnnYm3c6mD0vBxU7YFaGz4ZqNnknSKbAblE7HjNUtPw+ZWbfV4983svs11CtaVwH/9U3PHwpsy7ilKmh7NChTdth0TP+MzIo5BJnZ98qHixBK960SvMIqO3erSsU0otboJc3tSUL/cFoZvBIVEKp5WOTollHBMn1U+P3TXva4dr9Llriqu4mm/KFTpJYwHC9HoCrFZBF/P6iE9IQtkDF1shzEeqmi5KLvJ80Foi20KNe6wrsZz9/SYXT+vwk/ge10XBgvnkut8va1FtngMv/8jm/nDgEZ6/oUUeO5zl42ccgI5p6vbgKBsdnFgnHfpP0vlY2uMM65k/S7JRy5Ma7pMwk+dqHrbxYGzdgKQBClVUJWtCxsJHbTObeL9Te3g2XCWtWAoy61qauMbc1xpCdS5d7h1eeQLiSBDn3aRrKzFkdY6dFLElqZ5X0GuksMNI+qxQ14+wNfFg6PcP79KYnoDauOfpC5PT9GeI6a12x+knq+Al6fFhDCyqNCeHQg1nfRHVpCs8J5Lz8JNxyLF/Tw4O4ronCLy2w== X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: fc5000a8-eb89-4e8f-a3d1-08d85f111e50 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6608.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2020 16:04:00.2578 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: i2E+/H1dgLdVFUUR12QI4peK0OHzSgvvv9q2uoNoLkC+JoemP2fdEPloaiUdvfYJBdOotq0dmWLd5m5UW6VVeA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7072 Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org From: Andrei Botila A hardware limitation exists for CAAM until Era 9 which restricts the accelerator to IVs with only 8 bytes. When CAAM has a lower era a fallback is necessary to process 16 bytes IV. Fixes: c6415a6016bf ("crypto: caam - add support for acipher xts(aes)") Cc: # v4.4+ Signed-off-by: Andrei Botila --- drivers/crypto/caam/Kconfig | 1 + drivers/crypto/caam/caamalg.c | 72 +++++++++++++++++++++++++++++++---- 2 files changed, 66 insertions(+), 7 deletions(-) diff --git a/drivers/crypto/caam/Kconfig b/drivers/crypto/caam/Kconfig index bc35aa0ec07a..dfeaad8dfe81 100644 --- a/drivers/crypto/caam/Kconfig +++ b/drivers/crypto/caam/Kconfig @@ -101,6 +101,7 @@ config CRYPTO_DEV_FSL_CAAM_CRYPTO_API select CRYPTO_AUTHENC select CRYPTO_SKCIPHER select CRYPTO_LIB_DES + select CRYPTO_XTS help Selecting this will offload crypto for users of the scatterlist crypto API (such as the linux native IPSec diff --git a/drivers/crypto/caam/caamalg.c b/drivers/crypto/caam/caamalg.c index 91feda5b63f6..adb2c05a8bde 100644 --- a/drivers/crypto/caam/caamalg.c +++ b/drivers/crypto/caam/caamalg.c @@ -57,6 +57,7 @@ #include "key_gen.h" #include "caamalg_desc.h" #include +#include /* * crypto alg @@ -114,10 +115,12 @@ struct caam_ctx { struct alginfo adata; struct alginfo cdata; unsigned int authsize; + struct crypto_skcipher *fallback; }; struct caam_skcipher_req_ctx { struct skcipher_edesc *edesc; + struct skcipher_request fallback_req; }; struct caam_aead_req_ctx { @@ -830,12 +833,17 @@ static int xts_skcipher_setkey(struct crypto_skcipher *skcipher, const u8 *key, struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher); struct device *jrdev = ctx->jrdev; u32 *desc; + int err; if (keylen != 2 * AES_MIN_KEY_SIZE && keylen != 2 * AES_MAX_KEY_SIZE) { dev_dbg(jrdev, "key size mismatch\n"); return -EINVAL; } + err = crypto_skcipher_setkey(ctx->fallback, key, keylen); + if (err) + return err; + ctx->cdata.keylen = keylen; ctx->cdata.key_virt = key; ctx->cdata.key_inline = true; @@ -1755,6 +1763,14 @@ static int skcipher_do_one_req(struct crypto_engine *engine, void *areq) return ret; } +static inline bool xts_skcipher_ivsize(struct skcipher_request *req) +{ + struct crypto_skcipher *skcipher = crypto_skcipher_reqtfm(req); + unsigned int ivsize = crypto_skcipher_ivsize(skcipher); + + return !!get_unaligned((u64 *)(req->iv + (ivsize / 2))); +} + static inline int skcipher_crypt(struct skcipher_request *req, bool encrypt) { struct skcipher_edesc *edesc; @@ -1768,6 +1784,21 @@ static inline int skcipher_crypt(struct skcipher_request *req, bool encrypt) if (!req->cryptlen) return 0; + if (ctx->fallback && xts_skcipher_ivsize(req)) { + struct caam_skcipher_req_ctx *rctx = skcipher_request_ctx(req); + + skcipher_request_set_tfm(&rctx->fallback_req, ctx->fallback); + skcipher_request_set_callback(&rctx->fallback_req, + req->base.flags, + req->base.complete, + req->base.data); + skcipher_request_set_crypt(&rctx->fallback_req, req->src, + req->dst, req->cryptlen, req->iv); + + return encrypt ? crypto_skcipher_encrypt(&rctx->fallback_req) : + crypto_skcipher_decrypt(&rctx->fallback_req); + } + /* allocate extended descriptor */ edesc = skcipher_edesc_alloc(req, DESC_JOB_IO_LEN * CAAM_CMD_SZ); if (IS_ERR(edesc)) @@ -1905,6 +1936,7 @@ static struct caam_skcipher_alg driver_algs[] = { .base = { .cra_name = "xts(aes)", .cra_driver_name = "xts-aes-caam", + .cra_flags = CRYPTO_ALG_NEED_FALLBACK, .cra_blocksize = AES_BLOCK_SIZE, }, .setkey = xts_skcipher_setkey, @@ -3344,13 +3376,35 @@ static int caam_cra_init(struct crypto_skcipher *tfm) struct caam_skcipher_alg *caam_alg = container_of(alg, typeof(*caam_alg), skcipher); struct caam_ctx *ctx = crypto_skcipher_ctx(tfm); - - crypto_skcipher_set_reqsize(tfm, sizeof(struct caam_skcipher_req_ctx)); + u32 alg_aai = caam_alg->caam.class1_alg_type & OP_ALG_AAI_MASK; + int ret = 0; ctx->enginectx.op.do_one_request = skcipher_do_one_req; - return caam_init_common(crypto_skcipher_ctx(tfm), &caam_alg->caam, - false); + if (alg_aai == OP_ALG_AAI_XTS) { + const char *tfm_name = crypto_tfm_alg_name(&tfm->base); + struct crypto_skcipher *fallback; + + fallback = crypto_alloc_skcipher(tfm_name, 0, + CRYPTO_ALG_NEED_FALLBACK); + if (IS_ERR(fallback)) { + dev_err(ctx->jrdev, "Failed to allocate %s fallback: %ld\n", + tfm_name, PTR_ERR(fallback)); + return PTR_ERR(fallback); + } + + ctx->fallback = fallback; + crypto_skcipher_set_reqsize(tfm, sizeof(struct caam_skcipher_req_ctx) + + crypto_skcipher_reqsize(fallback)); + } else { + crypto_skcipher_set_reqsize(tfm, sizeof(struct caam_skcipher_req_ctx)); + } + + ret = caam_init_common(ctx, &caam_alg->caam, false); + if (ret && ctx->fallback) + crypto_free_skcipher(ctx->fallback); + + return ret; } static int caam_aead_init(struct crypto_aead *tfm) @@ -3378,7 +3432,11 @@ static void caam_exit_common(struct caam_ctx *ctx) static void caam_cra_exit(struct crypto_skcipher *tfm) { - caam_exit_common(crypto_skcipher_ctx(tfm)); + struct caam_ctx *ctx = crypto_skcipher_ctx(tfm); + + if (ctx->fallback) + crypto_free_skcipher(ctx->fallback); + caam_exit_common(ctx); } static void caam_aead_exit(struct crypto_aead *tfm) @@ -3412,8 +3470,8 @@ static void caam_skcipher_alg_init(struct caam_skcipher_alg *t_alg) alg->base.cra_module = THIS_MODULE; alg->base.cra_priority = CAAM_CRA_PRIORITY; alg->base.cra_ctxsize = sizeof(struct caam_ctx); - alg->base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_ALLOCATES_MEMORY | - CRYPTO_ALG_KERN_DRIVER_ONLY; + alg->base.cra_flags |= (CRYPTO_ALG_ASYNC | CRYPTO_ALG_ALLOCATES_MEMORY | + CRYPTO_ALG_KERN_DRIVER_ONLY); alg->init = caam_cra_init; alg->exit = caam_cra_exit; From patchwork Tue Sep 22 16:03:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrei Botila X-Patchwork-Id: 11792783 X-Patchwork-Delegate: herbert@gondor.apana.org.au Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2AE13139A for ; Tue, 22 Sep 2020 16:04:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 020D72388B for ; Tue, 22 Sep 2020 16:04:13 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="boehRoIW" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726655AbgIVQEN (ORCPT ); Tue, 22 Sep 2020 12:04:13 -0400 Received: from mail-eopbgr60083.outbound.protection.outlook.com ([40.107.6.83]:40665 "EHLO EUR04-DB3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726340AbgIVQEK (ORCPT ); Tue, 22 Sep 2020 12:04:10 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TTf6+dH1gyoA0YedhwGVBTSzxThWdUSKUy0CVworzo3rXRL4aGfML2ulOmbsw3CpFKHvRGr8cpWgrgnhkOpICTeqFDVMPZ0ygehjCCC7bt5WvAFW04kL8PEBW/TbT4OX8W1XdDDDLB8ix3P8kn9WmSqMaIZ56VIwK3xF6MZy7A3vNG7n7Hf1NJAzAj/RS1POvt73J2nTcW79FVqgTMzf0wSX/S0qM41aiqJzHFInAHaYTs4yZ3nnnpt4aIwdZ2mslNwtBUUnSG3kNZzh1NRW6hdRf3ES1nwJ5jEJBbap2DzG9ygIb+YxYW9P+fLyJiHjCSRmEWivaKgypOCNTq6LPQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Wy97s438+QbTs9uwgBiKwbYcaZpfz+N+hg2y6CinoiU=; b=VYEJTWMajdpv9FjN3Gfe+L4VW0sqfrNmbH0BId5yrLWSOSV8l8QoOz291jqG52crY4BLnB8ewKWb8Kmwojot4pA6u4vpb7qSe8ADPG3kzl/rxuaHcmQS8EPhNXg+CAtAWnnkvLEdz95PhdymX4cGOqWXphCZ5iZ+EW/NxS9OYLb3zexK/5zX7S11imxuw1wZ4ZBGtlWZB+HSEmk4dzkyeuig8lSLbRKrUK8bJ4o1X0neNp9zb3qYf0xHRkaP8nev8V50O6/gpwYjul5gzyt9O8cTIerMa8FGicsAVYRkpY1FS4y22Q9BULdE7kAMj12XgR21Bu7rVqMdCzcttFPD/A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector2-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Wy97s438+QbTs9uwgBiKwbYcaZpfz+N+hg2y6CinoiU=; b=boehRoIWB+4BpqGrcpmnUivIXnUWf2FBD4Y3RrhoWFb/w0MkIJ9xyjClFPTOCi5ZH92VnFEZkbsj1U2sPgmS3AHHm60AGvmTe7obkzEfxxAZ99ykZLNkmWD/oJUbQGzJHga8r7A5yA81e0e1jGKjqmWOPP78DQg6+Y68gJRHbfE= Authentication-Results: nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=none action=none header.from=oss.nxp.com; Received: from VE1PR04MB6608.eurprd04.prod.outlook.com (2603:10a6:803:125::12) by VI1PR04MB7072.eurprd04.prod.outlook.com (2603:10a6:800:12c::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3370.16; Tue, 22 Sep 2020 16:04:01 +0000 Received: from VE1PR04MB6608.eurprd04.prod.outlook.com ([fe80::34b6:beed:6762:a67c]) by VE1PR04MB6608.eurprd04.prod.outlook.com ([fe80::34b6:beed:6762:a67c%7]) with mapi id 15.20.3391.027; Tue, 22 Sep 2020 16:04:01 +0000 From: Andrei Botila To: Horia Geanta , Aymen Sghaier , Herbert Xu , "David S. Miller" Cc: linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 02/10] crypto: caam/qi - add fallback for XTS with more than 8B IV Date: Tue, 22 Sep 2020 19:03:20 +0300 Message-Id: <20200922160328.28926-3-andrei.botila@oss.nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200922160328.28926-1-andrei.botila@oss.nxp.com> References: <20200922160328.28926-1-andrei.botila@oss.nxp.com> X-ClientProxiedBy: AM4PR0302CA0022.eurprd03.prod.outlook.com (2603:10a6:205:2::35) To VE1PR04MB6608.eurprd04.prod.outlook.com (2603:10a6:803:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from lsv15007.swis.ro-buh01.nxp.com (83.217.231.2) by AM4PR0302CA0022.eurprd03.prod.outlook.com (2603:10a6:205:2::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3391.13 via Frontend Transport; Tue, 22 Sep 2020 16:04:00 +0000 X-Mailer: git-send-email 2.17.1 X-Originating-IP: [83.217.231.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: b5a146f2-3e16-4c10-09c0-08d85f111eda X-MS-TrafficTypeDiagnostic: VI1PR04MB7072: X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3631; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: zPMlPEYRiRuX+X0Q12hl/H8g/ccLq59OynwydeP/fseQYTmccgi2nYv6SSAfks5zwIW4VG2VvdgFpuwvcS77wJu1DwCHjiKvOzbAjRyD68CzoS9eVT4QMBz27iNC5O4GMi0xxdPRuF/l8mS4vjy0suwZ01vmJhoSjZggNiOwV3mKXQdRSbIEJjoCqNqytNmRrvh53bIAn8Kj0ygXOpCQWIrzxtLXR+vkoGLkiVUK8KQrraAow3+J2GBPboTmQxJ4Ly3ofKrZWcPiefbruxNFJUgzHktMcNsQebuDcMWU+GtIcFl21jqyFiTD6mT6yjn02d0dRLy8mp7BxHBnyLdgogpYgq+hp09V//W8XaWtsPg7LnCfcmlF+/FfRxaCCW85 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6608.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(376002)(366004)(346002)(39860400002)(136003)(1076003)(4326008)(2616005)(6512007)(83380400001)(186003)(16526019)(2906002)(956004)(5660300002)(66556008)(66476007)(8936002)(316002)(6506007)(44832011)(66946007)(52116002)(6486002)(478600001)(110136005)(8676002)(26005)(86362001)(6666004)(309714004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: yDLkyYJLzwNlmLNHrjkAZHDPAFpsxVdK9WJaPrl9b59G89Y3dPNJbjRgfB7Vsd30BSjNUoqWup/0x4AUBvB+SCmF+gHLPzuwMXF4hNVBHMMjOOv0Tw4g+PcZIoiNt0OtBCpM2i+YCY4afzsVz5md6BfiEMVQomAmOEHmiTLnb2VTU00jFIOfRL7s9ZrYslCMlGBRyBTOGCGw9UHN57uHH04sQOmQOqpIBmE+eRgJksKYie4f3HMnEQnvKxthNZgUCXUKSjDxfRBW9Pp29/PQN/3IAl/RfGqZMRkA1HD3fTw06sk+kLHA4ZByu3lq97EuNAvmJCmqhsm+jnfMNqY55xBDdco1Rit6HgiuU/5wiE7bYGQ7MDUCbYg+MQfTe3LOs4fHVvxealUtKsBsUJjf44KtQ3Ijxdv4XEr2e4g8JvPdkrSkGdhSKRK7YVfj+TlC1SIUwI1IsSW1U4Z/GIRkvro7p9BeieLS1lhyj9KGmNiYR4b8hk8Gnq/zPlMFd2aBpiUBmwAfnP3ibj3RptFOVeJX0cYT/N7eIaAMyt7qL1TtzsR4oADrP8IcBxhaKfezuFWoRsmtK1kByVHqLrdifE/EN7toF0+k4peGsvkXCk0Ny9nYI+Q8+498MQ9RudQgNf+UMiLxp/bgeTttuMsgqQ== X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: b5a146f2-3e16-4c10-09c0-08d85f111eda X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6608.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2020 16:04:01.2072 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 7FT12oLOluPZZM+2ClzSk4WINbNQYn+WVJOp1lJPl8oxJ1tG6Ydrk+DRcaavhCjGZasssFDqKo54kJhSC2wmyg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7072 Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org From: Andrei Botila A hardware limitation exists for CAAM until Era 9 which restricts the accelerator to IVs with only 8 bytes. When CAAM has a lower era a fallback is necessary to process 16 bytes IV. Fixes: b189817cf789 ("crypto: caam/qi - add ablkcipher and authenc algorithms") Cc: # v4.12+ Signed-off-by: Andrei Botila --- drivers/crypto/caam/Kconfig | 1 + drivers/crypto/caam/caamalg_qi.c | 72 +++++++++++++++++++++++++++++--- 2 files changed, 68 insertions(+), 5 deletions(-) diff --git a/drivers/crypto/caam/Kconfig b/drivers/crypto/caam/Kconfig index dfeaad8dfe81..8169e6cd04e6 100644 --- a/drivers/crypto/caam/Kconfig +++ b/drivers/crypto/caam/Kconfig @@ -115,6 +115,7 @@ config CRYPTO_DEV_FSL_CAAM_CRYPTO_API_QI select CRYPTO_AUTHENC select CRYPTO_SKCIPHER select CRYPTO_DES + select CRYPTO_XTS help Selecting this will use CAAM Queue Interface (QI) for sending & receiving crypto jobs to/from CAAM. This gives better performance diff --git a/drivers/crypto/caam/caamalg_qi.c b/drivers/crypto/caam/caamalg_qi.c index bb1c0106a95c..ee801370c879 100644 --- a/drivers/crypto/caam/caamalg_qi.c +++ b/drivers/crypto/caam/caamalg_qi.c @@ -18,6 +18,7 @@ #include "qi.h" #include "jr.h" #include "caamalg_desc.h" +#include /* * crypto alg @@ -67,6 +68,11 @@ struct caam_ctx { struct device *qidev; spinlock_t lock; /* Protects multiple init of driver context */ struct caam_drv_ctx *drv_ctx[NUM_OP]; + struct crypto_skcipher *fallback; +}; + +struct caam_skcipher_req_ctx { + struct skcipher_request fallback_req; }; static int aead_set_sh_desc(struct crypto_aead *aead) @@ -726,12 +732,17 @@ static int xts_skcipher_setkey(struct crypto_skcipher *skcipher, const u8 *key, struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher); struct device *jrdev = ctx->jrdev; int ret = 0; + int err; if (keylen != 2 * AES_MIN_KEY_SIZE && keylen != 2 * AES_MAX_KEY_SIZE) { dev_dbg(jrdev, "key size mismatch\n"); return -EINVAL; } + err = crypto_skcipher_setkey(ctx->fallback, key, keylen); + if (err) + return err; + ctx->cdata.keylen = keylen; ctx->cdata.key_virt = key; ctx->cdata.key_inline = true; @@ -1373,6 +1384,14 @@ static struct skcipher_edesc *skcipher_edesc_alloc(struct skcipher_request *req, return edesc; } +static inline bool xts_skcipher_ivsize(struct skcipher_request *req) +{ + struct crypto_skcipher *skcipher = crypto_skcipher_reqtfm(req); + unsigned int ivsize = crypto_skcipher_ivsize(skcipher); + + return !!get_unaligned((u64 *)(req->iv + (ivsize / 2))); +} + static inline int skcipher_crypt(struct skcipher_request *req, bool encrypt) { struct skcipher_edesc *edesc; @@ -1383,6 +1402,21 @@ static inline int skcipher_crypt(struct skcipher_request *req, bool encrypt) if (!req->cryptlen) return 0; + if (ctx->fallback && xts_skcipher_ivsize(req)) { + struct caam_skcipher_req_ctx *rctx = skcipher_request_ctx(req); + + skcipher_request_set_tfm(&rctx->fallback_req, ctx->fallback); + skcipher_request_set_callback(&rctx->fallback_req, + req->base.flags, + req->base.complete, + req->base.data); + skcipher_request_set_crypt(&rctx->fallback_req, req->src, + req->dst, req->cryptlen, req->iv); + + return encrypt ? crypto_skcipher_encrypt(&rctx->fallback_req) : + crypto_skcipher_decrypt(&rctx->fallback_req); + } + if (unlikely(caam_congested)) return -EAGAIN; @@ -1507,6 +1541,7 @@ static struct caam_skcipher_alg driver_algs[] = { .base = { .cra_name = "xts(aes)", .cra_driver_name = "xts-aes-caam-qi", + .cra_flags = CRYPTO_ALG_NEED_FALLBACK, .cra_blocksize = AES_BLOCK_SIZE, }, .setkey = xts_skcipher_setkey, @@ -2440,9 +2475,32 @@ static int caam_cra_init(struct crypto_skcipher *tfm) struct skcipher_alg *alg = crypto_skcipher_alg(tfm); struct caam_skcipher_alg *caam_alg = container_of(alg, typeof(*caam_alg), skcipher); + struct caam_ctx *ctx = crypto_skcipher_ctx(tfm); + u32 alg_aai = caam_alg->caam.class1_alg_type & OP_ALG_AAI_MASK; + int ret = 0; + + if (alg_aai == OP_ALG_AAI_XTS) { + const char *tfm_name = crypto_tfm_alg_name(&tfm->base); + struct crypto_skcipher *fallback; - return caam_init_common(crypto_skcipher_ctx(tfm), &caam_alg->caam, - false); + fallback = crypto_alloc_skcipher(tfm_name, 0, + CRYPTO_ALG_NEED_FALLBACK); + if (IS_ERR(fallback)) { + dev_err(ctx->jrdev, "Failed to allocate %s fallback: %ld\n", + tfm_name, PTR_ERR(fallback)); + return PTR_ERR(fallback); + } + + ctx->fallback = fallback; + crypto_skcipher_set_reqsize(tfm, sizeof(struct caam_skcipher_req_ctx) + + crypto_skcipher_reqsize(fallback)); + } + + ret = caam_init_common(ctx, &caam_alg->caam, false); + if (ret && ctx->fallback) + crypto_free_skcipher(ctx->fallback); + + return ret; } static int caam_aead_init(struct crypto_aead *tfm) @@ -2468,7 +2526,11 @@ static void caam_exit_common(struct caam_ctx *ctx) static void caam_cra_exit(struct crypto_skcipher *tfm) { - caam_exit_common(crypto_skcipher_ctx(tfm)); + struct caam_ctx *ctx = crypto_skcipher_ctx(tfm); + + if (ctx->fallback) + crypto_free_skcipher(ctx->fallback); + caam_exit_common(ctx); } static void caam_aead_exit(struct crypto_aead *tfm) @@ -2502,8 +2564,8 @@ static void caam_skcipher_alg_init(struct caam_skcipher_alg *t_alg) alg->base.cra_module = THIS_MODULE; alg->base.cra_priority = CAAM_CRA_PRIORITY; alg->base.cra_ctxsize = sizeof(struct caam_ctx); - alg->base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_ALLOCATES_MEMORY | - CRYPTO_ALG_KERN_DRIVER_ONLY; + alg->base.cra_flags |= (CRYPTO_ALG_ASYNC | CRYPTO_ALG_ALLOCATES_MEMORY | + CRYPTO_ALG_KERN_DRIVER_ONLY); alg->init = caam_cra_init; alg->exit = caam_cra_exit; From patchwork Tue Sep 22 16:03:21 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrei Botila X-Patchwork-Id: 11792787 X-Patchwork-Delegate: herbert@gondor.apana.org.au Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 84CD8112C for ; Tue, 22 Sep 2020 16:04:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4E1652399A for ; Tue, 22 Sep 2020 16:04:29 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="WhCuf2RM" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726715AbgIVQES (ORCPT ); Tue, 22 Sep 2020 12:04:18 -0400 Received: from mail-eopbgr40081.outbound.protection.outlook.com ([40.107.4.81]:27291 "EHLO EUR03-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726586AbgIVQEN (ORCPT ); Tue, 22 Sep 2020 12:04:13 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ka9XYvmS1VMXqwj5HPdPWnj1aN28o6L3fDqw17TEvd97h4kZaCYJ3IUZvu/vW3LBZbAkhJnlOrIUKWCVfzllIYppnvpCzV/0rjG83iQ1t9tMWjcgmR8RKV5DK/0un6eahVYdOGsEQGDQ2oYA67x9qydu0oI+GA1/XDMaoCv51XrD+UEwglr9YqAm3MFC5JaFVTvFujlz9gX5+64bEEMjqwdAixeV/Jmnkh9otzW01zhr3PLfwmiYOJTYNnq78aGW0qQLgWF7x8qWkPmmpbqvs8GcirrVVWRoEQh5GTT71LDXwNYFGx2Q2fFZTIl/XOA7DZFWHXQh42BGO8SErTDUCQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YXK0bSpQqLoHFBHft+CgrvaAZ7h4F+Z/VY2JAP6l6fk=; b=g4jCaGJORgX88ArDdAwo+mfb/oY1YG7qUEA9kDuT+clXI7kY5YKud8b50JRSOBHlfZYja2rlrDQpMfQ1pY90t2Xx93hpVTcFLCmdEaXeRaNIBhRs/5uwZtyAr1GVBiJGJEnJJAFNnl9tVL4cQ1ChQkOt6m4CIYn4aN/pF0oSFrFbtEUnKoXmRFOdOtKOMHuw9g8gtLCHxOVInjBwXGsN5P9cJOMOjaYbr3ESlEgHgQ/C+WEFAtoKQEyAym84iAYU9ZAh1+fjA3Gu+FW6GiqLrlf7pyyO4PO47khR4zYelapqzX0paGJlGWMMGg9ktaTk/8pzdikxNwguqO1P4igcVQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector2-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YXK0bSpQqLoHFBHft+CgrvaAZ7h4F+Z/VY2JAP6l6fk=; b=WhCuf2RMi9Nm+GinvImNKSqmHV9Lud2A6Y/TiJd9JZeVeHy2+khwtlhOlA+0r0bkDhnPxafl2I3u4t650DyYsrH//C/AzRItMU85s/cw8YPNiptuE9gg9psssi6XHvFV0Du8qRCyPFvK4Vme8EIqJmSPqY9i/bfTKkjcmX6go0I= Authentication-Results: nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=none action=none header.from=oss.nxp.com; Received: from VE1PR04MB6608.eurprd04.prod.outlook.com (2603:10a6:803:125::12) by VI1PR04MB7072.eurprd04.prod.outlook.com (2603:10a6:800:12c::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3370.16; Tue, 22 Sep 2020 16:04:02 +0000 Received: from VE1PR04MB6608.eurprd04.prod.outlook.com ([fe80::34b6:beed:6762:a67c]) by VE1PR04MB6608.eurprd04.prod.outlook.com ([fe80::34b6:beed:6762:a67c%7]) with mapi id 15.20.3391.027; Tue, 22 Sep 2020 16:04:02 +0000 From: Andrei Botila To: Horia Geanta , Aymen Sghaier , Herbert Xu , "David S. Miller" Cc: linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 03/10] crypto: caam/qi2 - add fallback for XTS with more than 8B IV Date: Tue, 22 Sep 2020 19:03:21 +0300 Message-Id: <20200922160328.28926-4-andrei.botila@oss.nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200922160328.28926-1-andrei.botila@oss.nxp.com> References: <20200922160328.28926-1-andrei.botila@oss.nxp.com> X-ClientProxiedBy: AM4PR0302CA0022.eurprd03.prod.outlook.com (2603:10a6:205:2::35) To VE1PR04MB6608.eurprd04.prod.outlook.com (2603:10a6:803:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from lsv15007.swis.ro-buh01.nxp.com (83.217.231.2) by AM4PR0302CA0022.eurprd03.prod.outlook.com (2603:10a6:205:2::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3391.13 via Frontend Transport; Tue, 22 Sep 2020 16:04:01 +0000 X-Mailer: git-send-email 2.17.1 X-Originating-IP: [83.217.231.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 8b5ca993-aa4a-4966-02db-08d85f111f68 X-MS-TrafficTypeDiagnostic: VI1PR04MB7072: X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4941; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: GsPLfOoIKUGHC6qf03NUzBQ3lHodq1HqF0agR3RxEyGIHh5L4kldAbP0i/1EuYq6CJmXGfP1OErrOhMY1OCoH74tl/Y8ZKFW9KIGSjB4JRlkXG6C9PworHkzyy4jf7rgtC4uSZf9zo45gqzm0tdV80qbhfV2/Bb4P0N2ZaU6+grrvfHcpwkAylRotEiDIK0NVS1dj6az/XTRWPkmGgTJKPRHQUzNOYhnHbLPur9kHtFVsU3s1/YDsQnU7NTDQ83cc4+nNaAPUtnKlakAtYzs0Ll3eBZcg/HwNAI37+YppKOO0u44R6SWA1VDshiYzaYLwubV51yvB2oV2IoPIDbUYf9bUUEk2/N4vw/+c50vRmj/PXK0XNxPmZdVEBG+f6ui X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6608.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(376002)(366004)(346002)(39860400002)(136003)(1076003)(4326008)(2616005)(6512007)(83380400001)(186003)(16526019)(2906002)(956004)(5660300002)(66556008)(66476007)(8936002)(316002)(6506007)(44832011)(66946007)(52116002)(6486002)(478600001)(110136005)(8676002)(26005)(86362001)(6666004)(309714004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: z/d8W+qk/05AtuPh5BM0n2a1FAJT2l1//vIlbz5w2EfJH+Gv+sMiWhPrpjftJp8s1mteUda224r6ZWI9e4Bouplrt3l206/DKVTyJUUf54aIOP4Gl8Uq6mB9/RKjTxiJZB0gJDWVbchmCD9Zc1r+3WeeG81r6pPXEVWgq4SXSwgCbSolNdqR1r30W/bawQAsvbjTqtwKMULEM5ytuSSUW0MRWWQYL+VNe1/VQ1jaWzyYz9cDKJcfXC3kuc17oV81+IX86WUnT3EwaKoWHV3dzLNXpyXkiK9pc0cDwBh4fEe0kzIMrgMIBCzNJS0tQIuJ5jE/dxx2dQ1noA5+xAywfExBxur96aCHXxKd2JaQocDRIj10juar8mtO1DLtexnsjdcVnekfY48BYr0iJsd1Se3gJT+4Wi9dkCS8qkecwC9MYkyz82IAdrXaIy/S3mT/tWp+0xUFdelhT5NQ0glM5gCfD/1RA22Hm5G1FkGlfu8te14I6t85DOGVWYkRygF0nnpLiukharpygVRYl0P238eSBKGJkXrXwOQS3l/T1b7a02xP8TI1o0ZvN90xem/LosGmU4oJU9rQP05VR2smYgzFQ7DZG27Obez49zkENqSrDIpYOJaIV5DZQ7/pzoWCsyWYaAsq/tW4CgQqk0KfFg== X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8b5ca993-aa4a-4966-02db-08d85f111f68 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6608.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2020 16:04:02.0697 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: IjzeLuWbw8H+UjOZfXUHYt3SWKgk0sIzATjceuhx+dvbrJqeDUOhcXE5cmgnpHcE74iHGsiGt7qVf0HK69Z6zQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7072 Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org From: Andrei Botila A hardware limitation exists for CAAM until Era 9 which restricts the accelerator to IVs with only 8 bytes. When CAAM has a lower era a fallback is necessary to process 16 bytes IV. Fixes: 226853ac3ebe ("crypto: caam/qi2 - add skcipher algorithms") Cc: # v4.20+ Signed-off-by: Andrei Botila --- drivers/crypto/caam/Kconfig | 1 + drivers/crypto/caam/caamalg_qi2.c | 80 +++++++++++++++++++++++++++++-- drivers/crypto/caam/caamalg_qi2.h | 2 + 3 files changed, 78 insertions(+), 5 deletions(-) diff --git a/drivers/crypto/caam/Kconfig b/drivers/crypto/caam/Kconfig index 8169e6cd04e6..84ea7cba5ee5 100644 --- a/drivers/crypto/caam/Kconfig +++ b/drivers/crypto/caam/Kconfig @@ -167,6 +167,7 @@ config CRYPTO_DEV_FSL_DPAA2_CAAM select CRYPTO_AEAD select CRYPTO_HASH select CRYPTO_DES + select CRYPTO_XTS help CAAM driver for QorIQ Data Path Acceleration Architecture 2. It handles DPSECI DPAA2 objects that sit on the Management Complex diff --git a/drivers/crypto/caam/caamalg_qi2.c b/drivers/crypto/caam/caamalg_qi2.c index 076c6b04bea9..c36d11820db3 100644 --- a/drivers/crypto/caam/caamalg_qi2.c +++ b/drivers/crypto/caam/caamalg_qi2.c @@ -19,6 +19,7 @@ #include #include #include +#include #define CAAM_CRA_PRIORITY 2000 @@ -80,6 +81,7 @@ struct caam_ctx { struct alginfo adata; struct alginfo cdata; unsigned int authsize; + struct crypto_skcipher *fallback; }; static void *dpaa2_caam_iova_to_virt(struct dpaa2_caam_priv *priv, @@ -1056,12 +1058,17 @@ static int xts_skcipher_setkey(struct crypto_skcipher *skcipher, const u8 *key, struct device *dev = ctx->dev; struct caam_flc *flc; u32 *desc; + int err; if (keylen != 2 * AES_MIN_KEY_SIZE && keylen != 2 * AES_MAX_KEY_SIZE) { dev_dbg(dev, "key size mismatch\n"); return -EINVAL; } + err = crypto_skcipher_setkey(ctx->fallback, key, keylen); + if (err) + return err; + ctx->cdata.keylen = keylen; ctx->cdata.key_virt = key; ctx->cdata.key_inline = true; @@ -1443,6 +1450,14 @@ static void skcipher_decrypt_done(void *cbk_ctx, u32 status) skcipher_request_complete(req, ecode); } +static inline bool xts_skcipher_ivsize(struct skcipher_request *req) +{ + struct crypto_skcipher *skcipher = crypto_skcipher_reqtfm(req); + unsigned int ivsize = crypto_skcipher_ivsize(skcipher); + + return !!get_unaligned((u64 *)(req->iv + (ivsize / 2))); +} + static int skcipher_encrypt(struct skcipher_request *req) { struct skcipher_edesc *edesc; @@ -1454,6 +1469,18 @@ static int skcipher_encrypt(struct skcipher_request *req) if (!req->cryptlen) return 0; + if (ctx->fallback && xts_skcipher_ivsize(req)) { + skcipher_request_set_tfm(&caam_req->fallback_req, ctx->fallback); + skcipher_request_set_callback(&caam_req->fallback_req, + req->base.flags, + req->base.complete, + req->base.data); + skcipher_request_set_crypt(&caam_req->fallback_req, req->src, + req->dst, req->cryptlen, req->iv); + + return crypto_skcipher_encrypt(&caam_req->fallback_req); + } + /* allocate extended descriptor */ edesc = skcipher_edesc_alloc(req); if (IS_ERR(edesc)) @@ -1484,6 +1511,19 @@ static int skcipher_decrypt(struct skcipher_request *req) if (!req->cryptlen) return 0; + + if (ctx->fallback && xts_skcipher_ivsize(req)) { + skcipher_request_set_tfm(&caam_req->fallback_req, ctx->fallback); + skcipher_request_set_callback(&caam_req->fallback_req, + req->base.flags, + req->base.complete, + req->base.data); + skcipher_request_set_crypt(&caam_req->fallback_req, req->src, + req->dst, req->cryptlen, req->iv); + + return crypto_skcipher_decrypt(&caam_req->fallback_req); + } + /* allocate extended descriptor */ edesc = skcipher_edesc_alloc(req); if (IS_ERR(edesc)) @@ -1537,9 +1577,34 @@ static int caam_cra_init_skcipher(struct crypto_skcipher *tfm) struct skcipher_alg *alg = crypto_skcipher_alg(tfm); struct caam_skcipher_alg *caam_alg = container_of(alg, typeof(*caam_alg), skcipher); + struct caam_ctx *ctx = crypto_skcipher_ctx(tfm); + u32 alg_aai = caam_alg->caam.class1_alg_type & OP_ALG_AAI_MASK; + int ret = 0; + + if (alg_aai == OP_ALG_AAI_XTS) { + const char *tfm_name = crypto_tfm_alg_name(&tfm->base); + struct crypto_skcipher *fallback; + + fallback = crypto_alloc_skcipher(tfm_name, 0, + CRYPTO_ALG_NEED_FALLBACK); + if (IS_ERR(fallback)) { + dev_err(ctx->dev, "Failed to allocate %s fallback: %ld\n", + tfm_name, PTR_ERR(fallback)); + return PTR_ERR(fallback); + } + + ctx->fallback = fallback; + crypto_skcipher_set_reqsize(tfm, sizeof(struct caam_request) + + crypto_skcipher_reqsize(fallback)); + } else { + crypto_skcipher_set_reqsize(tfm, sizeof(struct caam_request)); + } - crypto_skcipher_set_reqsize(tfm, sizeof(struct caam_request)); - return caam_cra_init(crypto_skcipher_ctx(tfm), &caam_alg->caam, false); + ret = caam_cra_init(ctx, &caam_alg->caam, false); + if (ret && ctx->fallback) + crypto_free_skcipher(ctx->fallback); + + return ret; } static int caam_cra_init_aead(struct crypto_aead *tfm) @@ -1562,7 +1627,11 @@ static void caam_exit_common(struct caam_ctx *ctx) static void caam_cra_exit(struct crypto_skcipher *tfm) { - caam_exit_common(crypto_skcipher_ctx(tfm)); + struct caam_ctx *ctx = crypto_skcipher_ctx(tfm); + + if (ctx->fallback) + crypto_free_skcipher(ctx->fallback); + caam_exit_common(ctx); } static void caam_cra_exit_aead(struct crypto_aead *tfm) @@ -1665,6 +1734,7 @@ static struct caam_skcipher_alg driver_algs[] = { .base = { .cra_name = "xts(aes)", .cra_driver_name = "xts-aes-caam-qi2", + .cra_flags = CRYPTO_ALG_NEED_FALLBACK, .cra_blocksize = AES_BLOCK_SIZE, }, .setkey = xts_skcipher_setkey, @@ -2912,8 +2982,8 @@ static void caam_skcipher_alg_init(struct caam_skcipher_alg *t_alg) alg->base.cra_module = THIS_MODULE; alg->base.cra_priority = CAAM_CRA_PRIORITY; alg->base.cra_ctxsize = sizeof(struct caam_ctx); - alg->base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_ALLOCATES_MEMORY | - CRYPTO_ALG_KERN_DRIVER_ONLY; + alg->base.cra_flags |= (CRYPTO_ALG_ASYNC | CRYPTO_ALG_ALLOCATES_MEMORY | + CRYPTO_ALG_KERN_DRIVER_ONLY); alg->init = caam_cra_init_skcipher; alg->exit = caam_cra_exit; diff --git a/drivers/crypto/caam/caamalg_qi2.h b/drivers/crypto/caam/caamalg_qi2.h index f29cb7bd7dd3..d35253407ade 100644 --- a/drivers/crypto/caam/caamalg_qi2.h +++ b/drivers/crypto/caam/caamalg_qi2.h @@ -13,6 +13,7 @@ #include #include "dpseci.h" #include "desc_constr.h" +#include #define DPAA2_CAAM_STORE_SIZE 16 /* NAPI weight *must* be a multiple of the store size. */ @@ -186,6 +187,7 @@ struct caam_request { void (*cbk)(void *ctx, u32 err); void *ctx; void *edesc; + struct skcipher_request fallback_req; }; /** From patchwork Tue Sep 22 16:03:22 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrei Botila X-Patchwork-Id: 11792785 X-Patchwork-Delegate: herbert@gondor.apana.org.au Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3AE65112C for ; Tue, 22 Sep 2020 16:04:20 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0FD0F2399A for ; Tue, 22 Sep 2020 16:04:20 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="jj4OOGnU" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726731AbgIVQET (ORCPT ); Tue, 22 Sep 2020 12:04:19 -0400 Received: from mail-eopbgr60083.outbound.protection.outlook.com ([40.107.6.83]:40665 "EHLO EUR04-DB3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726643AbgIVQEP (ORCPT ); Tue, 22 Sep 2020 12:04:15 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LXwe1E3ccCgxXpblrgBEFZS6fYvoyKN5LZoU+4OEjIWdA+dWkL4f2xf59+ZcWBXEU6MNzL/Gj+d4B4MZpBIv4WPlavzQOXkO8QnbdAvzvgxqROCUiMkOyRE1HIVIns50G+h9d7YYFtxTnjGWlaZIGTda2cN8Agpi2OvD+y5Di+zi9S9m0BQetKbUbvC4tRwEjOqBSDwvFyf/zkJ/6X6Ri6hW9btoT9L1KH/gUqJgjmqQ8lAw9NU2aRsd7o4F/x6eSQtnUypS7TBFr45fKC8HgAHw5rpTLPdf3CftYpagYxQk5G0wDMiyeaVC6LdvxGaicRlLZKloP8pkugPy4lloiA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=25rAbYU/5sLGxzc9ZY0sRC5+V14HYibf8FJTfunPEek=; b=g56COYwsSgHDJf9+69hzR6l9mMUNXOmwL76XJHG4khHIcH26iZhCxxBwhKJoP4QNrLg/bJUCcgfInLomxX2ZvDSGtKthYje421U5w9ImLxNKGtVJQOsXq9rp29LtUgAxnmw9HZZZKRFvcTIw8cdTtpnY8xiR/+XfuY8/tOYw0jG1YCphVcJUo+NU0Y5/YQy4KgMRuXrhk8X0iT60SVg7KRdk/COIQ0wwy8LkOqS397E2k2oaQXzuIdqmKiot1XHtFlvOKruv14FFGn70eNOBnLWpIxZnO4U1UmuyRrrfTf80nFnPDJcBmoN/z0uD7uv1sltJPEbSG0Gek+WY5/p4bg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector2-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=25rAbYU/5sLGxzc9ZY0sRC5+V14HYibf8FJTfunPEek=; b=jj4OOGnULVw2Ef9mOt0+/4kyHDIVXpXuR6L4ug4JYaplK3GRHRJ8WE5B+wDWat+47FPw6YiEc532//sB1JoL0WkyIjxo1h3UJ59bZrG4CPkaiIfIepxEs7MMy2tXpbnRwR5RjEgqJQNy3xLMDqe9/M4YehG+hFop5lgo5UG4+is= Authentication-Results: nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=none action=none header.from=oss.nxp.com; Received: from VE1PR04MB6608.eurprd04.prod.outlook.com (2603:10a6:803:125::12) by VI1PR04MB7072.eurprd04.prod.outlook.com (2603:10a6:800:12c::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3370.16; Tue, 22 Sep 2020 16:04:03 +0000 Received: from VE1PR04MB6608.eurprd04.prod.outlook.com ([fe80::34b6:beed:6762:a67c]) by VE1PR04MB6608.eurprd04.prod.outlook.com ([fe80::34b6:beed:6762:a67c%7]) with mapi id 15.20.3391.027; Tue, 22 Sep 2020 16:04:03 +0000 From: Andrei Botila To: Horia Geanta , Aymen Sghaier , Herbert Xu , "David S. Miller" Cc: linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 04/10] crypto: caam/jr - add support for more XTS key lengths Date: Tue, 22 Sep 2020 19:03:22 +0300 Message-Id: <20200922160328.28926-5-andrei.botila@oss.nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200922160328.28926-1-andrei.botila@oss.nxp.com> References: <20200922160328.28926-1-andrei.botila@oss.nxp.com> X-ClientProxiedBy: AM4PR0302CA0022.eurprd03.prod.outlook.com (2603:10a6:205:2::35) To VE1PR04MB6608.eurprd04.prod.outlook.com (2603:10a6:803:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from lsv15007.swis.ro-buh01.nxp.com (83.217.231.2) by AM4PR0302CA0022.eurprd03.prod.outlook.com (2603:10a6:205:2::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3391.13 via Frontend Transport; Tue, 22 Sep 2020 16:04:02 +0000 X-Mailer: git-send-email 2.17.1 X-Originating-IP: [83.217.231.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 268c5f26-a828-4992-0def-08d85f111fee X-MS-TrafficTypeDiagnostic: VI1PR04MB7072: X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4941; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5LOxeSEmWlqgm5vTRb+O6TcIufmbqBl/BR4czbEulxCduEyLgpVETsMJcTWZqeZY/IGKadva8U18cpATghf0AqWP1nz49zalmpGWXBn0JRqZrW3S5DJA4XS984Aq6Q6nm4uhFlPnsHKuPwfUhsjRD3tUbJw8VJVpGd1z0y3ctjCRlMG1LqDYkxke0Lk25QhYhPpklUGUVIgEblAsgvSJCNQegJaRJ6NJz0c1jOM/TQ+naARaDEzoKzjfvtrRoRnKU2zeSG3HAdXkBk9fZ/OrcgegT27KpxxYcRGloJg/o+81/MainRMzGu4GhOclSd+10/FoW4CUVxht0yBopva4Bg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6608.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(376002)(366004)(346002)(39860400002)(136003)(1076003)(4326008)(2616005)(6512007)(83380400001)(186003)(16526019)(2906002)(956004)(5660300002)(66556008)(66476007)(8936002)(316002)(6506007)(44832011)(66946007)(52116002)(6486002)(478600001)(110136005)(8676002)(26005)(86362001)(6666004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: nB6bCGjSQ6av4dcv/e/B2zIpT7cjMPGzRZVpAfI8KysPeM9bBuaNHtZnawbxq6sBIBJwNFf4kHAeYcjV4iLxpJJb5bOTiioTzSwmR8sqzX06Uk8VtBnQy7e/t0qWUMyCkrv3OPcJj2r3DIsmoXbyl/FOhoOp8IAUBQ5nhVACYPI0ulVA2IpDsWBPFZEPU+E9pdqB3Jn6XVdBnorNxbkM+gHVnpFlcfIQKX7zm0xifwPEuei6b8uUx/gPSFhZQsphb+ea546w72kXfRxlSz5elfcoKDJMqwhxLtgxIfJrMjbh6kl2PLlT7OjxZZRlPdvQUytudnF77nLEpBgGOK7NQWWzf6H3+W2UQZd30fmAgqRcBO1lmN2l9cK5/9VE5S1zlkqOiH3+miTlJF3qpmkGQSTlNHGlaJZ3K3hZdD5rtwrV8w64dzw4b/aSiYU045ssIo6P5jiunlBzSYcI8Ag35y9lL6of3HRKENsdBODWreUC3DhynLR2/NZVLMQLCRqPbeU7I/hfM1j6WtsYybaLogUFDHciR66+T58NsO1JAsQQ0JNxXHGuCz7bRtr07Cu3FHRYKqGq7kMEKap8Wc0E/bIEMZF1bEYGsbBCZKkJGHhrQDC3gRyT/rvntCHCGtlEhEhf/yT3zPLh0EGbAzZq7Q== X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 268c5f26-a828-4992-0def-08d85f111fee X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6608.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2020 16:04:02.9911 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Uve9KK3eW6/BKWsbqQhxXFC/rnU+6J5mvCfM4pWwAv0J1+NNd73rMHY+yeWkfjrSQHRPUe6iTysEdjaE5pBA9A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7072 Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org From: Andrei Botila CAAM accelerator only supports XTS-AES-128 and XTS-AES-256 since it adheres strictly to the standard. All the other key lengths are accepted and processed through a fallback as long as they pass the xts_verify_key() checks. Fixes: c6415a6016bf ("crypto: caam - add support for acipher xts(aes)") Cc: # v4.4+ Signed-off-by: Andrei Botila --- drivers/crypto/caam/caamalg.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/drivers/crypto/caam/caamalg.c b/drivers/crypto/caam/caamalg.c index adb2c05a8bde..a79b26f84169 100644 --- a/drivers/crypto/caam/caamalg.c +++ b/drivers/crypto/caam/caamalg.c @@ -57,6 +57,7 @@ #include "key_gen.h" #include "caamalg_desc.h" #include +#include #include /* @@ -115,6 +116,7 @@ struct caam_ctx { struct alginfo adata; struct alginfo cdata; unsigned int authsize; + bool xts_key_fallback; struct crypto_skcipher *fallback; }; @@ -835,11 +837,15 @@ static int xts_skcipher_setkey(struct crypto_skcipher *skcipher, const u8 *key, u32 *desc; int err; - if (keylen != 2 * AES_MIN_KEY_SIZE && keylen != 2 * AES_MAX_KEY_SIZE) { + err = xts_verify_key(skcipher, key, keylen); + if (err) { dev_dbg(jrdev, "key size mismatch\n"); - return -EINVAL; + return err; } + if (keylen != 2 * AES_KEYSIZE_128 && keylen != 2 * AES_KEYSIZE_256) + ctx->xts_key_fallback = true; + err = crypto_skcipher_setkey(ctx->fallback, key, keylen); if (err) return err; @@ -1784,7 +1790,8 @@ static inline int skcipher_crypt(struct skcipher_request *req, bool encrypt) if (!req->cryptlen) return 0; - if (ctx->fallback && xts_skcipher_ivsize(req)) { + if (ctx->fallback && (xts_skcipher_ivsize(req) || + ctx->xts_key_fallback)) { struct caam_skcipher_req_ctx *rctx = skcipher_request_ctx(req); skcipher_request_set_tfm(&rctx->fallback_req, ctx->fallback); From patchwork Tue Sep 22 16:03:23 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrei Botila X-Patchwork-Id: 11792799 X-Patchwork-Delegate: herbert@gondor.apana.org.au Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 277A9139F for ; Tue, 22 Sep 2020 16:04:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 049D02399A for ; Tue, 22 Sep 2020 16:04:52 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="hUrBuvGR" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726779AbgIVQEb (ORCPT ); Tue, 22 Sep 2020 12:04:31 -0400 Received: from mail-eopbgr40081.outbound.protection.outlook.com ([40.107.4.81]:27291 "EHLO EUR03-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726694AbgIVQEV (ORCPT ); Tue, 22 Sep 2020 12:04:21 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AKiNRtsr/AuLcH5HbYCT2EdWlF8EdXcxkn/EAwc/IgGQdUBEEt91sqU7clBCViTIjq8Ch0nJXIgf4md0iZMUX5IsRSoU2I28bU82r6ngi6Txe74kg7+vtiSUUjGE/dnOhbl+W1LJb6M3oYe2kPaTJxo63ygNeR6wtHhxUJpbw3ipb+KcRhtuwt5KPkgihoyGC1iXBCqptPI7q6XIF/6q9dcvZ5U4BaatpSZNRWJIsgGyOKq+MHAvFciaeg3AlAiJKiJi0HK5rI+QWcbUrr+J94DqJfn6jgMGbx6sbbZt7yWrzuyL4htlVga+j9yqKZuLkKO5p+I8c30kCKhgbpjAMQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DeKMrVNealk6Gq5fxg6B7o4jmOP/KLoxvvcm12JqUIA=; b=ltryuueztyrF9fOinP7yoeJfATXpbmb9dxuI8SxKCQCmpWBttY6qI2SrsnxkoRViP7eBdtuJHKNRFcN1czNuYbk7EDD0yEqIsfW7avBoA5tGkCoHKj9qpgg2zOJkeobANAZBAkgYXDPqpH4PIIp0rjwaGi/Y0o7sFu0JCzRdAP1Btoy3dEW3aFiNiKSmFhV5D6tKRp/8kYh2/2Q3CWoS83shyvzuc5wF0z86CTveiAHsYOsV1AYRbOVfbkAz8UFyDE7HC86ayjuWgUT35r+u9b5RobLi9vcvIBfZBzzf0kd9h2O4hEcU/RuXojN2kGQfbpFen81DrFQxSRVsot/uyw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector2-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DeKMrVNealk6Gq5fxg6B7o4jmOP/KLoxvvcm12JqUIA=; b=hUrBuvGR0+L+73VLZbRD6cHBRoyRwLGWz2Axz2tMQ6p7KGM7DaWeyyqPF7SEsvyFb7TfbYBbE71VAV3l/tBBKgts1knnwbu+7hivMRMFl1cyfTF9CZVzv8/rs14FgVUnLO+I0aUvAoqrYgUVnLFPqjYHyNrrZolozn9a2Hfi34M= Authentication-Results: nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=none action=none header.from=oss.nxp.com; Received: from VE1PR04MB6608.eurprd04.prod.outlook.com (2603:10a6:803:125::12) by VI1PR04MB7072.eurprd04.prod.outlook.com (2603:10a6:800:12c::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3370.16; Tue, 22 Sep 2020 16:04:04 +0000 Received: from VE1PR04MB6608.eurprd04.prod.outlook.com ([fe80::34b6:beed:6762:a67c]) by VE1PR04MB6608.eurprd04.prod.outlook.com ([fe80::34b6:beed:6762:a67c%7]) with mapi id 15.20.3391.027; Tue, 22 Sep 2020 16:04:04 +0000 From: Andrei Botila To: Horia Geanta , Aymen Sghaier , Herbert Xu , "David S. Miller" Cc: linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 05/10] crypto: caam/qi - add support for more XTS key lengths Date: Tue, 22 Sep 2020 19:03:23 +0300 Message-Id: <20200922160328.28926-6-andrei.botila@oss.nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200922160328.28926-1-andrei.botila@oss.nxp.com> References: <20200922160328.28926-1-andrei.botila@oss.nxp.com> X-ClientProxiedBy: AM4PR0302CA0022.eurprd03.prod.outlook.com (2603:10a6:205:2::35) To VE1PR04MB6608.eurprd04.prod.outlook.com (2603:10a6:803:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from lsv15007.swis.ro-buh01.nxp.com (83.217.231.2) by AM4PR0302CA0022.eurprd03.prod.outlook.com (2603:10a6:205:2::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3391.13 via Frontend Transport; Tue, 22 Sep 2020 16:04:03 +0000 X-Mailer: git-send-email 2.17.1 X-Originating-IP: [83.217.231.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: b17898f6-d99d-4bd0-0656-08d85f112085 X-MS-TrafficTypeDiagnostic: VI1PR04MB7072: X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2043; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0GidvJPHKblS6CZSYxneXu2y/yDFI7M6Gsora1A0k1i2NpWHUoiqi7sFQ03qL5bbyv6+ph/jJNzQ2tU4Xc6V9S0HWllEPlbp68Ia8EIGSIXWC/NFWB0M/kkJm7tyMqxx1t+P4EhiTOW4yNFlzdQp3KCaPBfpuoVUeDT8Ylm/2AK/mB9i51CaMYQ0kFhHWG6A4SQbUnBp5TTbEcdqoNRiAXcQ7wUZOuGsmHcR82GWkrO+gauLUe3LlutjDfQ9aP6f8ASxcgVxC9MtdmvYwV8P10WHZ/Yeinj6YfElYtEgyaR9E3iEdoL5HMggyByD6rNQ0JAddsw/iT40B+w9CHjhzg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6608.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(376002)(366004)(346002)(39860400002)(136003)(1076003)(4326008)(2616005)(6512007)(83380400001)(186003)(16526019)(2906002)(956004)(5660300002)(66556008)(66476007)(8936002)(316002)(6506007)(44832011)(66946007)(52116002)(6486002)(478600001)(110136005)(8676002)(26005)(86362001)(6666004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: 3xpsDC5sq0C8ADA1hBI6hmkE0Ji4BPQWTQGtvewY6L27KiB2xHoCnA16sjDH0fazBxy4g0cSMeesfgVe6kyqvq6vim/Uk9h9un1BHL4TQaLXLsx9RSmyqMB8ublG/It3E9Yd2KFT9H28Z7zajSyc/I+quDyWPlt8jdk29+cFchPdS3EGaNU36fu7polsu1NjAz2eyrOJWOgyMAsnrbbstGkHaoPCR5qMu0HaUHmvudvFzv44jNBqU4myQllYAZ3wrm/ksG4ZUEFoeLJe3hcaFLOSh0bhl00kHPO64kN/jPF9UL3USI86BT2F+xo2xXjXYG52TR0cJD3ujMYIzIGrmDC0AbHbjacbm/LxHStRcGSuF0QalpnqClX8ZX8jqX7QwIl77IwR/uLTooYlLmsm2V9NIBjM75fufv5we3gxnYzK5jA9gIkPOe57GBRnSsV64IVyB9WSR8FT0Vy8TK4GF/Sis77NIUjq0yHBQZ7vHwD/uijCtFA3d7PmsrDAGOskoFxZncF1AEK1Y3srg0CWr5s4Ul55rGnS3Xkw4r8FsWwNOLguaVuxwhQzLJfZJgGp2kLKQNxk7EMwVkzM78T7hZolSZ9pPE6zGr/bzsdnPGzGtejWcm6SPK++WvaYD4QTlTv0SWq+io2nHZeOIpS5uA== X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: b17898f6-d99d-4bd0-0656-08d85f112085 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6608.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2020 16:04:03.9495 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: GtXF0japkAD5o6UHmPLEzp7rNracsHouW7c27qXjjoX8ROqlzpxyX5NEYk1i67iqOtp4Ocqq84KgNja3s9KAFA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7072 Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org From: Andrei Botila CAAM accelerator only supports XTS-AES-128 and XTS-AES-256 since it adheres strictly to the standard. All the other key lengths are accepted and processed through a fallback as long as they pass the xts_verify_key() checks. Fixes: b189817cf789 ("crypto: caam/qi - add ablkcipher and authenc algorithms") Cc: # v4.12+ Signed-off-by: Andrei Botila --- drivers/crypto/caam/caamalg_qi.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/drivers/crypto/caam/caamalg_qi.c b/drivers/crypto/caam/caamalg_qi.c index ee801370c879..30aceaf325d7 100644 --- a/drivers/crypto/caam/caamalg_qi.c +++ b/drivers/crypto/caam/caamalg_qi.c @@ -18,6 +18,7 @@ #include "qi.h" #include "jr.h" #include "caamalg_desc.h" +#include #include /* @@ -68,6 +69,7 @@ struct caam_ctx { struct device *qidev; spinlock_t lock; /* Protects multiple init of driver context */ struct caam_drv_ctx *drv_ctx[NUM_OP]; + bool xts_key_fallback; struct crypto_skcipher *fallback; }; @@ -734,11 +736,15 @@ static int xts_skcipher_setkey(struct crypto_skcipher *skcipher, const u8 *key, int ret = 0; int err; - if (keylen != 2 * AES_MIN_KEY_SIZE && keylen != 2 * AES_MAX_KEY_SIZE) { + err = xts_verify_key(skcipher, key, keylen); + if (err) { dev_dbg(jrdev, "key size mismatch\n"); - return -EINVAL; + return err; } + if (keylen != 2 * AES_KEYSIZE_128 && keylen != 2 * AES_KEYSIZE_256) + ctx->xts_key_fallback = true; + err = crypto_skcipher_setkey(ctx->fallback, key, keylen); if (err) return err; @@ -1402,7 +1408,8 @@ static inline int skcipher_crypt(struct skcipher_request *req, bool encrypt) if (!req->cryptlen) return 0; - if (ctx->fallback && xts_skcipher_ivsize(req)) { + if (ctx->fallback && (xts_skcipher_ivsize(req) || + ctx->xts_key_fallback)) { struct caam_skcipher_req_ctx *rctx = skcipher_request_ctx(req); skcipher_request_set_tfm(&rctx->fallback_req, ctx->fallback); From patchwork Tue Sep 22 16:03:24 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrei Botila X-Patchwork-Id: 11792797 X-Patchwork-Delegate: herbert@gondor.apana.org.au Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9C4FA139A for ; Tue, 22 Sep 2020 16:04:52 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 824462388B for ; Tue, 22 Sep 2020 16:04:52 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="l7lUgBCw" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726781AbgIVQEc (ORCPT ); Tue, 22 Sep 2020 12:04:32 -0400 Received: from mail-eopbgr60083.outbound.protection.outlook.com ([40.107.6.83]:40665 "EHLO EUR04-DB3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726686AbgIVQEU (ORCPT ); Tue, 22 Sep 2020 12:04:20 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=j9LFYUhHzLHfS5RHimcYxbW9Fkt1UvC9R//H2944MMyP4lnbArIgx5gtnO0lEfDSNv3io84PoZ5uNP64kHRz+NywSY7gTxd6nEZle3f4oEzTCp9raec+CdTP/wGiDLmCvvmK62R6jZedwleHio8gFXZDPQDReCEfkPUSwOCEynQrsqm8L7WY+ehXAFVdVNpS0HgElHm6EpPcSGIIDvOugcW6ztmt7XHKYAmkkicgmHLImQCgeMExPK9MMi3rDmeRe/G7zmJfxQXHnwO0/WqCwv2kOEw4yH+7HuKi2+R/3k2zIRN09czLlhC7SUh5yjyGd5rky7UaIDHFQdwSWP7oWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=laPo1FlHkzXyhfDF4v0FpI8og+Wt4VtXWIaKVkWosQY=; b=SW0pYgjeAy0ODc80KfqfKkLyjyIvHydRv58CXrEjZ14EboSvZ6rnz8pKrvPZu/5SlqG0euVAP4Nd9yM9HFC3Tw+QUUW42y4ZjQKbgPBahXKhy204aGYZnhYVKwS6DIIEaUx4Mje4ubQ1RAH8+Mh2MSRBs7d9On/m2bmJWdzAA1H9eZybFlVaNZ/1J+sg3FJHMEz9o003whdrmyPLGQrXl4UkkyjJ1S4br5Jq3ygipk6bEEjix5wnRun+U49HswDfK+eXB8g+bilduRNIA8zkTDQst2O3tFVn3R6OAuKrjmgAz+EYkBdJTIy6mv98WGGf0uzXMDz16MZ+lph+b3A5jA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector2-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=laPo1FlHkzXyhfDF4v0FpI8og+Wt4VtXWIaKVkWosQY=; b=l7lUgBCwCsVEHGjeUVOOHXjWzffTl/WzjxD7EVULfIRfraavEkndvEW1GOCGDehy+NGN/pq5nBGBqrIFmMcyyWUti1hVIe8CsbXXdHmpZl0+bOo2nAazRcT+CIry2B3S1QPXwD2nBsegqTvs16UP99LpBetFKG1n+KzXGud2PRQ= Authentication-Results: nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=none action=none header.from=oss.nxp.com; Received: from VE1PR04MB6608.eurprd04.prod.outlook.com (2603:10a6:803:125::12) by VI1PR04MB7072.eurprd04.prod.outlook.com (2603:10a6:800:12c::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3370.16; Tue, 22 Sep 2020 16:04:05 +0000 Received: from VE1PR04MB6608.eurprd04.prod.outlook.com ([fe80::34b6:beed:6762:a67c]) by VE1PR04MB6608.eurprd04.prod.outlook.com ([fe80::34b6:beed:6762:a67c%7]) with mapi id 15.20.3391.027; Tue, 22 Sep 2020 16:04:05 +0000 From: Andrei Botila To: Horia Geanta , Aymen Sghaier , Herbert Xu , "David S. Miller" Cc: linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 06/10] crypto: caam/qi2 - add support for more XTS key lengths Date: Tue, 22 Sep 2020 19:03:24 +0300 Message-Id: <20200922160328.28926-7-andrei.botila@oss.nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200922160328.28926-1-andrei.botila@oss.nxp.com> References: <20200922160328.28926-1-andrei.botila@oss.nxp.com> X-ClientProxiedBy: AM4PR0302CA0022.eurprd03.prod.outlook.com (2603:10a6:205:2::35) To VE1PR04MB6608.eurprd04.prod.outlook.com (2603:10a6:803:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from lsv15007.swis.ro-buh01.nxp.com (83.217.231.2) by AM4PR0302CA0022.eurprd03.prod.outlook.com (2603:10a6:205:2::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3391.13 via Frontend Transport; Tue, 22 Sep 2020 16:04:04 +0000 X-Mailer: git-send-email 2.17.1 X-Originating-IP: [83.217.231.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 18061e8d-16ba-47cf-25c9-08d85f11211c X-MS-TrafficTypeDiagnostic: VI1PR04MB7072: X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1824; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: IMpgX0wf0ZvZWV9gyK4jOjVFFhkVr+MFdYb95XcPn6qOz7vOF/JdZ94plve/NzCYOsrMgkMBQpGujkignzi0omnLXETVV+kwCUmPqQJtxhxU6Gm5QAfHpT8jOVGvzWdfvTVON/xHEuz3HsuswqVNFD9Snj9xQ7fv2tPNpF3e7kgUh6nrk0uBeOuNe3lBU3oR1H3OnXT08zSO7dgJn3ZnCb085jgk5U6t6o4Pu95V08fZGVgrPAEHUf3wdICUj5Z6TS4ju/8p8+C4hORUY6nMZU1atkCDz8fnrs6OyPVaO/a9wJZZZXJHrpNZf+S1zPPTL9b0PCy47hRKj7kuw1GhoQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6608.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(376002)(366004)(346002)(39860400002)(136003)(1076003)(4326008)(2616005)(6512007)(83380400001)(186003)(16526019)(2906002)(956004)(5660300002)(66556008)(66476007)(8936002)(316002)(6506007)(44832011)(66946007)(52116002)(6486002)(478600001)(110136005)(8676002)(26005)(86362001)(6666004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: 16aplXrL+yut3eDN9IyeTv6Az+DjIzoz1kM+I2ZN5ETrE+Y4xtqAbVElK/QT7+me+u1JmJP4M/fW8PNFGpxCzqFOm0ahfc2QUL52HJudyi725LYJArXw0N+3qUd1bRYKOzCO/tz9pTIPdmAFwhe5B73vbBw7zH952Hopec81y5sTg+3s6FP1IUSN2eGZdMT9fRDYkzpzfeU3/QVScPyccOcWaZZnPfVTydcqY0DdTydbTfJkOFPg8tC3uh+3d0uhWD1ZFAGd4INDwX3RkAK5Cl0N+V0FUf2Yd3v1QFRVu1sylTznJ5LNcNW57Nn6tfvcXWhqn5pdpwT9ScvIc0oNMv0+xe/GJEl0isyI2iiGacBWZvEFyM4L4jKHLxJHdjAgs2NhYQDStSLAaI/4/Hb+vmgTqHWcGPjQGAHAShV97Jc0iq7azNfmlgWCH1GxDzIlVt3Kc1vs8P0rl+vgZv/ptIE0/xLFkrfd5dFd6+MNzzi3duFf+akGyt0lGaXI9BmHeDAoy6mYf4IJGz9Z0Tgs2WGtUrhQVucokIQTewKn/1GlQfgPPdPw7glaQJhYpgnKlzOrkfGqs7emSk3RYAZ7e2fYlRhXfU8b5uaPA9JVAs7Sz0EG6plNZwS2UyV1RPXPdjlwY5YQcjSlEjKg1Nv31A== X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 18061e8d-16ba-47cf-25c9-08d85f11211c X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6608.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2020 16:04:04.9989 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: cK7HL8NDBpFiic1AQRHneVrih8HTtGmnNU4iIlGte6cxcUp94KgPpkbz8SPNqZSyaNRS+PJgbsoTSuy8oU5O5g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7072 Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org From: Andrei Botila CAAM accelerator only supports XTS-AES-128 and XTS-AES-256 since it adheres strictly to the standard. All the other key lengths are accepted and processed through a fallback as long as they pass the xts_verify_key() checks. Fixes: 226853ac3ebe ("crypto: caam/qi2 - add skcipher algorithms") Cc: # v4.20+ Signed-off-by: Andrei Botila --- drivers/crypto/caam/caamalg_qi2.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/crypto/caam/caamalg_qi2.c b/drivers/crypto/caam/caamalg_qi2.c index c36d11820db3..255b818c82b2 100644 --- a/drivers/crypto/caam/caamalg_qi2.c +++ b/drivers/crypto/caam/caamalg_qi2.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #define CAAM_CRA_PRIORITY 2000 @@ -81,6 +82,7 @@ struct caam_ctx { struct alginfo adata; struct alginfo cdata; unsigned int authsize; + bool xts_key_fallback; struct crypto_skcipher *fallback; }; @@ -1060,11 +1062,15 @@ static int xts_skcipher_setkey(struct crypto_skcipher *skcipher, const u8 *key, u32 *desc; int err; - if (keylen != 2 * AES_MIN_KEY_SIZE && keylen != 2 * AES_MAX_KEY_SIZE) { + err = xts_verify_key(skcipher, key, keylen); + if (err) { dev_dbg(dev, "key size mismatch\n"); - return -EINVAL; + return err; } + if (keylen != 2 * AES_KEYSIZE_128 && keylen != 2 * AES_KEYSIZE_256) + ctx->xts_key_fallback = true; + err = crypto_skcipher_setkey(ctx->fallback, key, keylen); if (err) return err; @@ -1469,7 +1475,8 @@ static int skcipher_encrypt(struct skcipher_request *req) if (!req->cryptlen) return 0; - if (ctx->fallback && xts_skcipher_ivsize(req)) { + if (ctx->fallback && (xts_skcipher_ivsize(req) || + ctx->xts_key_fallback)) { skcipher_request_set_tfm(&caam_req->fallback_req, ctx->fallback); skcipher_request_set_callback(&caam_req->fallback_req, req->base.flags, @@ -1512,7 +1519,8 @@ static int skcipher_decrypt(struct skcipher_request *req) if (!req->cryptlen) return 0; - if (ctx->fallback && xts_skcipher_ivsize(req)) { + if (ctx->fallback && (xts_skcipher_ivsize(req) || + ctx->xts_key_fallback)) { skcipher_request_set_tfm(&caam_req->fallback_req, ctx->fallback); skcipher_request_set_callback(&caam_req->fallback_req, req->base.flags, From patchwork Tue Sep 22 16:03:25 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrei Botila X-Patchwork-Id: 11792795 X-Patchwork-Delegate: herbert@gondor.apana.org.au Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id EBBCA112C for ; Tue, 22 Sep 2020 16:04:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C60E32399A for ; Tue, 22 Sep 2020 16:04:50 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="Fl4ApLcn" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726803AbgIVQEh (ORCPT ); Tue, 22 Sep 2020 12:04:37 -0400 Received: from mail-eopbgr60083.outbound.protection.outlook.com ([40.107.6.83]:40665 "EHLO EUR04-DB3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726721AbgIVQEe (ORCPT ); Tue, 22 Sep 2020 12:04:34 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gqQS5h0miMlOxmXCUpZ5hNSy6dJe2l8F4GDsPkvQCo88mXr0RrhEKK+Zx60igUTKBD174FjFdI29JIsBn1sx4pX3VB0vTr/2I7keJ/FPmfMGcsitXznvxdqcWxunI/P99TZ1OoYrxT80H+Nhvk4HAn0c6A8CfQWHKeKiU0kqjlENWdOu3ycU7PfY7rhKJmzQp0dcZytZ3yUu39wXv3BLz/WGF06eJVbeI2uPdhvXaR54S9EozsAhjSghzcAJPB0zfopnqbKjYTqCpkXX6P8KS5Vsx8l/QZqPHDYgwra3Aj76v038wjsvMp9HNKAYa4XHtqYD+5Nj3r32jAnC2ghlrA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=P/UjFOmwTRD6x38o94IyQEOLTYv2mNzSRW+3pBngMlA=; b=Vx4K75FZFw+F3rkx3EnIMo0kV+vZPQXceCNO8MXvVjOKR0ErfKbsH2e8fa9r7oKFwnFeL8T9Px3LjiYv0+yQyYRHOb161ihHQTK+5Ys+OfJRH0tKMPp+Dk6RIV7HOeM5oVC9xOU1wXNcL4YtxD0BLPKAf6aGFTCLKG2Mto7fAfj8JDoAmXMSx7ULHFZPKjrfdPbXnohnkj0UNLQTGYQM1AmTXvWVvnSNGXVtr46xRkFYVked58oGtmT9Fx8xHkF9sXACXbIOrPNuF+/jK56S8+aaYRvMrl0iSmH4Fp/fbe4AGcZ5m8s2mjVdNYP/Wcbcc4PV30LVUyyXPfxbwcpRLQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector2-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=P/UjFOmwTRD6x38o94IyQEOLTYv2mNzSRW+3pBngMlA=; b=Fl4ApLcnRtgyCaolxaM3jiA6L7wEBp8dOhoX+8sDDTOydDjVcyFJEfB3BzPjVl18WgAjVnubdKpjmYXUb1bzi+xIR2TAvmldi1jORXBW/mO7HsnW62IJJBhJpyT5W3zK2bVTKww34n+o3qMGgsrYXHPn5hvAaNfsKSS3Lq0k5v8= Authentication-Results: nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=none action=none header.from=oss.nxp.com; Received: from VE1PR04MB6608.eurprd04.prod.outlook.com (2603:10a6:803:125::12) by VI1PR04MB7072.eurprd04.prod.outlook.com (2603:10a6:800:12c::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3370.16; Tue, 22 Sep 2020 16:04:06 +0000 Received: from VE1PR04MB6608.eurprd04.prod.outlook.com ([fe80::34b6:beed:6762:a67c]) by VE1PR04MB6608.eurprd04.prod.outlook.com ([fe80::34b6:beed:6762:a67c%7]) with mapi id 15.20.3391.027; Tue, 22 Sep 2020 16:04:06 +0000 From: Andrei Botila To: Horia Geanta , Aymen Sghaier , Herbert Xu , "David S. Miller" Cc: linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 07/10] crypto: caam - add xts check for block length equal to zero Date: Tue, 22 Sep 2020 19:03:25 +0300 Message-Id: <20200922160328.28926-8-andrei.botila@oss.nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200922160328.28926-1-andrei.botila@oss.nxp.com> References: <20200922160328.28926-1-andrei.botila@oss.nxp.com> X-ClientProxiedBy: AM4PR0302CA0022.eurprd03.prod.outlook.com (2603:10a6:205:2::35) To VE1PR04MB6608.eurprd04.prod.outlook.com (2603:10a6:803:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from lsv15007.swis.ro-buh01.nxp.com (83.217.231.2) by AM4PR0302CA0022.eurprd03.prod.outlook.com (2603:10a6:205:2::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3391.13 via Frontend Transport; Tue, 22 Sep 2020 16:04:05 +0000 X-Mailer: git-send-email 2.17.1 X-Originating-IP: [83.217.231.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: d893ba53-c78a-4f94-3cf0-08d85f1121ae X-MS-TrafficTypeDiagnostic: VI1PR04MB7072: X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:6790; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 9M9XVU4EGk1HhwS7u1MeimoNO4LIeTGBjZuzyJSy0f0eRVCqXmeNeWLDG/vLa1Nq2U4FiLr/QvVRbXb26OR5dUC3erfFQDNrC9nv7FwWY+DwwUUSXphR4GUitm6oXvcWv0RYq4NjAOWjwf/37sb/SNENQ4aomsr8xo3ul8MPyYFHIovkhWPTYpNK7jItfM6IsoVUGIlL8v6FIc6ouWmXlgHCGdfg2jSkx9et4dQrbGeFKlwPdGzzPhcro2+onvqoiqPtN1QS5xKvMYxMP9pbJ6CO2FbbAX4zoRcW41xdkn+5lXHk3jY5C5wlyNpzp+9T0ZZkbzNhmr6YGVtWQbCEJw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6608.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(376002)(366004)(346002)(39860400002)(136003)(1076003)(4326008)(2616005)(6512007)(83380400001)(186003)(16526019)(2906002)(956004)(5660300002)(66556008)(66476007)(8936002)(316002)(6506007)(44832011)(66946007)(52116002)(6486002)(478600001)(110136005)(8676002)(26005)(86362001)(6666004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: j+mz2gK4pf8NhISgyid0+VwhvzsXXsRDmCQwYIqVgL3BFbrOydAYbnpjABLwzocJIdJlFXmyrr4UEol1O5NNt2ucM+3qebkKRH5u3Q2dBz0ktsKSgqFjDWaGX+2NkvdCgTeBpiPpMNUBfRbuLEJKLtFZLMTNFgll558aSFvpLtpJX8j+jqiLFcqdMfAPMUPjzchnL19VUPdpeJ7jXdXEHdhx6YoWtbP3/Wg5GUp2tVXv168u9U1+iJNgE0Q3lVvyi9UC6rKWIOZ22anEiStK9Z5c+9H1JmHn1p881vP5sL9qkMIwPY2jxwsYO7KMO/30gmbfplJPyzEmnapslKSfEfEGmangg/TYbB8w1IUHOn/BDdlB5+WDrKlqxviYQdN+JVgWzN0NO+JCnfpL/zF0Po/jPrS4FlIdSBzxU1ORmCS+5+ZuOWUcdWYkdaRyuvFqxcFQmJskSkc5C7jrH8rXd7M6HtQiTABOG3edVcuihVL3l27p9ha3MOMgk7jOT0LLE5UAFl9lS5Sl9nafN3EUwFVyQ2b+hLO8boWjCzifXWiN1Ub2BtBqgkf06eFI14OxxxfasMrBOzjweKHY2BpWTv9BR0x6GZezhUO+nDyE42y6tHJ80u4JK7IvuFfjfvZRhcAe2ENKrG7edu6DuhwrTA== X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: d893ba53-c78a-4f94-3cf0-08d85f1121ae X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6608.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2020 16:04:05.9533 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 9HXyD2f/EAlmCFyIzR9lWy5I/nwvagaFSrya/UMc5UrDIkEwyWGRAP3ndJm1maoxyWhvSUqatzZQTvZ4DcjVPw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7072 Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org From: Andrei Botila XTS should not return succes when dealing with block length equal to zero. This is different than the rest of the skcipher algorithms. Fixes: 31bb2f0da1b50 ("crypto: caam - check zero-length input") Cc: # v5.4+ Signed-off-by: Andrei Botila --- drivers/crypto/caam/caamalg.c | 7 ++++++- drivers/crypto/caam/caamalg_qi.c | 7 ++++++- drivers/crypto/caam/caamalg_qi2.c | 14 ++++++++++++-- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/drivers/crypto/caam/caamalg.c b/drivers/crypto/caam/caamalg.c index a79b26f84169..e72aa3e2e065 100644 --- a/drivers/crypto/caam/caamalg.c +++ b/drivers/crypto/caam/caamalg.c @@ -1787,7 +1787,12 @@ static inline int skcipher_crypt(struct skcipher_request *req, bool encrypt) u32 *desc; int ret = 0; - if (!req->cryptlen) + /* + * XTS is expected to return an error even for input length = 0 + * Note that the case input length < block size will be caught during + * HW offloading and return an error. + */ + if (!req->cryptlen && !ctx->fallback) return 0; if (ctx->fallback && (xts_skcipher_ivsize(req) || diff --git a/drivers/crypto/caam/caamalg_qi.c b/drivers/crypto/caam/caamalg_qi.c index 30aceaf325d7..efcc7cb050fc 100644 --- a/drivers/crypto/caam/caamalg_qi.c +++ b/drivers/crypto/caam/caamalg_qi.c @@ -1405,7 +1405,12 @@ static inline int skcipher_crypt(struct skcipher_request *req, bool encrypt) struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher); int ret; - if (!req->cryptlen) + /* + * XTS is expected to return an error even for input length = 0 + * Note that the case input length < block size will be caught during + * HW offloading and return an error. + */ + if (!req->cryptlen && !ctx->fallback) return 0; if (ctx->fallback && (xts_skcipher_ivsize(req) || diff --git a/drivers/crypto/caam/caamalg_qi2.c b/drivers/crypto/caam/caamalg_qi2.c index 255b818c82b2..4cbd7e834888 100644 --- a/drivers/crypto/caam/caamalg_qi2.c +++ b/drivers/crypto/caam/caamalg_qi2.c @@ -1472,7 +1472,12 @@ static int skcipher_encrypt(struct skcipher_request *req) struct caam_request *caam_req = skcipher_request_ctx(req); int ret; - if (!req->cryptlen) + /* + * XTS is expected to return an error even for input length = 0 + * Note that the case input length < block size will be caught during + * HW offloading and return an error. + */ + if (!req->cryptlen && !ctx->fallback) return 0; if (ctx->fallback && (xts_skcipher_ivsize(req) || @@ -1516,7 +1521,12 @@ static int skcipher_decrypt(struct skcipher_request *req) struct caam_request *caam_req = skcipher_request_ctx(req); int ret; - if (!req->cryptlen) + /* + * XTS is expected to return an error even for input length = 0 + * Note that the case input length < block size will be caught during + * HW offloading and return an error. + */ + if (!req->cryptlen && !ctx->fallback) return 0; if (ctx->fallback && (xts_skcipher_ivsize(req) || From patchwork Tue Sep 22 16:03:26 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrei Botila X-Patchwork-Id: 11792789 X-Patchwork-Delegate: herbert@gondor.apana.org.au Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id EE0B7139A for ; Tue, 22 Sep 2020 16:04:37 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C3D7E2399A for ; Tue, 22 Sep 2020 16:04:37 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="f1RtOkqp" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726799AbgIVQEg (ORCPT ); Tue, 22 Sep 2020 12:04:36 -0400 Received: from mail-eopbgr40081.outbound.protection.outlook.com ([40.107.4.81]:27291 "EHLO EUR03-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726631AbgIVQEf (ORCPT ); Tue, 22 Sep 2020 12:04:35 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=H9wvK7E+VoHGlz1SB74602Gil4ZPzlBTu4X4d+tjhbELHWmhYfxgCyvI52dO1mo8VoxAhjH9wCL+ghRm9YDLrNQPscsmHf7mxHpqu8MEaa5NKRdCaufR1x6i+TCVFZM43rXhgrSdPiwojgP5K0WBv82tIkSeMycbPvyGuhDdfi6DN6dO8AtaiaCFpTDVuYZqGUsixvtxICC7yiBjNj0/RsFehtLSBYXON8Ueqf9BXVb0bQ3VneFJDRjuU2zOXWsTUs+c3gioVOLOtOl1Q+e3USrM6NCCJWh26qczcEtLUkmiZG6j3ZE8WhyRV0fEBAJUFdV7LhO7BjhNr3723xqpog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7eP4HS2WnZIWUkNBbirjDIRkmlqTNzjp2B6fDiruTLw=; b=NZp63SZBhf73adhxBaMOOMoMnup9QkoKBbzn064mNoMUeKKQKP4A77DLG2MZiLviJxf+bd9Ln7RC8hr6xb1X338PGv146hZrLngDX8cao8un7gm7+SoCDUSeqxj8LmGQwTWI/y3APx2gh7N00ZknFunvsRxlzh0Zp6PguKbQ5sEqwPC5u20GAHahAGGPn4G5LjBht5AunfryMerHKt2uoPS2hHOwdyfh/bkt/8sf10pVktH2uH79anpBP2sBKwzyHv8iqvr0OcMgQoepUI50yhXtN7qSrNA9JNfcOg/ASTSBuMxYOTrEJHpAMjByLfiCJpDsDmeg9pwdENHoBHI7Uw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector2-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7eP4HS2WnZIWUkNBbirjDIRkmlqTNzjp2B6fDiruTLw=; b=f1RtOkqpudOGW1OiHgAbXCU9xiHs1CpYnJZjr9HHTrxLgbWmR77YcF5JqH6ntHS6ApU4Nx3m5dP2hWTTE5ePCjgiboB/vplLcAfouQTBQgjAzYcPmC7Sh73MQnFTVhszdvjlTEK9iXkIk11+kly5XowvCvCYpu3mtlUrMe2E+bg= Authentication-Results: nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=none action=none header.from=oss.nxp.com; Received: from VE1PR04MB6608.eurprd04.prod.outlook.com (2603:10a6:803:125::12) by VI1PR04MB7072.eurprd04.prod.outlook.com (2603:10a6:800:12c::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3370.16; Tue, 22 Sep 2020 16:04:07 +0000 Received: from VE1PR04MB6608.eurprd04.prod.outlook.com ([fe80::34b6:beed:6762:a67c]) by VE1PR04MB6608.eurprd04.prod.outlook.com ([fe80::34b6:beed:6762:a67c%7]) with mapi id 15.20.3391.027; Tue, 22 Sep 2020 16:04:07 +0000 From: Andrei Botila To: Horia Geanta , Aymen Sghaier , Herbert Xu , "David S. Miller" Cc: linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 08/10] crypto: caam/jr - add support for XTS with 16B IV Date: Tue, 22 Sep 2020 19:03:26 +0300 Message-Id: <20200922160328.28926-9-andrei.botila@oss.nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200922160328.28926-1-andrei.botila@oss.nxp.com> References: <20200922160328.28926-1-andrei.botila@oss.nxp.com> X-ClientProxiedBy: AM4PR0302CA0022.eurprd03.prod.outlook.com (2603:10a6:205:2::35) To VE1PR04MB6608.eurprd04.prod.outlook.com (2603:10a6:803:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from lsv15007.swis.ro-buh01.nxp.com (83.217.231.2) by AM4PR0302CA0022.eurprd03.prod.outlook.com (2603:10a6:205:2::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3391.13 via Frontend Transport; Tue, 22 Sep 2020 16:04:06 +0000 X-Mailer: git-send-email 2.17.1 X-Originating-IP: [83.217.231.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 1db477ec-dd9a-4bd7-8c6e-08d85f112241 X-MS-TrafficTypeDiagnostic: VI1PR04MB7072: X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5236; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ezGwZhvqP7r1woN5bg5mSy+iVZfG+T8kUgXXDyzyXupRLFShfBZUHNOqXVWesdnuS+ycuM8wtuXnJaIX7Ge+L2dihVNO1Tm5+71dvWwFGAaasjk0z7XKT1tzCAHc0/mzrUOQqfsYg2Y1gXXITx2EYofQvc3mF1hDrww5PWu9EmBjOo5Xsipy2GRxnIDxLPmG/Y8lUuF7pws0/Z3PRi96RcuCpk+VzqMP5NO/EYSuEYZ1fk4ng/V9gzGEXzvV1bdCAusW+VhTPJsrl8Txou2/sezlNjWz0NM/Irs8C+il/9Ag8g+4SYWbXedDd0ZP4SZWHw1MIsII5JN8IaaVffKMKg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6608.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(376002)(366004)(346002)(39860400002)(136003)(1076003)(4326008)(2616005)(6512007)(83380400001)(186003)(16526019)(2906002)(956004)(5660300002)(66556008)(66476007)(8936002)(316002)(6506007)(44832011)(66946007)(52116002)(6486002)(478600001)(110136005)(8676002)(26005)(86362001)(6666004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: tlQ7/CR0TMG6tntrnZbMtQ3aytnRxuUIm/6T1wMjIad4KM4ddw3aZzJpWcC/eX+bmqumCyX6puH2pAHcJlNZbqAiHjqaebfVNTXgCPP1d2LtZfoL0uCNQ8pdpo2AfQpvLOBscopxxbknZYrLbj8q9dlY+P7/O+rmmqxuilora4qDxhw/smsuB4P5ondgIh/Vj/hDzLVVcdyutKFngAV5+0WOwvqKB2KmUGTkgR4qfZRwHunJBOKGUxHAoEksjnI+Ml5OG6fJoMGmVTnml3WX97zdPEcEeCn+sPrixFAUIq1qpx6nIznmNReFuP3tiL2NSITad/f9dHbFCl2Tl+Mhze4pF8IyuxP1y5oytLsSo37clvTNYCcTXzGN56ZlPCOZg68syWQmW7oTK96Avt7r/L+9DuTBjmmvDma2GLGWl12cGv9xSzS0zMwIKzg0HxO5BPHwdj1MgLJC6C0PjDwvFdfH+23hdSlPJwqeHBiO40Sfkma+Hh+jSNijT4to0nQ207MJrdFBcc8nUpNAmd+pkqmjN4DTMTAEalTu3TvARakK1JdlhMseByiI3ftLINZ8LlquG/oFanRkBZu1O7GgSKvF87ZBSlXiH5kxZ6jmO82YI4QzbCblF9bD20V9xvMqEzOjPxABJ0/ikjyTFoWSYQ== X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1db477ec-dd9a-4bd7-8c6e-08d85f112241 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6608.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2020 16:04:06.8537 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: zELyboB/5xuZf2iv9bsRk7zULKH/qGoxKB/Rlhd2eRC7wT2SqHEDMZ5aei3WQAwetYvcuL/eM+zAzp8rUzmh5A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7072 Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org From: Andrei Botila Newer CAAM versions (Era 9+) support 16B IVs. Since for these devices the HW limitation is no longer present newer version should process the requests containing 16B IVs directly in hardware without using a fallback. Signed-off-by: Andrei Botila --- drivers/crypto/caam/caamalg.c | 12 ++++++++---- drivers/crypto/caam/caamalg_desc.c | 27 ++++++++++++++++----------- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/drivers/crypto/caam/caamalg.c b/drivers/crypto/caam/caamalg.c index e72aa3e2e065..cf5bd7666dfc 100644 --- a/drivers/crypto/caam/caamalg.c +++ b/drivers/crypto/caam/caamalg.c @@ -834,6 +834,7 @@ static int xts_skcipher_setkey(struct crypto_skcipher *skcipher, const u8 *key, { struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher); struct device *jrdev = ctx->jrdev; + struct caam_drv_private *ctrlpriv = dev_get_drvdata(jrdev->parent); u32 *desc; int err; @@ -846,9 +847,11 @@ static int xts_skcipher_setkey(struct crypto_skcipher *skcipher, const u8 *key, if (keylen != 2 * AES_KEYSIZE_128 && keylen != 2 * AES_KEYSIZE_256) ctx->xts_key_fallback = true; - err = crypto_skcipher_setkey(ctx->fallback, key, keylen); - if (err) - return err; + if (ctrlpriv->era <= 8 || ctx->xts_key_fallback) { + err = crypto_skcipher_setkey(ctx->fallback, key, keylen); + if (err) + return err; + } ctx->cdata.keylen = keylen; ctx->cdata.key_virt = key; @@ -1784,6 +1787,7 @@ static inline int skcipher_crypt(struct skcipher_request *req, bool encrypt) struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher); struct device *jrdev = ctx->jrdev; struct caam_drv_private_jr *jrpriv = dev_get_drvdata(jrdev); + struct caam_drv_private *ctrlpriv = dev_get_drvdata(jrdev->parent); u32 *desc; int ret = 0; @@ -1795,7 +1799,7 @@ static inline int skcipher_crypt(struct skcipher_request *req, bool encrypt) if (!req->cryptlen && !ctx->fallback) return 0; - if (ctx->fallback && (xts_skcipher_ivsize(req) || + if (ctx->fallback && ((ctrlpriv->era <= 8 && xts_skcipher_ivsize(req)) || ctx->xts_key_fallback)) { struct caam_skcipher_req_ctx *rctx = skcipher_request_ctx(req); diff --git a/drivers/crypto/caam/caamalg_desc.c b/drivers/crypto/caam/caamalg_desc.c index f0f0fdd1ef32..7571e1ac913b 100644 --- a/drivers/crypto/caam/caamalg_desc.c +++ b/drivers/crypto/caam/caamalg_desc.c @@ -1551,13 +1551,14 @@ void cnstr_shdsc_xts_skcipher_encap(u32 * const desc, struct alginfo *cdata) set_jump_tgt_here(desc, key_jump_cmd); /* - * create sequence for loading the sector index - * Upper 8B of IV - will be used as sector index - * Lower 8B of IV - will be discarded + * create sequence for loading the sector index / 16B tweak value + * Lower 8B of IV - sector index / tweak lower half + * Upper 8B of IV - upper half of 16B tweak */ append_seq_load(desc, 8, LDST_SRCDST_BYTE_CONTEXT | LDST_CLASS_1_CCB | (0x20 << LDST_OFFSET_SHIFT)); - append_seq_fifo_load(desc, 8, FIFOLD_CLASS_SKIP); + append_seq_load(desc, 8, LDST_SRCDST_BYTE_CONTEXT | LDST_CLASS_1_CCB | + (0x30 << LDST_OFFSET_SHIFT)); /* Load operation */ append_operation(desc, cdata->algtype | OP_ALG_AS_INITFINAL | @@ -1566,9 +1567,11 @@ void cnstr_shdsc_xts_skcipher_encap(u32 * const desc, struct alginfo *cdata) /* Perform operation */ skcipher_append_src_dst(desc); - /* Store upper 8B of IV */ + /* Store lower 8B and upper 8B of IV */ append_seq_store(desc, 8, LDST_SRCDST_BYTE_CONTEXT | LDST_CLASS_1_CCB | (0x20 << LDST_OFFSET_SHIFT)); + append_seq_store(desc, 8, LDST_SRCDST_BYTE_CONTEXT | LDST_CLASS_1_CCB | + (0x30 << LDST_OFFSET_SHIFT)); print_hex_dump_debug("xts skcipher enc shdesc@" __stringify(__LINE__) ": ", DUMP_PREFIX_ADDRESS, 16, 4, @@ -1610,23 +1613,25 @@ void cnstr_shdsc_xts_skcipher_decap(u32 * const desc, struct alginfo *cdata) set_jump_tgt_here(desc, key_jump_cmd); /* - * create sequence for loading the sector index - * Upper 8B of IV - will be used as sector index - * Lower 8B of IV - will be discarded + * create sequence for loading the sector index / 16B tweak value + * Lower 8B of IV - sector index / tweak lower half + * Upper 8B of IV - upper half of 16B tweak */ append_seq_load(desc, 8, LDST_SRCDST_BYTE_CONTEXT | LDST_CLASS_1_CCB | (0x20 << LDST_OFFSET_SHIFT)); - append_seq_fifo_load(desc, 8, FIFOLD_CLASS_SKIP); - + append_seq_load(desc, 8, LDST_SRCDST_BYTE_CONTEXT | LDST_CLASS_1_CCB | + (0x30 << LDST_OFFSET_SHIFT)); /* Load operation */ append_dec_op1(desc, cdata->algtype); /* Perform operation */ skcipher_append_src_dst(desc); - /* Store upper 8B of IV */ + /* Store lower 8B and upper 8B of IV */ append_seq_store(desc, 8, LDST_SRCDST_BYTE_CONTEXT | LDST_CLASS_1_CCB | (0x20 << LDST_OFFSET_SHIFT)); + append_seq_store(desc, 8, LDST_SRCDST_BYTE_CONTEXT | LDST_CLASS_1_CCB | + (0x30 << LDST_OFFSET_SHIFT)); print_hex_dump_debug("xts skcipher dec shdesc@" __stringify(__LINE__) ": ", DUMP_PREFIX_ADDRESS, 16, 4, desc, From patchwork Tue Sep 22 16:03:27 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrei Botila X-Patchwork-Id: 11792793 X-Patchwork-Delegate: herbert@gondor.apana.org.au Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 320DD139A for ; Tue, 22 Sep 2020 16:04:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0F6E5239D2 for ; Tue, 22 Sep 2020 16:04:46 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="WXQwkRIx" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726767AbgIVQEp (ORCPT ); Tue, 22 Sep 2020 12:04:45 -0400 Received: from mail-eopbgr60083.outbound.protection.outlook.com ([40.107.6.83]:40665 "EHLO EUR04-DB3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726686AbgIVQEi (ORCPT ); Tue, 22 Sep 2020 12:04:38 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cvIdZZJ09jqJ4FkSCQ41F81UFnRbz8bgcfIPgE31K9uZ9nr/56qI3eFd4psrs3GPckv3j6q3mTHuSJh3M4X1mAWkFHVReSa5xZ7FEQhdHEhas9JsZsrlPCIUEPum9+Qu2jLaIlfC4vV1NHQDuayw+FA/lH6cTyYlbx5v3SOaHzIP5Vv+8zk0IZ2g2lkYQf5aesI2LnmoBtzLI4Q/SOqwhPf3zvPvUzycoN+X3+LUEYcnQblVcjzLAL8NqOJUZQD4l5xSveHTirl1AerTezvHUHSYOFW9hJjOrbO9YFYF3AxMjBviXmLJgkag0ekQHEkyTSk2Ws6JntfhQRGRM1OXPA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pdmwAi6lysV7Yyany96bcPU+bY7oIv/8W/poR+1o11U=; b=LviCofloKfvwBd+vsRsI0GPAe9f+p8Hq/CrjF46a5SWEDwukUDKNCnUrGEyTo4Mk4+zGpCZ+fb1m2SvmafkHzhnpWFzob9NYH2hlK6bhbTIdkhRvvpj2BQGvWaGI6v/ergU7Rq76Tn6Ih1353q0XY+fRifRQPupADD48/KMm/K6NwMnT36DSJ870G5FF7XWbFJ7JKJCEP8EY/hGNLoGrnufqF+2zk3xvyAb28YFvRg2XmkdQkeblx2k0LPQM2TOwu+519yaEabebzOrDr2shiuT4G1tuNf/sMVa5AgtKtWnD78U0x/zZrLP1dJm+3kpIqwgICnMD8Rgc0WXgqG6OYg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector2-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pdmwAi6lysV7Yyany96bcPU+bY7oIv/8W/poR+1o11U=; b=WXQwkRIxsVUeADx/rYoMmSMb5YjZSkzTlKJIY3k9txDusuwK96PFTIZZ8mgIuSONeKaCPfqbmd4Cy/RNiUO/cMhe9CYPAqCxJKOSvGk2XuNeXNnw4xEWWwJan2KH8DhP7nyvnBGtJaKO4b57TC6Y92qrB1ddbinvfs3nj41Cup4= Authentication-Results: nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=none action=none header.from=oss.nxp.com; Received: from VE1PR04MB6608.eurprd04.prod.outlook.com (2603:10a6:803:125::12) by VI1PR04MB7072.eurprd04.prod.outlook.com (2603:10a6:800:12c::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3370.16; Tue, 22 Sep 2020 16:04:07 +0000 Received: from VE1PR04MB6608.eurprd04.prod.outlook.com ([fe80::34b6:beed:6762:a67c]) by VE1PR04MB6608.eurprd04.prod.outlook.com ([fe80::34b6:beed:6762:a67c%7]) with mapi id 15.20.3391.027; Tue, 22 Sep 2020 16:04:07 +0000 From: Andrei Botila To: Horia Geanta , Aymen Sghaier , Herbert Xu , "David S. Miller" Cc: linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 09/10] crypto: caam/qi - add support for XTS with 16B IV Date: Tue, 22 Sep 2020 19:03:27 +0300 Message-Id: <20200922160328.28926-10-andrei.botila@oss.nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200922160328.28926-1-andrei.botila@oss.nxp.com> References: <20200922160328.28926-1-andrei.botila@oss.nxp.com> X-ClientProxiedBy: AM4PR0302CA0022.eurprd03.prod.outlook.com (2603:10a6:205:2::35) To VE1PR04MB6608.eurprd04.prod.outlook.com (2603:10a6:803:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from lsv15007.swis.ro-buh01.nxp.com (83.217.231.2) by AM4PR0302CA0022.eurprd03.prod.outlook.com (2603:10a6:205:2::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3391.13 via Frontend Transport; Tue, 22 Sep 2020 16:04:07 +0000 X-Mailer: git-send-email 2.17.1 X-Originating-IP: [83.217.231.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: b14814fc-2879-4d94-0ca5-08d85f1122c8 X-MS-TrafficTypeDiagnostic: VI1PR04MB7072: X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3631; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: aKGVkwk0VrBcJ75Tf8NsSqekfEXqFmZRGS1xNUTkMgsvX4dpwDVta8Vc8WFh9XG4CeV4OZQRu2G7Fvpf3P+X5KKJvZoyOSFvj8je+jM4s5DDapapapik3u3CSfbAg+XctMRY3C/nyWC8vdteCb2Pznj1kOBAih6+OKl4k5YBqBl12M0iHQ/Wqcvcf1bDZQ6ba7XkopD7cS4PyibvX4GFYOwoXftO4INpaRBQvHfqT3ZjziMBoHIcXGs/TN5vHV0GoqCbNf1uKztpGcxefuClaNX73kPMKtfsOlJEk4gp0wRK4JRdYrSINwsnMTNpPQNL/uwb7sHuMyUi5X92WQNMXA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6608.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(376002)(366004)(346002)(39860400002)(136003)(1076003)(4326008)(2616005)(6512007)(83380400001)(186003)(16526019)(2906002)(956004)(5660300002)(66556008)(66476007)(8936002)(316002)(6506007)(44832011)(66946007)(52116002)(6486002)(478600001)(110136005)(8676002)(26005)(86362001)(6666004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: w+oHvRNQuuf4V2m3bPNODJMmW5AxCCIg2nK3TM2IjexVoCkzcpbyT41hgyVbNZ4Q9uGwENCsCUv4RJb8H1Pzd6BQzf8vLxmDZxRA7UT9fw0hf0bgLhFEHPzrxyTnrBlpX7H/n11JtHkXv2YERp08Zb1OvS94YUEHwRqdiKQRmIbaRX7CGx9mSZ41raFLxtdALPJPArOe/Jkfbztjh0h/o/IDKeXaRhGjsr2NLW7aiLNap4ZzHmM8rQKzn1FV4X1dbrQe1Oq+FhdXqhduFGT+zezPbv4SunnzCUCHf0WhYzedhDc2H0FVrDofqQgvX/q55HBmbBFLbw6hg94qjXqFbxYZjsnFExxovlEKPZbP1Cd1J0+bJwhd739cXLSUIb7Cseio6zRflcp6cbQXhY8mtBIXXpwFzjF/k/wrO/HG5iShawWBJjJvAC6sXhDmhRblXCeWmBCMOvECqCKVTNLxvz95v5VBxxwIUnGKHFOFcoGjTOydbfiKUXhajIP6qPU0VP+1AAm1a28jy4tu3N9uaao5W2aoq9WGDTTZmZ/OpmFXKKRD4OLfFQxu7BBRzTlO6t8uFT6n1f1tpQi4hY2OVNx2Wc+GTFGAo8w5Swn3+rQBaaHUuyD7OgBJ4uOseiJF4HHC2EyJFpVsgrChZMNLxA== X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: b14814fc-2879-4d94-0ca5-08d85f1122c8 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6608.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2020 16:04:07.7452 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 9qMkB6CMQRnW9YxSzPZDD3U9gNQhi2dvZljKhticdNsthiPrRa8AZPY0/fQNmi4j7JPU0aOAN2LDMWrSJ3IuBQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7072 Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org From: Andrei Botila Newer CAAM versions (Era 9+) support 16B IVs. Since for these devices the HW limitation is no longer present newer version should process the requests containing 16B IVs directly in hardware without using a fallback. Signed-off-by: Andrei Botila --- drivers/crypto/caam/caamalg_qi.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/crypto/caam/caamalg_qi.c b/drivers/crypto/caam/caamalg_qi.c index efcc7cb050fc..66f60d78bdc8 100644 --- a/drivers/crypto/caam/caamalg_qi.c +++ b/drivers/crypto/caam/caamalg_qi.c @@ -733,6 +733,7 @@ static int xts_skcipher_setkey(struct crypto_skcipher *skcipher, const u8 *key, { struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher); struct device *jrdev = ctx->jrdev; + struct caam_drv_private *ctrlpriv = dev_get_drvdata(jrdev->parent); int ret = 0; int err; @@ -745,9 +746,11 @@ static int xts_skcipher_setkey(struct crypto_skcipher *skcipher, const u8 *key, if (keylen != 2 * AES_KEYSIZE_128 && keylen != 2 * AES_KEYSIZE_256) ctx->xts_key_fallback = true; - err = crypto_skcipher_setkey(ctx->fallback, key, keylen); - if (err) - return err; + if (ctrlpriv->era <= 8 || ctx->xts_key_fallback) { + err = crypto_skcipher_setkey(ctx->fallback, key, keylen); + if (err) + return err; + } ctx->cdata.keylen = keylen; ctx->cdata.key_virt = key; @@ -1403,6 +1406,7 @@ static inline int skcipher_crypt(struct skcipher_request *req, bool encrypt) struct skcipher_edesc *edesc; struct crypto_skcipher *skcipher = crypto_skcipher_reqtfm(req); struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher); + struct caam_drv_private *ctrlpriv = dev_get_drvdata(ctx->jrdev->parent); int ret; /* @@ -1413,7 +1417,7 @@ static inline int skcipher_crypt(struct skcipher_request *req, bool encrypt) if (!req->cryptlen && !ctx->fallback) return 0; - if (ctx->fallback && (xts_skcipher_ivsize(req) || + if (ctx->fallback && ((ctrlpriv->era <= 8 && xts_skcipher_ivsize(req)) || ctx->xts_key_fallback)) { struct caam_skcipher_req_ctx *rctx = skcipher_request_ctx(req); From patchwork Tue Sep 22 16:03:28 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrei Botila X-Patchwork-Id: 11792791 X-Patchwork-Delegate: herbert@gondor.apana.org.au Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 42606139A for ; Tue, 22 Sep 2020 16:04:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 20F4D2399A for ; Tue, 22 Sep 2020 16:04:44 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="T1y1iGMR" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726820AbgIVQEk (ORCPT ); Tue, 22 Sep 2020 12:04:40 -0400 Received: from mail-eopbgr40081.outbound.protection.outlook.com ([40.107.4.81]:27291 "EHLO EUR03-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726798AbgIVQEj (ORCPT ); Tue, 22 Sep 2020 12:04:39 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mORe9buQNx4gseftsbTrWGDCtYZc5mpH0c3Jf5nSYG5LozOpfUusu9qKUHiwDvDgz0CIkvNiI4MEDegovb/5jKXFDAFb1FuWL6k3hK3ri1z162qUIUI2DH90ZkR4huyH2LwzofwOmEJxd0Pvnk05/AQRW363DWE7V0cL/UkWWu+ve959KC825tj/dSfrYgSOl0pTFORZcy0zc1mVbOgaS1G9PJyTkI9jM1zPqra6CaSt3UUUBMh+T74phYWtnuTUwqcJfLnxzSMSVqukXGxagE3PXuZlYx0MxJrWnsyUjrekBXNz1/l1gSjzPBWFZTvR0y1IGNIf3bLkMSdQdCim6w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QWLZWk0K6M4aVXUtQJTPqEDFY0xc5S9p9K5I7edK7Ig=; b=klqowlr4KeACyjfHt8vG6NszMOee1+weBDXDNHQHlfMuoPCTzn+7zKCR6kFYQIl9MQTh4Bz5MzEuC5dXENZIiS/BVQ6Nb3wUljjJlx4Vf5HJZA+iqJ508kKKMtEEhl6af7m2szyXr1LyJg9PhGMJwTXbGfzzllV/IsFtk/S2DblnRmJhqplTJEoSNg2RAz17sZwtM8nJ9lfRuTlSznjymB0t8ixvkcLjRKZKKiPv7objXLa6Yl39Nk6GxeF3BZ/ibUstz5VQLNK7R2vCGECak8NblnVcRjM/aa5PwvgiyGHFZFPGQr3nKI4NaO/VuI80FnEEBO8N7c38gLXSQJAZvw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector2-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QWLZWk0K6M4aVXUtQJTPqEDFY0xc5S9p9K5I7edK7Ig=; b=T1y1iGMR+eNfJsOHqNwv+zgPY1BYMtAHrnWLf1rgBuTJAwiWZvQMFm7h1HuCCHfySlTQBctnNYtgZPNkakS1rFUjYfkt1GCWIgpsi+bVklLMtX9QyKXEddO6cZJsSfcFNgEePKkfNFPtzSjD7RGJ3rfe8C5ETHG2yv3f61A9Fh0= Authentication-Results: nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=none action=none header.from=oss.nxp.com; Received: from VE1PR04MB6608.eurprd04.prod.outlook.com (2603:10a6:803:125::12) by VI1PR04MB7072.eurprd04.prod.outlook.com (2603:10a6:800:12c::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3370.16; Tue, 22 Sep 2020 16:04:08 +0000 Received: from VE1PR04MB6608.eurprd04.prod.outlook.com ([fe80::34b6:beed:6762:a67c]) by VE1PR04MB6608.eurprd04.prod.outlook.com ([fe80::34b6:beed:6762:a67c%7]) with mapi id 15.20.3391.027; Tue, 22 Sep 2020 16:04:08 +0000 From: Andrei Botila To: Horia Geanta , Aymen Sghaier , Herbert Xu , "David S. Miller" Cc: linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 10/10] crypto: caam/qi2 - add support for XTS with 16B IV Date: Tue, 22 Sep 2020 19:03:28 +0300 Message-Id: <20200922160328.28926-11-andrei.botila@oss.nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200922160328.28926-1-andrei.botila@oss.nxp.com> References: <20200922160328.28926-1-andrei.botila@oss.nxp.com> X-ClientProxiedBy: AM4PR0302CA0022.eurprd03.prod.outlook.com (2603:10a6:205:2::35) To VE1PR04MB6608.eurprd04.prod.outlook.com (2603:10a6:803:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from lsv15007.swis.ro-buh01.nxp.com (83.217.231.2) by AM4PR0302CA0022.eurprd03.prod.outlook.com (2603:10a6:205:2::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3391.13 via Frontend Transport; Tue, 22 Sep 2020 16:04:07 +0000 X-Mailer: git-send-email 2.17.1 X-Originating-IP: [83.217.231.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 746c4d53-6cb5-40bd-1c40-08d85f11234c X-MS-TrafficTypeDiagnostic: VI1PR04MB7072: X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3631; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: l8tVSVndNgtIS4D6AnqDCz3ykNPnTeC2ozAuM812Q95tqxdMz3Kn1DWMSNwXsGaYJMnzhF3dLq/hbQGy0+y5tK6pgOmtvSOxILESso8ZYBuP7SBuogU3V9njfNxNjbPVaeHDKJxo08RNTOnIrxxmNBgCSOWZ0066SwGuH4Yt63pYv+Vjb5onhRnMyWTUoaw+r9R13Lr0kgEmNbBeRjxnjpPGVqs8dtiad/BRn0AYJk2Lpw/mf+o9dTfPQhSpcuIX8BsZMlelbms0v0O13fZptvwJjkZQ6SxUuZVveZISHRbHuV6hxJ4eq4kfBwSjZUnqoKI0EEl+vNWVji9QhMyrTw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6608.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(376002)(366004)(346002)(39860400002)(136003)(1076003)(4326008)(2616005)(6512007)(83380400001)(186003)(16526019)(2906002)(956004)(5660300002)(66556008)(66476007)(8936002)(316002)(6506007)(44832011)(66946007)(52116002)(6486002)(478600001)(110136005)(8676002)(26005)(86362001)(6666004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: b5BlRy7KtTA4UO3RNM4+/YwubGAw5EY48agELoyS4XM6bXATPjoWjZWtw6/GbFpNaCkwpZiVuYxTpVut2Wovg2cOu7DgVKvRaPBbTq9Utrd6ynrmp5BDWl6FnUU9A99wQibUXnsI8jLxU3i0oDBKUCOvTt6OH9sx+PyVNL20ATVqFyYsuja5b1JCgi6hfuf0txKkukkGtUMpxlajZQvexRBwD+vQ7aIzKVVuUApPtJzWTHYpa4Pxpb98wWJX/6zL46XqORbfYpnpYE3b5NDO95qbK7cSCMsZ6/oliIiKHXkpLAsno5IpkfsLaqSBfzBrfSfWRBvPv6skUcik+3R68If0eWBfg4KyFcb6bu1bixo83gDclQGb4K5M9OE2nqZsixnIqNZLn2mXGzJOEJGpOg5uqq4rbYwpaA3sdAYGycm0fFjBM6+9viexkazvp5f6CH910UBCLnXSKsQ3IAva8xuJTHRndXdk7BNk2wq8vq1UJLYI4UC9Th3zHgBZdmtHa9xAUvPJaCUt2W5QpjEY2Cn8BxQ2ut7bZbYfN/4aF27vlIkLe9pRBWhJ3hH8LpR4dzBTeIW7zGU+6F19I+rmhs0thy3FzhPsE0L5UxTRMJY2eAee+CWczo5TCg/lk7/hOGsemVbhOLKwuHVhFo1N/g== X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 746c4d53-6cb5-40bd-1c40-08d85f11234c X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6608.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2020 16:04:08.5917 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: mvWLsVCth++q8/QcQ6NaDY3FDz3bYVT4BVVgDRVHXZj5F0Klu9djecYvCuOqMNFYdlRJ4nhLX2uBv22z8gLOFQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7072 Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org From: Andrei Botila Newer CAAM versions (Era 9+) support 16B IVs. Since for these devices the HW limitation is no longer present newer version should process the requests containing 16B IVs directly in hardware without using a fallback. Signed-off-by: Andrei Botila --- drivers/crypto/caam/caamalg_qi2.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/crypto/caam/caamalg_qi2.c b/drivers/crypto/caam/caamalg_qi2.c index 4cbd7e834888..98c1ff1744bb 100644 --- a/drivers/crypto/caam/caamalg_qi2.c +++ b/drivers/crypto/caam/caamalg_qi2.c @@ -1058,6 +1058,7 @@ static int xts_skcipher_setkey(struct crypto_skcipher *skcipher, const u8 *key, { struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher); struct device *dev = ctx->dev; + struct dpaa2_caam_priv *priv = dev_get_drvdata(dev); struct caam_flc *flc; u32 *desc; int err; @@ -1071,9 +1072,11 @@ static int xts_skcipher_setkey(struct crypto_skcipher *skcipher, const u8 *key, if (keylen != 2 * AES_KEYSIZE_128 && keylen != 2 * AES_KEYSIZE_256) ctx->xts_key_fallback = true; - err = crypto_skcipher_setkey(ctx->fallback, key, keylen); - if (err) - return err; + if (priv->sec_attr.era <= 8 || ctx->xts_key_fallback) { + err = crypto_skcipher_setkey(ctx->fallback, key, keylen); + if (err) + return err; + } ctx->cdata.keylen = keylen; ctx->cdata.key_virt = key; @@ -1470,6 +1473,7 @@ static int skcipher_encrypt(struct skcipher_request *req) struct crypto_skcipher *skcipher = crypto_skcipher_reqtfm(req); struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher); struct caam_request *caam_req = skcipher_request_ctx(req); + struct dpaa2_caam_priv *priv = dev_get_drvdata(ctx->dev); int ret; /* @@ -1480,7 +1484,7 @@ static int skcipher_encrypt(struct skcipher_request *req) if (!req->cryptlen && !ctx->fallback) return 0; - if (ctx->fallback && (xts_skcipher_ivsize(req) || + if (ctx->fallback && ((priv->sec_attr.era <= 8 && xts_skcipher_ivsize(req)) || ctx->xts_key_fallback)) { skcipher_request_set_tfm(&caam_req->fallback_req, ctx->fallback); skcipher_request_set_callback(&caam_req->fallback_req, @@ -1519,6 +1523,7 @@ static int skcipher_decrypt(struct skcipher_request *req) struct crypto_skcipher *skcipher = crypto_skcipher_reqtfm(req); struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher); struct caam_request *caam_req = skcipher_request_ctx(req); + struct dpaa2_caam_priv *priv = dev_get_drvdata(ctx->dev); int ret; /* @@ -1529,7 +1534,7 @@ static int skcipher_decrypt(struct skcipher_request *req) if (!req->cryptlen && !ctx->fallback) return 0; - if (ctx->fallback && (xts_skcipher_ivsize(req) || + if (ctx->fallback && ((priv->sec_attr.era <= 8 && xts_skcipher_ivsize(req)) || ctx->xts_key_fallback)) { skcipher_request_set_tfm(&caam_req->fallback_req, ctx->fallback); skcipher_request_set_callback(&caam_req->fallback_req,