From 4d7b40aacbf59278ea30e7f4ece9e9a253d6231f Mon Sep 17 00:00:00 2001 From: Bhanu Prakash <35184675+BhanuPrakash-P@users.noreply.github.com> Date: Thu, 25 Jul 2024 13:25:12 +0530 Subject: [PATCH] Fix pkcs8 unencrypted private key parsing with Attributes field Signed-off-by: Bhanu Prakash <35184675+BhanuPrakash-P@users.noreply.github.com> Signed-off-by: Bhanu Prakash Pathi --- library/pkparse.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/library/pkparse.c b/library/pkparse.c index e1422df771..96da19789c 100644 --- a/library/pkparse.c +++ b/library/pkparse.c @@ -1417,7 +1417,18 @@ static int pk_parse_key_pkcs8_unencrypted_der( #endif /* MBEDTLS_PK_HAVE_ECC_KEYS */ return MBEDTLS_ERR_PK_UNKNOWN_PK_ALG; - end = p + len; + p = p+len; + if (p != end) { + /* + * Is 'attributes' present? + */ + if ((ret = mbedtls_asn1_get_tag(&p, end, &len, + MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | + 0)) != 0) { + return MBEDTLS_ERROR_ADD(MBEDTLS_ERR_PK_KEY_INVALID_FORMAT, ret); + } + } + if (end != (key + keylen)) { return MBEDTLS_ERROR_ADD(MBEDTLS_ERR_PK_KEY_INVALID_FORMAT, MBEDTLS_ERR_ASN1_LENGTH_MISMATCH);