From 1e5c81254090ce3f9e1167f99634be72b237c1c0 Mon Sep 17 00:00:00 2001 From: blackshirt Date: Mon, 17 Mar 2025 21:40:52 +0700 Subject: [PATCH] crypto.ecdsa: improve internal `sign_digest` routine (#23960) --- vlib/crypto/ecdsa/ecdsa.v | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/vlib/crypto/ecdsa/ecdsa.v b/vlib/crypto/ecdsa/ecdsa.v index 79bc085afa..3f5a12d083 100644 --- a/vlib/crypto/ecdsa/ecdsa.v +++ b/vlib/crypto/ecdsa/ecdsa.v @@ -363,14 +363,12 @@ fn sign_digest(key &C.EVP_PKEY, digest []u8) ![]u8 { // siglen was used to store the size of the signature output. When EVP_PKEY_sign // was called with NULL signature buffer, siglen will tell maximum size of signature. siglen := usize(C.EVP_PKEY_size(key)) - st := C.EVP_PKEY_sign(ctx, 0, &siglen, digest.data, digest.len) - if st <= 0 { - C.EVP_PKEY_CTX_free(ctx) - return error('Get null buffer length on EVP_PKEY_sign') - } sig := []u8{len: int(siglen)} + + // calls directly with sign do := C.EVP_PKEY_sign(ctx, sig.data, &siglen, digest.data, digest.len) if do <= 0 { + unsafe { sig.free() } C.EVP_PKEY_CTX_free(ctx) return error('EVP_PKEY_sign fails to sign message') }