@@ -9,7 +9,7 @@ use Crypt::OpenSSL::RSA;
99# pre-3.x: RSA_private_encrypt / RSA_public_decrypt
1010# 3.x: EVP_PKEY_sign / EVP_PKEY_verify_recover
1111
12- plan tests => 16 ;
12+ plan tests => 17 ;
1313
1414Crypt::OpenSSL::Random::random_seed(" OpenSSL needs at least 32 bytes." );
1515Crypt::OpenSSL::RSA-> import_random_seed();
@@ -136,13 +136,22 @@ my $rsa_pub = Crypt::OpenSSL::RSA->new_public_key($rsa->get_public_key_string())
136136 ok($@ , " PSS padding cannot be used with private_encrypt" );
137137}
138138
139- # --- OAEP padding rejected for private_encrypt ---
140- # OAEP is an encryption scheme, invalid for sign-type operations.
139+ # --- OAEP padding falls back to PKCS#1 v1.5 for private_encrypt ---
140+ # OAEP is an encryption scheme; for sign-type operations it falls back
141+ # to PKCS#1 v1.5 (matching the default padding behavior).
141142
142143{
143144 $rsa -> use_pkcs1_oaep_padding();
144- eval { $rsa -> private_encrypt(" oaep test" ) };
145- ok($@ , " OAEP padding cannot be used with private_encrypt" );
145+ $rsa_pub -> use_pkcs1_oaep_padding();
146+ my $msg = " oaep fallback test" ;
147+ my $ct = eval { $rsa -> private_encrypt($msg ) };
148+ ok(!$@ , " private_encrypt with OAEP falls back to PKCS#1 v1.5" )
149+ or diag $@ ;
150+ SKIP: {
151+ skip " private_encrypt failed" , 1 if $@ ;
152+ my $pt = eval { $rsa_pub -> public_decrypt($ct ) };
153+ is($pt , $msg , " OAEP fallback round-trips via public_decrypt" );
154+ }
146155}
147156
148157# --- Public key cannot private_encrypt ---
0 commit comments