From: "Horia Geantă" <horia.geanta@nxp.com>
To: Ahmad Fatoum <a.fatoum@pengutronix.de>,
Aymen Sghaier <aymen.sghaier@nxp.com>,
Herbert Xu <herbert@gondor.apana.org.au>,
"David S. Miller" <davem@davemloft.net>
Cc: "kernel@pengutronix.de" <kernel@pengutronix.de>,
James Bottomley <jejb@linux.ibm.com>,
Jarkko Sakkinen <jarkko@kernel.org>,
Mimi Zohar <zohar@linux.ibm.com>,
David Howells <dhowells@redhat.com>,
James Morris <jmorris@namei.org>,
"Serge E. Hallyn" <serge@hallyn.com>,
Udit Agarwal <udit.agarwal@nxp.com>,
Jan Luebbe <j.luebbe@pengutronix.de>,
David Gstir <david@sigma-star.at>,
Franck Lenormand <franck.lenormand@nxp.com>,
Sumit Garg <sumit.garg@linaro.org>,
"linux-integrity@vger.kernel.org"
<linux-integrity@vger.kernel.org>,
"keyrings@vger.kernel.org" <keyrings@vger.kernel.org>,
"linux-crypto@vger.kernel.org" <linux-crypto@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-security-module@vger.kernel.org"
<linux-security-module@vger.kernel.org>
Subject: Re: [PATCH v1 1/3] crypto: caam - add in-kernel interface for blob generator
Date: Sun, 21 Mar 2021 22:46:31 +0200 [thread overview]
Message-ID: <76cd2a74-f522-34c0-eb8c-3047e3cab5cd@nxp.com> (raw)
In-Reply-To: <420d2319e533ac97965fb826a70bdb023af2a844.1615914058.git-series.a.fatoum@pengutronix.de>
On 3/16/2021 7:01 PM, Ahmad Fatoum wrote:
> +int caam_encap_blob(struct caam_blob_priv *priv, const char *keymod,
> + void *input, void *output, size_t length)
> +{
> + u32 *desc;
> + struct device *jrdev = &priv->jrdev;
> + dma_addr_t dma_in, dma_out;
> + struct caam_blob_job_result testres;
> + size_t keymod_len = strlen(keymod);
> + int ret;
> +
> + if (length <= CAAM_BLOB_OVERHEAD)
> + return -EINVAL;
> +
> + desc = caam_blob_alloc_desc(keymod_len);
> + if (!desc) {
> + dev_err(jrdev, "unable to allocate desc\n");
> + return -ENOMEM;
> + }
> +
> + dma_in = dma_map_single(jrdev, input, length - CAAM_BLOB_OVERHEAD, DMA_TO_DEVICE);
> + if (dma_mapping_error(jrdev, dma_in)) {
> + dev_err(jrdev, "unable to map input DMA buffer\n");
> + ret = -ENOMEM;
> + goto out_free;
> + }
> +
> + dma_out = dma_map_single(jrdev, output, length, DMA_FROM_DEVICE);
> + if (dma_mapping_error(jrdev, dma_out)) {
> + dev_err(jrdev, "unable to map output DMA buffer\n");
> + ret = -ENOMEM;
> + goto out_unmap_in;
> + }
> +
> + /*
> + * A data blob is encrypted using a blob key (BK); a random number.
> + * The BK is used as an AES-CCM key. The initial block (B0) and the
> + * initial counter (Ctr0) are generated automatically and stored in
> + * Class 1 Context DWords 0+1+2+3. The random BK is stored in the
> + * Class 1 Key Register. Operation Mode is set to AES-CCM.
> + */
> +
> + init_job_desc(desc, 0);
> + append_key_as_imm(desc, keymod, keymod_len, keymod_len,
> + CLASS_2 | KEY_DEST_CLASS_REG);
> + append_seq_in_ptr(desc, dma_in, length - CAAM_BLOB_OVERHEAD, 0);
> + append_seq_out_ptr(desc, dma_out, length, 0);
In case length is known to be < 2^16, it's recommended to use instead
append_seq_in_ptr_intlen, append_seq_out_ptr_intlen.
> + append_operation(desc, OP_TYPE_ENCAP_PROTOCOL | OP_PCLID_BLOB);
> +
> + print_hex_dump_debug("data@"__stringify(__LINE__)": ",
> + DUMP_PREFIX_ADDRESS, 16, 1, input,
> + length - CAAM_BLOB_OVERHEAD, false);
> + print_hex_dump_debug("jobdesc@"__stringify(__LINE__)": ",
> + DUMP_PREFIX_ADDRESS, 16, 1, desc,
> + desc_bytes(desc), false);
> +
> + testres.err = 0;
> + init_completion(&testres.completion);
> +
> + ret = caam_jr_enqueue(jrdev, desc, caam_blob_job_done, &testres);
> + if (ret == -EINPROGRESS) {
> + wait_for_completion(&testres.completion);
> + ret = testres.err;
> + print_hex_dump_debug("output@"__stringify(__LINE__)": ",
> + DUMP_PREFIX_ADDRESS, 16, 1, output,
> + length, false);
> + }
> +
> + dma_unmap_single(jrdev, dma_out, length, DMA_FROM_DEVICE);
> +out_unmap_in:
> + dma_unmap_single(jrdev, dma_in, length - CAAM_BLOB_OVERHEAD, DMA_TO_DEVICE);
> +out_free:
> + kfree(desc);
> +
> + return ret;
> +}
> +EXPORT_SYMBOL(caam_encap_blob);
> +
[...]
> diff --git a/include/soc/fsl/caam-blob.h b/include/soc/fsl/caam-blob.h
> new file mode 100644
> index 000000000000..7eea0f543832
> --- /dev/null
> +++ b/include/soc/fsl/caam-blob.h
> @@ -0,0 +1,54 @@
> +/* SPDX-License-Identifier: GPL-2.0-only */
> +/*
> + * Copyright (C) 2020 Pengutronix, Ahmad Fatoum <kernel@pengutronix.de>
> + */
> +
> +#ifndef __CAAM_BLOB_GEN
> +#define __CAAM_BLOB_GEN
> +
> +#include <linux/types.h>
> +
> +#define CAAM_BLOB_KEYMOD_LENGTH 16
The define isn't used here or on patch 3/3.
> +#define CAAM_BLOB_OVERHEAD (32 + 16)
> +#define CAAM_BLOB_MAX_LEN 4096
> +
> +struct caam_blob_priv;
> +
> +/** caam_blob_gen_init - initialize blob generation
> + *
> + * returns either pointer to new caam_blob_priv instance
> + * or error pointer
> + */
> +struct caam_blob_priv *caam_blob_gen_init(void);
> +
> +/** caam_blob_gen_init - free blob generation resources
> + *
> + * @priv: instance returned by caam_blob_gen_init
> + */
> +void caam_blob_gen_exit(struct caam_blob_priv *priv);
> +
> +/** caam_encap_blob - encapsulate blob
> + *
> + * @priv: instance returned by caam_blob_gen_init
> + * @keymod: string to use as key modifier for blob encapsulation
> + * @input: buffer which CAAM will DMA from
> + * @output: buffer which CAAM will DMA to
Is it guaranteed that input, output can be DMA-mapped?
Horia
next prev parent reply other threads:[~2021-03-21 20:47 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-16 17:01 [PATCH v1 0/3] KEYS: trusted: Introduce support for NXP CAAM-based trusted keys Ahmad Fatoum
2021-03-16 17:01 ` [PATCH v1 1/3] crypto: caam - add in-kernel interface for blob generator Ahmad Fatoum
2021-03-21 20:46 ` Horia Geantă [this message]
2021-03-23 16:41 ` Ahmad Fatoum
2021-03-16 17:01 ` [PATCH v1 2/3] KEYS: trusted: implement fallback to kernel RNG Ahmad Fatoum
2021-03-16 17:01 ` [PATCH v1 3/3] KEYS: trusted: Introduce support for NXP CAAM-based trusted keys Ahmad Fatoum
2021-03-16 19:22 ` Jarkko Sakkinen
2021-03-17 13:58 ` Ahmad Fatoum
2021-03-16 23:14 ` Richard Weinberger
2021-03-17 7:39 ` Sumit Garg
2021-03-17 8:07 ` Richard Weinberger
2021-03-17 14:02 ` Ahmad Fatoum
2021-03-30 21:28 ` Richard Weinberger
2021-03-21 20:48 ` Horia Geantă
2021-03-23 16:35 ` Ahmad Fatoum
2021-03-23 18:07 ` Mimi Zohar
2021-03-24 9:26 ` Ahmad Fatoum
2021-03-24 10:47 ` Sumit Garg
2021-03-24 14:07 ` Ahmad Fatoum
2021-03-25 5:26 ` Sumit Garg
2021-03-27 12:41 ` David Gstir
2021-03-28 20:37 ` Jarkko Sakkinen
2021-03-29 10:11 ` Ahmad Fatoum
2021-03-31 23:29 ` Jarkko Sakkinen
2021-03-30 7:26 ` Sumit Garg
2021-03-31 23:30 ` Jarkko Sakkinen
2021-04-01 7:41 ` Ahmad Fatoum
2021-03-30 21:47 ` Eric Biggers
2021-03-31 23:31 ` Jarkko Sakkinen
2021-03-31 23:34 ` Eric Biggers
2021-04-01 1:11 ` Herbert Xu
2021-04-01 5:50 ` Jarkko Sakkinen
2021-04-01 6:03 ` Eric Biggers
2021-04-01 5:46 ` Jarkko Sakkinen
2021-03-24 16:14 ` James Bottomley
2021-03-24 20:49 ` Mimi Zohar
2021-03-24 21:58 ` James Bottomley
2021-04-02 1:49 ` Serge E. Hallyn
2021-03-31 18:35 ` Richard Weinberger
2021-04-01 10:15 ` Ahmad Fatoum
2021-04-01 10:23 ` Richard Weinberger
2021-03-16 23:10 ` [PATCH v1 0/3] " Richard Weinberger
2021-03-17 14:08 ` Ahmad Fatoum
2021-03-30 21:50 ` Richard Weinberger
2021-04-01 10:04 ` Ahmad Fatoum
2021-04-01 10:20 ` Richard Weinberger
2021-04-01 10:28 ` Ahmad Fatoum
2021-04-01 10:53 ` Richard Weinberger
2021-04-01 10:57 ` Ahmad Fatoum
2021-04-01 11:05 ` Richard Weinberger
2021-04-01 11:13 ` Ahmad Fatoum
2021-04-01 11:16 ` Richard Weinberger
2021-03-30 22:04 ` Richard Weinberger
2021-03-30 22:16 ` James Bottomley
2021-03-31 18:36 ` Richard Weinberger
2021-03-31 18:49 ` James Bottomley
2021-03-31 19:36 ` Richard Weinberger
2021-04-01 10:06 ` Ahmad Fatoum
2021-04-01 13:20 ` Sumit Garg
2021-04-01 18:26 ` James Bottomley
2021-04-01 12:55 ` Sumit Garg
2021-04-01 13:17 ` Richard Weinberger
2021-04-01 13:30 ` Ahmad Fatoum
2021-04-01 13:52 ` Sumit Garg
2021-04-01 13:59 ` Richard Weinberger
2021-04-01 14:12 ` Sumit Garg
2021-04-01 11:11 ` David Howells
2021-03-21 20:01 ` Horia Geantă
2021-03-23 16:34 ` Ahmad Fatoum
2021-03-24 6:23 ` Sumit Garg
2021-03-23 16:37 ` Ahmad Fatoum
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=76cd2a74-f522-34c0-eb8c-3047e3cab5cd@nxp.com \
--to=horia.geanta@nxp.com \
--cc=a.fatoum@pengutronix.de \
--cc=aymen.sghaier@nxp.com \
--cc=davem@davemloft.net \
--cc=david@sigma-star.at \
--cc=dhowells@redhat.com \
--cc=franck.lenormand@nxp.com \
--cc=herbert@gondor.apana.org.au \
--cc=j.luebbe@pengutronix.de \
--cc=jarkko@kernel.org \
--cc=jejb@linux.ibm.com \
--cc=jmorris@namei.org \
--cc=kernel@pengutronix.de \
--cc=keyrings@vger.kernel.org \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-integrity@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=serge@hallyn.com \
--cc=sumit.garg@linaro.org \
--cc=udit.agarwal@nxp.com \
--cc=zohar@linux.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).