diff options
Diffstat (limited to 'crypto/rsa/rsa_test.c')
| -rw-r--r-- | crypto/rsa/rsa_test.c | 28 | 
1 files changed, 23 insertions, 5 deletions
| diff --git a/crypto/rsa/rsa_test.c b/crypto/rsa/rsa_test.c index 0f8059ccfdfc..4080de8bcf99 100644 --- a/crypto/rsa/rsa_test.c +++ b/crypto/rsa/rsa_test.c @@ -219,6 +219,7 @@ int main(int argc, char *argv[])      int plen;      int clen = 0;      int num; +    int n;      CRYPTO_malloc_debug_init();      CRYPTO_dbg_set_options(V_CRYPTO_MDEBUG_ALL); @@ -242,7 +243,7 @@ int main(int argc, char *argv[])  	clen = key3(key, ctext_ex);  	break;  	} -	if (v/3 > 1) key->flags |= RSA_FLAG_NO_EXP_CONSTTIME; +	if (v/3 >= 1) key->flags |= RSA_FLAG_NO_CONSTTIME;  	num = RSA_public_encrypt(plen, ptext_ex, ctext, key,  				 RSA_PKCS1_PADDING); @@ -278,7 +279,7 @@ int main(int argc, char *argv[])  	    err=1;  	    goto next;  	    } -   +  	num = RSA_private_decrypt(num, ctext, ptext, key,  				  RSA_PKCS1_OAEP_PADDING);  	if (num != plen || memcmp(ptext, ptext_ex, num) != 0) @@ -287,10 +288,7 @@ int main(int argc, char *argv[])  	    err=1;  	    }  	else if (memcmp(ctext, ctext_ex, num) == 0) -	    {  	    printf("OAEP test vector %d passed!\n", v); -	    goto next; -	    }  	/* Different ciphertexts (rsa_oaep.c without -DPKCS_TESTVECT).  	   Try decrypting ctext_ex */ @@ -305,6 +303,26 @@ int main(int argc, char *argv[])  	    }  	else  	    printf("OAEP encryption/decryption ok\n"); + +	/* Try decrypting corrupted ciphertexts */ +	for(n = 0 ; n < clen ; ++n) +	    { +	    int b; +	    unsigned char saved = ctext[n]; +	    for(b = 0 ; b < 256 ; ++b) +		{ +		if(b == saved) +		    continue; +		ctext[n] = b; +		num = RSA_private_decrypt(num, ctext, ptext, key, +					  RSA_PKCS1_OAEP_PADDING); +		if(num > 0) +		    { +		    printf("Corrupt data decrypted!\n"); +		    err = 1; +		    } +		} +	    }      next:  	RSA_free(key);  	} | 
