mirror of https://github.com/wolfSSL/wolfBoot.git
Add SW-only RSA PSS
parent
401c034690
commit
65d84a29ec
|
|
@ -175,6 +175,66 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
tools/scripts/sim-sunnyday-update.sh
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
|
- name: Cleanup to change key type
|
||||||
|
run: |
|
||||||
|
make keysclean
|
||||||
|
|
||||||
|
- name: Build wolfboot.elf (RSAPSS2048)
|
||||||
|
run: |
|
||||||
|
make clean && make test-sim-internal-flash-with-update SIGN=RSAPSS2048 SPMATH=1
|
||||||
|
|
||||||
|
- name: Run sunny day update test
|
||||||
|
run: |
|
||||||
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
|
- name: Build wolfboot.elf (RSAPSS2048, WOLFBOOT_SMALL_STACK)
|
||||||
|
run: |
|
||||||
|
make clean && make test-sim-internal-flash-with-update SIGN=RSAPSS2048 WOLFBOOT_SMALL_STACK=1 SPMATH=1
|
||||||
|
|
||||||
|
- name: Run sunny day update test
|
||||||
|
run: |
|
||||||
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
|
- name: Cleanup to change key type
|
||||||
|
run: |
|
||||||
|
make keysclean
|
||||||
|
|
||||||
|
- name: Build wolfboot.elf (RSAPSS3072)
|
||||||
|
run: |
|
||||||
|
make clean && make test-sim-internal-flash-with-update SIGN=RSAPSS3072 SPMATH=1
|
||||||
|
|
||||||
|
- name: Run sunny day update test
|
||||||
|
run: |
|
||||||
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
|
- name: Build wolfboot.elf (RSAPSS3072, WOLFBOOT_SMALL_STACK)
|
||||||
|
run: |
|
||||||
|
make clean && make test-sim-internal-flash-with-update SIGN=RSAPSS3072 WOLFBOOT_SMALL_STACK=1 SPMATH=1
|
||||||
|
|
||||||
|
- name: Run sunny day update test
|
||||||
|
run: |
|
||||||
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
|
- name: Cleanup to change key type
|
||||||
|
run: |
|
||||||
|
make keysclean
|
||||||
|
|
||||||
|
- name: Build wolfboot.elf (RSAPSS4096)
|
||||||
|
run: |
|
||||||
|
make clean && make test-sim-internal-flash-with-update SIGN=RSAPSS4096 SPMATH=1
|
||||||
|
|
||||||
|
- name: Run sunny day update test
|
||||||
|
run: |
|
||||||
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
|
- name: Build wolfboot.elf (RSAPSS4096, WOLFBOOT_SMALL_STACK)
|
||||||
|
run: |
|
||||||
|
make clean && make test-sim-internal-flash-with-update SIGN=RSAPSS4096 WOLFBOOT_SMALL_STACK=1 SPMATH=1
|
||||||
|
|
||||||
|
- name: Run sunny day update test
|
||||||
|
run: |
|
||||||
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
# 32 Bit simulator, FASTMATH
|
# 32 Bit simulator, FASTMATH
|
||||||
#
|
#
|
||||||
- name: make clean
|
- name: make clean
|
||||||
|
|
@ -305,6 +365,66 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
tools/scripts/sim-sunnyday-update.sh
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
|
- name: Cleanup to change key type
|
||||||
|
run: |
|
||||||
|
make keysclean
|
||||||
|
|
||||||
|
- name: Build wolfboot.elf (RSAPSS2048, FASTMATH)
|
||||||
|
run: |
|
||||||
|
make clean && make test-sim-internal-flash-with-update SIGN=RSAPSS2048 SPMATH=0
|
||||||
|
|
||||||
|
- name: Run sunny day update test
|
||||||
|
run: |
|
||||||
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
|
- name: Build wolfboot.elf (RSAPSS2048, FASTMATH, WOLFBOOT_SMALL_STACK)
|
||||||
|
run: |
|
||||||
|
make clean && make test-sim-internal-flash-with-update SIGN=RSAPSS2048 WOLFBOOT_SMALL_STACK=1 SPMATH=0
|
||||||
|
|
||||||
|
- name: Run sunny day update test
|
||||||
|
run: |
|
||||||
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
|
- name: Cleanup to change key type
|
||||||
|
run: |
|
||||||
|
make keysclean
|
||||||
|
|
||||||
|
- name: Build wolfboot.elf (RSAPSS3072, FASTMATH)
|
||||||
|
run: |
|
||||||
|
make clean && make test-sim-internal-flash-with-update SIGN=RSAPSS3072 SPMATH=0
|
||||||
|
|
||||||
|
- name: Run sunny day update test
|
||||||
|
run: |
|
||||||
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
|
- name: Build wolfboot.elf (RSAPSS3072, FASTMATH, WOLFBOOT_SMALL_STACK)
|
||||||
|
run: |
|
||||||
|
make clean && make test-sim-internal-flash-with-update SIGN=RSAPSS3072 WOLFBOOT_SMALL_STACK=1 SPMATH=0
|
||||||
|
|
||||||
|
- name: Run sunny day update test
|
||||||
|
run: |
|
||||||
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
|
- name: Cleanup to change key type
|
||||||
|
run: |
|
||||||
|
make keysclean
|
||||||
|
|
||||||
|
- name: Build wolfboot.elf (RSAPSS4096, FASTMATH)
|
||||||
|
run: |
|
||||||
|
make clean && make test-sim-internal-flash-with-update SIGN=RSAPSS4096 SPMATH=0 WOLFBOOT_HUGE_STACK=1
|
||||||
|
|
||||||
|
- name: Run sunny day update test
|
||||||
|
run: |
|
||||||
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
|
- name: Build wolfboot.elf (RSAPSS4096, FASTMATH, WOLFBOOT_SMALL_STACK)
|
||||||
|
run: |
|
||||||
|
make clean && make test-sim-internal-flash-with-update SIGN=RSAPSS4096 WOLFBOOT_SMALL_STACK=1 SPMATH=0
|
||||||
|
|
||||||
|
- name: Run sunny day update test
|
||||||
|
run: |
|
||||||
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
|
|
||||||
# 64 Bit simulator, SP_MATH
|
# 64 Bit simulator, SP_MATH
|
||||||
#
|
#
|
||||||
|
|
@ -460,6 +580,66 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
tools/scripts/sim-sunnyday-update.sh
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
|
- name: Cleanup to change key type
|
||||||
|
run: |
|
||||||
|
make keysclean
|
||||||
|
|
||||||
|
- name: Build wolfboot.elf (RSAPSS2048)
|
||||||
|
run: |
|
||||||
|
make clean && make test-sim-internal-flash-with-update SIGN=RSAPSS2048 SPMATH=1
|
||||||
|
|
||||||
|
- name: Run sunny day update test
|
||||||
|
run: |
|
||||||
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
|
- name: Build wolfboot.elf (RSAPSS2048, WOLFBOOT_SMALL_STACK)
|
||||||
|
run: |
|
||||||
|
make clean && make test-sim-internal-flash-with-update SIGN=RSAPSS2048 WOLFBOOT_SMALL_STACK=1 SPMATH=1
|
||||||
|
|
||||||
|
- name: Run sunny day update test
|
||||||
|
run: |
|
||||||
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
|
- name: Cleanup to change key type
|
||||||
|
run: |
|
||||||
|
make keysclean
|
||||||
|
|
||||||
|
- name: Build wolfboot.elf (RSAPSS3072)
|
||||||
|
run: |
|
||||||
|
make clean && make test-sim-internal-flash-with-update SIGN=RSAPSS3072 SPMATH=1
|
||||||
|
|
||||||
|
- name: Run sunny day update test
|
||||||
|
run: |
|
||||||
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
|
- name: Build wolfboot.elf (RSAPSS3072, WOLFBOOT_SMALL_STACK)
|
||||||
|
run: |
|
||||||
|
make clean && make test-sim-internal-flash-with-update SIGN=RSAPSS3072 WOLFBOOT_SMALL_STACK=1 SPMATH=1
|
||||||
|
|
||||||
|
- name: Run sunny day update test
|
||||||
|
run: |
|
||||||
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
|
- name: Cleanup to change key type
|
||||||
|
run: |
|
||||||
|
make keysclean
|
||||||
|
|
||||||
|
- name: Build wolfboot.elf (RSAPSS4096)
|
||||||
|
run: |
|
||||||
|
make clean && make test-sim-internal-flash-with-update SIGN=RSAPSS4096 SPMATH=1
|
||||||
|
|
||||||
|
- name: Run sunny day update test
|
||||||
|
run: |
|
||||||
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
|
- name: Build wolfboot.elf (RSAPSS4096, WOLFBOOT_SMALL_STACK)
|
||||||
|
run: |
|
||||||
|
make clean && make test-sim-internal-flash-with-update SIGN=RSAPSS4096 WOLFBOOT_SMALL_STACK=1 SPMATH=1
|
||||||
|
|
||||||
|
- name: Run sunny day update test
|
||||||
|
run: |
|
||||||
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
# 64 Bit simulator, FASTMATH
|
# 64 Bit simulator, FASTMATH
|
||||||
#
|
#
|
||||||
- name: make clean
|
- name: make clean
|
||||||
|
|
@ -590,6 +770,66 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
tools/scripts/sim-sunnyday-update.sh
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
|
- name: Cleanup to change key type
|
||||||
|
run: |
|
||||||
|
make keysclean
|
||||||
|
|
||||||
|
- name: Build wolfboot.elf (RSAPSS2048, FASTMATH)
|
||||||
|
run: |
|
||||||
|
make clean && make test-sim-internal-flash-with-update SIGN=RSAPSS2048 SPMATH=0
|
||||||
|
|
||||||
|
- name: Run sunny day update test
|
||||||
|
run: |
|
||||||
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
|
- name: Build wolfboot.elf (RSAPSS2048, FASTMATH, WOLFBOOT_SMALL_STACK)
|
||||||
|
run: |
|
||||||
|
make clean && make test-sim-internal-flash-with-update SIGN=RSAPSS2048 WOLFBOOT_SMALL_STACK=1 SPMATH=0
|
||||||
|
|
||||||
|
- name: Run sunny day update test
|
||||||
|
run: |
|
||||||
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
|
- name: Cleanup to change key type
|
||||||
|
run: |
|
||||||
|
make keysclean
|
||||||
|
|
||||||
|
- name: Build wolfboot.elf (RSAPSS3072, FASTMATH)
|
||||||
|
run: |
|
||||||
|
make clean && make test-sim-internal-flash-with-update SIGN=RSAPSS3072 SPMATH=0
|
||||||
|
|
||||||
|
- name: Run sunny day update test
|
||||||
|
run: |
|
||||||
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
|
- name: Build wolfboot.elf (RSAPSS3072, FASTMATH, WOLFBOOT_SMALL_STACK)
|
||||||
|
run: |
|
||||||
|
make clean && make test-sim-internal-flash-with-update SIGN=RSAPSS3072 WOLFBOOT_SMALL_STACK=1 SPMATH=0
|
||||||
|
|
||||||
|
- name: Run sunny day update test
|
||||||
|
run: |
|
||||||
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
|
- name: Cleanup to change key type
|
||||||
|
run: |
|
||||||
|
make keysclean
|
||||||
|
|
||||||
|
- name: Build wolfboot.elf (RSAPSS4096, FASTMATH)
|
||||||
|
run: |
|
||||||
|
make clean && make test-sim-internal-flash-with-update SIGN=RSAPSS4096 SPMATH=0 WOLFBOOT_HUGE_STACK=1
|
||||||
|
|
||||||
|
- name: Run sunny day update test
|
||||||
|
run: |
|
||||||
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
|
- name: Build wolfboot.elf (RSAPSS4096, FASTMATH, WOLFBOOT_SMALL_STACK)
|
||||||
|
run: |
|
||||||
|
make clean && make test-sim-internal-flash-with-update SIGN=RSAPSS4096 WOLFBOOT_SMALL_STACK=1 SPMATH=0
|
||||||
|
|
||||||
|
- name: Run sunny day update test
|
||||||
|
run: |
|
||||||
|
tools/scripts/sim-sunnyday-update.sh
|
||||||
|
|
||||||
- name: Run sunny day LMS update test
|
- name: Run sunny day LMS update test
|
||||||
run: |
|
run: |
|
||||||
tools/scripts/sim-pq-sunnyday-update.sh config/examples/sim-lms.config
|
tools/scripts/sim-pq-sunnyday-update.sh config/examples/sim-lms.config
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
ARCH=sim
|
||||||
|
TARGET=sim
|
||||||
|
SIGN?=RSAPSS2048
|
||||||
|
HASH?=SHA256
|
||||||
|
WOLFBOOT_SMALL_STACK?=0
|
||||||
|
SPI_FLASH=0
|
||||||
|
DEBUG=1
|
||||||
|
|
||||||
|
# sizes should be multiple of system page size
|
||||||
|
WOLFBOOT_PARTITION_SIZE=0x40000
|
||||||
|
WOLFBOOT_SECTOR_SIZE=0x1000
|
||||||
|
WOLFBOOT_PARTITION_BOOT_ADDRESS=0x80000
|
||||||
|
# if on external flash, it should be multiple of system page size
|
||||||
|
WOLFBOOT_PARTITION_UPDATE_ADDRESS=0x100000
|
||||||
|
WOLFBOOT_PARTITION_SWAP_ADDRESS=0x180000
|
||||||
|
|
||||||
|
# required for keytools
|
||||||
|
WOLFBOOT_FIXED_PARTITIONS=1
|
||||||
|
|
||||||
|
# For debugging XMALLOC/XFREE
|
||||||
|
#CFLAGS_EXTRA+=-DWOLFBOOT_DEBUG_MALLOC
|
||||||
|
|
@ -68,6 +68,11 @@ extern "C" {
|
||||||
defined (WOLFBOOT_SIGN_RSA4096ENC)
|
defined (WOLFBOOT_SIGN_RSA4096ENC)
|
||||||
#define wolfBoot_verify_signature_primary wolfBoot_verify_signature_rsa
|
#define wolfBoot_verify_signature_primary wolfBoot_verify_signature_rsa
|
||||||
#endif
|
#endif
|
||||||
|
#if defined (WOLFBOOT_SIGN_RSAPSS2048) || \
|
||||||
|
defined (WOLFBOOT_SIGN_RSAPSS3072) || \
|
||||||
|
defined (WOLFBOOT_SIGN_RSAPSS4096)
|
||||||
|
#define wolfBoot_verify_signature_primary wolfBoot_verify_signature_rsa_pss
|
||||||
|
#endif
|
||||||
#if defined (WOLFBOOT_SIGN_ECC256) || \
|
#if defined (WOLFBOOT_SIGN_ECC256) || \
|
||||||
defined (WOLFBOOT_SIGN_ECC384) || \
|
defined (WOLFBOOT_SIGN_ECC384) || \
|
||||||
defined (WOLFBOOT_SIGN_ECC521)
|
defined (WOLFBOOT_SIGN_ECC521)
|
||||||
|
|
@ -97,6 +102,11 @@ extern "C" {
|
||||||
defined (WOLFBOOT_SIGN_SECONDARY_RSA4096ENC)
|
defined (WOLFBOOT_SIGN_SECONDARY_RSA4096ENC)
|
||||||
#define wolfBoot_verify_signature_secondary wolfBoot_verify_signature_rsa
|
#define wolfBoot_verify_signature_secondary wolfBoot_verify_signature_rsa
|
||||||
#endif
|
#endif
|
||||||
|
#if defined (WOLFBOOT_SIGN_SECONDARY_RSAPSS2048) || \
|
||||||
|
defined (WOLFBOOT_SIGN_SECONDARY_RSAPSS3072) || \
|
||||||
|
defined (WOLFBOOT_SIGN_SECONDARY_RSAPSS4096)
|
||||||
|
#define wolfBoot_verify_signature_secondary wolfBoot_verify_signature_rsa_pss
|
||||||
|
#endif
|
||||||
#if defined (WOLFBOOT_SIGN_SECONDARY_ECC256) || \
|
#if defined (WOLFBOOT_SIGN_SECONDARY_ECC256) || \
|
||||||
defined (WOLFBOOT_SIGN_SECONDARY_ECC384) || \
|
defined (WOLFBOOT_SIGN_SECONDARY_ECC384) || \
|
||||||
defined (WOLFBOOT_SIGN_SECONDARY_ECC521)
|
defined (WOLFBOOT_SIGN_SECONDARY_ECC521)
|
||||||
|
|
|
||||||
|
|
@ -40,11 +40,14 @@ extern "C" {
|
||||||
#define ECC_IMAGE_SIGNATURE_SIZE (132)
|
#define ECC_IMAGE_SIGNATURE_SIZE (132)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(WOLFBOOT_SIGN_RSA2048) || defined(WOLFBOOT_SIGN_SECONDARY_RSA2048)
|
#if defined(WOLFBOOT_SIGN_RSA2048) || defined(WOLFBOOT_SIGN_SECONDARY_RSA2048) || \
|
||||||
|
defined(WOLFBOOT_SIGN_RSAPSS2048) || defined(WOLFBOOT_SIGN_SECONDARY_RSAPSS2048)
|
||||||
#define RSA_IMAGE_SIGNATURE_SIZE (256)
|
#define RSA_IMAGE_SIGNATURE_SIZE (256)
|
||||||
#elif defined(WOLFBOOT_SIGN_RSA3072) || defined(WOLFBOOT_SIGN_SECONDARY_RSA3072)
|
#elif defined(WOLFBOOT_SIGN_RSA3072) || defined(WOLFBOOT_SIGN_SECONDARY_RSA3072) || \
|
||||||
|
defined(WOLFBOOT_SIGN_RSAPSS3072) || defined(WOLFBOOT_SIGN_SECONDARY_RSAPSS3072)
|
||||||
#define RSA_IMAGE_SIGNATURE_SIZE (384)
|
#define RSA_IMAGE_SIGNATURE_SIZE (384)
|
||||||
#elif defined(WOLFBOOT_SIGN_RSA4096) || defined(WOLFBOOT_SIGN_SECONDARY_RSA4096)
|
#elif defined(WOLFBOOT_SIGN_RSA4096) || defined(WOLFBOOT_SIGN_SECONDARY_RSA4096) || \
|
||||||
|
defined(WOLFBOOT_SIGN_RSAPSS4096) || defined(WOLFBOOT_SIGN_SECONDARY_RSAPSS4096)
|
||||||
#define RSA_IMAGE_SIGNATURE_SIZE (512)
|
#define RSA_IMAGE_SIGNATURE_SIZE (512)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -222,12 +222,25 @@ extern int tolower(int c);
|
||||||
defined(WOLFBOOT_SIGN_SECONDARY_RSA2048) || \
|
defined(WOLFBOOT_SIGN_SECONDARY_RSA2048) || \
|
||||||
defined(WOLFBOOT_SIGN_SECONDARY_RSA3072) || \
|
defined(WOLFBOOT_SIGN_SECONDARY_RSA3072) || \
|
||||||
defined(WOLFBOOT_SIGN_SECONDARY_RSA4096) || \
|
defined(WOLFBOOT_SIGN_SECONDARY_RSA4096) || \
|
||||||
|
defined(WOLFBOOT_SIGN_RSAPSS2048) || \
|
||||||
|
defined(WOLFBOOT_SIGN_RSAPSS3072) || \
|
||||||
|
defined(WOLFBOOT_SIGN_RSAPSS4096) || \
|
||||||
|
defined(WOLFBOOT_SIGN_SECONDARY_RSAPSS2048) || \
|
||||||
|
defined(WOLFBOOT_SIGN_SECONDARY_RSAPSS3072) || \
|
||||||
|
defined(WOLFBOOT_SIGN_SECONDARY_RSAPSS4096) || \
|
||||||
(defined(WOLFCRYPT_SECURE_MODE) && (!defined(PKCS11_SMALL)))
|
(defined(WOLFCRYPT_SECURE_MODE) && (!defined(PKCS11_SMALL)))
|
||||||
|
|
||||||
# define WC_RSA_BLINDING
|
# define WC_RSA_BLINDING
|
||||||
# define WC_RSA_DIRECT
|
# define WC_RSA_DIRECT
|
||||||
# define RSA_LOW_MEM
|
# define RSA_LOW_MEM
|
||||||
# define WC_ASN_HASH_SHA256
|
# define WC_ASN_HASH_SHA256
|
||||||
|
# if defined(WOLFBOOT_SIGN_RSAPSS2048) || defined(WOLFBOOT_SIGN_RSAPSS3072) || \
|
||||||
|
defined(WOLFBOOT_SIGN_RSAPSS4096) || \
|
||||||
|
defined(WOLFBOOT_SIGN_SECONDARY_RSAPSS2048) || \
|
||||||
|
defined(WOLFBOOT_SIGN_SECONDARY_RSAPSS3072) || \
|
||||||
|
defined(WOLFBOOT_SIGN_SECONDARY_RSAPSS4096)
|
||||||
|
# define WC_RSA_PSS
|
||||||
|
# endif
|
||||||
# if !defined(WOLFBOOT_TPM) && !defined(WOLFCRYPT_SECURE_MODE) && \
|
# if !defined(WOLFBOOT_TPM) && !defined(WOLFCRYPT_SECURE_MODE) && \
|
||||||
!defined(WOLFCRYPT_TEST) && !defined(WOLFCRYPT_BENCHMARK) && \
|
!defined(WOLFCRYPT_TEST) && !defined(WOLFCRYPT_BENCHMARK) && \
|
||||||
!defined(WOLFBOOT_ENABLE_WOLFHSM_CLIENT) && \
|
!defined(WOLFBOOT_ENABLE_WOLFHSM_CLIENT) && \
|
||||||
|
|
@ -235,7 +248,9 @@ extern int tolower(int c);
|
||||||
# define WOLFSSL_RSA_VERIFY_INLINE
|
# define WOLFSSL_RSA_VERIFY_INLINE
|
||||||
# define WOLFSSL_RSA_VERIFY_ONLY
|
# define WOLFSSL_RSA_VERIFY_ONLY
|
||||||
# define WOLFSSL_RSA_PUBLIC_ONLY
|
# define WOLFSSL_RSA_PUBLIC_ONLY
|
||||||
# define WC_NO_RSA_OAEP
|
# if !defined(WC_RSA_PSS)
|
||||||
|
# define WC_NO_RSA_OAEP
|
||||||
|
# endif
|
||||||
# define NO_RSA_BOUNDS_CHECK
|
# define NO_RSA_BOUNDS_CHECK
|
||||||
# endif
|
# endif
|
||||||
# if !defined(USE_FAST_MATH) && !defined(WOLFSSL_SP_MATH_ALL)
|
# if !defined(USE_FAST_MATH) && !defined(WOLFSSL_SP_MATH_ALL)
|
||||||
|
|
@ -244,7 +259,8 @@ extern int tolower(int c);
|
||||||
# define WOLFSSL_SP_SMALL
|
# define WOLFSSL_SP_SMALL
|
||||||
# define WOLFSSL_SP_MATH
|
# define WOLFSSL_SP_MATH
|
||||||
# endif
|
# endif
|
||||||
# if defined(WOLFBOOT_SIGN_RSA2048) || defined(WOLFBOOT_SIGN_SECONDARY_RSA2048)
|
# if defined(WOLFBOOT_SIGN_RSA2048) || defined(WOLFBOOT_SIGN_SECONDARY_RSA2048) || \
|
||||||
|
defined(WOLFBOOT_SIGN_RSAPSS2048) || defined(WOLFBOOT_SIGN_SECONDARY_RSAPSS2048)
|
||||||
# define FP_MAX_BITS (2048 * 2)
|
# define FP_MAX_BITS (2048 * 2)
|
||||||
# define SP_INT_BITS 2048
|
# define SP_INT_BITS 2048
|
||||||
# define WOLFSSL_SP_NO_3072
|
# define WOLFSSL_SP_NO_3072
|
||||||
|
|
@ -253,7 +269,8 @@ extern int tolower(int c);
|
||||||
# define RSA_MIN_SIZE 2048
|
# define RSA_MIN_SIZE 2048
|
||||||
# define RSA_MAX_SIZE 2048
|
# define RSA_MAX_SIZE 2048
|
||||||
# endif
|
# endif
|
||||||
# if defined(WOLFBOOT_SIGN_RSA3072) || defined(WOLFBOOT_SIGN_SECONDARY_RSA3072)
|
# if defined(WOLFBOOT_SIGN_RSA3072) || defined(WOLFBOOT_SIGN_SECONDARY_RSA3072) || \
|
||||||
|
defined(WOLFBOOT_SIGN_RSAPSS3072) || defined(WOLFBOOT_SIGN_SECONDARY_RSAPSS3072)
|
||||||
# define FP_MAX_BITS (3072 * 2)
|
# define FP_MAX_BITS (3072 * 2)
|
||||||
# define SP_INT_BITS 3072
|
# define SP_INT_BITS 3072
|
||||||
# define WOLFSSL_SP_NO_2048
|
# define WOLFSSL_SP_NO_2048
|
||||||
|
|
@ -263,7 +280,8 @@ extern int tolower(int c);
|
||||||
# define RSA_MAX_SIZE 3072
|
# define RSA_MAX_SIZE 3072
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# if defined(WOLFBOOT_SIGN_RSA4096) || defined(WOLFBOOT_SIGN_SECONDARY_RSA4096)
|
# if defined(WOLFBOOT_SIGN_RSA4096) || defined(WOLFBOOT_SIGN_SECONDARY_RSA4096) || \
|
||||||
|
defined(WOLFBOOT_SIGN_RSAPSS4096) || defined(WOLFBOOT_SIGN_SECONDARY_RSAPSS4096)
|
||||||
# define FP_MAX_BITS (4096 * 2)
|
# define FP_MAX_BITS (4096 * 2)
|
||||||
# define SP_INT_BITS 4096
|
# define SP_INT_BITS 4096
|
||||||
# define WOLFSSL_SP_NO_2048
|
# define WOLFSSL_SP_NO_2048
|
||||||
|
|
|
||||||
|
|
@ -126,16 +126,16 @@ extern "C" {
|
||||||
|
|
||||||
#ifndef IMAGE_HEADER_SIZE
|
#ifndef IMAGE_HEADER_SIZE
|
||||||
/* Largest cases first */
|
/* Largest cases first */
|
||||||
# if defined(WOLFBOOT_SIGN_RSA4096)
|
# if defined(WOLFBOOT_SIGN_RSA4096) || defined(WOLFBOOT_SIGN_RSAPSS4096)
|
||||||
# define IMAGE_HEADER_SIZE 1024
|
# define IMAGE_HEADER_SIZE 1024
|
||||||
|
|
||||||
/* RSA3072 + strong hash */
|
/* RSA3072/RSAPSS3072 + strong hash */
|
||||||
# elif (defined(WOLFBOOT_SIGN_RSA3072) && \
|
# elif ((defined(WOLFBOOT_SIGN_RSA3072) || defined(WOLFBOOT_SIGN_RSAPSS3072)) && \
|
||||||
(defined(WOLFBOOT_HASH_SHA384) || defined(WOLFBOOT_HASH_SHA3_384)))
|
(defined(WOLFBOOT_HASH_SHA384) || defined(WOLFBOOT_HASH_SHA3_384)))
|
||||||
# define IMAGE_HEADER_SIZE 1024
|
# define IMAGE_HEADER_SIZE 1024
|
||||||
|
|
||||||
/* RSA2048 + SHA256 */
|
/* RSA2048/RSAPSS2048 + SHA256 */
|
||||||
# elif defined(WOLFBOOT_SIGN_RSA2048) && defined(WOLFBOOT_HASH_SHA256)
|
# elif (defined(WOLFBOOT_SIGN_RSA2048) || defined(WOLFBOOT_SIGN_RSAPSS2048)) && defined(WOLFBOOT_HASH_SHA256)
|
||||||
# define IMAGE_HEADER_SIZE 512
|
# define IMAGE_HEADER_SIZE 512
|
||||||
|
|
||||||
/* ECC384 requires 512 with SHA256 */
|
/* ECC384 requires 512 with SHA256 */
|
||||||
|
|
@ -155,7 +155,7 @@ extern "C" {
|
||||||
# define IMAGE_HEADER_SIZE 256
|
# define IMAGE_HEADER_SIZE 256
|
||||||
|
|
||||||
/* Secondary 512-byte fallbacks */
|
/* Secondary 512-byte fallbacks */
|
||||||
# elif defined(WOLFBOOT_SIGN_RSA3072) || \
|
# elif defined(WOLFBOOT_SIGN_RSA3072) || defined(WOLFBOOT_SIGN_RSAPSS3072) || \
|
||||||
defined(WOLFBOOT_SIGN_ECC521) || \
|
defined(WOLFBOOT_SIGN_ECC521) || \
|
||||||
defined(WOLFBOOT_SIGN_ED448) || \
|
defined(WOLFBOOT_SIGN_ED448) || \
|
||||||
defined(WOLFBOOT_HASH_SHA384) || \
|
defined(WOLFBOOT_HASH_SHA384) || \
|
||||||
|
|
@ -248,9 +248,12 @@ extern "C" {
|
||||||
#define AUTH_KEY_ECC521 0x07
|
#define AUTH_KEY_ECC521 0x07
|
||||||
#define AUTH_KEY_RSA3072 0x08
|
#define AUTH_KEY_RSA3072 0x08
|
||||||
#define AUTH_KEY_LMS 0x09
|
#define AUTH_KEY_LMS 0x09
|
||||||
#define AUTH_KEY_XMSS 0x0A
|
#define AUTH_KEY_XMSS 0x0A
|
||||||
#define AUTH_KEY_ML_DSA 0x0B
|
#define AUTH_KEY_ML_DSA 0x0B
|
||||||
#define AUTH_KEY_NUM 0x0C
|
#define AUTH_KEY_RSAPSS2048 0x0C
|
||||||
|
#define AUTH_KEY_RSAPSS3072 0x0D
|
||||||
|
#define AUTH_KEY_RSAPSS4096 0x0E
|
||||||
|
#define AUTH_KEY_NUM 0x0F
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 8 bits: auth type
|
* 8 bits: auth type
|
||||||
|
|
@ -271,6 +274,9 @@ extern "C" {
|
||||||
#define HDR_IMG_TYPE_AUTH_LMS (AUTH_KEY_LMS << 8)
|
#define HDR_IMG_TYPE_AUTH_LMS (AUTH_KEY_LMS << 8)
|
||||||
#define HDR_IMG_TYPE_AUTH_XMSS (AUTH_KEY_XMSS << 8)
|
#define HDR_IMG_TYPE_AUTH_XMSS (AUTH_KEY_XMSS << 8)
|
||||||
#define HDR_IMG_TYPE_AUTH_ML_DSA (AUTH_KEY_ML_DSA << 8)
|
#define HDR_IMG_TYPE_AUTH_ML_DSA (AUTH_KEY_ML_DSA << 8)
|
||||||
|
#define HDR_IMG_TYPE_AUTH_RSAPSS2048 (AUTH_KEY_RSAPSS2048 << 8)
|
||||||
|
#define HDR_IMG_TYPE_AUTH_RSAPSS3072 (AUTH_KEY_RSAPSS3072 << 8)
|
||||||
|
#define HDR_IMG_TYPE_AUTH_RSAPSS4096 (AUTH_KEY_RSAPSS4096 << 8)
|
||||||
|
|
||||||
#define HDR_IMG_TYPE_DIFF 0x00D0
|
#define HDR_IMG_TYPE_DIFF 0x00D0
|
||||||
|
|
||||||
|
|
@ -289,6 +295,9 @@ extern "C" {
|
||||||
#define KEYSTORE_PUBKEY_SIZE_RSA2048 320
|
#define KEYSTORE_PUBKEY_SIZE_RSA2048 320
|
||||||
#define KEYSTORE_PUBKEY_SIZE_RSA3072 448
|
#define KEYSTORE_PUBKEY_SIZE_RSA3072 448
|
||||||
#define KEYSTORE_PUBKEY_SIZE_RSA4096 576
|
#define KEYSTORE_PUBKEY_SIZE_RSA4096 576
|
||||||
|
#define KEYSTORE_PUBKEY_SIZE_RSAPSS2048 KEYSTORE_PUBKEY_SIZE_RSA2048
|
||||||
|
#define KEYSTORE_PUBKEY_SIZE_RSAPSS3072 KEYSTORE_PUBKEY_SIZE_RSA3072
|
||||||
|
#define KEYSTORE_PUBKEY_SIZE_RSAPSS4096 KEYSTORE_PUBKEY_SIZE_RSA4096
|
||||||
#define KEYSTORE_PUBKEY_SIZE_LMS 60
|
#define KEYSTORE_PUBKEY_SIZE_LMS 60
|
||||||
#define KEYSTORE_PUBKEY_SIZE_XMSS 68
|
#define KEYSTORE_PUBKEY_SIZE_XMSS 68
|
||||||
|
|
||||||
|
|
@ -463,6 +472,21 @@ extern "C" {
|
||||||
# ifndef WOLFBOOT_UNIVERSAL_KEYSTORE
|
# ifndef WOLFBOOT_UNIVERSAL_KEYSTORE
|
||||||
# define KEYSTORE_PUBKEY_SIZE KEYSTORE_PUBKEY_SIZE_RSA4096
|
# define KEYSTORE_PUBKEY_SIZE KEYSTORE_PUBKEY_SIZE_RSA4096
|
||||||
# endif
|
# endif
|
||||||
|
#elif defined(WOLFBOOT_SIGN_RSAPSS2048)
|
||||||
|
# define HDR_IMG_TYPE_AUTH HDR_IMG_TYPE_AUTH_RSAPSS2048
|
||||||
|
# ifndef WOLFBOOT_UNIVERSAL_KEYSTORE
|
||||||
|
# define KEYSTORE_PUBKEY_SIZE KEYSTORE_PUBKEY_SIZE_RSA2048
|
||||||
|
# endif
|
||||||
|
#elif defined(WOLFBOOT_SIGN_RSAPSS3072)
|
||||||
|
# define HDR_IMG_TYPE_AUTH HDR_IMG_TYPE_AUTH_RSAPSS3072
|
||||||
|
# ifndef WOLFBOOT_UNIVERSAL_KEYSTORE
|
||||||
|
# define KEYSTORE_PUBKEY_SIZE KEYSTORE_PUBKEY_SIZE_RSA3072
|
||||||
|
# endif
|
||||||
|
#elif defined(WOLFBOOT_SIGN_RSAPSS4096)
|
||||||
|
# define HDR_IMG_TYPE_AUTH HDR_IMG_TYPE_AUTH_RSAPSS4096
|
||||||
|
# ifndef WOLFBOOT_UNIVERSAL_KEYSTORE
|
||||||
|
# define KEYSTORE_PUBKEY_SIZE KEYSTORE_PUBKEY_SIZE_RSA4096
|
||||||
|
# endif
|
||||||
#elif defined(WOLFBOOT_SIGN_LMS)
|
#elif defined(WOLFBOOT_SIGN_LMS)
|
||||||
# define HDR_IMG_TYPE_AUTH HDR_IMG_TYPE_AUTH_LMS
|
# define HDR_IMG_TYPE_AUTH HDR_IMG_TYPE_AUTH_LMS
|
||||||
# ifndef WOLFBOOT_UNIVERSAL_KEYSTORE
|
# ifndef WOLFBOOT_UNIVERSAL_KEYSTORE
|
||||||
|
|
|
||||||
108
options.mk
108
options.mk
|
|
@ -305,6 +305,98 @@ ifeq ($(SIGN),ED448)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(SIGN),RSAPSS2048)
|
||||||
|
KEYGEN_OPTIONS+=--rsapss2048
|
||||||
|
SIGN_OPTIONS+=--rsapss2048
|
||||||
|
SIGN_ALG=RSAPSS2048
|
||||||
|
WOLFCRYPT_OBJS+= $(RSA_OBJS)
|
||||||
|
WOLFCRYPT_OBJS+=$(MATH_OBJS)
|
||||||
|
CFLAGS+=-D"WOLFBOOT_SIGN_RSAPSS2048" $(RSA_EXTRA_CFLAGS)
|
||||||
|
ifeq ($(WOLFBOOT_SMALL_STACK),1)
|
||||||
|
ifneq ($(SPMATH),1)
|
||||||
|
STACK_USAGE=5008
|
||||||
|
else
|
||||||
|
STACK_USAGE=4096
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
ifeq ($(WOLFTPM),1)
|
||||||
|
STACK_USAGE=$(STACK_USAGE_WOLFTPM)
|
||||||
|
else
|
||||||
|
ifneq ($(SPMATH),1)
|
||||||
|
STACK_USAGE=35952
|
||||||
|
else
|
||||||
|
STACK_USAGE=17568
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
ifeq ($(shell test $(IMAGE_HEADER_SIZE) -lt 512; echo $$?),0)
|
||||||
|
IMAGE_HEADER_SIZE=512
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(SIGN),RSAPSS3072)
|
||||||
|
KEYGEN_OPTIONS+=--rsapss3072
|
||||||
|
SIGN_OPTIONS+=--rsapss3072
|
||||||
|
SIGN_ALG=RSAPSS3072
|
||||||
|
WOLFCRYPT_OBJS+= $(RSA_OBJS)
|
||||||
|
WOLFCRYPT_OBJS+=$(MATH_OBJS)
|
||||||
|
CFLAGS+=-D"WOLFBOOT_SIGN_RSAPSS3072" $(RSA_EXTRA_CFLAGS)
|
||||||
|
ifeq ($(WOLFBOOT_SMALL_STACK),1)
|
||||||
|
ifneq ($(SPMATH),1)
|
||||||
|
STACK_USAGE=5008
|
||||||
|
else
|
||||||
|
STACK_USAGE=4364
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
ifeq ($(WOLFTPM),1)
|
||||||
|
STACK_USAGE=$(STACK_USAGE_WOLFTPM)
|
||||||
|
else
|
||||||
|
ifneq ($(SPMATH),1)
|
||||||
|
STACK_USAGE=52592
|
||||||
|
else
|
||||||
|
STACK_USAGE=12288
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
ifneq ($(HASH),SHA256)
|
||||||
|
ifeq ($(shell test $(IMAGE_HEADER_SIZE) -lt 1024; echo $$?),0)
|
||||||
|
IMAGE_HEADER_SIZE=1024
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
ifeq ($(shell test $(IMAGE_HEADER_SIZE) -lt 512; echo $$?),0)
|
||||||
|
IMAGE_HEADER_SIZE=512
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(SIGN),RSAPSS4096)
|
||||||
|
KEYGEN_OPTIONS+=--rsapss4096
|
||||||
|
SIGN_OPTIONS+=--rsapss4096
|
||||||
|
SIGN_ALG=RSAPSS4096
|
||||||
|
WOLFCRYPT_OBJS+= $(RSA_OBJS)
|
||||||
|
WOLFCRYPT_OBJS+=$(MATH_OBJS)
|
||||||
|
CFLAGS+=-D"WOLFBOOT_SIGN_RSAPSS4096" $(RSA_EXTRA_CFLAGS)
|
||||||
|
ifeq ($(WOLFBOOT_SMALL_STACK),1)
|
||||||
|
ifneq ($(SPMATH),1)
|
||||||
|
STACK_USAGE=5888
|
||||||
|
else
|
||||||
|
STACK_USAGE=5768
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
ifeq ($(WOLFTPM),1)
|
||||||
|
STACK_USAGE=$(STACK_USAGE_WOLFTPM)
|
||||||
|
else
|
||||||
|
ifneq ($(SPMATH),1)
|
||||||
|
STACK_USAGE=69232
|
||||||
|
else
|
||||||
|
STACK_USAGE=18064
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
ifeq ($(shell test $(IMAGE_HEADER_SIZE) -lt 1024; echo $$?),0)
|
||||||
|
IMAGE_HEADER_SIZE=1024
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
ifneq ($(findstring RSA2048,$(SIGN)),)
|
ifneq ($(findstring RSA2048,$(SIGN)),)
|
||||||
KEYGEN_OPTIONS+=--rsa2048
|
KEYGEN_OPTIONS+=--rsa2048
|
||||||
ifeq ($(SIGN),RSA2048ENC)
|
ifeq ($(SIGN),RSA2048ENC)
|
||||||
|
|
@ -367,7 +459,9 @@ ifneq ($(findstring RSA3072,$(SIGN)),)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
ifneq ($(HASH),SHA256)
|
ifneq ($(HASH),SHA256)
|
||||||
IMAGE_HEADER_SIZE=1024
|
ifeq ($(shell test $(IMAGE_HEADER_SIZE) -lt 1024; echo $$?),0)
|
||||||
|
IMAGE_HEADER_SIZE=1024
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
ifeq ($(shell test $(IMAGE_HEADER_SIZE) -lt 512; echo $$?),0)
|
ifeq ($(shell test $(IMAGE_HEADER_SIZE) -lt 512; echo $$?),0)
|
||||||
IMAGE_HEADER_SIZE=512
|
IMAGE_HEADER_SIZE=512
|
||||||
|
|
@ -510,6 +604,18 @@ ifneq ($(SIGN_SECONDARY),)
|
||||||
WOLFCRYPT_OBJS+=$(RSA_OBJS)
|
WOLFCRYPT_OBJS+=$(RSA_OBJS)
|
||||||
WOLFCRYPT_OBJS+=$(MATH_OBJS)
|
WOLFCRYPT_OBJS+=$(MATH_OBJS)
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(SIGN_SECONDARY),RSAPSS2048)
|
||||||
|
WOLFCRYPT_OBJS+=$(RSA_OBJS)
|
||||||
|
WOLFCRYPT_OBJS+=$(MATH_OBJS)
|
||||||
|
endif
|
||||||
|
ifeq ($(SIGN_SECONDARY),RSAPSS3072)
|
||||||
|
WOLFCRYPT_OBJS+=$(RSA_OBJS)
|
||||||
|
WOLFCRYPT_OBJS+=$(MATH_OBJS)
|
||||||
|
endif
|
||||||
|
ifeq ($(SIGN_SECONDARY),RSAPSS4096)
|
||||||
|
WOLFCRYPT_OBJS+=$(RSA_OBJS)
|
||||||
|
WOLFCRYPT_OBJS+=$(MATH_OBJS)
|
||||||
|
endif
|
||||||
ifeq ($(SIGN_SECONDARY),ECC256)
|
ifeq ($(SIGN_SECONDARY),ECC256)
|
||||||
WOLFCRYPT_OBJS+=$(ECC_OBJS)
|
WOLFCRYPT_OBJS+=$(ECC_OBJS)
|
||||||
WOLFCRYPT_OBJS+=$(MATH_OBJS)
|
WOLFCRYPT_OBJS+=$(MATH_OBJS)
|
||||||
|
|
|
||||||
86
src/image.c
86
src/image.c
|
|
@ -364,7 +364,13 @@ static void wolfBoot_verify_signature_ecc(uint8_t key_slot,
|
||||||
defined(WOLFBOOT_SIGN_RSA4096) || \
|
defined(WOLFBOOT_SIGN_RSA4096) || \
|
||||||
defined(WOLFBOOT_SIGN_SECONDARY_RSA2048) || \
|
defined(WOLFBOOT_SIGN_SECONDARY_RSA2048) || \
|
||||||
defined(WOLFBOOT_SIGN_SECONDARY_RSA3072) || \
|
defined(WOLFBOOT_SIGN_SECONDARY_RSA3072) || \
|
||||||
defined(WOLFBOOT_SIGN_SECONDARY_RSA4096)
|
defined(WOLFBOOT_SIGN_SECONDARY_RSA4096) || \
|
||||||
|
defined(WOLFBOOT_SIGN_RSAPSS2048) || \
|
||||||
|
defined(WOLFBOOT_SIGN_RSAPSS3072) || \
|
||||||
|
defined(WOLFBOOT_SIGN_RSAPSS4096) || \
|
||||||
|
defined(WOLFBOOT_SIGN_SECONDARY_RSAPSS2048) || \
|
||||||
|
defined(WOLFBOOT_SIGN_SECONDARY_RSAPSS3072) || \
|
||||||
|
defined(WOLFBOOT_SIGN_SECONDARY_RSAPSS4096)
|
||||||
|
|
||||||
#include <wolfssl/wolfcrypt/asn.h>
|
#include <wolfssl/wolfcrypt/asn.h>
|
||||||
#include <wolfssl/wolfcrypt/rsa.h>
|
#include <wolfssl/wolfcrypt/rsa.h>
|
||||||
|
|
@ -562,6 +568,74 @@ static void wolfBoot_verify_signature_rsa(uint8_t key_slot,
|
||||||
* WOLFBOOT_SIGN_RSA4096 || WOLFBOOT_SIGN_SECONDARY_RSA2048 ||
|
* WOLFBOOT_SIGN_RSA4096 || WOLFBOOT_SIGN_SECONDARY_RSA2048 ||
|
||||||
* WOLFBOOT_SIGN_SECONDARY_RSA3072 || WOLFBOOT_SIGN_SECONDARY_RSA4096 */
|
* WOLFBOOT_SIGN_SECONDARY_RSA3072 || WOLFBOOT_SIGN_SECONDARY_RSA4096 */
|
||||||
|
|
||||||
|
#if defined(WOLFBOOT_SIGN_RSAPSS2048) || \
|
||||||
|
defined(WOLFBOOT_SIGN_RSAPSS3072) || \
|
||||||
|
defined(WOLFBOOT_SIGN_RSAPSS4096) || \
|
||||||
|
defined(WOLFBOOT_SIGN_SECONDARY_RSAPSS2048) || \
|
||||||
|
defined(WOLFBOOT_SIGN_SECONDARY_RSAPSS3072) || \
|
||||||
|
defined(WOLFBOOT_SIGN_SECONDARY_RSAPSS4096)
|
||||||
|
|
||||||
|
static void wolfBoot_verify_signature_rsa_pss(uint8_t key_slot,
|
||||||
|
struct wolfBoot_image *img, uint8_t *sig)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
uint8_t output[RSA_IMAGE_SIGNATURE_SIZE];
|
||||||
|
uint8_t* digest_out = NULL;
|
||||||
|
word32 inOutIdx = 0;
|
||||||
|
struct RsaKey rsa;
|
||||||
|
|
||||||
|
#if defined(WOLFBOOT_HASH_SHA256)
|
||||||
|
enum wc_HashType hash_type = WC_HASH_TYPE_SHA256;
|
||||||
|
int mgf = WC_MGF1SHA256;
|
||||||
|
#elif defined(WOLFBOOT_HASH_SHA384)
|
||||||
|
enum wc_HashType hash_type = WC_HASH_TYPE_SHA384;
|
||||||
|
int mgf = WC_MGF1SHA384;
|
||||||
|
#else
|
||||||
|
#error "RSA-PSS requires SHA-256 or SHA-384"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uint8_t *pubkey = keystore_get_buffer(key_slot);
|
||||||
|
int pubkey_sz = keystore_get_size(key_slot);
|
||||||
|
|
||||||
|
if (pubkey == NULL || pubkey_sz < 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* wolfCrypt software RSA-PSS verify */
|
||||||
|
ret = wc_InitRsaKey(&rsa, NULL);
|
||||||
|
if (ret == 0) {
|
||||||
|
/* Import public key */
|
||||||
|
ret = wc_RsaPublicKeyDecode((byte*)pubkey, &inOutIdx, &rsa, pubkey_sz);
|
||||||
|
if (ret >= 0) {
|
||||||
|
XMEMCPY(output, sig, RSA_IMAGE_SIGNATURE_SIZE);
|
||||||
|
RSA_VERIFY_FN(ret,
|
||||||
|
wc_RsaPSS_VerifyCheckInline, output, RSA_IMAGE_SIGNATURE_SIZE,
|
||||||
|
&digest_out, img->sha_hash, WOLFBOOT_SHA_DIGEST_SIZE,
|
||||||
|
hash_type, mgf, &rsa);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
wc_FreeRsaKey(&rsa);
|
||||||
|
/* wc_RsaPSS_VerifyCheckInline returns the PSS-verified data length on
|
||||||
|
* success (>= digest size), or a negative error code on failure.
|
||||||
|
* The hash comparison is performed internally by the function.
|
||||||
|
*
|
||||||
|
* Note: uses '>=' rather than '==' because PSS verify returns the digest
|
||||||
|
* size on success, unlike PKCS#1 v1.5 which returns exact decoded length.
|
||||||
|
*
|
||||||
|
* ARMORED limitation: the PKCS#1 v1.5 path uses both RSA_VERIFY_FN and
|
||||||
|
* RSA_VERIFY_HASH armored macros (two hardened gates), but PSS only uses
|
||||||
|
* RSA_VERIFY_FN because wc_RsaPSS_VerifyCheckInline performs the hash
|
||||||
|
* comparison internally. The branch below is not armored. Full armored
|
||||||
|
* hardening for PSS would require a new macro or restructuring. */
|
||||||
|
if (ret >= WOLFBOOT_SHA_DIGEST_SIZE && img) {
|
||||||
|
wolfBoot_image_confirm_signature_ok(img);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* WOLFBOOT_SIGN_RSAPSS2048 || WOLFBOOT_SIGN_RSAPSS3072 || \
|
||||||
|
* WOLFBOOT_SIGN_RSAPSS4096 || WOLFBOOT_SIGN_SECONDARY_RSAPSS2048 || \
|
||||||
|
* WOLFBOOT_SIGN_SECONDARY_RSAPSS3072 || WOLFBOOT_SIGN_SECONDARY_RSAPSS4096 */
|
||||||
|
|
||||||
#ifdef WOLFBOOT_SIGN_LMS
|
#ifdef WOLFBOOT_SIGN_LMS
|
||||||
#include <wolfssl/wolfcrypt/lms.h>
|
#include <wolfssl/wolfcrypt/lms.h>
|
||||||
#ifdef HAVE_LIBLMS
|
#ifdef HAVE_LIBLMS
|
||||||
|
|
@ -2356,7 +2430,10 @@ int wolfBoot_verify_authenticity(struct wolfBoot_image *img)
|
||||||
defined (WOLFBOOT_SIGN_RSA4096) || \
|
defined (WOLFBOOT_SIGN_RSA4096) || \
|
||||||
defined (WOLFBOOT_SIGN_RSA2048ENC) || \
|
defined (WOLFBOOT_SIGN_RSA2048ENC) || \
|
||||||
defined (WOLFBOOT_SIGN_RSA3072ENC) || \
|
defined (WOLFBOOT_SIGN_RSA3072ENC) || \
|
||||||
defined (WOLFBOOT_SIGN_RSA4096ENC)
|
defined (WOLFBOOT_SIGN_RSA4096ENC) || \
|
||||||
|
defined (WOLFBOOT_SIGN_RSAPSS2048) || \
|
||||||
|
defined (WOLFBOOT_SIGN_RSAPSS3072) || \
|
||||||
|
defined (WOLFBOOT_SIGN_RSAPSS4096)
|
||||||
if (stored_signature_size != RSA_IMAGE_SIGNATURE_SIZE)
|
if (stored_signature_size != RSA_IMAGE_SIGNATURE_SIZE)
|
||||||
return -1;
|
return -1;
|
||||||
#elif defined (WOLFBOOT_SIGN_ECC256) || \
|
#elif defined (WOLFBOOT_SIGN_ECC256) || \
|
||||||
|
|
@ -2428,7 +2505,10 @@ int wolfBoot_verify_authenticity(struct wolfBoot_image *img)
|
||||||
defined (WOLFBOOT_SIGN_SECONDARY_RSA4096) || \
|
defined (WOLFBOOT_SIGN_SECONDARY_RSA4096) || \
|
||||||
defined (WOLFBOOT_SIGN_SECONDARY_RSA2048ENC) || \
|
defined (WOLFBOOT_SIGN_SECONDARY_RSA2048ENC) || \
|
||||||
defined (WOLFBOOT_SIGN_SECONDARY_RSA3072ENC) || \
|
defined (WOLFBOOT_SIGN_SECONDARY_RSA3072ENC) || \
|
||||||
defined (WOLFBOOT_SIGN_SECONDARY_RSA4096ENC)
|
defined (WOLFBOOT_SIGN_SECONDARY_RSA4096ENC) || \
|
||||||
|
defined (WOLFBOOT_SIGN_SECONDARY_RSAPSS2048) || \
|
||||||
|
defined (WOLFBOOT_SIGN_SECONDARY_RSAPSS3072) || \
|
||||||
|
defined (WOLFBOOT_SIGN_SECONDARY_RSAPSS4096)
|
||||||
expected_secondary_signature_size = RSA_IMAGE_SIGNATURE_SIZE;
|
expected_secondary_signature_size = RSA_IMAGE_SIGNATURE_SIZE;
|
||||||
#elif defined (WOLFBOOT_SIGN_SECONDARY_ECC256) || \
|
#elif defined (WOLFBOOT_SIGN_SECONDARY_ECC256) || \
|
||||||
defined (WOLFBOOT_SIGN_SECONDARY_ECC384) || \
|
defined (WOLFBOOT_SIGN_SECONDARY_ECC384) || \
|
||||||
|
|
|
||||||
|
|
@ -336,7 +336,9 @@ static struct xmalloc_slot xmalloc_pool[] = {
|
||||||
|
|
||||||
|
|
||||||
#elif defined(WOLFBOOT_SIGN_RSA2048) || defined(WOLFBOOT_SIGN_RSA4096) || \
|
#elif defined(WOLFBOOT_SIGN_RSA2048) || defined(WOLFBOOT_SIGN_RSA4096) || \
|
||||||
defined(WOLFBOOT_SIGN_RSA3072)
|
defined(WOLFBOOT_SIGN_RSA3072) || \
|
||||||
|
defined(WOLFBOOT_SIGN_RSAPSS2048) || defined(WOLFBOOT_SIGN_RSAPSS4096) || \
|
||||||
|
defined(WOLFBOOT_SIGN_RSAPSS3072)
|
||||||
|
|
||||||
#if defined(WOLFBOOT_HASH_SHA256) || defined(WOLFBOOT_HASH_SHA384)
|
#if defined(WOLFBOOT_HASH_SHA256) || defined(WOLFBOOT_HASH_SHA384)
|
||||||
static uint32_t sha_block[HASH_BLOCK_SIZE];
|
static uint32_t sha_block[HASH_BLOCK_SIZE];
|
||||||
|
|
@ -350,7 +352,7 @@ static uint32_t sha_block[HASH_BLOCK_SIZE];
|
||||||
static uint8_t asncheck_buf[ASNCHECK_BUF_SIZE];
|
static uint8_t asncheck_buf[ASNCHECK_BUF_SIZE];
|
||||||
|
|
||||||
#ifndef USE_FAST_MATH
|
#ifndef USE_FAST_MATH
|
||||||
#ifdef WOLFBOOT_SIGN_RSA2048
|
#if defined(WOLFBOOT_SIGN_RSA2048) || defined(WOLFBOOT_SIGN_RSAPSS2048)
|
||||||
#define MP_SCHEME "SP RSA2048"
|
#define MP_SCHEME "SP RSA2048"
|
||||||
#define MP_INT_DYNAMIC_SIZE MP_INT_SIZEOF(MP_BITS_CNT(2048))
|
#define MP_INT_DYNAMIC_SIZE MP_INT_SIZEOF(MP_BITS_CNT(2048))
|
||||||
#define MP_BIGINT_MODEXP_SIZE (MP_INT_DYNAMIC_SIZE * 4)
|
#define MP_BIGINT_MODEXP_SIZE (MP_INT_DYNAMIC_SIZE * 4)
|
||||||
|
|
@ -363,7 +365,7 @@ static uint8_t asncheck_buf[ASNCHECK_BUF_SIZE];
|
||||||
#define MPDIGIT_BUF1_SIZE (MP_DIGIT_SIZE * (72 * 4 + 3))
|
#define MPDIGIT_BUF1_SIZE (MP_DIGIT_SIZE * (72 * 4 + 3))
|
||||||
static uint8_t mp_digit_buf1[MPDIGIT_BUF1_SIZE];
|
static uint8_t mp_digit_buf1[MPDIGIT_BUF1_SIZE];
|
||||||
#endif
|
#endif
|
||||||
#elif defined WOLFBOOT_SIGN_RSA3072
|
#elif defined(WOLFBOOT_SIGN_RSA3072) || defined(WOLFBOOT_SIGN_RSAPSS3072)
|
||||||
#define MP_SCHEME "SP RSA3072"
|
#define MP_SCHEME "SP RSA3072"
|
||||||
#define MP_INT_DYNAMIC_SIZE MP_INT_SIZEOF(MP_BITS_CNT(3072))
|
#define MP_INT_DYNAMIC_SIZE MP_INT_SIZEOF(MP_BITS_CNT(3072))
|
||||||
#define MP_BIGINT_MODEXP_SIZE (MP_INT_DYNAMIC_SIZE * 4)
|
#define MP_BIGINT_MODEXP_SIZE (MP_INT_DYNAMIC_SIZE * 4)
|
||||||
|
|
|
||||||
|
|
@ -283,7 +283,7 @@ static void fwritekey(uint8_t *key, int len, FILE *f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const char KType[][17] = {
|
const char KType[][21] = {
|
||||||
"AUTH_KEY_NONE",
|
"AUTH_KEY_NONE",
|
||||||
"AUTH_KEY_ED25519",
|
"AUTH_KEY_ED25519",
|
||||||
"AUTH_KEY_ECC256",
|
"AUTH_KEY_ECC256",
|
||||||
|
|
@ -295,10 +295,13 @@ const char KType[][17] = {
|
||||||
"AUTH_KEY_RSA3072",
|
"AUTH_KEY_RSA3072",
|
||||||
"AUTH_KEY_LMS",
|
"AUTH_KEY_LMS",
|
||||||
"AUTH_KEY_XMSS",
|
"AUTH_KEY_XMSS",
|
||||||
"AUTH_KEY_ML_DSA"
|
"AUTH_KEY_ML_DSA",
|
||||||
|
"AUTH_KEY_RSAPSS2048",
|
||||||
|
"AUTH_KEY_RSAPSS3072",
|
||||||
|
"AUTH_KEY_RSAPSS4096"
|
||||||
};
|
};
|
||||||
|
|
||||||
const char KSize[][29] = {
|
const char KSize[][32] = {
|
||||||
"KEYSTORE_PUBKEY_SIZE_NONE",
|
"KEYSTORE_PUBKEY_SIZE_NONE",
|
||||||
"KEYSTORE_PUBKEY_SIZE_ED25519",
|
"KEYSTORE_PUBKEY_SIZE_ED25519",
|
||||||
"KEYSTORE_PUBKEY_SIZE_ECC256",
|
"KEYSTORE_PUBKEY_SIZE_ECC256",
|
||||||
|
|
@ -310,10 +313,13 @@ const char KSize[][29] = {
|
||||||
"KEYSTORE_PUBKEY_SIZE_RSA3072",
|
"KEYSTORE_PUBKEY_SIZE_RSA3072",
|
||||||
"KEYSTORE_PUBKEY_SIZE_LMS",
|
"KEYSTORE_PUBKEY_SIZE_LMS",
|
||||||
"KEYSTORE_PUBKEY_SIZE_XMSS",
|
"KEYSTORE_PUBKEY_SIZE_XMSS",
|
||||||
"KEYSTORE_PUBKEY_SIZE_ML_DSA"
|
"KEYSTORE_PUBKEY_SIZE_ML_DSA",
|
||||||
|
"KEYSTORE_PUBKEY_SIZE_RSAPSS2048",
|
||||||
|
"KEYSTORE_PUBKEY_SIZE_RSAPSS3072",
|
||||||
|
"KEYSTORE_PUBKEY_SIZE_RSAPSS4096"
|
||||||
};
|
};
|
||||||
|
|
||||||
const char KName[][8] = {
|
const char KName[][12] = {
|
||||||
"NONE",
|
"NONE",
|
||||||
"ED25519",
|
"ED25519",
|
||||||
"ECC256",
|
"ECC256",
|
||||||
|
|
@ -325,7 +331,10 @@ const char KName[][8] = {
|
||||||
"RSA3072",
|
"RSA3072",
|
||||||
"LMS",
|
"LMS",
|
||||||
"XMSS",
|
"XMSS",
|
||||||
"ML_DSA"
|
"ML_DSA",
|
||||||
|
"RSAPSS2048",
|
||||||
|
"RSAPSS3072",
|
||||||
|
"RSAPSS4096"
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MAX_PUBKEYS 64
|
#define MAX_PUBKEYS 64
|
||||||
|
|
@ -433,6 +442,15 @@ static uint32_t get_pubkey_size(uint32_t keyType)
|
||||||
case AUTH_KEY_RSA4096:
|
case AUTH_KEY_RSA4096:
|
||||||
size = KEYSTORE_PUBKEY_SIZE_RSA4096;
|
size = KEYSTORE_PUBKEY_SIZE_RSA4096;
|
||||||
break;
|
break;
|
||||||
|
case AUTH_KEY_RSAPSS2048:
|
||||||
|
size = KEYSTORE_PUBKEY_SIZE_RSA2048;
|
||||||
|
break;
|
||||||
|
case AUTH_KEY_RSAPSS3072:
|
||||||
|
size = KEYSTORE_PUBKEY_SIZE_RSA3072;
|
||||||
|
break;
|
||||||
|
case AUTH_KEY_RSAPSS4096:
|
||||||
|
size = KEYSTORE_PUBKEY_SIZE_RSA4096;
|
||||||
|
break;
|
||||||
case AUTH_KEY_LMS:
|
case AUTH_KEY_LMS:
|
||||||
size = KEYSTORE_PUBKEY_SIZE_LMS;
|
size = KEYSTORE_PUBKEY_SIZE_LMS;
|
||||||
break;
|
break;
|
||||||
|
|
@ -537,7 +555,8 @@ void keystore_add(uint32_t ktype, uint8_t *key, uint32_t sz, const char *keyfile
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void keygen_rsa(const char *keyfile, int kbits, uint32_t id_mask)
|
static void keygen_rsa(const char *keyfile, int kbits, uint32_t id_mask,
|
||||||
|
int ktype)
|
||||||
{
|
{
|
||||||
RsaKey k;
|
RsaKey k;
|
||||||
uint8_t priv_der[4096], pub_der[2048];
|
uint8_t priv_der[4096], pub_der[2048];
|
||||||
|
|
@ -591,12 +610,7 @@ static void keygen_rsa(const char *keyfile, int kbits, uint32_t id_mask)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kbits == 2048)
|
keystore_add(ktype, pub_der, publen, keyfile, id_mask);
|
||||||
keystore_add(AUTH_KEY_RSA2048, pub_der, publen, keyfile, id_mask);
|
|
||||||
else if (kbits == 3072)
|
|
||||||
keystore_add(AUTH_KEY_RSA3072, pub_der, publen, keyfile, id_mask);
|
|
||||||
else if (kbits == 4096)
|
|
||||||
keystore_add(AUTH_KEY_RSA4096, pub_der, publen, keyfile, id_mask);
|
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
wc_ForceZero(priv_der, sizeof(priv_der));
|
wc_ForceZero(priv_der, sizeof(priv_der));
|
||||||
|
|
@ -1325,13 +1339,22 @@ static void key_generate(uint32_t ktype, const char *kfilename, uint32_t id_mask
|
||||||
|
|
||||||
#ifndef NO_RSA
|
#ifndef NO_RSA
|
||||||
case AUTH_KEY_RSA2048:
|
case AUTH_KEY_RSA2048:
|
||||||
keygen_rsa(kfilename, 2048, id_mask);
|
keygen_rsa(kfilename, 2048, id_mask, AUTH_KEY_RSA2048);
|
||||||
break;
|
break;
|
||||||
case AUTH_KEY_RSA3072:
|
case AUTH_KEY_RSA3072:
|
||||||
keygen_rsa(kfilename, 3072, id_mask);
|
keygen_rsa(kfilename, 3072, id_mask, AUTH_KEY_RSA3072);
|
||||||
break;
|
break;
|
||||||
case AUTH_KEY_RSA4096:
|
case AUTH_KEY_RSA4096:
|
||||||
keygen_rsa(kfilename, 4096, id_mask);
|
keygen_rsa(kfilename, 4096, id_mask, AUTH_KEY_RSA4096);
|
||||||
|
break;
|
||||||
|
case AUTH_KEY_RSAPSS2048:
|
||||||
|
keygen_rsa(kfilename, 2048, id_mask, AUTH_KEY_RSAPSS2048);
|
||||||
|
break;
|
||||||
|
case AUTH_KEY_RSAPSS3072:
|
||||||
|
keygen_rsa(kfilename, 3072, id_mask, AUTH_KEY_RSAPSS3072);
|
||||||
|
break;
|
||||||
|
case AUTH_KEY_RSAPSS4096:
|
||||||
|
keygen_rsa(kfilename, 4096, id_mask, AUTH_KEY_RSAPSS4096);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -1506,6 +1529,15 @@ int main(int argc, char** argv)
|
||||||
else if (strcmp(argv[i], "--rsa4096") == 0) {
|
else if (strcmp(argv[i], "--rsa4096") == 0) {
|
||||||
keytype = AUTH_KEY_RSA4096;
|
keytype = AUTH_KEY_RSA4096;
|
||||||
}
|
}
|
||||||
|
else if (strcmp(argv[i], "--rsapss2048") == 0) {
|
||||||
|
keytype = AUTH_KEY_RSAPSS2048;
|
||||||
|
}
|
||||||
|
else if (strcmp(argv[i], "--rsapss3072") == 0) {
|
||||||
|
keytype = AUTH_KEY_RSAPSS3072;
|
||||||
|
}
|
||||||
|
else if (strcmp(argv[i], "--rsapss4096") == 0) {
|
||||||
|
keytype = AUTH_KEY_RSAPSS4096;
|
||||||
|
}
|
||||||
#if defined(WOLFSSL_HAVE_LMS)
|
#if defined(WOLFSSL_HAVE_LMS)
|
||||||
else if (strcmp(argv[i], "--lms") == 0) {
|
else if (strcmp(argv[i], "--lms") == 0) {
|
||||||
keytype = AUTH_KEY_LMS;
|
keytype = AUTH_KEY_LMS;
|
||||||
|
|
|
||||||
|
|
@ -193,6 +193,9 @@ static inline int fp_truncate(FILE *f, size_t len)
|
||||||
#define SIGN_RSA2048 HDR_IMG_TYPE_AUTH_RSA2048
|
#define SIGN_RSA2048 HDR_IMG_TYPE_AUTH_RSA2048
|
||||||
#define SIGN_RSA3072 HDR_IMG_TYPE_AUTH_RSA3072
|
#define SIGN_RSA3072 HDR_IMG_TYPE_AUTH_RSA3072
|
||||||
#define SIGN_RSA4096 HDR_IMG_TYPE_AUTH_RSA4096
|
#define SIGN_RSA4096 HDR_IMG_TYPE_AUTH_RSA4096
|
||||||
|
#define SIGN_RSAPSS2048 HDR_IMG_TYPE_AUTH_RSAPSS2048
|
||||||
|
#define SIGN_RSAPSS3072 HDR_IMG_TYPE_AUTH_RSAPSS3072
|
||||||
|
#define SIGN_RSAPSS4096 HDR_IMG_TYPE_AUTH_RSAPSS4096
|
||||||
#define SIGN_ED448 HDR_IMG_TYPE_AUTH_ED448
|
#define SIGN_ED448 HDR_IMG_TYPE_AUTH_ED448
|
||||||
#define SIGN_ECC384 HDR_IMG_TYPE_AUTH_ECC384
|
#define SIGN_ECC384 HDR_IMG_TYPE_AUTH_ECC384
|
||||||
#define SIGN_ECC521 HDR_IMG_TYPE_AUTH_ECC521
|
#define SIGN_ECC521 HDR_IMG_TYPE_AUTH_ECC521
|
||||||
|
|
@ -836,6 +839,25 @@ static uint8_t *load_key(uint8_t **key_buffer, uint32_t *key_buffer_sz,
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
FALL_THROUGH; /* we didn't solve the key, keep trying */
|
||||||
|
case SIGN_RSAPSS2048:
|
||||||
|
ret = load_key_rsa(SIGN_RSAPSS2048, 256, KEYSTORE_PUBKEY_SIZE_RSA2048, 512,
|
||||||
|
key_buffer, key_buffer_sz, pubkey, pubkey_sz, secondary);
|
||||||
|
if (ret == 0)
|
||||||
|
break;
|
||||||
|
FALL_THROUGH;
|
||||||
|
case SIGN_RSAPSS3072:
|
||||||
|
ret = load_key_rsa(SIGN_RSAPSS3072, 384, KEYSTORE_PUBKEY_SIZE_RSA3072, 512,
|
||||||
|
key_buffer, key_buffer_sz, pubkey, pubkey_sz, secondary);
|
||||||
|
if (ret == 0)
|
||||||
|
break;
|
||||||
|
FALL_THROUGH;
|
||||||
|
case SIGN_RSAPSS4096:
|
||||||
|
ret = load_key_rsa(SIGN_RSAPSS4096, 512, KEYSTORE_PUBKEY_SIZE_RSA4096, 1024,
|
||||||
|
key_buffer, key_buffer_sz, pubkey, pubkey_sz, secondary);
|
||||||
|
if (ret == 0)
|
||||||
|
break;
|
||||||
|
|
||||||
FALL_THROUGH; /* we didn't solve the key, keep trying */
|
FALL_THROUGH; /* we didn't solve the key, keep trying */
|
||||||
case SIGN_LMS:
|
case SIGN_LMS:
|
||||||
ret = -1;
|
ret = -1;
|
||||||
|
|
@ -1109,6 +1131,30 @@ static int sign_digest(int sign, int hash_algo,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
if (sign == SIGN_RSAPSS2048 ||
|
||||||
|
sign == SIGN_RSAPSS3072 ||
|
||||||
|
sign == SIGN_RSAPSS4096)
|
||||||
|
{
|
||||||
|
enum wc_HashType hash_type;
|
||||||
|
int mgf;
|
||||||
|
if (hash_algo == HASH_SHA256) {
|
||||||
|
hash_type = WC_HASH_TYPE_SHA256;
|
||||||
|
mgf = WC_MGF1SHA256;
|
||||||
|
} else if (hash_algo == HASH_SHA384) {
|
||||||
|
hash_type = WC_HASH_TYPE_SHA384;
|
||||||
|
mgf = WC_MGF1SHA384;
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "RSA-PSS requires SHA-256 or SHA-384\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
ret = wc_RsaPSS_Sign(digest, digest_sz, signature, *signature_sz,
|
||||||
|
hash_type, mgf, &key.rsa, &rng);
|
||||||
|
if (ret > 0) {
|
||||||
|
*signature_sz = ret;
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
if (sign == SIGN_LMS) {
|
if (sign == SIGN_LMS) {
|
||||||
const char *key_file = CMD.key_file;
|
const char *key_file = CMD.key_file;
|
||||||
if (secondary) {
|
if (secondary) {
|
||||||
|
|
@ -2630,6 +2676,23 @@ static void set_signature_sizes(int secondary)
|
||||||
CMD.header_sz = 1024;
|
CMD.header_sz = 1024;
|
||||||
*sz = 512;
|
*sz = 512;
|
||||||
}
|
}
|
||||||
|
else if (*sign == SIGN_RSAPSS2048) {
|
||||||
|
if (CMD.header_sz < 512)
|
||||||
|
CMD.header_sz = 512;
|
||||||
|
*sz = 256;
|
||||||
|
}
|
||||||
|
else if (*sign == SIGN_RSAPSS3072) {
|
||||||
|
if ((CMD.header_sz < 1024) && (CMD.hash_algo != HASH_SHA256))
|
||||||
|
CMD.header_sz = 1024;
|
||||||
|
if (CMD.header_sz < 512)
|
||||||
|
CMD.header_sz = 512;
|
||||||
|
*sz = 384;
|
||||||
|
}
|
||||||
|
else if (*sign == SIGN_RSAPSS4096) {
|
||||||
|
if (CMD.header_sz < 1024)
|
||||||
|
CMD.header_sz = 1024;
|
||||||
|
*sz = 512;
|
||||||
|
}
|
||||||
else if (*sign == SIGN_LMS) {
|
else if (*sign == SIGN_LMS) {
|
||||||
int lms_ret = 0;
|
int lms_ret = 0;
|
||||||
word32 sig_sz = 0;
|
word32 sig_sz = 0;
|
||||||
|
|
@ -2923,6 +2986,36 @@ int main(int argc, char** argv)
|
||||||
sign_str = "RSA4096";
|
sign_str = "RSA4096";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (strcmp(argv[i], "--rsapss2048") == 0) {
|
||||||
|
if (CMD.sign != SIGN_AUTO) {
|
||||||
|
CMD.hybrid = 1;
|
||||||
|
CMD.secondary_sign = SIGN_RSAPSS2048;
|
||||||
|
secondary_sign_str = "RSAPSS2048";
|
||||||
|
} else {
|
||||||
|
CMD.sign = SIGN_RSAPSS2048;
|
||||||
|
sign_str = "RSAPSS2048";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (strcmp(argv[i], "--rsapss3072") == 0) {
|
||||||
|
if (CMD.sign != SIGN_AUTO) {
|
||||||
|
CMD.hybrid = 1;
|
||||||
|
CMD.secondary_sign = SIGN_RSAPSS3072;
|
||||||
|
secondary_sign_str = "RSAPSS3072";
|
||||||
|
} else {
|
||||||
|
CMD.sign = SIGN_RSAPSS3072;
|
||||||
|
sign_str = "RSAPSS3072";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (strcmp(argv[i], "--rsapss4096") == 0) {
|
||||||
|
if (CMD.sign != SIGN_AUTO) {
|
||||||
|
CMD.hybrid = 1;
|
||||||
|
CMD.secondary_sign = SIGN_RSAPSS4096;
|
||||||
|
secondary_sign_str = "RSAPSS4096";
|
||||||
|
} else {
|
||||||
|
CMD.sign = SIGN_RSAPSS4096;
|
||||||
|
sign_str = "RSAPSS4096";
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (strcmp(argv[i], "--lms") == 0) {
|
else if (strcmp(argv[i], "--lms") == 0) {
|
||||||
if (CMD.sign != SIGN_AUTO) {
|
if (CMD.sign != SIGN_AUTO) {
|
||||||
CMD.hybrid = 1;
|
CMD.hybrid = 1;
|
||||||
|
|
@ -3331,7 +3424,10 @@ int main(int argc, char** argv)
|
||||||
}
|
}
|
||||||
else if (CMD.sign == SIGN_RSA2048 ||
|
else if (CMD.sign == SIGN_RSA2048 ||
|
||||||
CMD.sign == SIGN_RSA3072 ||
|
CMD.sign == SIGN_RSA3072 ||
|
||||||
CMD.sign == SIGN_RSA4096) {
|
CMD.sign == SIGN_RSA4096 ||
|
||||||
|
CMD.sign == SIGN_RSAPSS2048 ||
|
||||||
|
CMD.sign == SIGN_RSAPSS3072 ||
|
||||||
|
CMD.sign == SIGN_RSAPSS4096) {
|
||||||
wc_FreeRsaKey(&key.rsa);
|
wc_FreeRsaKey(&key.rsa);
|
||||||
}
|
}
|
||||||
else if (CMD.sign == SIGN_LMS) {
|
else if (CMD.sign == SIGN_LMS) {
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,7 @@
|
||||||
/* RSA */
|
/* RSA */
|
||||||
#define HAVE_RSA
|
#define HAVE_RSA
|
||||||
#define WC_RSA_BLINDING
|
#define WC_RSA_BLINDING
|
||||||
|
#define WC_RSA_PSS
|
||||||
#define WOLFSSL_KEY_GEN
|
#define WOLFSSL_KEY_GEN
|
||||||
|
|
||||||
/* Hashing */
|
/* Hashing */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue