diff --git a/src/tls/asn1.c b/src/tls/asn1.c
index a08c2e1..822f87c 100644
--- a/src/tls/asn1.c
+++ b/src/tls/asn1.c
@@ -22,36 +22,6 @@
 };
 
 
-static int asn1_valid_der_boolean(struct asn1_hdr *hdr)
-{
-	/* Enforce DER requirements for a single way of encoding a BOOLEAN */
-	if (hdr->length != 1) {
-		wpa_printf(MSG_DEBUG, "ASN.1: Unexpected BOOLEAN length (%u)",
-			   hdr->length);
-		return 0;
-	}
-
-	if (hdr->payload[0] != 0 && hdr->payload[0] != 0xff) {
-		wpa_printf(MSG_DEBUG,
-			   "ASN.1: Invalid BOOLEAN value 0x%x (DER requires 0 or 0xff)",
-			   hdr->payload[0]);
-		return 0;
-	}
-
-	return 1;
-}
-
-
-static int asn1_valid_der(struct asn1_hdr *hdr)
-{
-	if (hdr->class != ASN1_CLASS_UNIVERSAL)
-		return 1;
-	if (hdr->tag == ASN1_TAG_BOOLEAN && !asn1_valid_der_boolean(hdr))
-		return 0;
-	return 1;
-}
-
-
 int asn1_get_next(const u8 *buf, size_t len, struct asn1_hdr *hdr)
 {
 	const u8 *pos, *end;
@@ -121,8 +91,7 @@
 	}
 
 	hdr->payload = pos;
-
-	return asn1_valid_der(hdr) ? 0 : -1;
+	return 0;
 }
 
 
diff --git a/src/tls/libtommath.c b/src/tls/libtommath.c
index 7156744..4f7a148 100644
--- a/src/tls/libtommath.c
+++ b/src/tls/libtommath.c
@@ -2441,7 +2441,6 @@
 
   /* clear the carry */
   _W = 0;
-  os_memset(W, 0, sizeof(W));
   for (ix = 0; ix < pa; ix++) {
       int      tx, ty;
       int      iy;
diff --git a/src/tls/x509v3.c b/src/tls/x509v3.c
index 1bd5aa0..fa4d442 100644
--- a/src/tls/x509v3.c
+++ b/src/tls/x509v3.c
@@ -538,43 +538,9 @@
 }
 
 
-static int parse_uint2(const char *pos, size_t len)
-{
-	char buf[3];
-	int ret;
-
-	if (len < 2)
-		return -1;
-	buf[0] = pos[0];
-	buf[1] = pos[1];
-	buf[2] = 0x00;
-	if (sscanf(buf, "%2d", &ret) != 1)
-		return -1;
-	return ret;
-}
-
-
-static int parse_uint4(const char *pos, size_t len)
-{
-	char buf[5];
-	int ret;
-
-	if (len < 4)
-		return -1;
-	buf[0] = pos[0];
-	buf[1] = pos[1];
-	buf[2] = pos[2];
-	buf[3] = pos[3];
-	buf[4] = 0x00;
-	if (sscanf(buf, "%4d", &ret) != 1)
-		return -1;
-	return ret;
-}
-
-
 int x509_parse_time(const u8 *buf, size_t len, u8 asn1_tag, os_time_t *val)
 {
-	const char *pos, *end;
+	const char *pos;
 	int year, month, day, hour, min, sec;
 
 	/*
@@ -588,7 +554,6 @@
 	 */
 
 	pos = (const char *) buf;
-	end = pos + len;
 
 	switch (asn1_tag) {
 	case ASN1_TAG_UTCTIME:
@@ -597,8 +562,7 @@
 					  "UTCTime format", buf, len);
 			return -1;
 		}
-		year = parse_uint2(pos, end - pos);
-		if (year < 0) {
+		if (sscanf(pos, "%02d", &year) != 1) {
 			wpa_hexdump_ascii(MSG_DEBUG, "X509: Failed to parse "
 					  "UTCTime year", buf, len);
 			return -1;
@@ -615,8 +579,7 @@
 					  "GeneralizedTime format", buf, len);
 			return -1;
 		}
-		year = parse_uint4(pos, end - pos);
-		if (year < 0) {
+		if (sscanf(pos, "%04d", &year) != 1) {
 			wpa_hexdump_ascii(MSG_DEBUG, "X509: Failed to parse "
 					  "GeneralizedTime year", buf, len);
 			return -1;
@@ -629,40 +592,35 @@
 		return -1;
 	}
 
-	month = parse_uint2(pos, end - pos);
-	if (month < 0) {
+	if (sscanf(pos, "%02d", &month) != 1) {
 		wpa_hexdump_ascii(MSG_DEBUG, "X509: Failed to parse Time "
 				  "(month)", buf, len);
 		return -1;
 	}
 	pos += 2;
 
-	day = parse_uint2(pos, end - pos);
-	if (day < 0) {
+	if (sscanf(pos, "%02d", &day) != 1) {
 		wpa_hexdump_ascii(MSG_DEBUG, "X509: Failed to parse Time "
 				  "(day)", buf, len);
 		return -1;
 	}
 	pos += 2;
 
-	hour = parse_uint2(pos, end - pos);
-	if (hour < 0) {
+	if (sscanf(pos, "%02d", &hour) != 1) {
 		wpa_hexdump_ascii(MSG_DEBUG, "X509: Failed to parse Time "
 				  "(hour)", buf, len);
 		return -1;
 	}
 	pos += 2;
 
-	min = parse_uint2(pos, end - pos);
-	if (min < 0) {
+	if (sscanf(pos, "%02d", &min) != 1) {
 		wpa_hexdump_ascii(MSG_DEBUG, "X509: Failed to parse Time "
 				  "(min)", buf, len);
 		return -1;
 	}
 	pos += 2;
 
-	sec = parse_uint2(pos, end - pos);
-	if (sec < 0) {
+	if (sscanf(pos, "%02d", &sec) != 1) {
 		wpa_hexdump_ascii(MSG_DEBUG, "X509: Failed to parse Time "
 				  "(sec)", buf, len);
 		return -1;
@@ -815,7 +773,6 @@
 	struct asn1_hdr hdr;
 	unsigned long value;
 	size_t left;
-	const u8 *end_seq;
 
 	/*
 	 * BasicConstraints ::= SEQUENCE {
@@ -837,7 +794,6 @@
 	if (hdr.length == 0)
 		return 0;
 
-	end_seq = hdr.payload + hdr.length;
 	if (asn1_get_next(hdr.payload, hdr.length, &hdr) < 0 ||
 	    hdr.class != ASN1_CLASS_UNIVERSAL) {
 		wpa_printf(MSG_DEBUG, "X509: Failed to parse "
@@ -846,16 +802,22 @@
 	}
 
 	if (hdr.tag == ASN1_TAG_BOOLEAN) {
+		if (hdr.length != 1) {
+			wpa_printf(MSG_DEBUG, "X509: Unexpected "
+				   "Boolean length (%u) in BasicConstraints",
+				   hdr.length);
+			return -1;
+		}
 		cert->ca = hdr.payload[0];
 
-		pos = hdr.payload + hdr.length;
-		if (pos >= end_seq) {
-			/* No optional pathLenConstraint */
+		if (hdr.length == pos + len - hdr.payload) {
 			wpa_printf(MSG_DEBUG, "X509: BasicConstraints - cA=%d",
 				   cert->ca);
 			return 0;
 		}
-		if (asn1_get_next(pos, end_seq - pos, &hdr) < 0 ||
+
+		if (asn1_get_next(hdr.payload + hdr.length, len - hdr.length,
+				  &hdr) < 0 ||
 		    hdr.class != ASN1_CLASS_UNIVERSAL) {
 			wpa_printf(MSG_DEBUG, "X509: Failed to parse "
 				   "BasicConstraints");
@@ -1301,6 +1263,11 @@
 	}
 
 	if (hdr.tag == ASN1_TAG_BOOLEAN) {
+		if (hdr.length != 1) {
+			wpa_printf(MSG_DEBUG, "X509: Unexpected "
+				   "Boolean length (%u)", hdr.length);
+			return -1;
+		}
 		critical_ext = hdr.payload[0];
 		pos = hdr.payload;
 		if (asn1_get_next(pos, end - pos, &hdr) < 0 ||
