34#ifdef HAVE_XKEY_PROVIDER
36#include <openssl/core_names.h>
37#include <openssl/evp.h>
42static const char *test_msg =
"Lorem ipsum dolor sit amet, consectetur "
43 "adipisici elit, sed eiusmod tempor incidunt "
44 "ut labore et dolore magna aliqua.";
59 OSSL_PARAM params[2] = { OSSL_PARAM_END };
60 const char *mdname =
"SHA256";
62 if (EVP_PKEY_get_id(privkey) == EVP_PKEY_RSA)
64 const char *padmode =
"pss";
66 OSSL_PARAM_construct_utf8_string(OSSL_SIGNATURE_PARAM_PAD_MODE, (
char *)padmode, 0);
67 params[1] = OSSL_PARAM_construct_end();
69 else if (EVP_PKEY_get_id(privkey) == EVP_PKEY_EC)
71 params[0] = OSSL_PARAM_construct_end();
75 print_error(
"Unknown key type in digest_sign_verify()");
79 EVP_PKEY_CTX *pctx = NULL;
80 EVP_MD_CTX *mctx = EVP_MD_CTX_new();
82 if (!mctx || EVP_DigestSignInit_ex(mctx, &pctx, mdname,
tls_libctx, NULL, privkey, params) <= 0)
86 print_error(
"Failed to initialize EVP_DigestSignInit_ex()\n");
91 if (EVP_DigestSign(mctx, sig, &siglen, (uint8_t *)test_msg, strlen(test_msg)) != 1)
93 print_error(
"EVP_DigestSign: failed to get required signature size");
96 assert_true(siglen > 0);
98 if ((sig = test_calloc(1, siglen)) == NULL)
100 print_error(
"Out of memory");
103 if (EVP_DigestSign(mctx, sig, &siglen, (uint8_t *)test_msg, strlen(test_msg)) != 1)
105 print_error(
"EVP_DigestSign: signing failed");
113 EVP_MD_CTX_free(mctx);
114 mctx = EVP_MD_CTX_new();
117 || EVP_DigestVerifyInit_ex(mctx, &pctx, mdname,
tls_libctx, NULL, pubkey, params) <= 0)
119 print_error(
"Failed to initialize EVP_DigestVerifyInit_ex()");
122 if (EVP_DigestVerify(mctx, sig, siglen, (uint8_t *)test_msg, strlen(test_msg)) != 1)
124 print_error(
"EVP_DigestVerify failed");
132 EVP_MD_CTX_free(mctx);
OSSL_LIB_CTX * tls_libctx
int digest_sign_verify(EVP_PKEY *privkey, EVP_PKEY *pubkey)