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