summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortb <>2023-07-03 09:55:42 +0000
committertb <>2023-07-03 09:55:42 +0000
commitb7bf542a80b8e960840d2ae7d1c844dfdb441703 (patch)
tree257c9617c8efff15db5b617730846ff0d49e5e2a /src
parent58ba5121ee4dbdd1a52e6e00ba1bbfb412fb8dee (diff)
downloadopenbsd-b7bf542a80b8e960840d2ae7d1c844dfdb441703.tar.gz
openbsd-b7bf542a80b8e960840d2ae7d1c844dfdb441703.tar.bz2
openbsd-b7bf542a80b8e960840d2ae7d1c844dfdb441703.zip
Streamline ossl_ecdsa_verify()
Make it single exit and use API more idiomatically and some other cosmetics. ok beck jsing
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/ecdsa/ecs_ossl.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/src/lib/libcrypto/ecdsa/ecs_ossl.c b/src/lib/libcrypto/ecdsa/ecs_ossl.c
index abf6b3b385..7e03c234ee 100644
--- a/src/lib/libcrypto/ecdsa/ecs_ossl.c
+++ b/src/lib/libcrypto/ecdsa/ecs_ossl.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ecs_ossl.c,v 1.48 2023/07/03 07:28:05 tb Exp $ */ 1/* $OpenBSD: ecs_ossl.c,v 1.49 2023/07/03 09:55:42 tb Exp $ */
2/* 2/*
3 * Written by Nils Larsch for the OpenSSL project 3 * Written by Nils Larsch for the OpenSSL project
4 */ 4 */
@@ -426,24 +426,30 @@ ossl_ecdsa_verify(int type, const unsigned char *dgst, int dgst_len,
426{ 426{
427 ECDSA_SIG *s; 427 ECDSA_SIG *s;
428 unsigned char *der = NULL; 428 unsigned char *der = NULL;
429 const unsigned char *p = sigbuf; 429 const unsigned char *p;
430 int derlen = -1; 430 int derlen = 0;
431 int ret = -1; 431 int ret = -1;
432 432
433 if ((s = ECDSA_SIG_new()) == NULL) 433 if ((s = ECDSA_SIG_new()) == NULL)
434 return (ret); 434 goto err;
435
436 p = sigbuf;
435 if (d2i_ECDSA_SIG(&s, &p, sig_len) == NULL) 437 if (d2i_ECDSA_SIG(&s, &p, sig_len) == NULL)
436 goto err; 438 goto err;
439
437 /* Ensure signature uses DER and doesn't have trailing garbage */ 440 /* Ensure signature uses DER and doesn't have trailing garbage */
438 derlen = i2d_ECDSA_SIG(s, &der); 441 if ((derlen = i2d_ECDSA_SIG(s, &der)) != sig_len)
439 if (derlen != sig_len || memcmp(sigbuf, der, derlen)) 442 goto err;
443 if (memcmp(sigbuf, der, derlen))
440 goto err; 444 goto err;
445
441 ret = ECDSA_do_verify(dgst, dgst_len, s, eckey); 446 ret = ECDSA_do_verify(dgst, dgst_len, s, eckey);
442 447
443 err: 448 err:
444 freezero(der, derlen); 449 freezero(der, derlen);
445 ECDSA_SIG_free(s); 450 ECDSA_SIG_free(s);
446 return (ret); 451
452 return ret;
447} 453}
448 454
449int 455int