From c5ee40e3dfb640547afea7f3a9fc8fe0c9412d4a Mon Sep 17 00:00:00 2001 From: Zhi Guan Date: Tue, 30 Jun 2026 10:57:31 +0800 Subject: [PATCH] Fix P-256 ECDSA DER signature parsing --- src/secp256r1.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/secp256r1.c b/src/secp256r1.c index b35910d3..e674620e 100644 --- a/src/secp256r1.c +++ b/src/secp256r1.c @@ -1526,6 +1526,8 @@ int secp256r1_ecdsa_signature_from_der(SECP256R1_ECDSA_SIGNATURE *sig, const uin const uint8_t *d; const uint8_t *r; const uint8_t *s; + uint8_t rbuf[32] = {0}; + uint8_t sbuf[32] = {0}; size_t dlen, rlen, slen; if ((ret = asn1_sequence_from_der(&d, &dlen, in, inlen)) != 1) { @@ -1541,8 +1543,10 @@ int secp256r1_ecdsa_signature_from_der(SECP256R1_ECDSA_SIGNATURE *sig, const uin return -1; } - if (secp256r1_from_32bytes(sig->r, r) != 1 - || secp256r1_from_32bytes(sig->s, s) != 1) { + memcpy(rbuf + sizeof(rbuf) - rlen, r, rlen); + memcpy(sbuf + sizeof(sbuf) - slen, s, slen); + if (secp256r1_from_32bytes(sig->r, rbuf) != 1 + || secp256r1_from_32bytes(sig->s, sbuf) != 1) { error_print(); return -1; }