diff --git a/ChangeLog b/ChangeLog index 605019bb0..ba3afd44f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -11,6 +11,8 @@ Changes * Internally split up rsa_pkcs1_encrypt(), rsa_pkcs1_decrypt(), rsa_pkcs1_sign() and rsa_pkcs1_verify() to separate PKCS#1 v1.5 and PKCS#1 v2.1 functions + * Added support for custom labels when using rsa_rsaes_oaep_encrypt() + or rsa_rsaes_oaep_decrypt() Security * Removed further timing differences during SSL message decryption in diff --git a/include/polarssl/rsa.h b/include/polarssl/rsa.h index 9eda4b37e..f9a022026 100644 --- a/include/polarssl/rsa.h +++ b/include/polarssl/rsa.h @@ -309,6 +309,8 @@ int rsa_rsaes_pkcs1_v15_encrypt( rsa_context *ctx, * \param f_rng RNG function (Needed for padding and PKCS#1 v2.1 encoding) * \param p_rng RNG parameter * \param mode RSA_PUBLIC or RSA_PRIVATE + * \param label buffer holding the custom label to use + * \param label_len contains the label length * \param ilen contains the plaintext length * \param input buffer holding the data to be encrypted * \param output buffer that will hold the ciphertext @@ -321,7 +323,9 @@ int rsa_rsaes_pkcs1_v15_encrypt( rsa_context *ctx, int rsa_rsaes_oaep_encrypt( rsa_context *ctx, int (*f_rng)(void *, unsigned char *, size_t), void *p_rng, - int mode, size_t ilen, + int mode, + const unsigned char *label, size_t label_len, + size_t ilen, const unsigned char *input, unsigned char *output ); @@ -376,6 +380,8 @@ int rsa_rsaes_pkcs1_v15_decrypt( rsa_context *ctx, * * \param ctx RSA context * \param mode RSA_PUBLIC or RSA_PRIVATE + * \param label buffer holding the custom label to use + * \param label_len contains the label length * \param olen will contain the plaintext length * \param input buffer holding the encrypted data * \param output buffer that will hold the plaintext @@ -388,7 +394,9 @@ int rsa_rsaes_pkcs1_v15_decrypt( rsa_context *ctx, * an error is thrown. */ int rsa_rsaes_oaep_decrypt( rsa_context *ctx, - int mode, size_t *olen, + int mode, + const unsigned char *label, size_t label_len, + size_t *olen, const unsigned char *input, unsigned char *output, size_t output_max_len ); diff --git a/library/rsa.c b/library/rsa.c index d41928fae..cc14d8e00 100644 --- a/library/rsa.c +++ b/library/rsa.c @@ -368,7 +368,9 @@ static void mgf_mask( unsigned char *dst, size_t dlen, unsigned char *src, size_ int rsa_rsaes_oaep_encrypt( rsa_context *ctx, int (*f_rng)(void *, unsigned char *, size_t), void *p_rng, - int mode, size_t ilen, + int mode, + const unsigned char *label, size_t label_len, + size_t ilen, const unsigned char *input, unsigned char *output ) { @@ -406,7 +408,7 @@ int rsa_rsaes_oaep_encrypt( rsa_context *ctx, // Construct DB // - md( md_info, p, 0, p ); + md( md_info, label, label_len, p ); p += hlen; p += olen - 2 * hlen - 2 - ilen; *p++ = 1; @@ -525,7 +527,9 @@ int rsa_pkcs1_encrypt( rsa_context *ctx, * Implementation of the PKCS#1 v2.1 RSAES-OAEP-DECRYPT function */ int rsa_rsaes_oaep_decrypt( rsa_context *ctx, - int mode, size_t *olen, + int mode, + const unsigned char *label, size_t label_len, + size_t *olen, const unsigned char *input, unsigned char *output, size_t output_max_len ) @@ -569,7 +573,7 @@ int rsa_rsaes_oaep_decrypt( rsa_context *ctx, // Generate lHash // - md( md_info, lhash, 0, lhash ); + md( md_info, label, label_len, lhash ); // seed: Apply seedMask to maskedSeed //