[PATCH v3 1/1] rsa: adds rsa3072 algorithm
Tom Rini
trini at konsulko.com
Fri Jan 14 19:14:00 CET 2022
On Fri, Dec 10, 2021 at 02:00:55PM +0800, Jamin Lin wrote:
> Add to support rsa 3072 bits algorithm in tools
> for image sign at host side and adds rsa 3072 bits
> verification in the image binary.
>
> Add test case in vboot for sha384 with rsa3072 algorithm testing.
>
> Signed-off-by: Jamin Lin <jamin_lin at aspeedtech.com>
> ---
> include/u-boot/rsa.h | 1 +
> lib/rsa/rsa-verify.c | 6 +++
> test/py/tests/test_vboot.py | 12 +++++-
> test/py/tests/vboot/sign-configs-sha384.its | 45 +++++++++++++++++++++
> test/py/tests/vboot/sign-images-sha384.its | 42 +++++++++++++++++++
> tools/image-sig-host.c | 7 ++++
> 6 files changed, 111 insertions(+), 2 deletions(-)
> create mode 100644 test/py/tests/vboot/sign-configs-sha384.its
> create mode 100644 test/py/tests/vboot/sign-images-sha384.its
>
> diff --git a/include/u-boot/rsa.h b/include/u-boot/rsa.h
> index 7556aa5b4b..bb56c2243c 100644
> --- a/include/u-boot/rsa.h
> +++ b/include/u-boot/rsa.h
> @@ -110,6 +110,7 @@ int padding_pss_verify(struct image_sign_info *info,
> #define RSA_DEFAULT_PADDING_NAME "pkcs-1.5"
>
> #define RSA2048_BYTES (2048 / 8)
> +#define RSA3072_BYTES (3072 / 8)
> #define RSA4096_BYTES (4096 / 8)
>
> /* This is the minimum/maximum key size we support, in bits */
> diff --git a/lib/rsa/rsa-verify.c b/lib/rsa/rsa-verify.c
> index 83f7564101..4fe487d7e5 100644
> --- a/lib/rsa/rsa-verify.c
> +++ b/lib/rsa/rsa-verify.c
> @@ -588,6 +588,12 @@ U_BOOT_CRYPTO_ALGO(rsa2048) = {
> .verify = rsa_verify,
> };
>
> +U_BOOT_CRYPTO_ALGO(rsa3072) = {
> + .name = "rsa3072",
> + .key_len = RSA3072_BYTES,
> + .verify = rsa_verify,
> +};
> +
> U_BOOT_CRYPTO_ALGO(rsa4096) = {
> .name = "rsa4096",
> .key_len = RSA4096_BYTES,
> diff --git a/test/py/tests/test_vboot.py b/test/py/tests/test_vboot.py
> index 095e00cce3..b080d482af 100644
> --- a/test/py/tests/test_vboot.py
> +++ b/test/py/tests/test_vboot.py
> @@ -45,6 +45,8 @@ TESTDATA = [
> ['sha256-pss-pad', 'sha256', '-pss', '-E -p 0x10000', False, False],
> ['sha256-pss-required', 'sha256', '-pss', None, True, False],
> ['sha256-pss-pad-required', 'sha256', '-pss', '-E -p 0x10000', True, True],
> + ['sha384-basic', 'sha384', '', None, False, False],
> + ['sha384-pad', 'sha384', '', '-E -p 0x10000', False, False],
> ]
>
> @pytest.mark.boardspec('sandbox')
> @@ -180,10 +182,16 @@ def test_vboot(u_boot_console, name, sha_algo, padding, sign_options, required,
> name: Name of of the key (e.g. 'dev')
> """
> public_exponent = 65537
> +
> + if sha_algo == "sha384":
> + rsa_keygen_bits = 3072
> + else:
> + rsa_keygen_bits = 2048
> +
> util.run_and_log(cons, 'openssl genpkey -algorithm RSA -out %s%s.key '
> - '-pkeyopt rsa_keygen_bits:2048 '
> + '-pkeyopt rsa_keygen_bits:%d '
> '-pkeyopt rsa_keygen_pubexp:%d' %
> - (tmpdir, name, public_exponent))
> + (tmpdir, name, rsa_keygen_bits, public_exponent))
>
> # Create a certificate containing the public key
> util.run_and_log(cons, 'openssl req -batch -new -x509 -key %s%s.key '
> diff --git a/test/py/tests/vboot/sign-configs-sha384.its b/test/py/tests/vboot/sign-configs-sha384.its
> new file mode 100644
> index 0000000000..2869401991
> --- /dev/null
> +++ b/test/py/tests/vboot/sign-configs-sha384.its
> @@ -0,0 +1,45 @@
> +/dts-v1/;
> +
> +/ {
> + description = "Chrome OS kernel image with one or more FDT blobs";
> + #address-cells = <1>;
> +
> + images {
> + kernel {
> + data = /incbin/("test-kernel.bin");
> + type = "kernel_noload";
> + arch = "sandbox";
> + os = "linux";
> + compression = "none";
> + load = <0x4>;
> + entry = <0x8>;
> + kernel-version = <1>;
> + hash-1 {
> + algo = "sha384";
> + };
> + };
> + fdt-1 {
> + description = "snow";
> + data = /incbin/("sandbox-kernel.dtb");
> + type = "flat_dt";
> + arch = "sandbox";
> + compression = "none";
> + fdt-version = <1>;
> + hash-1 {
> + algo = "sha384";
> + };
> + };
> + };
> + configurations {
> + default = "conf-1";
> + conf-1 {
> + kernel = "kernel";
> + fdt = "fdt-1";
> + signature {
> + algo = "sha384,rsa3072";
> + key-name-hint = "dev";
> + sign-images = "fdt", "kernel";
> + };
> + };
> + };
> +};
> diff --git a/test/py/tests/vboot/sign-images-sha384.its b/test/py/tests/vboot/sign-images-sha384.its
> new file mode 100644
> index 0000000000..be1a9a653c
> --- /dev/null
> +++ b/test/py/tests/vboot/sign-images-sha384.its
> @@ -0,0 +1,42 @@
> +/dts-v1/;
> +
> +/ {
> + description = "Chrome OS kernel image with one or more FDT blobs";
> + #address-cells = <1>;
> +
> + images {
> + kernel {
> + data = /incbin/("test-kernel.bin");
> + type = "kernel_noload";
> + arch = "sandbox";
> + os = "linux";
> + compression = "none";
> + load = <0x4>;
> + entry = <0x8>;
> + kernel-version = <1>;
> + signature {
> + algo = "sha384,rsa3072";
> + key-name-hint = "dev";
> + };
> + };
> + fdt-1 {
> + description = "snow";
> + data = /incbin/("sandbox-kernel.dtb");
> + type = "flat_dt";
> + arch = "sandbox";
> + compression = "none";
> + fdt-version = <1>;
> + signature {
> + algo = "sha384,rsa3072";
> + key-name-hint = "dev";
> + };
> + };
> + };
> + configurations {
> + default = "conf-1";
> + conf-1 {
> + kernel = "kernel";
> + fdt = "fdt-1";
> + };
> + };
> +};
> diff --git a/tools/image-sig-host.c b/tools/image-sig-host.c
> index 8ed6998dab..d0133aec4c 100644
> --- a/tools/image-sig-host.c
> +++ b/tools/image-sig-host.c
> @@ -55,6 +55,13 @@ struct crypto_algo crypto_algos[] = {
> .add_verify_data = rsa_add_verify_data,
> .verify = rsa_verify,
> },
> + {
> + .name = "rsa3072",
> + .key_len = RSA3072_BYTES,
> + .sign = rsa_sign,
> + .add_verify_data = rsa_add_verify_data,
> + .verify = rsa_verify,
> + },
> {
> .name = "rsa4096",
> .key_len = RSA4096_BYTES,
With current master these tests run and fail:
https://source.denx.de/u-boot/u-boot/-/jobs/376757 (and also fail for me
when running locally), please re-check and resubmit, thanks.
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20220114/3a2e1b97/attachment.sig>
More information about the U-Boot
mailing list