From 8e03ce28a331225a0fb1bb46b360d3a48bd35dbf Mon Sep 17 00:00:00 2001 From: Pol Henarejos Date: Sat, 4 Feb 2023 20:28:33 +0100 Subject: [PATCH] Fix returning signature in some cases. In some particular cases where signature has a 0 prepended, mpi is written without that which caused variable length signatures. Now it returns the signature whose length is always the same. Signed-off-by: Pol Henarejos --- src/openpgp/openpgp.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/openpgp/openpgp.c b/src/openpgp/openpgp.c index b8657ee..e09f268 100644 --- a/src/openpgp/openpgp.c +++ b/src/openpgp/openpgp.c @@ -1387,10 +1387,10 @@ int ecdsa_sign(mbedtls_ecdsa_context *ctx, const uint8_t *data, size_t data_len, mbedtls_mpi_init(&si); int r = mbedtls_ecdsa_sign(&ctx->grp, &ri, &si, &ctx->d, data, data_len, random_gen, NULL); if (r == 0) { - mbedtls_mpi_write_binary(&ri, out, mbedtls_mpi_size(&ri)); - *out_len = mbedtls_mpi_size(&ri); - mbedtls_mpi_write_binary(&si, out+*out_len, mbedtls_mpi_size(&si)); - *out_len += mbedtls_mpi_size(&si); + size_t plen = (ctx->grp.nbits + 7) / 8; + mbedtls_mpi_write_binary(&ri, out, plen); + mbedtls_mpi_write_binary(&si, out + plen, plen); + *out_len = 2*plen; } mbedtls_mpi_free(&ri); mbedtls_mpi_free(&si);