@@ -491,6 +491,65 @@ int test_wc_RsaPSS_Verify(void)
491491 return EXPECT_RESULT ();
492492} /* END test_wc_RsaPSS_Verify */
493493
494+ int test_wc_RsaPSS_BadTerminator (void )
495+ {
496+ EXPECT_DECLS ;
497+ #if !defined(NO_RSA ) && defined(WOLFSSL_KEY_GEN ) && !defined(HAVE_SELFTEST ) && \
498+ !defined(HAVE_FIPS ) && defined(WC_RSA_BLINDING ) && defined(WC_RSA_PSS ) && \
499+ (defined(WC_RSA_DIRECT ) || defined(WC_RSA_NO_PADDING ) || \
500+ defined(OPENSSL_EXTRA ) || defined(OPENSSL_EXTRA_X509_SMALL ))
501+ RsaKey key ;
502+ WC_RNG rng ;
503+ const char * msg = "This is the string to be signed" ;
504+ unsigned char sig [2048 /8 ];
505+ unsigned char em [2048 /8 ];
506+ unsigned char badSig [2048 /8 ];
507+ unsigned char verifyOut [2048 /8 ];
508+ int sigLen = 0 ;
509+ word32 emSz = sizeof (em );
510+ word32 badSigSz = sizeof (badSig );
511+
512+ XMEMSET (& key , 0 , sizeof (RsaKey ));
513+ XMEMSET (& rng , 0 , sizeof (WC_RNG ));
514+ XMEMSET (em , 0 , sizeof (em ));
515+ XMEMSET (sig , 0 , sizeof (sig ));
516+ XMEMSET (badSig , 0 , sizeof (badSig ));
517+
518+ ExpectIntEQ (wc_InitRsaKey (& key , HEAP_HINT ), 0 );
519+ ExpectIntEQ (wc_InitRng (& rng ), 0 );
520+ ExpectIntEQ (wc_RsaSetRNG (& key , & rng ), 0 );
521+ ExpectIntEQ (wc_MakeRsaKey (& key , 2048 , WC_RSA_EXPONENT , & rng ), 0 );
522+
523+ ExpectIntGT (sigLen = wc_RsaPSS_Sign ((const byte * )msg ,
524+ (word32 )XSTRLEN (msg ) + 1 , sig , sizeof (sig ),
525+ WC_HASH_TYPE_SHA256 , WC_MGF1SHA256 , & key , & rng ), 0 );
526+
527+ ExpectIntGT (wc_RsaDirect (sig , (word32 )sigLen , em , & emSz , & key ,
528+ RSA_PUBLIC_DECRYPT , NULL ), 0 );
529+
530+ ExpectTrue (emSz > 0 );
531+ if (emSz > 0 ) {
532+ ExpectIntEQ ((int )em [emSz - 1 ], 0xbc );
533+ }
534+
535+ if (emSz > 0 && em [emSz - 1 ] == 0xbc ) {
536+ em [emSz - 1 ] = 0xbd ;
537+
538+ ExpectIntGT (wc_RsaDirect (em , emSz , badSig , & badSigSz , & key ,
539+ RSA_PRIVATE_ENCRYPT , & rng ), 0 );
540+
541+ ExpectIntEQ (wc_RsaPSS_Verify (badSig , badSigSz , verifyOut ,
542+ sizeof (verifyOut ),
543+ WC_HASH_TYPE_SHA256 , WC_MGF1SHA256 , & key ),
544+ WC_NO_ERR_TRACE (BAD_PADDING_E ));
545+ }
546+
547+ DoExpectIntEQ (wc_FreeRsaKey (& key ), 0 );
548+ DoExpectIntEQ (wc_FreeRng (& rng ), 0 );
549+ #endif
550+ return EXPECT_RESULT ();
551+ } /* END test_wc_RsaPSS_BadTerminator */
552+
494553/*
495554 * Testing wc_RsaPSS_VerifyCheck()
496555 */
0 commit comments