Revert "[wpa_supplicant] Cumulative patch from b8491ae5a"

This reverts commit 878cf7bcbf2d7d8f08c3d060b8c5fbfcf0743eda.

Reason for revert: git_master/sdk_phone_armv7-sdk

Change-Id: I6070fc5c1f9c20867f6dfce90e529e35578d572e
diff --git a/src/crypto/aes_i.h b/src/crypto/aes_i.h
index b20ec92..54375cf 100644
--- a/src/crypto/aes_i.h
+++ b/src/crypto/aes_i.h
@@ -65,7 +65,7 @@
 
 #else /* AES_SMALL_TABLES */
 
-#define RCON(i) ((u32) rcons[(i)] << 24)
+#define RCON(i) (rcons[(i)] << 24)
 
 static inline u32 rotr(u32 val, int bits)
 {
@@ -94,10 +94,10 @@
 #define TD1(i) rotr(Td0[((i) >> 16) & 0xff], 8)
 #define TD2(i) rotr(Td0[((i) >> 8) & 0xff], 16)
 #define TD3(i) rotr(Td0[(i) & 0xff], 24)
-#define TD41(i) ((u32) Td4s[((i) >> 24) & 0xff] << 24)
-#define TD42(i) ((u32) Td4s[((i) >> 16) & 0xff] << 16)
-#define TD43(i) ((u32) Td4s[((i) >> 8) & 0xff] << 8)
-#define TD44(i) ((u32) Td4s[(i) & 0xff])
+#define TD41(i) (Td4s[((i) >> 24) & 0xff] << 24)
+#define TD42(i) (Td4s[((i) >> 16) & 0xff] << 16)
+#define TD43(i) (Td4s[((i) >> 8) & 0xff] << 8)
+#define TD44(i) (Td4s[(i) & 0xff])
 #define TD0_(i) Td0[(i) & 0xff]
 #define TD1_(i) rotr(Td0[(i) & 0xff], 8)
 #define TD2_(i) rotr(Td0[(i) & 0xff], 16)
diff --git a/src/crypto/crypto.h b/src/crypto/crypto.h
index 15f8ad0..12109ce 100644
--- a/src/crypto/crypto.h
+++ b/src/crypto/crypto.h
@@ -645,6 +645,13 @@
 		      const struct crypto_bignum *b);
 
 /**
+ * crypto_bignum_bits - Get size of a bignum in bits
+ * @a: Bignum
+ * Returns: Number of bits in the bignum
+ */
+int crypto_bignum_bits(const struct crypto_bignum *a);
+
+/**
  * crypto_bignum_is_zero - Is the given bignum zero
  * @a: Bignum
  * Returns: 1 if @a is zero or 0 if not
diff --git a/src/crypto/crypto_openssl.c b/src/crypto/crypto_openssl.c
index fb278c2..1b0c1ec 100644
--- a/src/crypto/crypto_openssl.c
+++ b/src/crypto/crypto_openssl.c
@@ -570,8 +570,8 @@
 		failed = !q || !ctx || !tmp ||
 			!BN_mod_exp(tmp, pub, q, p, ctx) ||
 			!BN_is_one(tmp);
-		BN_clear_free(q);
-		BN_clear_free(tmp);
+		BN_clear(q);
+		BN_clear(tmp);
 		BN_CTX_free(ctx);
 		if (failed)
 			goto fail;
@@ -580,8 +580,8 @@
 	res = crypto_mod_exp(pubkey, pubkey_len, privkey, privkey_len,
 			     prime, prime_len, secret, len);
 fail:
-	BN_clear_free(pub);
-	BN_clear_free(p);
+	BN_clear(pub);
+	BN_clear(p);
 	return res;
 }
 
@@ -1295,13 +1295,7 @@
 int crypto_bignum_to_bin(const struct crypto_bignum *a,
 			 u8 *buf, size_t buflen, size_t padlen)
 {
-#ifdef OPENSSL_IS_BORINGSSL
-#else /* OPENSSL_IS_BORINGSSL */
-#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
-#else
 	int num_bytes, offset;
-#endif
-#endif /* OPENSSL_IS_BORINGSSL */
 
 	if (TEST_FAIL())
 		return -1;
@@ -1309,14 +1303,6 @@
 	if (padlen > buflen)
 		return -1;
 
-#ifdef OPENSSL_IS_BORINGSSL
-	if (BN_bn2bin_padded(buf, padlen, (const BIGNUM *) a) == 0)
-		return -1;
-	return padlen;
-#else /* OPENSSL_IS_BORINGSSL */
-#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
-	return BN_bn2binpad((const BIGNUM *) a, buf, padlen);
-#else
 	num_bytes = BN_num_bytes((const BIGNUM *) a);
 	if ((size_t) num_bytes > buflen)
 		return -1;
@@ -1329,8 +1315,6 @@
 	BN_bn2bin((const BIGNUM *) a, buf + offset);
 
 	return num_bytes + offset;
-#endif
-#endif /* OPENSSL_IS_BORINGSSL */
 }
 
 
@@ -1492,6 +1476,12 @@
 }
 
 
+int crypto_bignum_bits(const struct crypto_bignum *a)
+{
+	return BN_num_bits((const BIGNUM *) a);
+}
+
+
 int crypto_bignum_is_zero(const struct crypto_bignum *a)
 {
 	return BN_is_zero((const BIGNUM *) a);
@@ -1880,7 +1870,7 @@
 {
 	struct crypto_ecdh *ecdh;
 	EVP_PKEY *params = NULL;
-	EC_KEY *ec_params = NULL;
+	EC_KEY *ec_params;
 	EVP_PKEY_CTX *kctx = NULL;
 
 	ecdh = os_zalloc(sizeof(*ecdh));
@@ -1923,7 +1913,6 @@
 	}
 
 done:
-	EC_KEY_free(ec_params);
 	EVP_PKEY_free(params);
 	EVP_PKEY_CTX_free(kctx);
 
diff --git a/src/crypto/crypto_wolfssl.c b/src/crypto/crypto_wolfssl.c
index 4cedab4..976a008 100644
--- a/src/crypto/crypto_wolfssl.c
+++ b/src/crypto/crypto_wolfssl.c
@@ -1198,6 +1198,12 @@
 }
 
 
+int crypto_bignum_bits(const struct crypto_bignum *a)
+{
+	return mp_count_bits((mp_int *) a);
+}
+
+
 int crypto_bignum_is_zero(const struct crypto_bignum *a)
 {
 	return mp_iszero((mp_int *) a);
diff --git a/src/crypto/sha1-internal.c b/src/crypto/sha1-internal.c
index ffa04df..a491707 100644
--- a/src/crypto/sha1-internal.c
+++ b/src/crypto/sha1-internal.c
@@ -224,7 +224,7 @@
 	/* Wipe variables */
 	a = b = c = d = e = 0;
 #ifdef SHA1HANDSOFF
-	forced_memzero(block, 64);
+	os_memset(block, 0, 64);
 #endif
 }
 
@@ -300,7 +300,7 @@
 	os_memset(context->buffer, 0, 64);
 	os_memset(context->state, 0, 20);
 	os_memset(context->count, 0, 8);
-	forced_memzero(finalcount, sizeof(finalcount));
+	os_memset(finalcount, 0, 8);
 }
 
 /* ===== end - public domain SHA1 implementation ===== */
diff --git a/src/crypto/sha1-prf.c b/src/crypto/sha1-prf.c
index 1385149..4b2d137 100644
--- a/src/crypto/sha1-prf.c
+++ b/src/crypto/sha1-prf.c
@@ -61,7 +61,7 @@
 		}
 		counter++;
 	}
-	forced_memzero(hash, sizeof(hash));
+	os_memset(hash, 0, sizeof(hash));
 
 	return 0;
 }
diff --git a/src/crypto/sha1-tlsprf.c b/src/crypto/sha1-tlsprf.c
index 5e8d159..a11649a 100644
--- a/src/crypto/sha1-tlsprf.c
+++ b/src/crypto/sha1-tlsprf.c
@@ -92,10 +92,10 @@
 		SHA1_pos++;
 	}
 
-	forced_memzero(A_MD5, MD5_MAC_LEN);
-	forced_memzero(P_MD5, MD5_MAC_LEN);
-	forced_memzero(A_SHA1, SHA1_MAC_LEN);
-	forced_memzero(P_SHA1, SHA1_MAC_LEN);
+	os_memset(A_MD5, 0, MD5_MAC_LEN);
+	os_memset(P_MD5, 0, MD5_MAC_LEN);
+	os_memset(A_SHA1, 0, SHA1_MAC_LEN);
+	os_memset(P_SHA1, 0, SHA1_MAC_LEN);
 
 	return 0;
 }
diff --git a/src/crypto/sha1-tprf.c b/src/crypto/sha1-tprf.c
index c3acf19..562510f 100644
--- a/src/crypto/sha1-tprf.c
+++ b/src/crypto/sha1-tprf.c
@@ -66,7 +66,7 @@
 		len[0] = SHA1_MAC_LEN;
 	}
 
-	forced_memzero(hash, SHA1_MAC_LEN);
+	os_memset(hash, 0, SHA1_MAC_LEN);
 
 	return 0;
 }
diff --git a/src/crypto/sha1.c b/src/crypto/sha1.c
index 76d7a68..8fce139 100644
--- a/src/crypto/sha1.c
+++ b/src/crypto/sha1.c
@@ -86,8 +86,7 @@
 	_addr[1] = mac;
 	_len[1] = SHA1_MAC_LEN;
 	ret = sha1_vector(2, _addr, _len, mac);
-	forced_memzero(k_pad, sizeof(k_pad));
-	forced_memzero(tk, sizeof(tk));
+	os_memset(k_pad, 0, sizeof(k_pad));
 	return ret;
 }
 
diff --git a/src/crypto/sha256-kdf.c b/src/crypto/sha256-kdf.c
index 5a6b744..af7d954 100644
--- a/src/crypto/sha256-kdf.c
+++ b/src/crypto/sha256-kdf.c
@@ -69,7 +69,7 @@
 
 		if (iter == 255) {
 			os_memset(out, 0, outlen);
-			forced_memzero(T, SHA256_MAC_LEN);
+			os_memset(T, 0, SHA256_MAC_LEN);
 			return -1;
 		}
 		iter++;
@@ -77,11 +77,11 @@
 		if (hmac_sha256_vector(secret, secret_len, 4, addr, len, T) < 0)
 		{
 			os_memset(out, 0, outlen);
-			forced_memzero(T, SHA256_MAC_LEN);
+			os_memset(T, 0, SHA256_MAC_LEN);
 			return -1;
 		}
 	}
 
-	forced_memzero(T, SHA256_MAC_LEN);
+	os_memset(T, 0, SHA256_MAC_LEN);
 	return 0;
 }
diff --git a/src/crypto/sha256-prf.c b/src/crypto/sha256-prf.c
index d665a99..722cad6 100644
--- a/src/crypto/sha256-prf.c
+++ b/src/crypto/sha256-prf.c
@@ -102,7 +102,7 @@
 		buf[pos - 1] &= mask;
 	}
 
-	forced_memzero(hash, sizeof(hash));
+	os_memset(hash, 0, sizeof(hash));
 
 	return 0;
 }
diff --git a/src/crypto/sha256-tlsprf.c b/src/crypto/sha256-tlsprf.c
index 9045cd3..0528dad 100644
--- a/src/crypto/sha256-tlsprf.c
+++ b/src/crypto/sha256-tlsprf.c
@@ -26,8 +26,8 @@
  * This function is used to derive new, cryptographically separate keys from a
  * given key in TLS. This PRF is defined in RFC 2246, Chapter 5.
  */
-int tls_prf_sha256(const u8 *secret, size_t secret_len, const char *label,
-		   const u8 *seed, size_t seed_len, u8 *out, size_t outlen)
+void tls_prf_sha256(const u8 *secret, size_t secret_len, const char *label,
+		    const u8 *seed, size_t seed_len, u8 *out, size_t outlen)
 {
 	size_t clen;
 	u8 A[SHA256_MAC_LEN];
@@ -50,15 +50,12 @@
 	 * PRF(secret, label, seed) = P_SHA256(secret, label + seed)
 	 */
 
-	if (hmac_sha256_vector(secret, secret_len, 2, &addr[1], &len[1], A) < 0)
-		return -1;
+	hmac_sha256_vector(secret, secret_len, 2, &addr[1], &len[1], A);
 
 	pos = 0;
 	while (pos < outlen) {
-		if (hmac_sha256_vector(secret, secret_len, 3, addr, len, P) <
-		    0 ||
-		    hmac_sha256(secret, secret_len, A, SHA256_MAC_LEN, A) < 0)
-			return -1;
+		hmac_sha256_vector(secret, secret_len, 3, addr, len, P);
+		hmac_sha256(secret, secret_len, A, SHA256_MAC_LEN, A);
 
 		clen = outlen - pos;
 		if (clen > SHA256_MAC_LEN)
@@ -66,6 +63,4 @@
 		os_memcpy(out + pos, P, clen);
 		pos += clen;
 	}
-
-	return 0;
 }
diff --git a/src/crypto/sha256.h b/src/crypto/sha256.h
index 8054bbe..5219022 100644
--- a/src/crypto/sha256.h
+++ b/src/crypto/sha256.h
@@ -20,9 +20,9 @@
 int sha256_prf_bits(const u8 *key, size_t key_len, const char *label,
 		    const u8 *data, size_t data_len, u8 *buf,
 		    size_t buf_len_bits);
-int tls_prf_sha256(const u8 *secret, size_t secret_len,
-		   const char *label, const u8 *seed, size_t seed_len,
-		   u8 *out, size_t outlen);
+void tls_prf_sha256(const u8 *secret, size_t secret_len,
+		    const char *label, const u8 *seed, size_t seed_len,
+		    u8 *out, size_t outlen);
 int hmac_sha256_kdf(const u8 *secret, size_t secret_len,
 		    const char *label, const u8 *seed, size_t seed_len,
 		    u8 *out, size_t outlen);
diff --git a/src/crypto/sha384-kdf.c b/src/crypto/sha384-kdf.c
index babcb9e..1d19627 100644
--- a/src/crypto/sha384-kdf.c
+++ b/src/crypto/sha384-kdf.c
@@ -69,7 +69,7 @@
 
 		if (iter == 255) {
 			os_memset(out, 0, outlen);
-			forced_memzero(T, SHA384_MAC_LEN);
+			os_memset(T, 0, SHA384_MAC_LEN);
 			return -1;
 		}
 		iter++;
@@ -77,11 +77,11 @@
 		if (hmac_sha384_vector(secret, secret_len, 4, addr, len, T) < 0)
 		{
 			os_memset(out, 0, outlen);
-			forced_memzero(T, SHA384_MAC_LEN);
+			os_memset(T, 0, SHA384_MAC_LEN);
 			return -1;
 		}
 	}
 
-	forced_memzero(T, SHA384_MAC_LEN);
+	os_memset(T, 0, SHA384_MAC_LEN);
 	return 0;
 }
diff --git a/src/crypto/sha384-prf.c b/src/crypto/sha384-prf.c
index 420e78c..03e3cb3 100644
--- a/src/crypto/sha384-prf.c
+++ b/src/crypto/sha384-prf.c
@@ -102,7 +102,7 @@
 		buf[pos - 1] &= mask;
 	}
 
-	forced_memzero(hash, sizeof(hash));
+	os_memset(hash, 0, sizeof(hash));
 
 	return 0;
 }
diff --git a/src/crypto/sha512-kdf.c b/src/crypto/sha512-kdf.c
index 5bde664..8b71f9b 100644
--- a/src/crypto/sha512-kdf.c
+++ b/src/crypto/sha512-kdf.c
@@ -69,7 +69,7 @@
 
 		if (iter == 255) {
 			os_memset(out, 0, outlen);
-			forced_memzero(T, SHA512_MAC_LEN);
+			os_memset(T, 0, SHA512_MAC_LEN);
 			return -1;
 		}
 		iter++;
@@ -77,11 +77,11 @@
 		if (hmac_sha512_vector(secret, secret_len, 4, addr, len, T) < 0)
 		{
 			os_memset(out, 0, outlen);
-			forced_memzero(T, SHA512_MAC_LEN);
+			os_memset(T, 0, SHA512_MAC_LEN);
 			return -1;
 		}
 	}
 
-	forced_memzero(T, SHA512_MAC_LEN);
+	os_memset(T, 0, SHA512_MAC_LEN);
 	return 0;
 }
diff --git a/src/crypto/sha512-prf.c b/src/crypto/sha512-prf.c
index e48cf5f..3b2ad88 100644
--- a/src/crypto/sha512-prf.c
+++ b/src/crypto/sha512-prf.c
@@ -102,7 +102,7 @@
 		buf[pos - 1] &= mask;
 	}
 
-	forced_memzero(hash, sizeof(hash));
+	os_memset(hash, 0, sizeof(hash));
 
 	return 0;
 }
diff --git a/src/crypto/tls.h b/src/crypto/tls.h
index c8b1a82..8bdb91f 100644
--- a/src/crypto/tls.h
+++ b/src/crypto/tls.h
@@ -48,18 +48,6 @@
 
 #define TLS_MAX_ALT_SUBJECT 10
 
-struct tls_cert_data {
-	int depth;
-	const char *subject;
-	const struct wpabuf *cert;
-	const u8 *hash;
-	size_t hash_len;
-	const char *altsubject[TLS_MAX_ALT_SUBJECT];
-	int num_altsubject;
-	const char *serial_num;
-	int tod;
-};
-
 union tls_event_data {
 	struct {
 		int depth;
@@ -69,7 +57,16 @@
 		const struct wpabuf *cert;
 	} cert_fail;
 
-	struct tls_cert_data peer_cert;
+	struct {
+		int depth;
+		const char *subject;
+		const struct wpabuf *cert;
+		const u8 *hash;
+		size_t hash_len;
+		const char *altsubject[TLS_MAX_ALT_SUBJECT];
+		int num_altsubject;
+		const char *serial_num;
+	} peer_cert;
 
 	struct {
 		int is_local;
@@ -111,7 +108,6 @@
 #define TLS_CONN_ENABLE_TLSv1_0 BIT(14)
 #define TLS_CONN_ENABLE_TLSv1_1 BIT(15)
 #define TLS_CONN_ENABLE_TLSv1_2 BIT(16)
-#define TLS_CONN_TEAP_ANON_DH BIT(17)
 
 /**
  * struct tls_connection_params - Parameters for TLS connection
@@ -188,15 +184,12 @@
 	const char *suffix_match;
 	const char *domain_match;
 	const char *client_cert;
-	const char *client_cert2;
 	const u8 *client_cert_blob;
 	size_t client_cert_blob_len;
 	const char *private_key;
-	const char *private_key2;
 	const u8 *private_key_blob;
 	size_t private_key_blob_len;
 	const char *private_key_passwd;
-	const char *private_key_passwd2;
 	const char *dh_file;
 	const u8 *dh_blob;
 	size_t dh_blob_len;
@@ -650,24 +643,4 @@
 
 void tls_connection_remove_session(struct tls_connection *conn);
 
-/**
- * tls_get_tls_unique - Fetch "tls-unique" for channel binding
- * @conn: Connection context data from tls_connection_init()
- * @buf: Buffer for returning the value
- * @max_len: Maximum length of the buffer in bytes
- * Returns: Number of bytes written to buf or -1 on error
- *
- * This function can be used to fetch "tls-unique" (RFC 5929, Section 3) which
- * is the first TLS Finished message sent in the most recent TLS handshake of
- * the TLS connection.
- */
-int tls_get_tls_unique(struct tls_connection *conn, u8 *buf, size_t max_len);
-
-/**
- * tls_connection_get_cipher_suite - Get current TLS cipher suite
- * @conn: Connection context data from tls_connection_init()
- * Returns: TLS cipher suite of the current connection or 0 on error
- */
-u16 tls_connection_get_cipher_suite(struct tls_connection *conn);
-
 #endif /* TLS_H */
diff --git a/src/crypto/tls_openssl.c b/src/crypto/tls_openssl.c
index 9718ceb..620254a 100644
--- a/src/crypto/tls_openssl.c
+++ b/src/crypto/tls_openssl.c
@@ -44,13 +44,6 @@
 #define OPENSSL_NEED_EAP_FAST_PRF
 #endif
 
-#if defined(EAP_FAST) || defined(EAP_FAST_DYNAMIC) || \
-	defined(EAP_SERVER_FAST) || defined(EAP_TEAP) || \
-	defined(EAP_SERVER_TEAP)
-#define EAP_FAST_OR_TEAP
-#endif
-
-
 #if defined(OPENSSL_IS_BORINGSSL)
 /* stack_index_t is the return type of OpenSSL's sk_XXX_num() functions. */
 typedef size_t stack_index_t;
@@ -1092,8 +1085,11 @@
 	}
 
 #ifndef OPENSSL_NO_ENGINE
-	wpa_printf(MSG_DEBUG, "ENGINE: Loading builtin engines");
-	ENGINE_load_builtin_engines();
+	wpa_printf(MSG_DEBUG, "ENGINE: Loading dynamic engine");
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
+	ERR_load_ENGINE_strings();
+	ENGINE_load_dynamic();
+#endif /* OPENSSL_VERSION_NUMBER */
 
 	if (conf &&
 	    (conf->opensc_engine_path || conf->pkcs11_engine_path ||
@@ -1349,8 +1345,6 @@
 		return "heartbeat";
 	case 256:
 		return "TLS header info"; /* pseudo content type */
-	case 257:
-		return "inner content type"; /* pseudo content type */
 	default:
 		return "?";
 	}
@@ -1360,8 +1354,6 @@
 static const char * openssl_handshake_type(int content_type, const u8 *buf,
 					   size_t len)
 {
-	if (content_type == 257 && buf && len == 1)
-		return openssl_content_type(buf[0]);
 	if (content_type != 22 || !buf || len == 0)
 		return "";
 	switch (buf[0]) {
@@ -1592,11 +1584,6 @@
 	options |= SSL_OP_NO_COMPRESSION;
 #endif /* SSL_OP_NO_COMPRESSION */
 	SSL_set_options(conn->ssl, options);
-#ifdef SSL_OP_ENABLE_MIDDLEBOX_COMPAT
-	/* Hopefully there is no need for middlebox compatibility mechanisms
-	 * when going through EAP authentication. */
-	SSL_clear_options(conn->ssl, SSL_OP_ENABLE_MIDDLEBOX_COMPAT);
-#endif
 
 	conn->ssl_in = BIO_new(BIO_s_mem());
 	if (!conn->ssl_in) {
@@ -2183,34 +2170,6 @@
 }
 
 
-static int openssl_cert_tod(X509 *cert)
-{
-	CERTIFICATEPOLICIES *ext;
-	stack_index_t i;
-	char buf[100];
-	int res;
-	int tod = 0;
-
-	ext = X509_get_ext_d2i(cert, NID_certificate_policies, NULL, NULL);
-	if (!ext)
-		return 0;
-
-	for (i = 0; i < sk_POLICYINFO_num(ext); i++) {
-		POLICYINFO *policy;
-
-		policy = sk_POLICYINFO_value(ext, i);
-		res = OBJ_obj2txt(buf, sizeof(buf), policy->policyid, 0);
-		if (res < 0 || (size_t) res >= sizeof(buf))
-			continue;
-		wpa_printf(MSG_DEBUG, "OpenSSL: Certificate Policy %s", buf);
-		if (os_strcmp(buf, "1.3.6.1.4.1.40808.1.3.1") == 0)
-			tod = 1;
-	}
-
-	return tod;
-}
-
-
 static void openssl_tls_cert_event(struct tls_connection *conn,
 				   X509 *err_cert, int depth,
 				   const char *subject)
@@ -2303,8 +2262,6 @@
 		ev.peer_cert.altsubject[alt] = altsubject[alt];
 	ev.peer_cert.num_altsubject = num_altsubject;
 
-	ev.peer_cert.tod = openssl_cert_tod(err_cert);
-
 	context->event_cb(context->cb_ctx, TLS_PEER_CERTIFICATE, &ev);
 	wpabuf_free(cert);
 	for (alt = 0; alt < num_altsubject; alt++)
@@ -2409,30 +2366,7 @@
 	}
 #endif /* CONFIG_SHA256 */
 
-	openssl_tls_cert_event(conn, err_cert, depth, buf);
-
 	if (!preverify_ok) {
-		if (depth > 0) {
-			/* Send cert event for the peer certificate so that
-			 * the upper layers get information about it even if
-			 * validation of a CA certificate fails. */
-			STACK_OF(X509) *chain;
-
-			chain = X509_STORE_CTX_get1_chain(x509_ctx);
-			if (chain && sk_X509_num(chain) > 0) {
-				char buf2[256];
-				X509 *cert;
-
-				cert = sk_X509_value(chain, 0);
-				X509_NAME_oneline(X509_get_subject_name(cert),
-						  buf2, sizeof(buf2));
-
-				openssl_tls_cert_event(conn, cert, 0, buf2);
-			}
-			if (chain)
-				sk_X509_pop_free(chain, X509_free);
-		}
-
 		wpa_printf(MSG_WARNING, "TLS: Certificate verification failed,"
 			   " error %d (%s) depth %d for '%s'", err, err_str,
 			   depth, buf);
@@ -2488,7 +2422,8 @@
 		openssl_tls_fail_event(conn, err_cert, err, depth, buf,
 				       "Domain mismatch",
 				       TLS_FAIL_DOMAIN_MISMATCH);
-	}
+	} else
+		openssl_tls_cert_event(conn, err_cert, depth, buf);
 
 	if (conn->cert_probe && preverify_ok && depth == 0) {
 		wpa_printf(MSG_DEBUG, "OpenSSL: Reject server certificate "
@@ -2663,23 +2598,9 @@
 				      (const unsigned char **) &ca_cert_blob,
 				      ca_cert_blob_len);
 		if (cert == NULL) {
-			BIO *bio = BIO_new_mem_buf(ca_cert_blob,
-						   ca_cert_blob_len);
-
-			if (bio) {
-				cert = PEM_read_bio_X509(bio, NULL, NULL, NULL);
-				BIO_free(bio);
-			}
-
-			if (!cert) {
-				tls_show_errors(MSG_WARNING, __func__,
-						"Failed to parse ca_cert_blob");
-				return -1;
-			}
-
-			while (ERR_get_error()) {
-				/* Ignore errors from DER conversion. */
-			}
+			tls_show_errors(MSG_WARNING, __func__,
+					"Failed to parse ca_cert_blob");
+			return -1;
 		}
 
 		if (!X509_STORE_add_cert(SSL_CTX_get_cert_store(ssl_ctx),
@@ -3113,40 +3034,6 @@
 	}
 #endif /* CONFIG_SUITEB */
 
-	if (flags & TLS_CONN_TEAP_ANON_DH) {
-#ifndef TEAP_DH_ANON_CS
-#define TEAP_DH_ANON_CS \
-	"ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:" \
-	"ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:" \
-	"ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:" \
-	"DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:" \
-	"DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:" \
-	"DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:" \
-	"ADH-AES256-GCM-SHA384:ADH-AES128-GCM-SHA256:" \
-	"ADH-AES256-SHA256:ADH-AES128-SHA256:ADH-AES256-SHA:ADH-AES128-SHA"
-#endif
-		static const char *cs = TEAP_DH_ANON_CS;
-
-#if OPENSSL_VERSION_NUMBER >= 0x10100000L && \
-	!defined(LIBRESSL_VERSION_NUMBER) && \
-	!defined(OPENSSL_IS_BORINGSSL)
-		/*
-		 * Need to drop to security level 0 to allow anonymous
-		 * cipher suites for EAP-TEAP.
-		 */
-		SSL_set_security_level(conn->ssl, 0);
-#endif
-
-		wpa_printf(MSG_DEBUG,
-			   "OpenSSL: Enable cipher suites for anonymous EAP-TEAP provisioning: %s",
-			   cs);
-		if (SSL_set_cipher_list(conn->ssl, cs) != 1) {
-			tls_show_errors(MSG_INFO, __func__,
-					"Cipher suite configuration failed");
-			return -1;
-		}
-	}
-
 	return 0;
 }
 
@@ -4133,7 +4020,7 @@
 				    _out, skip + out_len) == 0) {
 		ret = 0;
 	}
-	forced_memzero(master_key, sizeof(master_key));
+	os_memset(master_key, 0, sizeof(master_key));
 	os_free(rnd);
 	if (ret == 0)
 		os_memcpy(out, _out + skip, out_len);
@@ -4323,22 +4210,6 @@
 		wpa_printf(MSG_DEBUG,
 			   "OpenSSL: Handshake finished - resumed=%d",
 			   tls_connection_resumed(conn->ssl_ctx, conn));
-		if (conn->server) {
-			char *buf;
-			size_t buflen = 2000;
-
-			buf = os_malloc(buflen);
-			if (buf) {
-				if (SSL_get_shared_ciphers(conn->ssl, buf,
-							   buflen)) {
-					buf[buflen - 1] = '\0';
-					wpa_printf(MSG_DEBUG,
-						   "OpenSSL: Shared ciphers: %s",
-						   buf);
-				}
-				os_free(buf);
-			}
-		}
 		if (appl_data && in_data)
 			*appl_data = openssl_get_appl_data(conn,
 							   wpabuf_len(in_data));
@@ -4521,15 +4392,11 @@
 
 		c++;
 	}
-	if (!buf[0]) {
-		wpa_printf(MSG_DEBUG, "OpenSSL: No ciphers listed");
-		return -1;
-	}
 
 	wpa_printf(MSG_DEBUG, "OpenSSL: cipher suites: %s", buf + 1);
 
 #if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
-#ifdef EAP_FAST_OR_TEAP
+#if defined(EAP_FAST) || defined(EAP_FAST_DYNAMIC) || defined(EAP_SERVER_FAST)
 	if (os_strstr(buf, ":ADH-")) {
 		/*
 		 * Need to drop to security level 0 to allow anonymous
@@ -4540,7 +4407,7 @@
 		/* Force at least security level 1 */
 		SSL_set_security_level(conn->ssl, 1);
 	}
-#endif /* EAP_FAST_OR_TEAP */
+#endif /* EAP_FAST || EAP_FAST_DYNAMIC || EAP_SERVER_FAST */
 #endif
 
 	if (SSL_set_cipher_list(conn->ssl, buf + 1) != 1) {
@@ -4594,7 +4461,7 @@
 }
 
 
-#ifdef EAP_FAST_OR_TEAP
+#if defined(EAP_FAST) || defined(EAP_FAST_DYNAMIC) || defined(EAP_SERVER_FAST)
 /* ClientHello TLS extensions require a patch to openssl, so this function is
  * commented out unless explicitly needed for EAP-FAST in order to be able to
  * build this file with unmodified openssl. */
@@ -4611,7 +4478,7 @@
 
 	return 0;
 }
-#endif /* EAP_FAST_OR_TEAP */
+#endif /* EAP_FAST || EAP_FAST_DYNAMIC || EAP_SERVER_FAST */
 
 
 int tls_connection_get_failed(void *ssl_ctx, struct tls_connection *conn)
@@ -4820,7 +4687,6 @@
 	res = OCSP_resp_find_status(basic, id, &status, &reason, &produced_at,
 				    &this_update, &next_update);
 	if (!res) {
-		OCSP_CERTID_free(id);
 		id = OCSP_cert_to_id(NULL, conn->peer_cert, conn->peer_issuer);
 		if (!id) {
 			wpa_printf(MSG_DEBUG,
@@ -5131,114 +4997,6 @@
 }
 
 
-static void openssl_debug_dump_cipher_list(SSL_CTX *ssl_ctx)
-{
-	SSL *ssl;
-	int i;
-
-	ssl = SSL_new(ssl_ctx);
-	if (!ssl)
-		return;
-
-	wpa_printf(MSG_DEBUG,
-		   "OpenSSL: Enabled cipher suites in priority order");
-	for (i = 0; ; i++) {
-		const char *cipher;
-
-		cipher = SSL_get_cipher_list(ssl, i);
-		if (!cipher)
-			break;
-		wpa_printf(MSG_DEBUG, "Cipher %d: %s", i, cipher);
-	}
-
-	SSL_free(ssl);
-}
-
-
-#if !defined(LIBRESSL_VERSION_NUMBER) && !defined(BORINGSSL_API_VERSION)
-
-static const char * openssl_pkey_type_str(const EVP_PKEY *pkey)
-{
-	if (!pkey)
-		return "NULL";
-	switch (EVP_PKEY_type(EVP_PKEY_id(pkey))) {
-	case EVP_PKEY_RSA:
-		return "RSA";
-	case EVP_PKEY_DSA:
-		return "DSA";
-	case EVP_PKEY_DH:
-		return "DH";
-	case EVP_PKEY_EC:
-		return "EC";
-	}
-	return "?";
-}
-
-
-static void openssl_debug_dump_certificate(int i, X509 *cert)
-{
-	char buf[256];
-	EVP_PKEY *pkey;
-	ASN1_INTEGER *ser;
-	char serial_num[128];
-
-	X509_NAME_oneline(X509_get_subject_name(cert), buf, sizeof(buf));
-
-	ser = X509_get_serialNumber(cert);
-	if (ser)
-		wpa_snprintf_hex_uppercase(serial_num, sizeof(serial_num),
-					   ASN1_STRING_get0_data(ser),
-					   ASN1_STRING_length(ser));
-	else
-		serial_num[0] = '\0';
-
-	pkey = X509_get_pubkey(cert);
-	wpa_printf(MSG_DEBUG, "%d: %s (%s) %s", i, buf,
-		   openssl_pkey_type_str(pkey), serial_num);
-	EVP_PKEY_free(pkey);
-}
-
-
-static void openssl_debug_dump_certificates(SSL_CTX *ssl_ctx)
-{
-	STACK_OF(X509) *certs;
-
-	wpa_printf(MSG_DEBUG, "OpenSSL: Configured certificate chain");
-	if (SSL_CTX_get0_chain_certs(ssl_ctx, &certs) == 1) {
-		int i;
-
-		for (i = sk_X509_num(certs); i > 0; i--)
-			openssl_debug_dump_certificate(i, sk_X509_value(certs,
-									i - 1));
-	}
-	openssl_debug_dump_certificate(0, SSL_CTX_get0_certificate(ssl_ctx));
-}
-
-#endif
-
-
-static void openssl_debug_dump_certificate_chains(SSL_CTX *ssl_ctx)
-{
-#if !defined(LIBRESSL_VERSION_NUMBER) && !defined(BORINGSSL_API_VERSION)
-	int res;
-
-	for (res = SSL_CTX_set_current_cert(ssl_ctx, SSL_CERT_SET_FIRST);
-	     res == 1;
-	     res = SSL_CTX_set_current_cert(ssl_ctx, SSL_CERT_SET_NEXT))
-		openssl_debug_dump_certificates(ssl_ctx);
-
-	SSL_CTX_set_current_cert(ssl_ctx, SSL_CERT_SET_FIRST);
-#endif
-}
-
-
-static void openssl_debug_dump_ctx(SSL_CTX *ssl_ctx)
-{
-	openssl_debug_dump_cipher_list(ssl_ctx);
-	openssl_debug_dump_certificate_chains(ssl_ctx);
-}
-
-
 int tls_global_set_params(void *tls_ctx,
 			  const struct tls_connection_params *params)
 {
@@ -5264,9 +5022,6 @@
 	    tls_global_client_cert(data, params->client_cert) ||
 	    tls_global_private_key(data, params->private_key,
 				   params->private_key_passwd) ||
-	    tls_global_client_cert(data, params->client_cert2) ||
-	    tls_global_private_key(data, params->private_key2,
-				   params->private_key_passwd2) ||
 	    tls_global_dh(data, params->dh_file)) {
 		wpa_printf(MSG_INFO, "TLS: Failed to set global parameters");
 		return -1;
@@ -5336,13 +5091,11 @@
 		tls_global->ocsp_stapling_response = NULL;
 #endif /* HAVE_OCSP */
 
-	openssl_debug_dump_ctx(ssl_ctx);
-
 	return 0;
 }
 
 
-#ifdef EAP_FAST_OR_TEAP
+#if defined(EAP_FAST) || defined(EAP_FAST_DYNAMIC) || defined(EAP_SERVER_FAST)
 /* Pre-shared secred requires a patch to openssl, so this function is
  * commented out unless explicitly needed for EAP-FAST in order to be able to
  * build this file with unmodified openssl. */
@@ -5423,7 +5176,7 @@
 
 	return 1;
 }
-#endif /* EAP_FAST_OR_TEAP */
+#endif /* EAP_FAST || EAP_FAST_DYNAMIC || EAP_SERVER_FAST */
 
 
 int tls_connection_set_session_ticket_cb(void *tls_ctx,
@@ -5431,7 +5184,7 @@
 					 tls_session_ticket_cb cb,
 					 void *ctx)
 {
-#ifdef EAP_FAST_OR_TEAP
+#if defined(EAP_FAST) || defined(EAP_FAST_DYNAMIC) || defined(EAP_SERVER_FAST)
 	conn->session_ticket_cb = cb;
 	conn->session_ticket_cb_ctx = ctx;
 
@@ -5448,9 +5201,9 @@
 	}
 
 	return 0;
-#else /* EAP_FAST_OR_TEAP */
+#else /* EAP_FAST || EAP_FAST_DYNAMIC || EAP_SERVER_FAST */
 	return -1;
-#endif /* EAP_FAST_OR_TEAP */
+#endif /* EAP_FAST || EAP_FAST_DYNAMIC || EAP_SERVER_FAST */
 }
 
 
@@ -5533,36 +5286,3 @@
 		wpa_printf(MSG_DEBUG,
 			   "OpenSSL: Removed cached session to disable session resumption");
 }
-
-
-int tls_get_tls_unique(struct tls_connection *conn, u8 *buf, size_t max_len)
-{
-	size_t len;
-	int reused;
-
-	reused = SSL_session_reused(conn->ssl);
-	if ((conn->server && !reused) || (!conn->server && reused))
-		len = SSL_get_peer_finished(conn->ssl, buf, max_len);
-	else
-		len = SSL_get_finished(conn->ssl, buf, max_len);
-
-	if (len == 0 || len > max_len)
-		return -1;
-
-	return len;
-}
-
-
-u16 tls_connection_get_cipher_suite(struct tls_connection *conn)
-{
-	const SSL_CIPHER *cipher;
-
-	cipher = SSL_get_current_cipher(conn->ssl);
-	if (!cipher)
-		return 0;
-#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
-	return SSL_CIPHER_get_protocol_id(cipher);
-#else
-	return SSL_CIPHER_get_id(cipher) & 0xFFFF;
-#endif
-}
diff --git a/src/crypto/tls_wolfssl.c b/src/crypto/tls_wolfssl.c
index 83704ff..e9cb425 100644
--- a/src/crypto/tls_wolfssl.c
+++ b/src/crypto/tls_wolfssl.c
@@ -2044,7 +2044,7 @@
 				       _out, skip + out_len);
 	}
 
-	forced_memzero(master_key, master_key_len);
+	os_memset(master_key, 0, master_key_len);
 	if (ret == 0)
 		os_memcpy(out, _out + skip, out_len);
 	bin_clear_free(tmp_out, skip + out_len);