mbedtls_ecdsa_raw_to_der and mbedtls_ecdsa_der_to_raw: reject bits==0

Cleanly reject bits == 0 when calling mbedtls_ecdsa_raw_to_der() and
mbedtls_ecdsa_der_to_raw(). This can plausibly happen when bits is
user-provided data that the calling application doesn't check.

Before this patch, there was typically-benign undefined behavior, such as
adding 0 to a null pointer or calling memcpy on a null pointer with a size
of 0.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
This commit is contained in:
Gilles Peskine
2024-10-04 18:56:17 +02:00
parent b482e44e49
commit 5dea5f355a
2 changed files with 15 additions and 0 deletions

View File

@@ -1,3 +1,12 @@
# mbedtls_ecdsa_der_to_raw() doesn't accept a null output buffer,
# even with otherwise invalid paramters,
# so we pass it a (non-null) buffer of length 1.
ECDSA Raw -> DER, 0bit
ecdsa_raw_to_der:0:"":"00":MBEDTLS_ERR_ASN1_INVALID_DATA
ECDSA DER -> Raw, 0bit
ecdsa_der_to_raw:0:"":"":MBEDTLS_ERR_ASN1_INVALID_DATA
ECDSA Raw -> DER, 256bit, Success
depends_on:PSA_VENDOR_ECC_MAX_CURVE_BITS >= 256
ecdsa_raw_to_der:256:"11111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222222222222222222222222222222222222222":"30440220111111111111111111111111111111111111111111111111111111111111111102202222222222222222222222222222222222222222222222222222222222222222":0