From: Ingo Franzki Date: Wed, 19 Jul 2023 13:24:49 +0000 (+0200) Subject: speed: Fix execution of EdDSA measurement X-Git-Tag: openssl-3.1.2~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cb80e6bf3d58588e8dc1d7c3168251c69a33c798;p=thirdparty%2Fopenssl.git 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 Reviewed-by: Tomas Mraz Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/21491) (cherry picked from commit 0c85bcbaeabe3a695831bec44ab87964725a51a6) --- diff --git a/apps/speed.c b/apps/speed.c index bac393e3168..8cd9dab7bc5 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");