Add an software ecdsa driver so it is now possible to use ecdsa signature on board without ecdsa hardware support.
Signed-off-by: Philippe Reynes <[email protected]> --- drivers/crypto/Kconfig | 2 ++ drivers/crypto/Makefile | 1 + drivers/crypto/ecdsa/Kconfig | 6 ++++++ drivers/crypto/ecdsa/Makefile | 6 ++++++ drivers/crypto/ecdsa/ecdsa-sw.c | 33 +++++++++++++++++++++++++++++++++ 5 files changed, 48 insertions(+) create mode 100644 drivers/crypto/ecdsa/Kconfig create mode 100644 drivers/crypto/ecdsa/Makefile create mode 100644 drivers/crypto/ecdsa/ecdsa-sw.c diff --git a/drivers/crypto/Kconfig b/drivers/crypto/Kconfig index 0d58e3910fe..cf49e5c0f7e 100644 --- a/drivers/crypto/Kconfig +++ b/drivers/crypto/Kconfig @@ -12,4 +12,6 @@ source "drivers/crypto/nuvoton/Kconfig" source "drivers/crypto/tegra/Kconfig" +source "drivers/crypto/ecdsa/Kconfig" + endmenu diff --git a/drivers/crypto/Makefile b/drivers/crypto/Makefile index e4a4482b7f3..8170e4cae9c 100644 --- a/drivers/crypto/Makefile +++ b/drivers/crypto/Makefile @@ -4,6 +4,7 @@ # http://www.samsung.com obj-$(CONFIG_EXYNOS_ACE_SHA) += ace_sha.o +obj-$(CONFIG_ECDSA) += ecdsa/ obj-y += aes/ obj-y += rsa_mod_exp/ obj-y += fsl/ diff --git a/drivers/crypto/ecdsa/Kconfig b/drivers/crypto/ecdsa/Kconfig new file mode 100644 index 00000000000..308824d8421 --- /dev/null +++ b/drivers/crypto/ecdsa/Kconfig @@ -0,0 +1,6 @@ +config ECDSA_SW + bool "Enable driver for ECDSA in software" + depends on ECDSA_MBEDTLS + help + Enable driver for ECDSA operations in software. Currently + it supports multiple ECDSA algorithm. diff --git a/drivers/crypto/ecdsa/Makefile b/drivers/crypto/ecdsa/Makefile new file mode 100644 index 00000000000..8f9e5a767f8 --- /dev/null +++ b/drivers/crypto/ecdsa/Makefile @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# Copyright (C) 2026 Philippe Reynes <[email protected]> +# + +obj-$(CONFIG_ECDSA_SW) += ecdsa-sw.o diff --git a/drivers/crypto/ecdsa/ecdsa-sw.c b/drivers/crypto/ecdsa/ecdsa-sw.c new file mode 100644 index 00000000000..0d526371ecb --- /dev/null +++ b/drivers/crypto/ecdsa/ecdsa-sw.c @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (C) 2026 Philippe Reynes <[email protected]> + */ +#include <dm/device.h> +#include <linux/types.h> +#include <u-boot/ecdsa.h> +#include <crypto/ecdsa-uclass.h> +#include <dm/platdata.h> +#include <crypto/internal/sw_ecdsa.h> + +static int ops_sw_ecdsa_verify(__always_unused struct udevice *dev, + const struct ecdsa_public_key *pubkey, + const void *hash, size_t hash_len, + const void *signature, size_t sig_len) +{ + return sw_ecdsa_verify(pubkey, hash, hash_len, signature, sig_len); +} + +static const struct ecdsa_ops sw_ecdsa_ops = { + .verify = ops_sw_ecdsa_verify, +}; + +U_BOOT_DRIVER(sw_ecdsa) = { + .name = "sw_ecdsa", + .id = UCLASS_ECDSA, + .ops = &sw_ecdsa_ops, + .flags = DM_FLAG_PRE_RELOC, +}; + +U_BOOT_DRVINFO(sw_ecdsa) = { + .name = "sw_ecdsa", +}; -- 2.43.0

