From da29f2991d75fc8aa3289407a0e686a4a22f8c9e Mon Sep 17 00:00:00 2001 From: Andrew Duda Date: Tue, 8 Nov 2016 18:53:40 +0000 Subject: rsa: Verify RSA padding programatically Padding verification was done against static SHA/RSA pair arrays which take up a lot of static memory, are mostly 0xff, and cannot be reused for additional SHA/RSA pairings. The padding can be easily computed according to PKCS#1v2.1 as: EM = 0x00 || 0x01 || PS || 0x00 || T where PS is (emLen - tLen - 3) octets of 0xff and T is DER encoding of the hash. Store DER prefix in checksum_algo and create rsa_verify_padding function to handle verification of a message for any SHA/RSA pairing. Signed-off-by: Andrew Duda Signed-off-by: aduda Reviewed-by: Simon Glass --- include/image.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'include/image.h') diff --git a/include/image.h b/include/image.h index bfe10a0190..de73a071d9 100644 --- a/include/image.h +++ b/include/image.h @@ -1070,6 +1070,8 @@ struct image_region { struct checksum_algo { const char *name; const int checksum_len; + const int der_len; + const uint8_t *der_prefix; const int key_len; #if IMAGE_ENABLE_SIGN const EVP_MD *(*calculate_sign)(void); @@ -1077,7 +1079,6 @@ struct checksum_algo { int (*calculate)(const char *name, const struct image_region region[], int region_count, uint8_t *checksum); - const uint8_t *rsa_padding; }; struct image_sig_algo { -- cgit v1.2.3