* [U-Boot] [PATCH 3/9] [v3] DM: crypto/rsa: Add rsa Modular Exponentiation DM driver
@ 2014-12-29 3:53 Ruchika Gupta
2014-12-29 20:24 ` Simon Glass
0 siblings, 1 reply; 4+ messages in thread
From: Ruchika Gupta @ 2014-12-29 3:53 UTC (permalink / raw)
To: u-boot
Re-sending as delivery to uboot mailing list failed last time...
Hi Simon,
Thanks for the review comments.
> -----Original Message-----
> From: sjg at google.com [mailto:sjg at google.com] On Behalf Of Simon Glass
> Sent: Wednesday, December 24, 2014 6:19 AM
> To: Gupta Ruchika-R66431
> Cc: U-Boot Mailing List; Sun York-R58495
> Subject: Re: [PATCH 3/9] [v3] DM: crypto/rsa: Add rsa Modular
> Exponentiation DM driver
>
> Hi Ruchika,
>
> On 23 December 2014 at 04:32, Ruchika Gupta
> <ruchika.gupta@freescale.com>
> wrote:
> > Add a new rsa uclass for performing modular exponentiation and
> > implement the software driver basing on this uclass.
> >
> > Signed-off-by: Ruchika Gupta <ruchika.gupta@freescale.com>
> > CC: Simon Glass <sjg@chromium.org>
> > ---
> > Changes in v3:
> > New patch with driver model for RSA UCLASS
> >
> > drivers/crypto/Kconfig | 1 +
> > drivers/crypto/Makefile | 1 +
> > drivers/crypto/rsa/Kconfig | 5 +++++
> > drivers/crypto/rsa/Makefile | 8 ++++++++
> > drivers/crypto/rsa/rsa_sw.c | 39
> +++++++++++++++++++++++++++++++++++++++
> > drivers/crypto/rsa/rsa_uclass.c | 31 +++++++++++++++++++++++++++++++
> > include/dm/uclass-id.h | 1 +
> > include/u-boot/rsa-mod-exp.h | 40
> ++++++++++++++++++++++++++++++++++++++++
> > 8 files changed, 126 insertions(+)
> > create mode 100644 drivers/crypto/rsa/Kconfig create mode 100644
> > drivers/crypto/rsa/Makefile create mode 100644
> > drivers/crypto/rsa/rsa_sw.c create mode 100644
> > drivers/crypto/rsa/rsa_uclass.c
> >
> > diff --git a/drivers/crypto/Kconfig b/drivers/crypto/Kconfig index
> > e69de29..75f3479 100644
> > --- a/drivers/crypto/Kconfig
> > +++ b/drivers/crypto/Kconfig
> > @@ -0,0 +1 @@
> > +source drivers/crypto/rsa/Kconfig
> > diff --git a/drivers/crypto/Makefile b/drivers/crypto/Makefile index
> > 7b79237..a2f30fc 100644
> > --- a/drivers/crypto/Makefile
> > +++ b/drivers/crypto/Makefile
> > @@ -6,4 +6,5 @@
> > #
> >
> > obj-$(CONFIG_EXYNOS_ACE_SHA) += ace_sha.o
> > +obj-y += rsa/
> > obj-y += fsl/
> > diff --git a/drivers/crypto/rsa/Kconfig b/drivers/crypto/rsa/Kconfig
> > new file mode 100644 index 0000000..7eb90a1
> > --- /dev/null
> > +++ b/drivers/crypto/rsa/Kconfig
> > @@ -0,0 +1,5 @@
> > +config DM_RSA
> > + bool "Enable Driver Model for RSA "
> > + depends on DM
> > + help
> > + If you want to use driver model for RSA Modular
> > +Exponentiation,
> say Y.
>
> Can you send a new patch (later if you prefer) which removes this
> option altogether? It should be the default. In other words, RSA
> should always use driver model.
If we make it mandatory for RSA to use driver model, all platforms would need to use DM by default in their defconfig. Would that be acceptable ?
Secondly if I force select DM and DM_RSA when CONFIG_RSA is selected, this may result in duplication of CONFIG_DM with platforms having it defined already.
Please suggest.
>
> > diff --git a/drivers/crypto/rsa/Makefile
> > b/drivers/crypto/rsa/Makefile new file mode 100644 index
> > 0000000..fae4f8c
> > --- /dev/null
> > +++ b/drivers/crypto/rsa/Makefile
> > @@ -0,0 +1,8 @@
> > +#
> > +# (C) Copyright 2014 Freescale Semiconductor, Inc.
> > +#
> > +# SPDX-License-Identifier: GPL-2.0+
> > +#
> > +
> > +obj-$(CONFIG_DM_RSA) += rsa_uclass.o
> > +obj-$(CONFIG_RSA_SW) += rsa_sw.o
> > diff --git a/drivers/crypto/rsa/rsa_sw.c
> > b/drivers/crypto/rsa/rsa_sw.c new file mode 100644 index
> > 0000000..5d94754
> > --- /dev/null
> > +++ b/drivers/crypto/rsa/rsa_sw.c
> > @@ -0,0 +1,39 @@
> > +/*
> > + * (C) Copyright 2014 Freescale Semiconductor, Inc.
> > + * Author: Ruchika Gupta <ruchika.gupta@freescale.com>
> > + *
> > + * SPDX-License-Identifier: GPL-2.0+
> > + */
> > +
> > +#include <config.h>
> > +#include <common.h>
> > +#include <dm.h>
> > +#include <u-boot/rsa-mod-exp.h>
> > +
> > +int mod_exp_sw(struct udevice *dev, const uint8_t *sig, uint32_t sig_len,
> > + struct key_prop *prop, uint8_t *out) {
> > + int ret = 0;
> > +
> > + ret = rsa_mod_exp_sw(sig, sig_len, prop, out);
> > +
> > + if (ret) {
> > + debug("%s: RSA failed to verify: %d\n", __func__, ret);
> > + return ret;
> > + }
> > + return 0;
> > +}
> > +
> > +static const struct rsa_ops rsa_ops_sw = {
> > + .get_mod_exp = mod_exp_sw,
> > +};
> > +
> > +U_BOOT_DRIVER(fsl_rsa) = {
> > + .name = "rsa_sw",
> > + .id = UCLASS_RSA,
> > + .ops = &rsa_ops_sw,
> > +};
> > +
> > +U_BOOT_DEVICE(rsa_sw) = {
> > + .name = "rsa_sw",
> > +};
> > diff --git a/drivers/crypto/rsa/rsa_uclass.c
> > b/drivers/crypto/rsa/rsa_uclass.c new file mode 100644 index
> > 0000000..f4f4f39
> > --- /dev/null
> > +++ b/drivers/crypto/rsa/rsa_uclass.c
> > @@ -0,0 +1,31 @@
> > +/*
> > + * (C) Copyright 2014 Freescale Semiconductor, Inc
> > + * Author: Ruchika Gupta <ruchika.gupta@freescale.com>
> > + *
> > + * SPDX-License-Identifier: GPL-2.0+
> > + */
> > +
> > +#include <common.h>
> > +#include <dm.h>
> > +#include <u-boot/rsa-mod-exp.h>
> > +#include <errno.h>
> > +#include <fdtdec.h>
> > +#include <malloc.h>
> > +#include <asm/io.h>
> > +#include <linux/list.h>
> > +
> > +int rsa_mod_exp(struct udevice *dev, const uint8_t *sig, uint32_t sig_len,
> > + struct key_prop *node, uint8_t *out) {
> > + const struct rsa_ops *ops = device_get_ops(dev);
> > +
> > + if (!ops->get_mod_exp)
> > + return -ENOSYS;
> > +
> > + return ops->get_mod_exp(dev, sig, sig_len, node, out); }
> > +
> > +UCLASS_DRIVER(rsa) = {
> > + .id = UCLASS_RSA,
> > + .name = "rsa",
> > +};
> > diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h index
> > f17c3c2..659369e 100644
> > --- a/include/dm/uclass-id.h
> > +++ b/include/dm/uclass-id.h
> > @@ -33,6 +33,7 @@ enum uclass_id {
> > UCLASS_I2C, /* I2C bus */
> > UCLASS_I2C_GENERIC, /* Generic I2C device */
> > UCLASS_I2C_EEPROM, /* I2C EEPROM device */
> > + UCLASS_RSA , /* RSA Mod Exp device */
>
> Funny spacing here.
Sorry, I will correct that.
>
> >
> > UCLASS_COUNT,
> > UCLASS_INVALID = -1,
> > diff --git a/include/u-boot/rsa-mod-exp.h
> > b/include/u-boot/rsa-mod-exp.h index 59cd9ea..7f7e196 100644
> > --- a/include/u-boot/rsa-mod-exp.h
> > +++ b/include/u-boot/rsa-mod-exp.h
> > @@ -40,4 +40,44 @@ struct key_prop { int rsa_mod_exp_sw(const
> > uint8_t *sig, uint32_t sig_len,
> > struct key_prop *node, uint8_t *out);
> >
> > +/**
> > + * rsa_mod_exp - Perform RSA Modular Exponentiation
> > + *
> > + * Operation: out[] = sig ^ exponent % modulus
> > + *
> > + * @udev: RSA Device
> > + * @sig: RSA PKCS1.5 signature
> > + * @sig_len: Length of signature in number of bytes
> > + * @node: Node with RSA key elements like modulus, exponent, R^2,
> n0inv
> > + * @out: Result in form of byte array
>
> How big is this array?
Thanks for pointing out. In next set of patch, I will change it to uint8_t **out and introduce a uin32_t *out_len also. Ideally the implemntor of this function should allocate out as per length required and return back the pointer and the allocated length. This will also require change in patch 1 of this series. I will change and float next version.
>
> > + */
> > +int rsa_mod_exp(struct udevice *dev, const uint8_t *sig, uint32_t sig_len,
> > + struct key_prop *node, uint8_t *out);
> > +
> > +/**
> > + * struct struct rsa_ops - Driver model for RSA operations
> > + *
> > + * The uclass interface is implemented by all crypto devices which
> > +use
> > + * driver model.
> > + */
> > +struct rsa_ops {
> > + /**
> > + * Perform Modular Exponentiation
> > + *
> > + * Operation: out[] = sig ^ exponent % modulus
> > + *
> > + * @dev: RSA Device
> > + * @sig: RSA PKCS1.5 signature
> > + * @sig_len: Length of signature in number of bytes
> > + * @node: Node with RSA key elements like modulus, exponent,
> > + * R^2, n0inv
> > + * @out: Result in form of byte array
>
> How big is this array?
Same as above, I will change it to **outp and add a pointer for length
>
> > + * Returns: 0 if exponentiation is succesful, or a negative
> > + value
>
> successful
Ok
>
> > + * if it wasn't.
> > + */
> > + int (*get_mod_exp)(struct udevice *dev, const uint8_t *sig,
>
> mod_exp() is better I think, since it matches your function above.
Ok. I will change it.
>
> > + uint32_t sig_len, struct key_prop *node,
> > + uint8_t *out); };
> > +
> > #endif
> > --
> > 1.8.1.4
> >
>
> Regards,
> Simon
Regards,
Ruchika
^ permalink raw reply [flat|nested] 4+ messages in thread
* [U-Boot] [PATCH 3/9] [v3] DM: crypto/rsa: Add rsa Modular Exponentiation DM driver
2014-12-29 3:53 [U-Boot] [PATCH 3/9] [v3] DM: crypto/rsa: Add rsa Modular Exponentiation DM driver Ruchika Gupta
@ 2014-12-29 20:24 ` Simon Glass
0 siblings, 0 replies; 4+ messages in thread
From: Simon Glass @ 2014-12-29 20:24 UTC (permalink / raw)
To: u-boot
Hi Ruchika,
On 28 December 2014 at 20:53, Ruchika Gupta <ruchika.gupta@freescale.com> wrote:
> Re-sending as delivery to uboot mailing list failed last time...
>
> Hi Simon,
>
> Thanks for the review comments.
>
>> -----Original Message-----
>> From: sjg at google.com [mailto:sjg at google.com] On Behalf Of Simon Glass
>> Sent: Wednesday, December 24, 2014 6:19 AM
>> To: Gupta Ruchika-R66431
>> Cc: U-Boot Mailing List; Sun York-R58495
>> Subject: Re: [PATCH 3/9] [v3] DM: crypto/rsa: Add rsa Modular
>> Exponentiation DM driver
>>
>> Hi Ruchika,
>>
>> On 23 December 2014 at 04:32, Ruchika Gupta
>> <ruchika.gupta@freescale.com>
>> wrote:
>> > Add a new rsa uclass for performing modular exponentiation and
>> > implement the software driver basing on this uclass.
>> >
>> > Signed-off-by: Ruchika Gupta <ruchika.gupta@freescale.com>
>> > CC: Simon Glass <sjg@chromium.org>
>> > ---
>> > Changes in v3:
>> > New patch with driver model for RSA UCLASS
>> >
>> > drivers/crypto/Kconfig | 1 +
>> > drivers/crypto/Makefile | 1 +
>> > drivers/crypto/rsa/Kconfig | 5 +++++
>> > drivers/crypto/rsa/Makefile | 8 ++++++++
>> > drivers/crypto/rsa/rsa_sw.c | 39
>> +++++++++++++++++++++++++++++++++++++++
>> > drivers/crypto/rsa/rsa_uclass.c | 31 +++++++++++++++++++++++++++++++
>> > include/dm/uclass-id.h | 1 +
>> > include/u-boot/rsa-mod-exp.h | 40
>> ++++++++++++++++++++++++++++++++++++++++
>> > 8 files changed, 126 insertions(+)
>> > create mode 100644 drivers/crypto/rsa/Kconfig create mode 100644
>> > drivers/crypto/rsa/Makefile create mode 100644
>> > drivers/crypto/rsa/rsa_sw.c create mode 100644
>> > drivers/crypto/rsa/rsa_uclass.c
>> >
>> > diff --git a/drivers/crypto/Kconfig b/drivers/crypto/Kconfig index
>> > e69de29..75f3479 100644
>> > --- a/drivers/crypto/Kconfig
>> > +++ b/drivers/crypto/Kconfig
>> > @@ -0,0 +1 @@
>> > +source drivers/crypto/rsa/Kconfig
>> > diff --git a/drivers/crypto/Makefile b/drivers/crypto/Makefile index
>> > 7b79237..a2f30fc 100644
>> > --- a/drivers/crypto/Makefile
>> > +++ b/drivers/crypto/Makefile
>> > @@ -6,4 +6,5 @@
>> > #
>> >
>> > obj-$(CONFIG_EXYNOS_ACE_SHA) += ace_sha.o
>> > +obj-y += rsa/
>> > obj-y += fsl/
>> > diff --git a/drivers/crypto/rsa/Kconfig b/drivers/crypto/rsa/Kconfig
>> > new file mode 100644 index 0000000..7eb90a1
>> > --- /dev/null
>> > +++ b/drivers/crypto/rsa/Kconfig
>> > @@ -0,0 +1,5 @@
>> > +config DM_RSA
>> > + bool "Enable Driver Model for RSA "
>> > + depends on DM
>> > + help
>> > + If you want to use driver model for RSA Modular
>> > +Exponentiation,
>> say Y.
>>
>> Can you send a new patch (later if you prefer) which removes this
>> option altogether? It should be the default. In other words, RSA
>> should always use driver model.
>
> If we make it mandatory for RSA to use driver model, all platforms would need to use DM by default in their defconfig. Would that be acceptable ?
> Secondly if I force select DM and DM_RSA when CONFIG_RSA is selected, this may result in duplication of CONFIG_DM with platforms having it defined already.
> Please suggest.
Yes that is correct, all platforms with RSA can use DM. As far as I
know they do, but if not we can add a patch to fix that.
>
>>
>> > diff --git a/drivers/crypto/rsa/Makefile
>> > b/drivers/crypto/rsa/Makefile new file mode 100644 index
>> > 0000000..fae4f8c
>> > --- /dev/null
>> > +++ b/drivers/crypto/rsa/Makefile
>> > @@ -0,0 +1,8 @@
>> > +#
>> > +# (C) Copyright 2014 Freescale Semiconductor, Inc.
>> > +#
>> > +# SPDX-License-Identifier: GPL-2.0+
>> > +#
>> > +
>> > +obj-$(CONFIG_DM_RSA) += rsa_uclass.o
>> > +obj-$(CONFIG_RSA_SW) += rsa_sw.o
>> > diff --git a/drivers/crypto/rsa/rsa_sw.c
>> > b/drivers/crypto/rsa/rsa_sw.c new file mode 100644 index
>> > 0000000..5d94754
>> > --- /dev/null
>> > +++ b/drivers/crypto/rsa/rsa_sw.c
>> > @@ -0,0 +1,39 @@
>> > +/*
>> > + * (C) Copyright 2014 Freescale Semiconductor, Inc.
>> > + * Author: Ruchika Gupta <ruchika.gupta@freescale.com>
>> > + *
>> > + * SPDX-License-Identifier: GPL-2.0+
>> > + */
>> > +
>> > +#include <config.h>
>> > +#include <common.h>
>> > +#include <dm.h>
>> > +#include <u-boot/rsa-mod-exp.h>
>> > +
>> > +int mod_exp_sw(struct udevice *dev, const uint8_t *sig, uint32_t sig_len,
>> > + struct key_prop *prop, uint8_t *out) {
>> > + int ret = 0;
>> > +
>> > + ret = rsa_mod_exp_sw(sig, sig_len, prop, out);
>> > +
>> > + if (ret) {
>> > + debug("%s: RSA failed to verify: %d\n", __func__, ret);
>> > + return ret;
>> > + }
>> > + return 0;
>> > +}
>> > +
>> > +static const struct rsa_ops rsa_ops_sw = {
>> > + .get_mod_exp = mod_exp_sw,
>> > +};
>> > +
>> > +U_BOOT_DRIVER(fsl_rsa) = {
>> > + .name = "rsa_sw",
>> > + .id = UCLASS_RSA,
>> > + .ops = &rsa_ops_sw,
>> > +};
>> > +
>> > +U_BOOT_DEVICE(rsa_sw) = {
>> > + .name = "rsa_sw",
>> > +};
>> > diff --git a/drivers/crypto/rsa/rsa_uclass.c
>> > b/drivers/crypto/rsa/rsa_uclass.c new file mode 100644 index
>> > 0000000..f4f4f39
>> > --- /dev/null
>> > +++ b/drivers/crypto/rsa/rsa_uclass.c
>> > @@ -0,0 +1,31 @@
>> > +/*
>> > + * (C) Copyright 2014 Freescale Semiconductor, Inc
>> > + * Author: Ruchika Gupta <ruchika.gupta@freescale.com>
>> > + *
>> > + * SPDX-License-Identifier: GPL-2.0+
>> > + */
>> > +
>> > +#include <common.h>
>> > +#include <dm.h>
>> > +#include <u-boot/rsa-mod-exp.h>
>> > +#include <errno.h>
>> > +#include <fdtdec.h>
>> > +#include <malloc.h>
>> > +#include <asm/io.h>
>> > +#include <linux/list.h>
>> > +
>> > +int rsa_mod_exp(struct udevice *dev, const uint8_t *sig, uint32_t sig_len,
>> > + struct key_prop *node, uint8_t *out) {
>> > + const struct rsa_ops *ops = device_get_ops(dev);
>> > +
>> > + if (!ops->get_mod_exp)
>> > + return -ENOSYS;
>> > +
>> > + return ops->get_mod_exp(dev, sig, sig_len, node, out); }
>> > +
>> > +UCLASS_DRIVER(rsa) = {
>> > + .id = UCLASS_RSA,
>> > + .name = "rsa",
>> > +};
>> > diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h index
>> > f17c3c2..659369e 100644
>> > --- a/include/dm/uclass-id.h
>> > +++ b/include/dm/uclass-id.h
>> > @@ -33,6 +33,7 @@ enum uclass_id {
>> > UCLASS_I2C, /* I2C bus */
>> > UCLASS_I2C_GENERIC, /* Generic I2C device */
>> > UCLASS_I2C_EEPROM, /* I2C EEPROM device */
>> > + UCLASS_RSA , /* RSA Mod Exp device */
>>
>> Funny spacing here.
> Sorry, I will correct that.
>>
>> >
>> > UCLASS_COUNT,
>> > UCLASS_INVALID = -1,
>> > diff --git a/include/u-boot/rsa-mod-exp.h
>> > b/include/u-boot/rsa-mod-exp.h index 59cd9ea..7f7e196 100644
>> > --- a/include/u-boot/rsa-mod-exp.h
>> > +++ b/include/u-boot/rsa-mod-exp.h
>> > @@ -40,4 +40,44 @@ struct key_prop { int rsa_mod_exp_sw(const
>> > uint8_t *sig, uint32_t sig_len,
>> > struct key_prop *node, uint8_t *out);
>> >
>> > +/**
>> > + * rsa_mod_exp - Perform RSA Modular Exponentiation
>> > + *
>> > + * Operation: out[] = sig ^ exponent % modulus
>> > + *
>> > + * @udev: RSA Device
>> > + * @sig: RSA PKCS1.5 signature
>> > + * @sig_len: Length of signature in number of bytes
>> > + * @node: Node with RSA key elements like modulus, exponent, R^2,
>> n0inv
>> > + * @out: Result in form of byte array
>>
>> How big is this array?
> Thanks for pointing out. In next set of patch, I will change it to uint8_t **out and introduce a uin32_t *out_len also. Ideally the implemntor of this function should allocate out as per length required and return back the pointer and the allocated length. This will also require change in patch 1 of this series. I will change and float next version.
OK.
>
>>
>> > + */
>> > +int rsa_mod_exp(struct udevice *dev, const uint8_t *sig, uint32_t sig_len,
>> > + struct key_prop *node, uint8_t *out);
>> > +
>> > +/**
>> > + * struct struct rsa_ops - Driver model for RSA operations
>> > + *
>> > + * The uclass interface is implemented by all crypto devices which
>> > +use
>> > + * driver model.
>> > + */
>> > +struct rsa_ops {
>> > + /**
>> > + * Perform Modular Exponentiation
>> > + *
>> > + * Operation: out[] = sig ^ exponent % modulus
>> > + *
>> > + * @dev: RSA Device
>> > + * @sig: RSA PKCS1.5 signature
>> > + * @sig_len: Length of signature in number of bytes
>> > + * @node: Node with RSA key elements like modulus, exponent,
>> > + * R^2, n0inv
>> > + * @out: Result in form of byte array
>>
>> How big is this array?
> Same as above, I will change it to **outp and add a pointer for length
>>
>> > + * Returns: 0 if exponentiation is succesful, or a negative
>> > + value
>>
>> successful
> Ok
>>
>> > + * if it wasn't.
>> > + */
>> > + int (*get_mod_exp)(struct udevice *dev, const uint8_t *sig,
>>
>> mod_exp() is better I think, since it matches your function above.
> Ok. I will change it.
>>
>> > + uint32_t sig_len, struct key_prop *node,
>> > + uint8_t *out); };
>> > +
>> > #endif
>> > --
>> > 1.8.1.4
>> >
>>
Regards,
Simon
^ permalink raw reply [flat|nested] 4+ messages in thread
* [U-Boot] [PATCH 3/9] [v3] DM: crypto/rsa: Add rsa Modular Exponentiation DM driver
2014-12-23 11:32 ` [U-Boot] [PATCH 3/9] [v3] DM: crypto/rsa: Add rsa Modular Exponentiation DM driver Ruchika Gupta
@ 2014-12-24 0:48 ` Simon Glass
0 siblings, 0 replies; 4+ messages in thread
From: Simon Glass @ 2014-12-24 0:48 UTC (permalink / raw)
To: u-boot
Hi Ruchika,
On 23 December 2014 at 04:32, Ruchika Gupta <ruchika.gupta@freescale.com> wrote:
> Add a new rsa uclass for performing modular exponentiation and implement
> the software driver basing on this uclass.
>
> Signed-off-by: Ruchika Gupta <ruchika.gupta@freescale.com>
> CC: Simon Glass <sjg@chromium.org>
> ---
> Changes in v3:
> New patch with driver model for RSA UCLASS
>
> drivers/crypto/Kconfig | 1 +
> drivers/crypto/Makefile | 1 +
> drivers/crypto/rsa/Kconfig | 5 +++++
> drivers/crypto/rsa/Makefile | 8 ++++++++
> drivers/crypto/rsa/rsa_sw.c | 39 +++++++++++++++++++++++++++++++++++++++
> drivers/crypto/rsa/rsa_uclass.c | 31 +++++++++++++++++++++++++++++++
> include/dm/uclass-id.h | 1 +
> include/u-boot/rsa-mod-exp.h | 40 ++++++++++++++++++++++++++++++++++++++++
> 8 files changed, 126 insertions(+)
> create mode 100644 drivers/crypto/rsa/Kconfig
> create mode 100644 drivers/crypto/rsa/Makefile
> create mode 100644 drivers/crypto/rsa/rsa_sw.c
> create mode 100644 drivers/crypto/rsa/rsa_uclass.c
>
> diff --git a/drivers/crypto/Kconfig b/drivers/crypto/Kconfig
> index e69de29..75f3479 100644
> --- a/drivers/crypto/Kconfig
> +++ b/drivers/crypto/Kconfig
> @@ -0,0 +1 @@
> +source drivers/crypto/rsa/Kconfig
> diff --git a/drivers/crypto/Makefile b/drivers/crypto/Makefile
> index 7b79237..a2f30fc 100644
> --- a/drivers/crypto/Makefile
> +++ b/drivers/crypto/Makefile
> @@ -6,4 +6,5 @@
> #
>
> obj-$(CONFIG_EXYNOS_ACE_SHA) += ace_sha.o
> +obj-y += rsa/
> obj-y += fsl/
> diff --git a/drivers/crypto/rsa/Kconfig b/drivers/crypto/rsa/Kconfig
> new file mode 100644
> index 0000000..7eb90a1
> --- /dev/null
> +++ b/drivers/crypto/rsa/Kconfig
> @@ -0,0 +1,5 @@
> +config DM_RSA
> + bool "Enable Driver Model for RSA "
> + depends on DM
> + help
> + If you want to use driver model for RSA Modular Exponentiation, say Y.
Can you send a new patch (later if you prefer) which removes this
option altogether? It should be the default. In other words, RSA
should always use driver model.
> diff --git a/drivers/crypto/rsa/Makefile b/drivers/crypto/rsa/Makefile
> new file mode 100644
> index 0000000..fae4f8c
> --- /dev/null
> +++ b/drivers/crypto/rsa/Makefile
> @@ -0,0 +1,8 @@
> +#
> +# (C) Copyright 2014 Freescale Semiconductor, Inc.
> +#
> +# SPDX-License-Identifier: GPL-2.0+
> +#
> +
> +obj-$(CONFIG_DM_RSA) += rsa_uclass.o
> +obj-$(CONFIG_RSA_SW) += rsa_sw.o
> diff --git a/drivers/crypto/rsa/rsa_sw.c b/drivers/crypto/rsa/rsa_sw.c
> new file mode 100644
> index 0000000..5d94754
> --- /dev/null
> +++ b/drivers/crypto/rsa/rsa_sw.c
> @@ -0,0 +1,39 @@
> +/*
> + * (C) Copyright 2014 Freescale Semiconductor, Inc.
> + * Author: Ruchika Gupta <ruchika.gupta@freescale.com>
> + *
> + * SPDX-License-Identifier: GPL-2.0+
> + */
> +
> +#include <config.h>
> +#include <common.h>
> +#include <dm.h>
> +#include <u-boot/rsa-mod-exp.h>
> +
> +int mod_exp_sw(struct udevice *dev, const uint8_t *sig, uint32_t sig_len,
> + struct key_prop *prop, uint8_t *out)
> +{
> + int ret = 0;
> +
> + ret = rsa_mod_exp_sw(sig, sig_len, prop, out);
> +
> + if (ret) {
> + debug("%s: RSA failed to verify: %d\n", __func__, ret);
> + return ret;
> + }
> + return 0;
> +}
> +
> +static const struct rsa_ops rsa_ops_sw = {
> + .get_mod_exp = mod_exp_sw,
> +};
> +
> +U_BOOT_DRIVER(fsl_rsa) = {
> + .name = "rsa_sw",
> + .id = UCLASS_RSA,
> + .ops = &rsa_ops_sw,
> +};
> +
> +U_BOOT_DEVICE(rsa_sw) = {
> + .name = "rsa_sw",
> +};
> diff --git a/drivers/crypto/rsa/rsa_uclass.c b/drivers/crypto/rsa/rsa_uclass.c
> new file mode 100644
> index 0000000..f4f4f39
> --- /dev/null
> +++ b/drivers/crypto/rsa/rsa_uclass.c
> @@ -0,0 +1,31 @@
> +/*
> + * (C) Copyright 2014 Freescale Semiconductor, Inc
> + * Author: Ruchika Gupta <ruchika.gupta@freescale.com>
> + *
> + * SPDX-License-Identifier: GPL-2.0+
> + */
> +
> +#include <common.h>
> +#include <dm.h>
> +#include <u-boot/rsa-mod-exp.h>
> +#include <errno.h>
> +#include <fdtdec.h>
> +#include <malloc.h>
> +#include <asm/io.h>
> +#include <linux/list.h>
> +
> +int rsa_mod_exp(struct udevice *dev, const uint8_t *sig, uint32_t sig_len,
> + struct key_prop *node, uint8_t *out)
> +{
> + const struct rsa_ops *ops = device_get_ops(dev);
> +
> + if (!ops->get_mod_exp)
> + return -ENOSYS;
> +
> + return ops->get_mod_exp(dev, sig, sig_len, node, out);
> +}
> +
> +UCLASS_DRIVER(rsa) = {
> + .id = UCLASS_RSA,
> + .name = "rsa",
> +};
> diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h
> index f17c3c2..659369e 100644
> --- a/include/dm/uclass-id.h
> +++ b/include/dm/uclass-id.h
> @@ -33,6 +33,7 @@ enum uclass_id {
> UCLASS_I2C, /* I2C bus */
> UCLASS_I2C_GENERIC, /* Generic I2C device */
> UCLASS_I2C_EEPROM, /* I2C EEPROM device */
> + UCLASS_RSA , /* RSA Mod Exp device */
Funny spacing here.
>
> UCLASS_COUNT,
> UCLASS_INVALID = -1,
> diff --git a/include/u-boot/rsa-mod-exp.h b/include/u-boot/rsa-mod-exp.h
> index 59cd9ea..7f7e196 100644
> --- a/include/u-boot/rsa-mod-exp.h
> +++ b/include/u-boot/rsa-mod-exp.h
> @@ -40,4 +40,44 @@ struct key_prop {
> int rsa_mod_exp_sw(const uint8_t *sig, uint32_t sig_len,
> struct key_prop *node, uint8_t *out);
>
> +/**
> + * rsa_mod_exp - Perform RSA Modular Exponentiation
> + *
> + * Operation: out[] = sig ^ exponent % modulus
> + *
> + * @udev: RSA Device
> + * @sig: RSA PKCS1.5 signature
> + * @sig_len: Length of signature in number of bytes
> + * @node: Node with RSA key elements like modulus, exponent, R^2, n0inv
> + * @out: Result in form of byte array
How big is this array?
> + */
> +int rsa_mod_exp(struct udevice *dev, const uint8_t *sig, uint32_t sig_len,
> + struct key_prop *node, uint8_t *out);
> +
> +/**
> + * struct struct rsa_ops - Driver model for RSA operations
> + *
> + * The uclass interface is implemented by all crypto devices which use
> + * driver model.
> + */
> +struct rsa_ops {
> + /**
> + * Perform Modular Exponentiation
> + *
> + * Operation: out[] = sig ^ exponent % modulus
> + *
> + * @dev: RSA Device
> + * @sig: RSA PKCS1.5 signature
> + * @sig_len: Length of signature in number of bytes
> + * @node: Node with RSA key elements like modulus, exponent,
> + * R^2, n0inv
> + * @out: Result in form of byte array
How big is this array?
> + * Returns: 0 if exponentiation is succesful, or a negative value
successful
> + * if it wasn't.
> + */
> + int (*get_mod_exp)(struct udevice *dev, const uint8_t *sig,
mod_exp() is better I think, since it matches your function above.
> + uint32_t sig_len, struct key_prop *node,
> + uint8_t *out);
> +};
> +
> #endif
> --
> 1.8.1.4
>
Regards,
Simon
^ permalink raw reply [flat|nested] 4+ messages in thread
* [U-Boot] [PATCH 3/9] [v3] DM: crypto/rsa: Add rsa Modular Exponentiation DM driver
2014-12-23 11:32 [U-Boot] [PATCH 0/9] [v3] rsa: Modify rsa lib to use hw acceleration Ruchika Gupta
@ 2014-12-23 11:32 ` Ruchika Gupta
2014-12-24 0:48 ` Simon Glass
0 siblings, 1 reply; 4+ messages in thread
From: Ruchika Gupta @ 2014-12-23 11:32 UTC (permalink / raw)
To: u-boot
Add a new rsa uclass for performing modular exponentiation and implement
the software driver basing on this uclass.
Signed-off-by: Ruchika Gupta <ruchika.gupta@freescale.com>
CC: Simon Glass <sjg@chromium.org>
---
Changes in v3:
New patch with driver model for RSA UCLASS
drivers/crypto/Kconfig | 1 +
drivers/crypto/Makefile | 1 +
drivers/crypto/rsa/Kconfig | 5 +++++
drivers/crypto/rsa/Makefile | 8 ++++++++
drivers/crypto/rsa/rsa_sw.c | 39 +++++++++++++++++++++++++++++++++++++++
drivers/crypto/rsa/rsa_uclass.c | 31 +++++++++++++++++++++++++++++++
include/dm/uclass-id.h | 1 +
include/u-boot/rsa-mod-exp.h | 40 ++++++++++++++++++++++++++++++++++++++++
8 files changed, 126 insertions(+)
create mode 100644 drivers/crypto/rsa/Kconfig
create mode 100644 drivers/crypto/rsa/Makefile
create mode 100644 drivers/crypto/rsa/rsa_sw.c
create mode 100644 drivers/crypto/rsa/rsa_uclass.c
diff --git a/drivers/crypto/Kconfig b/drivers/crypto/Kconfig
index e69de29..75f3479 100644
--- a/drivers/crypto/Kconfig
+++ b/drivers/crypto/Kconfig
@@ -0,0 +1 @@
+source drivers/crypto/rsa/Kconfig
diff --git a/drivers/crypto/Makefile b/drivers/crypto/Makefile
index 7b79237..a2f30fc 100644
--- a/drivers/crypto/Makefile
+++ b/drivers/crypto/Makefile
@@ -6,4 +6,5 @@
#
obj-$(CONFIG_EXYNOS_ACE_SHA) += ace_sha.o
+obj-y += rsa/
obj-y += fsl/
diff --git a/drivers/crypto/rsa/Kconfig b/drivers/crypto/rsa/Kconfig
new file mode 100644
index 0000000..7eb90a1
--- /dev/null
+++ b/drivers/crypto/rsa/Kconfig
@@ -0,0 +1,5 @@
+config DM_RSA
+ bool "Enable Driver Model for RSA "
+ depends on DM
+ help
+ If you want to use driver model for RSA Modular Exponentiation, say Y.
diff --git a/drivers/crypto/rsa/Makefile b/drivers/crypto/rsa/Makefile
new file mode 100644
index 0000000..fae4f8c
--- /dev/null
+++ b/drivers/crypto/rsa/Makefile
@@ -0,0 +1,8 @@
+#
+# (C) Copyright 2014 Freescale Semiconductor, Inc.
+#
+# SPDX-License-Identifier: GPL-2.0+
+#
+
+obj-$(CONFIG_DM_RSA) += rsa_uclass.o
+obj-$(CONFIG_RSA_SW) += rsa_sw.o
diff --git a/drivers/crypto/rsa/rsa_sw.c b/drivers/crypto/rsa/rsa_sw.c
new file mode 100644
index 0000000..5d94754
--- /dev/null
+++ b/drivers/crypto/rsa/rsa_sw.c
@@ -0,0 +1,39 @@
+/*
+ * (C) Copyright 2014 Freescale Semiconductor, Inc.
+ * Author: Ruchika Gupta <ruchika.gupta@freescale.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+#include <common.h>
+#include <dm.h>
+#include <u-boot/rsa-mod-exp.h>
+
+int mod_exp_sw(struct udevice *dev, const uint8_t *sig, uint32_t sig_len,
+ struct key_prop *prop, uint8_t *out)
+{
+ int ret = 0;
+
+ ret = rsa_mod_exp_sw(sig, sig_len, prop, out);
+
+ if (ret) {
+ debug("%s: RSA failed to verify: %d\n", __func__, ret);
+ return ret;
+ }
+ return 0;
+}
+
+static const struct rsa_ops rsa_ops_sw = {
+ .get_mod_exp = mod_exp_sw,
+};
+
+U_BOOT_DRIVER(fsl_rsa) = {
+ .name = "rsa_sw",
+ .id = UCLASS_RSA,
+ .ops = &rsa_ops_sw,
+};
+
+U_BOOT_DEVICE(rsa_sw) = {
+ .name = "rsa_sw",
+};
diff --git a/drivers/crypto/rsa/rsa_uclass.c b/drivers/crypto/rsa/rsa_uclass.c
new file mode 100644
index 0000000..f4f4f39
--- /dev/null
+++ b/drivers/crypto/rsa/rsa_uclass.c
@@ -0,0 +1,31 @@
+/*
+ * (C) Copyright 2014 Freescale Semiconductor, Inc
+ * Author: Ruchika Gupta <ruchika.gupta@freescale.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <u-boot/rsa-mod-exp.h>
+#include <errno.h>
+#include <fdtdec.h>
+#include <malloc.h>
+#include <asm/io.h>
+#include <linux/list.h>
+
+int rsa_mod_exp(struct udevice *dev, const uint8_t *sig, uint32_t sig_len,
+ struct key_prop *node, uint8_t *out)
+{
+ const struct rsa_ops *ops = device_get_ops(dev);
+
+ if (!ops->get_mod_exp)
+ return -ENOSYS;
+
+ return ops->get_mod_exp(dev, sig, sig_len, node, out);
+}
+
+UCLASS_DRIVER(rsa) = {
+ .id = UCLASS_RSA,
+ .name = "rsa",
+};
diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h
index f17c3c2..659369e 100644
--- a/include/dm/uclass-id.h
+++ b/include/dm/uclass-id.h
@@ -33,6 +33,7 @@ enum uclass_id {
UCLASS_I2C, /* I2C bus */
UCLASS_I2C_GENERIC, /* Generic I2C device */
UCLASS_I2C_EEPROM, /* I2C EEPROM device */
+ UCLASS_RSA , /* RSA Mod Exp device */
UCLASS_COUNT,
UCLASS_INVALID = -1,
diff --git a/include/u-boot/rsa-mod-exp.h b/include/u-boot/rsa-mod-exp.h
index 59cd9ea..7f7e196 100644
--- a/include/u-boot/rsa-mod-exp.h
+++ b/include/u-boot/rsa-mod-exp.h
@@ -40,4 +40,44 @@ struct key_prop {
int rsa_mod_exp_sw(const uint8_t *sig, uint32_t sig_len,
struct key_prop *node, uint8_t *out);
+/**
+ * rsa_mod_exp - Perform RSA Modular Exponentiation
+ *
+ * Operation: out[] = sig ^ exponent % modulus
+ *
+ * @udev: RSA Device
+ * @sig: RSA PKCS1.5 signature
+ * @sig_len: Length of signature in number of bytes
+ * @node: Node with RSA key elements like modulus, exponent, R^2, n0inv
+ * @out: Result in form of byte array
+ */
+int rsa_mod_exp(struct udevice *dev, const uint8_t *sig, uint32_t sig_len,
+ struct key_prop *node, uint8_t *out);
+
+/**
+ * struct struct rsa_ops - Driver model for RSA operations
+ *
+ * The uclass interface is implemented by all crypto devices which use
+ * driver model.
+ */
+struct rsa_ops {
+ /**
+ * Perform Modular Exponentiation
+ *
+ * Operation: out[] = sig ^ exponent % modulus
+ *
+ * @dev: RSA Device
+ * @sig: RSA PKCS1.5 signature
+ * @sig_len: Length of signature in number of bytes
+ * @node: Node with RSA key elements like modulus, exponent,
+ * R^2, n0inv
+ * @out: Result in form of byte array
+ * Returns: 0 if exponentiation is succesful, or a negative value
+ * if it wasn't.
+ */
+ int (*get_mod_exp)(struct udevice *dev, const uint8_t *sig,
+ uint32_t sig_len, struct key_prop *node,
+ uint8_t *out);
+};
+
#endif
--
1.8.1.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2014-12-29 20:24 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-12-29 3:53 [U-Boot] [PATCH 3/9] [v3] DM: crypto/rsa: Add rsa Modular Exponentiation DM driver Ruchika Gupta
2014-12-29 20:24 ` Simon Glass
-- strict thread matches above, loose matches on Subject: below --
2014-12-23 11:32 [U-Boot] [PATCH 0/9] [v3] rsa: Modify rsa lib to use hw acceleration Ruchika Gupta
2014-12-23 11:32 ` [U-Boot] [PATCH 3/9] [v3] DM: crypto/rsa: Add rsa Modular Exponentiation DM driver Ruchika Gupta
2014-12-24 0:48 ` Simon Glass
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.