[PATCH v2 4/6] boot: allow SPL FIT signature verification without DM

Simon Glass sjg at chromium.org
Thu May 7 18:49:17 CEST 2026


Hi Quentin,

On Thu, 7 May 2026 at 05:17, Quentin Schulz <quentin.schulz at cherry.de> wrote:
>
> Hi Lukas,
>
> On 5/1/26 12:33 AM, Lukas Schmid wrote:
> > SPL FIT verification was effectively tied to Driver Model. The RSA
> > verifier assumed a DM-backed modexp device, and SPL_FIT_SIGNATURE
> > depended on SPL_DM. This prevents non-DM SPL platforms from using
> > FIT signature verification even though the software modular exponent
> > fallback is already available.
> >
> > Drop the hard SPL_DM dependency and only look up the modexp device
> > when DM is enabled. Non-DM SPL builds then fall back to the software
> > implementation and can enable signed FIT verification.
> >
> > Signed-off-by: Lukas Schmid <lukas.schmid at netcube.li>
> > ---
> >   boot/Kconfig         |  1 -
> >   lib/rsa/rsa-verify.c | 16 ++++++++++------
> >   2 files changed, 10 insertions(+), 7 deletions(-)
> >
> > diff --git a/boot/Kconfig b/boot/Kconfig
> > index 4e9bc9491a0..6ccb7d44a5e 100644
> > --- a/boot/Kconfig
> > +++ b/boot/Kconfig
> > @@ -202,7 +202,6 @@ config SPL_FIT_FULL_CHECK
> >
> >   config SPL_FIT_SIGNATURE
> >       bool "Enable signature verification of FIT firmware within SPL"
> > -     depends on SPL_DM
> >       depends on SPL_LOAD_FIT
> >       select FIT_SIGNATURE
> >       select SPL_FIT
> > diff --git a/lib/rsa/rsa-verify.c b/lib/rsa/rsa-verify.c
> > index 3169c3a6dd1..24b23ab565a 100644
> > --- a/lib/rsa/rsa-verify.c
> > +++ b/lib/rsa/rsa-verify.c
> > @@ -355,13 +355,17 @@ static int rsa_verify_key(struct image_sign_info *info,
> >       hash_len = checksum->checksum_len;
> >
> >   #if !defined(USE_HOSTCC)
> > -     ret = uclass_get_device(UCLASS_MOD_EXP, 0, &mod_exp_dev);
> > -     if (ret) {
> > -             printf("RSA: Can't find Modular Exp implementation\n");
> > -             return -EINVAL;
> > -     }
> > +     if (CONFIG_IS_ENABLED(DM)) {
> > +             ret = uclass_get_device(UCLASS_MOD_EXP, 0, &mod_exp_dev);
> > +             if (ret) {
> > +                     printf("RSA: Can't find Modular Exp implementation\n");
> > +                     return -EINVAL;
> > +             }
> >
> > -     ret = rsa_mod_exp(mod_exp_dev, sig, sig_len, prop, buf);
> > +             ret = rsa_mod_exp(mod_exp_dev, sig, sig_len, prop, buf);
> > +     } else {
> > +             ret = rsa_mod_exp_sw(sig, sig_len, prop, buf);
> > +     }
>
> Mmmmm I'm wondering if in the event we build with DM support but cannot
> find a modexp implem we shouldn't default to the software implem if
> available? Security-wise I'm not sure we're losing here, it's just that
> I'm assuming SW-based RSA verification is slower than HW-based no?
>
> Also, this function is only defined when CONFIG_RSA_SOFTWARE_EXP is
> enabled (and we don't have a toggle for xPL phases (should we?)), so we
> need to handle this here to avoid breaking builds.

Right

>
> Finally, I still see RSA_SOFTWARE_EXP depends on DM at the Kconfig
> level. So bringing this in SPL seems wrong, as we would depend on U-Boot
> proper having DM enabled for it to work in xPL. So either the dependency
> is incorrect or we're missing something in SPL. With a cursory look at
> it, it seems DM isn't required so maybe we can drop it.

Re DM, there is a UCLASS_MOD_EXP so we can support
hardware-accelerated verification.

Regards,
Simon


More information about the U-Boot mailing list