@@ -1997,6 +1997,121 @@ int test_wolfSSL_EVP_MD_ecc_signing(void)
19971997}
19981998
19991999
2000+ int test_wolfSSL_EVP_DigestSign (void )
2001+ {
2002+ EXPECT_DECLS ;
2003+ #if defined(OPENSSL_EXTRA ) && !defined(NO_RSA ) && defined(USE_CERT_BUFFERS_2048 )
2004+ WOLFSSL_EVP_PKEY * privKey = NULL ;
2005+ WOLFSSL_EVP_PKEY * pubKey = NULL ;
2006+ const unsigned char testData [] = "Hi There" ;
2007+ WOLFSSL_EVP_MD_CTX mdCtx ;
2008+ int ret ;
2009+ const unsigned char * cp ;
2010+ const unsigned char * p ;
2011+ unsigned char sig [2048 /8 ];
2012+ size_t sigSz ;
2013+
2014+ cp = client_key_der_2048 ;
2015+ ExpectNotNull ((privKey = wolfSSL_d2i_PrivateKey (EVP_PKEY_RSA , NULL , & cp ,
2016+ sizeof_client_key_der_2048 )));
2017+ p = client_keypub_der_2048 ;
2018+ ExpectNotNull ((pubKey = wolfSSL_d2i_PUBKEY (NULL , & p ,
2019+ sizeof_client_keypub_der_2048 )));
2020+
2021+ /* One-shot sign: query size first */
2022+ wolfSSL_EVP_MD_CTX_init (& mdCtx );
2023+ ExpectIntEQ (wolfSSL_EVP_DigestSignInit (& mdCtx , NULL , wolfSSL_EVP_sha256 (),
2024+ NULL , privKey ), 1 );
2025+ sigSz = 0 ;
2026+ ExpectIntEQ (wolfSSL_EVP_DigestSign (& mdCtx , NULL , & sigSz , testData ,
2027+ (unsigned int )XSTRLEN ((const char * )testData )), 1 );
2028+ ExpectIntGT ((int )sigSz , 0 );
2029+ ret = wolfSSL_EVP_MD_CTX_cleanup (& mdCtx );
2030+ ExpectIntEQ (ret , 1 );
2031+
2032+ /* One-shot sign: actually produce the signature */
2033+ wolfSSL_EVP_MD_CTX_init (& mdCtx );
2034+ ExpectIntEQ (wolfSSL_EVP_DigestSignInit (& mdCtx , NULL , wolfSSL_EVP_sha256 (),
2035+ NULL , privKey ), 1 );
2036+ sigSz = sizeof (sig );
2037+ ExpectIntEQ (wolfSSL_EVP_DigestSign (& mdCtx , sig , & sigSz , testData ,
2038+ (unsigned int )XSTRLEN ((const char * )testData )), 1 );
2039+ ExpectIntGT ((int )sigSz , 0 );
2040+ ret = wolfSSL_EVP_MD_CTX_cleanup (& mdCtx );
2041+ ExpectIntEQ (ret , 1 );
2042+
2043+ /* One-shot verify */
2044+ wolfSSL_EVP_MD_CTX_init (& mdCtx );
2045+ ExpectIntEQ (wolfSSL_EVP_DigestVerifyInit (& mdCtx , NULL ,
2046+ wolfSSL_EVP_sha256 (), NULL , pubKey ), 1 );
2047+ ExpectIntEQ (wolfSSL_EVP_DigestVerify (& mdCtx , sig , sigSz , testData ,
2048+ (unsigned int )XSTRLEN ((const char * )testData )), 1 );
2049+ ret = wolfSSL_EVP_MD_CTX_cleanup (& mdCtx );
2050+ ExpectIntEQ (ret , 1 );
2051+
2052+ /* One-shot sign + verify with NULL ctx should fail */
2053+ ExpectIntEQ (wolfSSL_EVP_DigestSign (NULL , sig , & sigSz , testData ,
2054+ (unsigned int )XSTRLEN ((const char * )testData )),
2055+ WOLFSSL_FAILURE );
2056+ ExpectIntEQ (wolfSSL_EVP_DigestVerify (NULL , sig , sigSz , testData ,
2057+ (unsigned int )XSTRLEN ((const char * )testData )),
2058+ WOLFSSL_FAILURE );
2059+
2060+ wolfSSL_EVP_PKEY_free (pubKey );
2061+ wolfSSL_EVP_PKEY_free (privKey );
2062+ #endif
2063+ return EXPECT_RESULT ();
2064+ }
2065+
2066+
2067+ int test_wolfSSL_EVP_DigestSign_ecc (void )
2068+ {
2069+ EXPECT_DECLS ;
2070+ #if defined(OPENSSL_EXTRA ) && defined(HAVE_ECC ) && defined(USE_CERT_BUFFERS_256 )
2071+ WOLFSSL_EVP_PKEY * privKey = NULL ;
2072+ WOLFSSL_EVP_PKEY * pubKey = NULL ;
2073+ const unsigned char testData [] = "ECC one-shot test" ;
2074+ WOLFSSL_EVP_MD_CTX mdCtx ;
2075+ int ret ;
2076+ const unsigned char * cp ;
2077+ const unsigned char * p ;
2078+ unsigned char sig [256 ];
2079+ size_t sigSz ;
2080+
2081+ cp = ecc_clikey_der_256 ;
2082+ ExpectNotNull (privKey = wolfSSL_d2i_PrivateKey (EVP_PKEY_EC , NULL , & cp ,
2083+ sizeof_ecc_clikey_der_256 ));
2084+ p = ecc_clikeypub_der_256 ;
2085+ ExpectNotNull ((pubKey = wolfSSL_d2i_PUBKEY (NULL , & p ,
2086+ sizeof_ecc_clikeypub_der_256 )));
2087+
2088+ /* One-shot sign */
2089+ wolfSSL_EVP_MD_CTX_init (& mdCtx );
2090+ ExpectIntEQ (wolfSSL_EVP_DigestSignInit (& mdCtx , NULL , wolfSSL_EVP_sha256 (),
2091+ NULL , privKey ), 1 );
2092+ sigSz = sizeof (sig );
2093+ ExpectIntEQ (wolfSSL_EVP_DigestSign (& mdCtx , sig , & sigSz , testData ,
2094+ (unsigned int )XSTRLEN ((const char * )testData )), 1 );
2095+ ExpectIntGT ((int )sigSz , 0 );
2096+ ret = wolfSSL_EVP_MD_CTX_cleanup (& mdCtx );
2097+ ExpectIntEQ (ret , 1 );
2098+
2099+ /* One-shot verify */
2100+ wolfSSL_EVP_MD_CTX_init (& mdCtx );
2101+ ExpectIntEQ (wolfSSL_EVP_DigestVerifyInit (& mdCtx , NULL ,
2102+ wolfSSL_EVP_sha256 (), NULL , pubKey ), 1 );
2103+ ExpectIntEQ (wolfSSL_EVP_DigestVerify (& mdCtx , sig , sigSz , testData ,
2104+ (unsigned int )XSTRLEN ((const char * )testData )), 1 );
2105+ ret = wolfSSL_EVP_MD_CTX_cleanup (& mdCtx );
2106+ ExpectIntEQ (ret , 1 );
2107+
2108+ wolfSSL_EVP_PKEY_free (pubKey );
2109+ wolfSSL_EVP_PKEY_free (privKey );
2110+ #endif
2111+ return EXPECT_RESULT ();
2112+ }
2113+
2114+
20002115int test_wolfSSL_EVP_PKEY_encrypt (void )
20012116{
20022117 EXPECT_DECLS ;
0 commit comments