[PATCH v6 13/15] tools: preload_check_sign: add support of ecdsa

Raymond Mao raymondmaoca at gmail.com
Mon May 25 17:44:24 CEST 2026


Hi Philippe,

On Mon, May 25, 2026 at 9:52 AM Philippe Reynes
<philippe.reynes at softathome.com> wrote:
>
> right now, the tool preload_check_sign may only
> checks an image with a pre-load header with rsa.
> We add the support of pre-load header with ecdsa.
>
> Reviewed-by: Simon Glass <sjg at chromium.org>
> Signed-off-by: Philippe Reynes <philippe.reynes at softathome.com>
> ---
> v3:
> - initial version
> v4:
> - free key to avoid mem leak
> - fix error management (set ret before goto out)
> v5:
> - add include ec.h, evp.h, err.h and image.h
> v6:
> - no change
>
>  tools/preload_check_sign.c | 30 ++++++++++++++++++++++++++++++
>  1 file changed, 30 insertions(+)
>

Looks good to me. Thanks!
Reviewed-by: Raymond Mao <raymondmaoca at gmail.com>


> diff --git a/tools/preload_check_sign.c b/tools/preload_check_sign.c
> index ebead459273..d94f0509e74 100644
> --- a/tools/preload_check_sign.c
> +++ b/tools/preload_check_sign.c
> @@ -8,9 +8,13 @@
>   * complete file. The tool preload_check_sign allows to verify and authenticate
>   * a file starting with a preload header.
>   */
> +
> +#define OPENSSL_API_COMPAT 0x10101000L
> +
>  #include <stdio.h>
>  #include <unistd.h>
>  #include <openssl/pem.h>
> +#include <openssl/ec.h>
>  #include <openssl/evp.h>
>  #include <openssl/err.h>
>  #include <image.h>
> @@ -144,6 +148,32 @@ int main(int argc, char **argv)
>         info.sig_info.key      = info.key;
>         info.sig_info.keylen   = info.key_len;
>
> +       /* For ecdsa key, we have to update some values */
> +       if (EVP_PKEY_id(pkey) == EVP_PKEY_EC) {
> +               EC_KEY *ecdsa_key;
> +               const EC_GROUP *group;
> +
> +               ecdsa_key = EVP_PKEY_get1_EC_KEY(pkey);
> +               if (!ecdsa_key) {
> +                       fprintf(stderr, "Can not extract ECDSA key\n");
> +                       ret = EXIT_FAILURE;
> +                       goto out;
> +               }
> +
> +               group = EC_KEY_get0_group(ecdsa_key);
> +               if (!group) {
> +                       fprintf(stderr, "Can not extract ECDSA group\n");
> +                       EC_KEY_free(ecdsa_key);
> +                       ret = EXIT_FAILURE;
> +                       goto out;
> +               }
> +
> +               info.sig_info.keyfile  = keyfile;
> +               info.sig_size          = (EC_GROUP_order_bits(group) + 7) / 8 * 2;
> +
> +               EC_KEY_free(ecdsa_key);
> +       }
> +
>         /* Check the signature */
>         image_pre_load_sig_set_info(&info);
>         ret = image_pre_load_sig((ulong)buffer);
> --
> 2.43.0
>


More information about the U-Boot mailing list