summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorIngo Franzki <ifranzki@linux.ibm.com>2023-07-19 15:24:49 +0200
committerPauli <pauli@openssl.org>2023-07-21 10:13:23 +1000
commitcb80e6bf3d58588e8dc1d7c3168251c69a33c798 (patch)
tree335af8ec8442ca4bd5e1873df847423e0536a200 /apps
parent405d11acf34963e3bb3005425400f14bcb9bffd5 (diff)
speed: Fix execution of EdDSA measurement
Running 'openssl speed eddsa' fails with Doing 253 bits sign Ed25519 ops for 10s: EdDSA sign failure 000003FF9306C7D0:error:030000BC:digital envelope routines:EVP_DigestSign: final error:crypto/evp/m_sigver.c:585: -1 253 bits Ed25519 sign ops in 0.00s Doing 253 bits verify Ed25519 ops for 10s: EdDSA verify failure 000003FF9306C7D0:error:030000BC:digital envelope routines:EVP_DigestVerify: final error:crypto/evp/m_sigver.c:694: -1 253 bits Ed25519 verify ops in 0.00s This is because the EVP_DigestSign/Verify() calls in the EdDSA_sign/verify_loop() fail because the context has already been finalized by the previous EVP_DigestSign/Verify call during the EdDSA signature test done by speed_main(). This happens since commit 3fc2b7d6b8f961144905330dfd4689f5bd515199 where the EVP_DigestSign/Verify() functions have been changed to set a flag that the context has been finalized. Fix this by re-initializing the context using EVP_DigestSign/Verify() in the EdDSA_sign/verify_loop(). Signed-off-by: Ingo Franzki <ifranzki@linux.ibm.com> Reviewed-by: Tomas Mraz <tomas@openssl.org> Reviewed-by: Paul Dale <pauli@openssl.org> (Merged from https://github.com/openssl/openssl/pull/21491) (cherry picked from commit 0c85bcbaeabe3a695831bec44ab87964725a51a6)
Diffstat (limited to 'apps')
-rw-r--r--apps/speed.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/apps/speed.c b/apps/speed.c
index bac393e316..8cd9dab7bc 100644
--- a/apps/speed.c
+++ b/apps/speed.c
@@ -1024,6 +1024,13 @@ static int EdDSA_sign_loop(void *args)
int ret, count;
for (count = 0; COND(eddsa_c[testnum][0]); count++) {
+ ret = EVP_DigestSignInit(edctx[testnum], NULL, NULL, NULL, NULL);
+ if (ret == 0) {
+ BIO_printf(bio_err, "EdDSA sign init failure\n");
+ ERR_print_errors(bio_err);
+ count = -1;
+ break;
+ }
ret = EVP_DigestSign(edctx[testnum], eddsasig, eddsasigsize, buf, 20);
if (ret == 0) {
BIO_printf(bio_err, "EdDSA sign failure\n");
@@ -1045,6 +1052,13 @@ static int EdDSA_verify_loop(void *args)
int ret, count;
for (count = 0; COND(eddsa_c[testnum][1]); count++) {
+ ret = EVP_DigestVerifyInit(edctx[testnum], NULL, NULL, NULL, NULL);
+ if (ret == 0) {
+ BIO_printf(bio_err, "EdDSA verify init failure\n");
+ ERR_print_errors(bio_err);
+ count = -1;
+ break;
+ }
ret = EVP_DigestVerify(edctx[testnum], eddsasig, eddsasigsize, buf, 20);
if (ret != 1) {
BIO_printf(bio_err, "EdDSA verify failure\n");