Skip to content

Commit a3e4e15

Browse files
committed
add signature negative verify tests
1 parent 035b345 commit a3e4e15

3 files changed

Lines changed: 71 additions & 0 deletions

File tree

tests/api/test_dsa.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,16 @@ int test_wc_DsaSignVerify(void)
117117
ExpectIntEQ(wc_DsaVerify(hash, signature, NULL, &answer), WC_NO_ERR_TRACE(BAD_FUNC_ARG));
118118
ExpectIntEQ(wc_DsaVerify(hash, signature, &key, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG));
119119

120+
{
121+
byte badHash[WC_SHA_DIGEST_SIZE];
122+
123+
XMEMCPY(badHash, hash, sizeof(badHash));
124+
badHash[0] ^= 0x01;
125+
answer = 1;
126+
ExpectIntEQ(wc_DsaVerify(badHash, signature, &key, &answer), 0);
127+
ExpectIntEQ(answer, 0);
128+
}
129+
120130
#if !defined(HAVE_SELFTEST) && !defined(HAVE_FIPS) && defined(WOLFSSL_PUBLIC_MP)
121131
/* hard set q to 0 and test fail case */
122132
mp_free(&key.q);

tests/api/test_rsa.c

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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
*/

tests/api/test_rsa.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ int test_wc_RsaPrivateKeyDecodeRaw(void);
3232
int test_wc_MakeRsaKey(void);
3333
int test_wc_CheckProbablePrime(void);
3434
int test_wc_RsaPSS_Verify(void);
35+
int test_wc_RsaPSS_BadTerminator(void);
3536
int test_wc_RsaPSS_VerifyCheck(void);
3637
int test_wc_RsaPSS_VerifyCheckInline(void);
3738
int test_wc_RsaKeyToDer(void);
@@ -52,6 +53,7 @@ int test_wc_RsaDecrypt_BoundsCheck(void);
5253
TEST_DECL_GROUP("rsa", test_wc_MakeRsaKey), \
5354
TEST_DECL_GROUP("rsa", test_wc_CheckProbablePrime), \
5455
TEST_DECL_GROUP("rsa", test_wc_RsaPSS_Verify), \
56+
TEST_DECL_GROUP("rsa", test_wc_RsaPSS_BadTerminator), \
5557
TEST_DECL_GROUP("rsa", test_wc_RsaPSS_VerifyCheck), \
5658
TEST_DECL_GROUP("rsa", test_wc_RsaPSS_VerifyCheckInline), \
5759
TEST_DECL_GROUP("rsa", test_wc_RsaKeyToDer), \

0 commit comments

Comments
 (0)