@@ -223,8 +223,6 @@ function test_rsa(padding, encryptOaepHash, decryptOaepHash) {
223223
224224
225225  if  ( padding  ===  constants . RSA_PKCS1_PADDING )  { 
226-     // TODO(richardlau): see if it's possible to determine implicit rejection 
227-     // support when dynamically linked against OpenSSL. 
228226    if  ( ! process . config . variables . node_shared_openssl )  { 
229227      assert . throws ( ( )  =>  { 
230228        crypto . privateDecrypt ( { 
@@ -240,6 +238,55 @@ function test_rsa(padding, encryptOaepHash, decryptOaepHash) {
240238          oaepHash : decryptOaepHash 
241239        } ,  encryptedBuffer ) ; 
242240      } ,  {  code : 'ERR_INVALID_ARG_VALUE'  } ) ; 
241+     }  else  { 
242+       // The version of a linked against OpenSSL. May 
243+       // or may not support implicit rejection. Figuring 
244+       // this out in the test is not feasible but we 
245+       // require that it pass based on one of the two 
246+       // cases of supporting it or not. 
247+       try  { 
248+         // The expected exceptions should be thrown if implicit rejection 
249+         // is not supported 
250+         assert . throws ( ( )  =>  { 
251+           crypto . privateDecrypt ( { 
252+             key : rsaKeyPem , 
253+             padding : padding , 
254+             oaepHash : decryptOaepHash 
255+           } ,  encryptedBuffer ) ; 
256+         } ,  {  code : 'ERR_INVALID_ARG_VALUE'  } ) ; 
257+         assert . throws ( ( )  =>  { 
258+           crypto . privateDecrypt ( { 
259+             key : rsaPkcs8KeyPem , 
260+             padding : padding , 
261+             oaepHash : decryptOaepHash 
262+           } ,  encryptedBuffer ) ; 
263+         } ,  {  code : 'ERR_INVALID_ARG_VALUE'  } ) ; 
264+       }  catch  ( e )  { 
265+         if  ( e . toString ( )  === 
266+             'AssertionError [ERR_ASSERTION]: Missing expected exception.' )  { 
267+           // Implicit rejection must be supported since 
268+           // we did not get the exceptions that are thrown 
269+           // when it is not, we should be able to decrypt 
270+           let  decryptedBuffer  =  crypto . privateDecrypt ( { 
271+             key : rsaKeyPem , 
272+             padding : padding , 
273+             oaepHash : decryptOaepHash 
274+           } ,  encryptedBuffer ) ; 
275+           assert . deepStrictEqual ( decryptedBuffer ,  input ) ; 
276+ 
277+           decryptedBuffer  =  crypto . privateDecrypt ( { 
278+             key : rsaPkcs8KeyPem , 
279+             padding : padding , 
280+             oaepHash : decryptOaepHash 
281+           } ,  encryptedBuffer ) ; 
282+           assert . deepStrictEqual ( decryptedBuffer ,  input ) ; 
283+         }  else  { 
284+           // There was an exception but it is not the one we expect if implicit 
285+           // rejection is not supported so there was some other failure, 
286+           // re-throw it so the test fails 
287+           throw  e ; 
288+         } 
289+       } 
243290    } 
244291  }  else  { 
245292    let  decryptedBuffer  =  crypto . privateDecrypt ( { 
0 commit comments