Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp7593962ybl; Thu, 16 Jan 2020 02:16:34 -0800 (PST) X-Google-Smtp-Source: APXvYqwNTr3o3sFH4YXIItZ41yb26Log7WLE1m1aMi9NKhknuvAbwWv/LGBM0ti9CYmJU7SZFMen X-Received: by 2002:a9d:7852:: with SMTP id c18mr1288607otm.247.1579169794385; Thu, 16 Jan 2020 02:16:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579169794; cv=none; d=google.com; s=arc-20160816; b=BG55Ler5uDy9YhzN/d+sbMPFM/+B6Y0mzJxp1hPhbiCyJU32Y3Ue3Wgz5Od6rDsEpm k8Umn+0XseHsedQ8YadcEjlVrlz9o5UsGqPGXiCD08Z8lbJOLvSRC0XJkFHVFBP/V8PZ dYmemCi/4DJbRmFU8Uf6uBXqzg3AeD+enRKwRB7078y/Rg3tBSeewKz/tEXtHDWBMN3F SEfRuJwqbHDwW+csSsvp0gyXkm1wp8K/ozC8WLhFmBkRiImU8qb81wg88TqYUtcH2XTN LQdHEvKpCZlywnUYbu/2MrHkwD60hpV1w2lylZPFOEL7zXz0Ol0IR4VgBzj6Ubf79z53 8znw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=LXHJO0JMdqakth13nfUAcxGm1utbw7ebbeI5T15GyK0=; b=iU+uRSp5p1HdI/TMZP06n1HLRFE8lQFyKcLoNmvYsRrXintoWNYMXIlpTC3yXrRwcm 8TkJ2UTMcy6hEhcCi9jKPDfvJUYyBIqeOcYxQcGx3eQRaTB1B4j+MCqdNFONDnwiNGR4 Evdj0gVtl6BSG7rq5spzNioV/7Owik77X9hvyddo/pCqSGTP8Z+uiAUyLtnC2JhLPu8K 5FEWDVlNyjQVqHA0DtFJi3rbE84NKKaTIaIBtmN3fscrcSwNigV8YO/WO9bRV6VpJjVe ABFsjvIOBOInh/dHhlK2EwaILMAcdzhg9MTarTrISIZcA5afvKGJGBgAIHXkzTiTUNQ2 48EQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x7si10742566oia.165.2020.01.16.02.16.23; Thu, 16 Jan 2020 02:16:34 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730768AbgAPKPU (ORCPT + 99 others); Thu, 16 Jan 2020 05:15:20 -0500 Received: from foss.arm.com ([217.140.110.172]:47500 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726832AbgAPKPU (ORCPT ); Thu, 16 Jan 2020 05:15:20 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id ED5E431B; Thu, 16 Jan 2020 02:15:19 -0800 (PST) Received: from e110176-lin.arm.com (unknown [10.50.4.173]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6B0513F534; Thu, 16 Jan 2020 02:15:18 -0800 (PST) From: Gilad Ben-Yossef To: Herbert Xu , "David S. Miller" Cc: Ofir Drang , Hadar Gat , stable@vger.kernel.org, linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 07/11] crypto: ccree - fix FDE descriptor sequence Date: Thu, 16 Jan 2020 12:14:42 +0200 Message-Id: <20200116101447.20374-8-gilad@benyossef.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20200116101447.20374-1-gilad@benyossef.com> References: <20200116101447.20374-1-gilad@benyossef.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org From: Ofir Drang In FDE mode (xts, essiv and bitlocker) the cryptocell hardware requires that the the XEX key will be loaded after Key1. Signed-off-by: Ofir Drang Cc: stable@vger.kernel.org --- drivers/crypto/ccree/cc_cipher.c | 48 ++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/drivers/crypto/ccree/cc_cipher.c b/drivers/crypto/ccree/cc_cipher.c index 03aa4fb8e6cb..7d6252d892d7 100644 --- a/drivers/crypto/ccree/cc_cipher.c +++ b/drivers/crypto/ccree/cc_cipher.c @@ -520,6 +520,7 @@ static void cc_setup_readiv_desc(struct crypto_tfm *tfm, } } + static void cc_setup_state_desc(struct crypto_tfm *tfm, struct cipher_req_ctx *req_ctx, unsigned int ivsize, unsigned int nbytes, @@ -531,8 +532,6 @@ static void cc_setup_state_desc(struct crypto_tfm *tfm, int cipher_mode = ctx_p->cipher_mode; int flow_mode = ctx_p->flow_mode; int direction = req_ctx->gen_ctx.op_type; - dma_addr_t key_dma_addr = ctx_p->user.key_dma_addr; - unsigned int key_len = ctx_p->keylen; dma_addr_t iv_dma_addr = req_ctx->gen_ctx.iv_dma_addr; unsigned int du_size = nbytes; @@ -567,6 +566,47 @@ static void cc_setup_state_desc(struct crypto_tfm *tfm, break; case DRV_CIPHER_XTS: case DRV_CIPHER_ESSIV: + case DRV_CIPHER_BITLOCKER: + break; + default: + dev_err(dev, "Unsupported cipher mode (%d)\n", cipher_mode); + } +} + + +static void cc_setup_xex_state_desc(struct crypto_tfm *tfm, + struct cipher_req_ctx *req_ctx, + unsigned int ivsize, unsigned int nbytes, + struct cc_hw_desc desc[], + unsigned int *seq_size) +{ + struct cc_cipher_ctx *ctx_p = crypto_tfm_ctx(tfm); + struct device *dev = drvdata_to_dev(ctx_p->drvdata); + int cipher_mode = ctx_p->cipher_mode; + int flow_mode = ctx_p->flow_mode; + int direction = req_ctx->gen_ctx.op_type; + dma_addr_t key_dma_addr = ctx_p->user.key_dma_addr; + unsigned int key_len = ctx_p->keylen; + dma_addr_t iv_dma_addr = req_ctx->gen_ctx.iv_dma_addr; + unsigned int du_size = nbytes; + + struct cc_crypto_alg *cc_alg = + container_of(tfm->__crt_alg, struct cc_crypto_alg, + skcipher_alg.base); + + if (cc_alg->data_unit) + du_size = cc_alg->data_unit; + + switch (cipher_mode) { + case DRV_CIPHER_ECB: + break; + case DRV_CIPHER_CBC: + case DRV_CIPHER_CBC_CTS: + case DRV_CIPHER_CTR: + case DRV_CIPHER_OFB: + break; + case DRV_CIPHER_XTS: + case DRV_CIPHER_ESSIV: case DRV_CIPHER_BITLOCKER: /* load XEX key */ hw_desc_init(&desc[*seq_size]); @@ -877,12 +917,14 @@ static int cc_cipher_process(struct skcipher_request *req, /* STAT_PHASE_2: Create sequence */ - /* Setup IV and XEX key used */ + /* Setup state (IV) */ cc_setup_state_desc(tfm, req_ctx, ivsize, nbytes, desc, &seq_len); /* Setup MLLI line, if needed */ cc_setup_mlli_desc(tfm, req_ctx, dst, src, nbytes, req, desc, &seq_len); /* Setup key */ cc_setup_key_desc(tfm, req_ctx, nbytes, desc, &seq_len); + /* Setup state (IV and XEX key) */ + cc_setup_xex_state_desc(tfm, req_ctx, ivsize, nbytes, desc, &seq_len); /* Data processing */ cc_setup_flow_desc(tfm, req_ctx, dst, src, nbytes, desc, &seq_len); /* Read next IV */ -- 2.23.0