public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [PATCH 0/5] Enable ECDSA FIT verification for stm32mp
@ 2021-01-11 15:41 Alexandru Gagniuc
  2021-01-11 15:41 ` [PATCH 1/5] dm: crypto: Define UCLASS API for ECDSA signature verification Alexandru Gagniuc
                   ` (5 more replies)
  0 siblings, 6 replies; 18+ messages in thread
From: Alexandru Gagniuc @ 2021-01-11 15:41 UTC (permalink / raw)
  To: u-boot

This series is Part II of the ECDSA saga. It applies on top of [1]:
 * [PATCH v4 0/6] Add support for ECDSA image signing (with test)

I've designed the UCLASS_ECDSA such that it aligns with the ROM API
of the stm32mp. Instead of splitting the verification into
(1) curve operations and (2) modular exponentiation, I've
concatenated everything in a 'verify' step. It would be impossible to
split the steps and use the stm32mp ROM for verification.

Should more granular control be required, this API could be extended
at a later time. Until we have more hardware supporting ECDSA, this
is purely speculative.

The ROM API of the stm32mp is passed in 'r0' when the FSBL is called.
While we can save 'r0' in SPL, this series does not implement a
mechanism to pass this to u-boot. Thus the ROM API, and ECDSA
verification are only available for SPL. Although extending this to
u-boot by adding the ROM address to the FDT blob, implementing and
verifying this is beyond the scope of this series.

[1] https://lists.denx.de/pipermail/u-boot/2021-January/436935.html

Alexandru Gagniuc (5):
  dm: crypto: Define UCLASS API for ECDSA signature verification
  lib: ecdsa: Add skeleton to implement ecdsa verification in u-boot
  lib: ecdsa: Implement signature verification for crypto_algo API
  arm: stm32mp1: Implement ECDSA signature verification
  Kconfig: FIT_SIGNATURE should not select RSA_VERIFY

 arch/arm/mach-stm32mp/Kconfig        |   9 ++
 arch/arm/mach-stm32mp/Makefile       |   1 +
 arch/arm/mach-stm32mp/ecdsa_romapi.c | 106 ++++++++++++++++++++++
 common/Kconfig.boot                  |   8 +-
 include/crypto/ecdsa-uclass.h        |  39 ++++++++
 include/dm/uclass-id.h               |   1 +
 include/image.h                      |  10 +--
 include/u-boot/rsa.h                 |   2 +-
 lib/Kconfig                          |   1 +
 lib/Makefile                         |   1 +
 lib/ecdsa/Kconfig                    |  23 +++++
 lib/ecdsa/Makefile                   |   1 +
 lib/ecdsa/ecdsa-verify.c             | 128 +++++++++++++++++++++++++++
 13 files changed, 320 insertions(+), 10 deletions(-)
 create mode 100644 arch/arm/mach-stm32mp/ecdsa_romapi.c
 create mode 100644 include/crypto/ecdsa-uclass.h
 create mode 100644 lib/ecdsa/Kconfig
 create mode 100644 lib/ecdsa/Makefile
 create mode 100644 lib/ecdsa/ecdsa-verify.c

-- 
2.26.2

^ permalink raw reply	[flat|nested] 18+ messages in thread
* Re: [PATCH v5 5/5] test: dm: Add test for ECDSA UCLASS support
@ 2021-07-27  8:09 Patrick DELAUNAY
  2021-07-29 16:47 ` [PATCH 0/5] Enable ECDSA FIT verification for stm32mp Alexandru Gagniuc
  0 siblings, 1 reply; 18+ messages in thread
From: Patrick DELAUNAY @ 2021-07-27  8:09 UTC (permalink / raw)
  To: Alexandru Gagniuc, u-boot; +Cc: trini, sjg, etienne.carriere, Patrice CHOTARD

Hi Alexandru,

On 5/17/21 8:39 PM, Alexandru Gagniuc wrote:
> This test verifies that ECDSA_UCLASS is implemented, and that
> ecdsa_verify() works as expected. The definition of "expected" is
> "does not find a device, and returns -ENODEV".
>
> The lack of a hardware-independent ECDSA implementation prevents us
> from having one in the sandbox, for now.
>
> Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>
> ---
>   configs/sandbox_defconfig |  2 ++
>   test/dm/Makefile          |  1 +
>   test/dm/ecdsa.c           | 39 +++++++++++++++++++++++++++++++++++++++
>   3 files changed, 42 insertions(+)
>   create mode 100644 test/dm/ecdsa.c
>
> diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
> index 7b8603d1ef..e40bcb4b16 100644
> --- a/configs/sandbox_defconfig
> +++ b/configs/sandbox_defconfig
> @@ -287,3 +287,5 @@ CONFIG_TEST_FDTDEC=y
>   CONFIG_UNIT_TEST=y
>   CONFIG_UT_TIME=y
>   CONFIG_UT_DM=y
> +CONFIG_ECDSA=y
> +CONFIG_ECDSA_VERIFY=y
> diff --git a/test/dm/Makefile b/test/dm/Makefile
> index c9644617a1..3508aa1968 100644
> --- a/test/dm/Makefile
> +++ b/test/dm/Makefile
> @@ -34,6 +34,7 @@ obj-$(CONFIG_DEVRES) += devres.o
>   obj-$(CONFIG_DMA) += dma.o
>   obj-$(CONFIG_VIDEO_MIPI_DSI) += dsi_host.o
>   obj-$(CONFIG_DM_DSA) += dsa.o
> +obj-$(CONFIG_ECDSA_VERIFY) += ecdsa.o
>   obj-$(CONFIG_DM_ETH) += eth.o
>   ifneq ($(CONFIG_EFI_PARTITION),)
>   obj-$(CONFIG_FASTBOOT_FLASH_MMC) += fastboot.o
> diff --git a/test/dm/ecdsa.c b/test/dm/ecdsa.c
> new file mode 100644
> index 0000000000..9c0007b180
> --- /dev/null
> +++ b/test/dm/ecdsa.c
> @@ -0,0 +1,39 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +
> +#include <crypto/ecdsa-uclass.h>
> +#include <dm.h>
> +#include <dm/test.h>
> +#include <test/ut.h>
> +#include <u-boot/ecdsa.h>
> +
> +/*
> + * Basic test of the ECDSA uclass and ecdsa_verify()
> + *
> + * ECDSA implementations in u-boot are hardware-dependent. Until we have a
> + * software implementation that can be compiled into the sandbox, all we can
> + * test is the uclass support.
> + *
> + * The uclass_get() test is redundant since ecdsa_verify() would also fail. We
> + * run both functions in order to isolate the cause more clearly. i.e. is
> + * ecdsa_verify() failing because the UCLASS is absent/broken?
> + */
> +static int dm_test_ecdsa_verify(struct unit_test_state *uts)
> +{
> +	const struct ecdsa_ops *ops;
> +	struct uclass *ucp;
> +
> +	const struct checksum_algo algo = {
> +		.checksum_len = 256,
> +	};
> +
> +	struct image_sign_info info = {
> +		.checksum = &algo,
> +	};
> +
> +	ut_assertok(uclass_get(UCLASS_ECDSA, &ucp));
> +	ut_assertnonnull(ucp);
> +	ut_asserteq(-ENODEV, ecdsa_verify(&info, NULL, 0, NULL, 0));
> +
> +	return 0;
> +}
> +DM_TEST(dm_test_ecdsa_verify, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);


When I prepare the stm32 pull request, I detect a issue with this patch 
in CI pipeline:

https://source.denx.de/u-boot/custodians/u-boot-stm/-/jobs/298432

+ sandbox test.py

+ sandbox with clang test.py


With the same errors:


Building current source for 1 boards (1 thread, 32 jobs per thread)
    sandbox:  +   sandbox
+test/dm/ecdsa.c:30:15: error: initializing 'struct checksum_algo *' 
with an expression of type 'const struct checksum_algo *' discards 
qualifiers [-Werror,-Wincompatible-pointer-types-discards-qualifiers]
+                .checksum = &algo,
+                            ^~~~~
+test/dm/ecdsa.c:22:26: error: unused variable 'ops' 
[-Werror,-Wunused-variable]
+        const struct ecdsa_ops *ops;
+                                ^
+2 errors generated.
+make[3]: *** [scripts/Makefile.build:253: test/dm/ecdsa.o] Error 1
+make[2]: *** [scripts/Makefile.build:394: test/dm] Error 2
+make[1]: *** [Makefile:1815: test] Error 2
+make: *** [Makefile:177: sub-make] Error 2
     0    0    1 /1              sandbox


Can you correct this issue.

Thanks,

Patrick


^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2021-07-29 16:47 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-01-11 15:41 [PATCH 0/5] Enable ECDSA FIT verification for stm32mp Alexandru Gagniuc
2021-01-11 15:41 ` [PATCH 1/5] dm: crypto: Define UCLASS API for ECDSA signature verification Alexandru Gagniuc
2021-01-13 16:10   ` Simon Glass
2021-01-14 16:09     ` Alex G.
2021-01-14 19:16       ` Simon Glass
2021-01-11 15:41 ` [PATCH 2/5] lib: ecdsa: Add skeleton to implement ecdsa verification in u-boot Alexandru Gagniuc
2021-02-09 15:11   ` Patrick DELAUNAY
2021-02-09 22:37     ` Alex G.
2021-01-11 15:41 ` [PATCH 3/5] lib: ecdsa: Implement signature verification for crypto_algo API Alexandru Gagniuc
2021-01-13 16:10   ` Simon Glass
2021-02-09 15:56   ` Patrick DELAUNAY
2021-02-09 22:58     ` Alex G.
2021-01-11 15:41 ` [PATCH 4/5] arm: stm32mp1: Implement ECDSA signature verification Alexandru Gagniuc
2021-01-11 15:41 ` [PATCH 5/5] Kconfig: FIT_SIGNATURE should not select RSA_VERIFY Alexandru Gagniuc
2021-01-13 16:10   ` Simon Glass
2021-02-09 15:08 ` [PATCH 0/5] Enable ECDSA FIT verification for stm32mp Patrick DELAUNAY
2021-02-09 21:28   ` Alex G.
  -- strict thread matches above, loose matches on Subject: below --
2021-07-27  8:09 [PATCH v5 5/5] test: dm: Add test for ECDSA UCLASS support Patrick DELAUNAY
2021-07-29 16:47 ` [PATCH 0/5] Enable ECDSA FIT verification for stm32mp Alexandru Gagniuc

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox