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') }