[RFC PATCH v1] lib: rsa: introduce RSA_SOFTWARE_EXP_TINY

From: Igor Opaniuk igor.opaniuk@foundries.io
Introduce RSA_SOFTWARE_EXP_TINY Kconfig option, which does not require DM to be enabled. This can be handy on devices, where SPL + signed U-Boot FIT image setup is used, where it isn't possible to enable SPL_DM mainly due to SRAM size constraits.
For example, on iMX8MM with this option enabled and SPL_DM disabled it's possible to save almost 11Kb:
With RSA_SOFTWARE_EXP_TINY enabled: spl/u-boot-spl-nodtb.bin 99824
Without: spl/u-boot-spl-nodtb.bin 111088
Signed-off-by: Igor Opaniuk igor.opaniuk@foundries.io ---
lib/rsa/Kconfig | 11 ++++++++++- lib/rsa/rsa-verify.c | 8 ++++---- 2 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/lib/rsa/Kconfig b/lib/rsa/Kconfig index a90d67e5a8..03692b73bb 100644 --- a/lib/rsa/Kconfig +++ b/lib/rsa/Kconfig @@ -1,7 +1,8 @@ config RSA bool "Use RSA Library" select RSA_FREESCALE_EXP if FSL_CAAM && !ARCH_MX7 && !ARCH_MX6 && !ARCH_MX5 - select RSA_SOFTWARE_EXP if !RSA_FREESCALE_EXP + select RSA_SOFTWARE_EXP if !RSA_FREESCALE_EXP && DM + select RSA_SOFTWARE_EXP_TINY if !RSA_FREESCALE_EXP && !DM help RSA support. This enables the RSA algorithm used for FIT image verification in U-Boot. @@ -45,6 +46,14 @@ config RSA_VERIFY_WITH_PKEY directly specified in image_sign_info, where all the necessary key properties will be calculated on the fly in verification code.
+config RSA_SOFTWARE_EXP_TINY + bool "Enable non-DM RSA Modular Exponentiation software implementation" + help + Enable modular exponentiation implementation in software, which + does not require Driver Model to be enabled. This is a RSA algorithm + used in FIT image verification. It required RSA Key as input. + See doc/uImage.FIT/signature.txt for more details. + config RSA_SOFTWARE_EXP bool "Enable driver for RSA Modular Exponentiation in software" depends on DM diff --git a/lib/rsa/rsa-verify.c b/lib/rsa/rsa-verify.c index aee76f42d5..0162253636 100644 --- a/lib/rsa/rsa-verify.c +++ b/lib/rsa/rsa-verify.c @@ -319,7 +319,7 @@ static int rsa_verify_key(struct image_sign_info *info, const uint32_t key_len) { int ret; -#if !defined(USE_HOSTCC) +#if !(defined(USE_HOSTCC) || defined(RSA_SOFTWARE_EXP_TINY)) struct udevice *mod_exp_dev; #endif struct checksum_algo *checksum = info->checksum; @@ -346,7 +346,9 @@ static int rsa_verify_key(struct image_sign_info *info, uint8_t buf[sig_len]; hash_len = checksum->checksum_len;
-#if !defined(USE_HOSTCC) +#if defined(USE_HOSTCC) || defined(RSA_SOFTWARE_EXP_TINY) + ret = rsa_mod_exp_sw(sig, sig_len, prop, buf); +#else ret = uclass_get_device(UCLASS_MOD_EXP, 0, &mod_exp_dev); if (ret) { printf("RSA: Can't find Modular Exp implementation\n"); @@ -354,8 +356,6 @@ static int rsa_verify_key(struct image_sign_info *info, }
ret = rsa_mod_exp(mod_exp_dev, sig, sig_len, prop, buf); -#else - ret = rsa_mod_exp_sw(sig, sig_len, prop, buf); #endif if (ret) { debug("Error in Modular exponentation\n");

Hi Igor,
On Fri, 16 Apr 2021 at 01:10, Igor Opaniuk igor.opaniuk@foundries.io wrote:
From: Igor Opaniuk igor.opaniuk@foundries.io
Introduce RSA_SOFTWARE_EXP_TINY Kconfig option, which does not require DM to be enabled. This can be handy on devices, where SPL + signed U-Boot FIT image setup is used, where it isn't possible to enable SPL_DM mainly due to SRAM size constraits.
For example, on iMX8MM with this option enabled and SPL_DM disabled it's possible to save almost 11Kb:
That seems a lot...do you have OF_PLATDATA enabled?
With RSA_SOFTWARE_EXP_TINY enabled: spl/u-boot-spl-nodtb.bin 99824
Without: spl/u-boot-spl-nodtb.bin 111088
Signed-off-by: Igor Opaniuk igor.opaniuk@foundries.io
lib/rsa/Kconfig | 11 ++++++++++- lib/rsa/rsa-verify.c | 8 ++++---- 2 files changed, 14 insertions(+), 5 deletions(-)
Regards, Simon

Hi Simon,
On Thu, Apr 29, 2021 at 7:10 PM Simon Glass sjg@chromium.org wrote:
Hi Igor,
On Fri, 16 Apr 2021 at 01:10, Igor Opaniuk igor.opaniuk@foundries.io wrote:
From: Igor Opaniuk igor.opaniuk@foundries.io
Introduce RSA_SOFTWARE_EXP_TINY Kconfig option, which does not require DM to be enabled. This can be handy on devices, where SPL + signed U-Boot FIT image setup is used, where it isn't possible to enable SPL_DM mainly due to SRAM size constraits.
For example, on iMX8MM with this option enabled and SPL_DM disabled it's possible to save almost 11Kb:
That seems a lot...do you have OF_PLATDATA enabled?
Nope, it's not enabled. I've managed to get these numbers when experimenting with NXP U-Boot fork, which is based on 2020.04.
I also checked a while ago iMX6ULL mainline U-Boot with this patch, and size decrease was around 4-5 Kb, which basically is also not bad (considering 64Kb SPL size limitation for this SoC).
With RSA_SOFTWARE_EXP_TINY enabled: spl/u-boot-spl-nodtb.bin 99824
Without: spl/u-boot-spl-nodtb.bin 111088
Signed-off-by: Igor Opaniuk igor.opaniuk@foundries.io
lib/rsa/Kconfig | 11 ++++++++++- lib/rsa/rsa-verify.c | 8 ++++---- 2 files changed, 14 insertions(+), 5 deletions(-)
Regards, Simon
Thanks

Hi Igor,
On Wed, 5 May 2021 at 06:58, Igor Opaniuk igor.opaniuk@foundries.io wrote:
Hi Simon,
On Thu, Apr 29, 2021 at 7:10 PM Simon Glass sjg@chromium.org wrote:
Hi Igor,
On Fri, 16 Apr 2021 at 01:10, Igor Opaniuk igor.opaniuk@foundries.io wrote:
From: Igor Opaniuk igor.opaniuk@foundries.io
Introduce RSA_SOFTWARE_EXP_TINY Kconfig option, which does not require DM to be enabled. This can be handy on devices, where SPL + signed U-Boot FIT image setup is used, where it isn't possible to enable SPL_DM mainly due to SRAM size constraits.
For example, on iMX8MM with this option enabled and SPL_DM disabled it's possible to save almost 11Kb:
That seems a lot...do you have OF_PLATDATA enabled?
Nope, it's not enabled.
I think you should look at that first. It is likely to give a much larger benefit.
I've managed to get these numbers when experimenting with NXP U-Boot fork, which is based on 2020.04.
I also checked a while ago iMX6ULL mainline U-Boot with this patch, and size decrease was around 4-5 Kb, which basically is also not bad (considering 64Kb SPL size limitation for this SoC).
OK I see, but if we did this with every subsystem won't we end up with chaos? There will be cases where driver model is impossible, but with 64KB (which I assume you mean) I would hope that we could avoid it.
With RSA_SOFTWARE_EXP_TINY enabled: spl/u-boot-spl-nodtb.bin 99824
Without: spl/u-boot-spl-nodtb.bin 111088
Signed-off-by: Igor Opaniuk igor.opaniuk@foundries.io
lib/rsa/Kconfig | 11 ++++++++++- lib/rsa/rsa-verify.c | 8 ++++---- 2 files changed, 14 insertions(+), 5 deletions(-)
Regards, Simon
participants (2)
-
Igor Opaniuk
-
Simon Glass