Thread (41 messages) 41 messages, 4 authors, 2021-11-19

Re: [PATCH v7 04/17] X.509: Parse Basic Constraints for CA

From: Eric Snowberg <eric.snowberg@oracle.com>
Date: 2021-11-18 23:30:13
Also in: keyrings, linux-efi, linux-integrity, linux-security-module, lkml

On Nov 18, 2021, at 3:59 PM, Mimi Zohar [off-list ref] wrote:

Hi Eric,

On Mon, 2021-11-15 at 19:15 -0500, Eric Snowberg wrote:
quoted
Parse the X.509 Basic Constraints.  The basic constraints extension
identifies whether the subject of the certificate is a CA.

BasicConstraints ::= SEQUENCE {
       cA                      BOOLEAN DEFAULT FALSE,
       pathLenConstraint       INTEGER (0..MAX) OPTIONAL }

If the CA is true, store it in a new public_key field call key_is_ca.
This will be used in a follow on patch that requires knowing if the
public key is a CA.

Signed-off-by: Eric Snowberg <eric.snowberg@oracle.com>
---
v7: Initial version
---
crypto/asymmetric_keys/x509_cert_parser.c | 9 +++++++++
include/crypto/public_key.h               | 1 +
2 files changed, 10 insertions(+)
diff --git a/crypto/asymmetric_keys/x509_cert_parser.c b/crypto/asymmetric_keys/x509_cert_parser.c
index 6d003096b5bc..f4299b8a4926 100644
--- a/crypto/asymmetric_keys/x509_cert_parser.c
+++ b/crypto/asymmetric_keys/x509_cert_parser.c
@@ -571,6 +571,15 @@ int x509_process_extension(void *context, size_t hdrlen,
		return 0;
	}

+	if (ctx->last_oid == OID_basicConstraints) {
+		if (v[0] != (ASN1_CONS_BIT | ASN1_SEQ))
+			return -EBADMSG;
+		if (v[1] != vlen - 2)
+			return -EBADMSG;
+		if (v[1] != 0 && v[2] == ASN1_BOOL && v[3] == 1)
+			ctx->cert->pub->key_is_ca = true;
+	}
+
	return 0;
}
diff --git a/include/crypto/public_key.h b/include/crypto/public_key.h
index a9b2e600b7cc..61c66be80995 100644
--- a/include/crypto/public_key.h
+++ b/include/crypto/public_key.h
@@ -28,6 +28,7 @@ struct public_key {
	bool key_is_private;
	const char *id_type;
	const char *pkey_algo;
+	bool key_is_ca;
David added "key_is_private" intentionally where he did.  Adding the
"key_is_ca" immediately afterwards doesn't change the struct size.
Ok, I’ll change that in the next round.  Thanks.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help