@@ -1927,6 +1927,121 @@ int test_wolfSSL_EVP_MD_ecc_signing(void)
19271927}
19281928
19291929
1930+ int test_wolfSSL_EVP_DigestSign (void )
1931+ {
1932+ EXPECT_DECLS ;
1933+ #if defined(OPENSSL_EXTRA ) && !defined(NO_RSA ) && defined(USE_CERT_BUFFERS_2048 )
1934+ WOLFSSL_EVP_PKEY * privKey = NULL ;
1935+ WOLFSSL_EVP_PKEY * pubKey = NULL ;
1936+ const unsigned char testData [] = "Hi There" ;
1937+ WOLFSSL_EVP_MD_CTX mdCtx ;
1938+ int ret ;
1939+ const unsigned char * cp ;
1940+ const unsigned char * p ;
1941+ unsigned char sig [2048 /8 ];
1942+ size_t sigSz ;
1943+
1944+ cp = client_key_der_2048 ;
1945+ ExpectNotNull ((privKey = wolfSSL_d2i_PrivateKey (EVP_PKEY_RSA , NULL , & cp ,
1946+ sizeof_client_key_der_2048 )));
1947+ p = client_keypub_der_2048 ;
1948+ ExpectNotNull ((pubKey = wolfSSL_d2i_PUBKEY (NULL , & p ,
1949+ sizeof_client_keypub_der_2048 )));
1950+
1951+ /* One-shot sign: query size first */
1952+ wolfSSL_EVP_MD_CTX_init (& mdCtx );
1953+ ExpectIntEQ (wolfSSL_EVP_DigestSignInit (& mdCtx , NULL , wolfSSL_EVP_sha256 (),
1954+ NULL , privKey ), 1 );
1955+ sigSz = 0 ;
1956+ ExpectIntEQ (wolfSSL_EVP_DigestSign (& mdCtx , NULL , & sigSz , testData ,
1957+ (unsigned int )XSTRLEN ((const char * )testData )), 1 );
1958+ ExpectIntGT ((int )sigSz , 0 );
1959+ ret = wolfSSL_EVP_MD_CTX_cleanup (& mdCtx );
1960+ ExpectIntEQ (ret , 1 );
1961+
1962+ /* One-shot sign: actually produce the signature */
1963+ wolfSSL_EVP_MD_CTX_init (& mdCtx );
1964+ ExpectIntEQ (wolfSSL_EVP_DigestSignInit (& mdCtx , NULL , wolfSSL_EVP_sha256 (),
1965+ NULL , privKey ), 1 );
1966+ sigSz = sizeof (sig );
1967+ ExpectIntEQ (wolfSSL_EVP_DigestSign (& mdCtx , sig , & sigSz , testData ,
1968+ (unsigned int )XSTRLEN ((const char * )testData )), 1 );
1969+ ExpectIntGT ((int )sigSz , 0 );
1970+ ret = wolfSSL_EVP_MD_CTX_cleanup (& mdCtx );
1971+ ExpectIntEQ (ret , 1 );
1972+
1973+ /* One-shot verify */
1974+ wolfSSL_EVP_MD_CTX_init (& mdCtx );
1975+ ExpectIntEQ (wolfSSL_EVP_DigestVerifyInit (& mdCtx , NULL ,
1976+ wolfSSL_EVP_sha256 (), NULL , pubKey ), 1 );
1977+ ExpectIntEQ (wolfSSL_EVP_DigestVerify (& mdCtx , sig , sigSz , testData ,
1978+ (unsigned int )XSTRLEN ((const char * )testData )), 1 );
1979+ ret = wolfSSL_EVP_MD_CTX_cleanup (& mdCtx );
1980+ ExpectIntEQ (ret , 1 );
1981+
1982+ /* One-shot sign + verify with NULL ctx should fail */
1983+ ExpectIntEQ (wolfSSL_EVP_DigestSign (NULL , sig , & sigSz , testData ,
1984+ (unsigned int )XSTRLEN ((const char * )testData )),
1985+ WOLFSSL_FAILURE );
1986+ ExpectIntEQ (wolfSSL_EVP_DigestVerify (NULL , sig , sigSz , testData ,
1987+ (unsigned int )XSTRLEN ((const char * )testData )),
1988+ WOLFSSL_FAILURE );
1989+
1990+ wolfSSL_EVP_PKEY_free (pubKey );
1991+ wolfSSL_EVP_PKEY_free (privKey );
1992+ #endif
1993+ return EXPECT_RESULT ();
1994+ }
1995+
1996+
1997+ int test_wolfSSL_EVP_DigestSign_ecc (void )
1998+ {
1999+ EXPECT_DECLS ;
2000+ #if defined(OPENSSL_EXTRA ) && defined(HAVE_ECC ) && defined(USE_CERT_BUFFERS_256 )
2001+ WOLFSSL_EVP_PKEY * privKey = NULL ;
2002+ WOLFSSL_EVP_PKEY * pubKey = NULL ;
2003+ const unsigned char testData [] = "ECC one-shot test" ;
2004+ WOLFSSL_EVP_MD_CTX mdCtx ;
2005+ int ret ;
2006+ const unsigned char * cp ;
2007+ const unsigned char * p ;
2008+ unsigned char sig [256 ];
2009+ size_t sigSz ;
2010+
2011+ cp = ecc_clikey_der_256 ;
2012+ ExpectNotNull (privKey = wolfSSL_d2i_PrivateKey (EVP_PKEY_EC , NULL , & cp ,
2013+ sizeof_ecc_clikey_der_256 ));
2014+ p = ecc_clikeypub_der_256 ;
2015+ ExpectNotNull ((pubKey = wolfSSL_d2i_PUBKEY (NULL , & p ,
2016+ sizeof_ecc_clikeypub_der_256 )));
2017+
2018+ /* One-shot sign */
2019+ wolfSSL_EVP_MD_CTX_init (& mdCtx );
2020+ ExpectIntEQ (wolfSSL_EVP_DigestSignInit (& mdCtx , NULL , wolfSSL_EVP_sha256 (),
2021+ NULL , privKey ), 1 );
2022+ sigSz = sizeof (sig );
2023+ ExpectIntEQ (wolfSSL_EVP_DigestSign (& mdCtx , sig , & sigSz , testData ,
2024+ (unsigned int )XSTRLEN ((const char * )testData )), 1 );
2025+ ExpectIntGT ((int )sigSz , 0 );
2026+ ret = wolfSSL_EVP_MD_CTX_cleanup (& mdCtx );
2027+ ExpectIntEQ (ret , 1 );
2028+
2029+ /* One-shot verify */
2030+ wolfSSL_EVP_MD_CTX_init (& mdCtx );
2031+ ExpectIntEQ (wolfSSL_EVP_DigestVerifyInit (& mdCtx , NULL ,
2032+ wolfSSL_EVP_sha256 (), NULL , pubKey ), 1 );
2033+ ExpectIntEQ (wolfSSL_EVP_DigestVerify (& mdCtx , sig , sigSz , testData ,
2034+ (unsigned int )XSTRLEN ((const char * )testData )), 1 );
2035+ ret = wolfSSL_EVP_MD_CTX_cleanup (& mdCtx );
2036+ ExpectIntEQ (ret , 1 );
2037+
2038+ wolfSSL_EVP_PKEY_free (pubKey );
2039+ wolfSSL_EVP_PKEY_free (privKey );
2040+ #endif
2041+ return EXPECT_RESULT ();
2042+ }
2043+
2044+
19302045int test_wolfSSL_EVP_PKEY_encrypt (void )
19312046{
19322047 EXPECT_DECLS ;
0 commit comments