[PATCH] tls: Fix to handle X.509 v1 certificates correctly
ivan at algosolutions.com
ivan at algosolutions.com
Fri Jun 8 21:05:11 UTC 2018
From 895b58aae3fcae5a86b7650cc71288c5dcf7a3ff Mon Sep 17 00:00:00 2001
From: Ivan Abrea <ivan at algosolutions.com>
Date: Fri, 8 Jun 2018 13:42:22 -0700
Subject: [PATCH] tls: Fix to handle X.509 v1 certificates correctly
---
networking/tls.c | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/networking/tls.c b/networking/tls.c
index 99722cf..6f4050e 100644
--- a/networking/tls.c
+++ b/networking/tls.c
@@ -1082,6 +1082,8 @@ static void find_key_in_der_cert(tls_state_t *tls, uint8_t *der, int len)
* We need Certificate.tbsCertificate.subjectPublicKeyInfo.publicKey
*/
uint8_t *end = der + len;
+ uint8_t tag_class, pc, tag_number;
+ int version_present;
/* enter "Certificate" item: [der, end) will be only Cert */
der = enter_der_item(der, &end);
@@ -1089,8 +1091,23 @@ static void find_key_in_der_cert(tls_state_t *tls, uint8_t *der, int len)
/* enter "tbsCertificate" item: [der, end) will be only tbsCert */
der = enter_der_item(der, &end);
+ /*
+ * Skip version field only if it is present. For a v1 certificate, the
+ * version field won't be present since v1 is the default value for the
+ * version field and fields with default values should be omitted. If
+ * the version field is present it will have a tag class of 2
+ * (context-specific), bit 6 will be 1 (constructed), and a tag number
+ * of 0.
+ */
+ tag_class = der[0] >> 6; /* bits 7-8 */
+ pc = (der[0] & 32) >> 5; /* bit 6 */
+ tag_number = der[0] & 31; /* bits 1-5 */
+ version_present = tag_class == 2 && pc == 1 && tag_number == 0;
+ if (version_present) {
+ der = skip_der_item(der, end); /* version */
+ }
+
/* skip up to subjectPublicKeyInfo */
- der = skip_der_item(der, end); /* version */
der = skip_der_item(der, end); /* serialNumber */
der = skip_der_item(der, end); /* signatureAlgo */
der = skip_der_item(der, end); /* issuer */
--
2.7.4
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/busybox/attachments/20180608/bc11b37c/attachment.html>
More information about the busybox
mailing list