summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorDemi Marie Obenour <demiobenour@gmail.com>2022-12-08 15:24:01 -0500
committerDemi Marie Obenour <demiobenour@gmail.com>2022-12-29 18:41:10 -0500
commitf47547b35462571636a76b737602e827ae43bc24 (patch)
tree3a2cd64ee5a56b1c7ff35b2af0702994ad81b93a /drivers
parent72460f50e2437a85ce5229c430931aab8f4a0d5b (diff)
downloadarm-trusted-firmware-f47547b35462571636a76b737602e827ae43bc24.tar.gz
fix(auth): reject invalid padding in digests
Digests must not have padding after the SEQUENCE or OCTET STRING. Change-Id: Id25ab23111781f8c8a97c2c3c8edf1cc4a4384c0 Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/auth/mbedtls/mbedtls_crypto.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/auth/mbedtls/mbedtls_crypto.c b/drivers/auth/mbedtls/mbedtls_crypto.c
index d231179f5..178bbf5f4 100644
--- a/drivers/auth/mbedtls/mbedtls_crypto.c
+++ b/drivers/auth/mbedtls/mbedtls_crypto.c
@@ -170,12 +170,15 @@ static int verify_hash(void *data_ptr, unsigned int data_len,
size_t len;
int rc;
- /* Digest info should be an MBEDTLS_ASN1_SEQUENCE */
+ /*
+ * Digest info should be an MBEDTLS_ASN1_SEQUENCE
+ * and consume all bytes.
+ */
p = (unsigned char *)digest_info_ptr;
end = p + digest_info_len;
rc = mbedtls_asn1_get_tag(&p, end, &len, MBEDTLS_ASN1_CONSTRUCTED |
MBEDTLS_ASN1_SEQUENCE);
- if (rc != 0) {
+ if (rc != 0 || ((size_t)(end - p) != len)) {
return CRYPTO_ERR_HASH;
}
@@ -195,9 +198,9 @@ static int verify_hash(void *data_ptr, unsigned int data_len,
return CRYPTO_ERR_HASH;
}
- /* Hash should be octet string type */
+ /* Hash should be octet string type and consume all bytes */
rc = mbedtls_asn1_get_tag(&p, end, &len, MBEDTLS_ASN1_OCTET_STRING);
- if (rc != 0) {
+ if ((rc != 0) || ((size_t)(end - p) != len)) {
return CRYPTO_ERR_HASH;
}