| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- Index: crypto/rsa/rsa_eay.c
- ===================================================================
- RCS file: /e/openssl/cvs/openssl/crypto/rsa/rsa_eay.c,v
- retrieving revision 1.28.2.3
- diff -u -r1.28.2.3 rsa_eay.c
- --- crypto/rsa/rsa_eay.c 30 Jan 2003 17:37:46 -0000 1.28.2.3
- +++ crypto/rsa/rsa_eay.c 16 Mar 2003 10:34:13 -0000
- @@ -195,6 +195,25 @@
- return(r);
- }
-
- +static int rsa_eay_blinding(RSA *rsa, BN_CTX *ctx)
- + {
- + int ret = 1;
- + CRYPTO_w_lock(CRYPTO_LOCK_RSA);
- + /* Check again inside the lock - the macro's check is racey */
- + if(rsa->blinding == NULL)
- + ret = RSA_blinding_on(rsa, ctx);
- + CRYPTO_w_unlock(CRYPTO_LOCK_RSA);
- + return ret;
- + }
- +
- +#define BLINDING_HELPER(rsa, ctx, err_instr) \
- + do { \
- + if(((rsa)->flags & RSA_FLAG_BLINDING) && \
- + ((rsa)->blinding == NULL) && \
- + !rsa_eay_blinding(rsa, ctx)) \
- + err_instr \
- + } while(0)
- +
- /* signing */
- static int RSA_eay_private_encrypt(int flen, const unsigned char *from,
- unsigned char *to, RSA *rsa, int padding)
- @@ -239,8 +258,8 @@
- goto err;
- }
-
- - if ((rsa->flags & RSA_FLAG_BLINDING) && (rsa->blinding == NULL))
- - RSA_blinding_on(rsa,ctx);
- + BLINDING_HELPER(rsa, ctx, goto err;);
- +
- if (rsa->flags & RSA_FLAG_BLINDING)
- if (!BN_BLINDING_convert(&f,rsa->blinding,ctx)) goto err;
-
- @@ -318,8 +337,8 @@
- goto err;
- }
-
- - if ((rsa->flags & RSA_FLAG_BLINDING) && (rsa->blinding == NULL))
- - RSA_blinding_on(rsa,ctx);
- + BLINDING_HELPER(rsa, ctx, goto err;);
- +
- if (rsa->flags & RSA_FLAG_BLINDING)
- if (!BN_BLINDING_convert(&f,rsa->blinding,ctx)) goto err;
-
- Index: crypto/rsa/rsa_lib.c
- ===================================================================
- RCS file: /e/openssl/cvs/openssl/crypto/rsa/rsa_lib.c,v
- retrieving revision 1.30.2.2
- diff -u -r1.30.2.2 rsa_lib.c
- --- crypto/rsa/rsa_lib.c 30 Jan 2003 17:37:46 -0000 1.30.2.2
- +++ crypto/rsa/rsa_lib.c 16 Mar 2003 10:34:13 -0000
- @@ -72,7 +72,13 @@
-
- RSA *RSA_new(void)
- {
- - return(RSA_new_method(NULL));
- + RSA *r=RSA_new_method(NULL);
- +
- +#ifndef OPENSSL_NO_FORCE_RSA_BLINDING
- + r->flags|=RSA_FLAG_BLINDING;
- +#endif
- +
- + return r;
- }
-
- void RSA_set_default_method(const RSA_METHOD *meth)
- Index: ssl/s3_srvr.c
- ============================================================================
- $ cvs diff -u -r1.104 -r1.105 s3_srvr.c
- --- ssl/s3_srvr.c 28 Feb 2003 15:37:10 -0000 1.104
- +++ ssl/s3_srvr.c 19 Mar 2003 19:19:53 -0000 1.105
- @@ -1684,7 +1684,7 @@
- if (i != SSL_MAX_MASTER_KEY_LENGTH)
- {
- al=SSL_AD_DECODE_ERROR;
- - SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,SSL_R_BAD_RSA_DECRYPT);
- + /* SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,SSL_R_BAD_RSA_DECRYPT); */
- }
-
- if ((al == -1) && !((p[0] == (s->client_version>>8)) && (p[1] == (s->client_version & 0xff))))
- @@ -1700,30 +1700,29 @@
- (p[0] == (s->version>>8)) && (p[1] == (s->version & 0xff))))
- {
- al=SSL_AD_DECODE_ERROR;
- - SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,SSL_R_BAD_PROTOCOL_VERSION_NUMBER);
- - goto f_err;
- + /* SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,SSL_R_BAD_PROTOCOL_VERSION_NUMBER); */
- +
- + /* The Klima-Pokorny-Rosa extension of Bleichenbacher's attack
- + * (http://eprint.iacr.org/2003/052/) exploits the version
- + * number check as a "bad version oracle" -- an alert would
- + * reveal that the plaintext corresponding to some ciphertext
- + * made up by the adversary is properly formatted except
- + * that the version number is wrong. To avoid such attacks,
- + * we should treat this just like any other decryption error. */
- + p[0] = (char)(int) "CAN-2003-0131 patch 2003-03-20";
- }
- }
-
- if (al != -1)
- {
- -#if 0
- - goto f_err;
- -#else
- /* Some decryption failure -- use random value instead as countermeasure
- * against Bleichenbacher's attack on PKCS #1 v1.5 RSA padding
- - * (see RFC 2246, section 7.4.7.1).
- - * But note that due to length and protocol version checking, the
- - * attack is impractical anyway (see section 5 in D. Bleichenbacher:
- - * "Chosen Ciphertext Attacks Against Protocols Based on the RSA
- - * Encryption Standard PKCS #1", CRYPTO '98, LNCS 1462, pp. 1-12).
- - */
- + * (see RFC 2246, section 7.4.7.1). */
- ERR_clear_error();
- i = SSL_MAX_MASTER_KEY_LENGTH;
- p[0] = s->client_version >> 8;
- p[1] = s->client_version & 0xff;
- RAND_pseudo_bytes(p+2, i-2); /* should be RAND_bytes, but we cannot work around a failure */
- -#endif
- }
-
- s->session->master_key_length=
|