diff --git a/wpa_supplicant/binder/binder_manager.h b/wpa_supplicant/binder/binder_manager.h
index 0d5a914..01ff2fc 100644
--- a/wpa_supplicant/binder/binder_manager.h
+++ b/wpa_supplicant/binder/binder_manager.h
@@ -172,6 +172,68 @@
 	};
 };
 
-} // namespace wpa_supplicant_binder
+// The binder interface uses some values which are the same as internal ones to
+// avoid nasty runtime conversion functions.  So, adding compile time asserts
+// to guard against any internal changes breaking the binder interface.
+static_assert(
+    fi::w1::wpa_supplicant::INetwork::KEY_MGMT_MASK_NONE == WPA_KEY_MGMT_NONE,
+    "KeyMgmt value mismatch");
+static_assert(
+    fi::w1::wpa_supplicant::INetwork::KEY_MGMT_MASK_WPA_PSK == WPA_KEY_MGMT_PSK,
+    "KeyMgmt value mismatch");
+static_assert(
+    fi::w1::wpa_supplicant::INetwork::KEY_MGMT_MASK_WPA_EAP ==
+	WPA_KEY_MGMT_IEEE8021X,
+    "KeyMgmt value mismatch");
+static_assert(
+    fi::w1::wpa_supplicant::INetwork::KEY_MGMT_MASK_IEEE8021X ==
+	WPA_KEY_MGMT_IEEE8021X_NO_WPA,
+    "KeyMgmt value mismatch");
+static_assert(
+    fi::w1::wpa_supplicant::INetwork::PROTO_MASK_WPA == WPA_PROTO_WPA,
+    "Proto value mismatch");
+static_assert(
+    fi::w1::wpa_supplicant::INetwork::PROTO_MASK_RSN == WPA_PROTO_RSN,
+    "Proto value mismatch");
+static_assert(
+    fi::w1::wpa_supplicant::INetwork::PROTO_MASK_OSEN == WPA_PROTO_OSEN,
+    "Proto value mismatch");
+static_assert(
+    fi::w1::wpa_supplicant::INetwork::AUTH_ALG_MASK_OPEN == WPA_AUTH_ALG_OPEN,
+    "AuthAlg value mismatch");
+static_assert(
+    fi::w1::wpa_supplicant::INetwork::AUTH_ALG_MASK_SHARED ==
+	WPA_AUTH_ALG_SHARED,
+    "AuthAlg value mismatch");
+static_assert(
+    fi::w1::wpa_supplicant::INetwork::AUTH_ALG_MASK_LEAP == WPA_AUTH_ALG_LEAP,
+    "AuthAlg value mismatch");
+static_assert(
+    fi::w1::wpa_supplicant::INetwork::GROUP_CIPHER_MASK_WEP40 ==
+	WPA_CIPHER_WEP40,
+    "GroupCipher value mismatch");
+static_assert(
+    fi::w1::wpa_supplicant::INetwork::GROUP_CIPHER_MASK_WEP104 ==
+	WPA_CIPHER_WEP104,
+    "GroupCipher value mismatch");
+static_assert(
+    fi::w1::wpa_supplicant::INetwork::GROUP_CIPHER_MASK_TKIP == WPA_CIPHER_TKIP,
+    "GroupCipher value mismatch");
+static_assert(
+    fi::w1::wpa_supplicant::INetwork::GROUP_CIPHER_MASK_CCMP == WPA_CIPHER_CCMP,
+    "GroupCipher value mismatch");
+static_assert(
+    fi::w1::wpa_supplicant::INetwork::PAIRWISE_CIPHER_MASK_NONE ==
+	WPA_CIPHER_NONE,
+    "PairwiseCipher value mismatch");
+static_assert(
+    fi::w1::wpa_supplicant::INetwork::PAIRWISE_CIPHER_MASK_TKIP ==
+	WPA_CIPHER_TKIP,
+    "PairwiseCipher value mismatch");
+static_assert(
+    fi::w1::wpa_supplicant::INetwork::PAIRWISE_CIPHER_MASK_CCMP ==
+	WPA_CIPHER_CCMP,
+    "PairwiseCipher value mismatch");
 
+} // namespace wpa_supplicant_binder
 #endif // WPA_SUPPLICANT_BINDER_BINDER_MANAGER_H
diff --git a/wpa_supplicant/binder/fi/w1/wpa_supplicant/INetwork.aidl b/wpa_supplicant/binder/fi/w1/wpa_supplicant/INetwork.aidl
index a04fc7b..4f94d85 100644
--- a/wpa_supplicant/binder/fi/w1/wpa_supplicant/INetwork.aidl
+++ b/wpa_supplicant/binder/fi/w1/wpa_supplicant/INetwork.aidl
@@ -48,15 +48,15 @@
 	const int WEP104_KEY_LEN = 13;
 
 	/** Possble mask of values for KeyMgmt param. */
-	const int KEY_MGMT_MASK_NONE = 0x01;
+	const int KEY_MGMT_MASK_WPA_EAP = 0x01;
 	const int KEY_MGMT_MASK_WPA_PSK = 0x02;
-	const int KEY_MGMT_MASK_WPA_EAP = 0x04;
-	const int KEY_MGMT_MASK_IEEE8021X = 0xFF;
+	const int KEY_MGMT_MASK_NONE = 0x04;
+	const int KEY_MGMT_MASK_IEEE8021X = 0x08;
 
 	/** Possble mask of values for Proto param. */
 	const int PROTO_MASK_WPA = 0x01;
 	const int PROTO_MASK_RSN = 0x02;
-	const int PROTO_MASK_OSEN = 0x04;
+	const int PROTO_MASK_OSEN = 0x08;
 
 	/** Possble mask of values for AuthAlg param. */
 	const int AUTH_ALG_MASK_OPEN = 0x01;
@@ -64,15 +64,15 @@
 	const int AUTH_ALG_MASK_LEAP = 0x04;
 
 	/** Possble mask of values for GroupCipher param. */
-	const int GROUP_CIPHER_MASK_WEP40 = 0x01;
-	const int GROUP_CIPHER_MASK_WEP104 = 0x02;
-	const int GROUP_CIPHER_MASK_TKIP = 0x04;
-	const int GROUP_CIPHER_MASK_CCMP = 0x08;
+	const int GROUP_CIPHER_MASK_WEP40 = 0x02;
+	const int GROUP_CIPHER_MASK_WEP104 = 0x04;
+	const int GROUP_CIPHER_MASK_TKIP = 0x08;
+	const int GROUP_CIPHER_MASK_CCMP = 0x10;
 
 	/** Possble mask of values for PairwiseCipher param. */
 	const int PAIRWISE_CIPHER_MASK_NONE = 0x01;
-	const int PAIRWISE_CIPHER_MASK_TKIP = 0x02;
-	const int PAIRWISE_CIPHER_MASK_CCMP = 0x04;
+	const int PAIRWISE_CIPHER_MASK_TKIP = 0x08;
+	const int PAIRWISE_CIPHER_MASK_CCMP = 0x10;
 
 	/**
 	 * Retrieves the ID allocated to this network by wpa_supplicant.
diff --git a/wpa_supplicant/binder/network.cpp b/wpa_supplicant/binder/network.cpp
index 12cfec0..41bcf7d 100644
--- a/wpa_supplicant/binder/network.cpp
+++ b/wpa_supplicant/binder/network.cpp
@@ -10,6 +10,31 @@
 #include "binder_manager.h"
 #include "network.h"
 
+namespace {
+constexpr int kAllowedKeyMgmtMask =
+    (fi::w1::wpa_supplicant::INetwork::KEY_MGMT_MASK_NONE |
+     fi::w1::wpa_supplicant::INetwork::KEY_MGMT_MASK_WPA_PSK |
+     fi::w1::wpa_supplicant::INetwork::KEY_MGMT_MASK_WPA_EAP |
+     fi::w1::wpa_supplicant::INetwork::KEY_MGMT_MASK_IEEE8021X);
+constexpr int kAllowedProtoMask =
+    (fi::w1::wpa_supplicant::INetwork::PROTO_MASK_WPA |
+     fi::w1::wpa_supplicant::INetwork::PROTO_MASK_RSN |
+     fi::w1::wpa_supplicant::INetwork::PROTO_MASK_OSEN);
+constexpr int kAllowedAuthAlgMask =
+    (fi::w1::wpa_supplicant::INetwork::AUTH_ALG_MASK_OPEN |
+     fi::w1::wpa_supplicant::INetwork::AUTH_ALG_MASK_SHARED |
+     fi::w1::wpa_supplicant::INetwork::AUTH_ALG_MASK_LEAP);
+constexpr int kAllowedGroupCipherMask =
+    (fi::w1::wpa_supplicant::INetwork::GROUP_CIPHER_MASK_WEP40 |
+     fi::w1::wpa_supplicant::INetwork::GROUP_CIPHER_MASK_WEP104 |
+     fi::w1::wpa_supplicant::INetwork::GROUP_CIPHER_MASK_TKIP |
+     fi::w1::wpa_supplicant::INetwork::GROUP_CIPHER_MASK_CCMP);
+constexpr int kAllowedPairwiseCipherMask =
+    (fi::w1::wpa_supplicant::INetwork::PAIRWISE_CIPHER_MASK_NONE |
+     fi::w1::wpa_supplicant::INetwork::PAIRWISE_CIPHER_MASK_TKIP |
+     fi::w1::wpa_supplicant::INetwork::PAIRWISE_CIPHER_MASK_CCMP);
+} // namespace
+
 namespace wpa_supplicant_binder {
 
 #define RETURN_IF_NETWORK_INVALID(wpa_ssid)                                    \
@@ -129,6 +154,17 @@
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
 	RETURN_IF_NETWORK_INVALID(wpa_ssid);
+
+	if (key_mgmt_mask & ~kAllowedKeyMgmtMask) {
+		const std::string error_msg = "Invalid key_mgmt value: " +
+					      std::to_string(key_mgmt_mask) +
+					      ".";
+		return android::binder::Status::fromExceptionCode(
+		    android::binder::Status::EX_ILLEGAL_ARGUMENT,
+		    error_msg.c_str());
+	}
+	wpa_ssid->key_mgmt = key_mgmt_mask;
+	wpa_printf(MSG_MSGDUMP, "key_mgmt: 0x%x", wpa_ssid->key_mgmt);
 	return android::binder::Status::ok();
 }
 
@@ -136,6 +172,16 @@
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
 	RETURN_IF_NETWORK_INVALID(wpa_ssid);
+
+	if (proto_mask & ~kAllowedProtoMask) {
+		const std::string error_msg =
+		    "Invalid proto value: " + std::to_string(proto_mask) + ".";
+		return android::binder::Status::fromExceptionCode(
+		    android::binder::Status::EX_ILLEGAL_ARGUMENT,
+		    error_msg.c_str());
+	}
+	wpa_ssid->proto = proto_mask;
+	wpa_printf(MSG_MSGDUMP, "proto: 0x%x", wpa_ssid->proto);
 	return android::binder::Status::ok();
 }
 
@@ -143,6 +189,17 @@
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
 	RETURN_IF_NETWORK_INVALID(wpa_ssid);
+
+	if (auth_alg_mask & ~kAllowedAuthAlgMask) {
+		const std::string error_msg = "Invalid auth_alg value: " +
+					      std::to_string(auth_alg_mask) +
+					      ".";
+		return android::binder::Status::fromExceptionCode(
+		    android::binder::Status::EX_ILLEGAL_ARGUMENT,
+		    error_msg.c_str());
+	}
+	wpa_ssid->auth_alg = auth_alg_mask;
+	wpa_printf(MSG_MSGDUMP, "auth_alg: 0x%x", wpa_ssid->auth_alg);
 	return android::binder::Status::ok();
 }
 
@@ -150,6 +207,17 @@
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
 	RETURN_IF_NETWORK_INVALID(wpa_ssid);
+
+	if (group_cipher_mask & ~kAllowedGroupCipherMask) {
+		const std::string error_msg =
+		    "Invalid group_cipher value: " +
+		    std::to_string(group_cipher_mask) + ".";
+		return android::binder::Status::fromExceptionCode(
+		    android::binder::Status::EX_ILLEGAL_ARGUMENT,
+		    error_msg.c_str());
+	}
+	wpa_ssid->group_cipher = group_cipher_mask;
+	wpa_printf(MSG_MSGDUMP, "group_cipher: 0x%x", wpa_ssid->group_cipher);
 	return android::binder::Status::ok();
 }
 
@@ -157,6 +225,18 @@
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
 	RETURN_IF_NETWORK_INVALID(wpa_ssid);
+
+	if (pairwise_cipher_mask & ~kAllowedPairwiseCipherMask) {
+		const std::string error_msg =
+		    "Invalid pairwise_cipher value: " +
+		    std::to_string(pairwise_cipher_mask) + ".";
+		return android::binder::Status::fromExceptionCode(
+		    android::binder::Status::EX_ILLEGAL_ARGUMENT,
+		    error_msg.c_str());
+	}
+	wpa_ssid->pairwise_cipher = pairwise_cipher_mask;
+	wpa_printf(
+	    MSG_MSGDUMP, "pairwise_cipher: 0x%x", wpa_ssid->pairwise_cipher);
 	return android::binder::Status::ok();
 }
 
@@ -245,6 +325,9 @@
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
 	RETURN_IF_NETWORK_INVALID(wpa_ssid);
+
+	wpa_ssid->ieee80211w =
+	    enable ? MGMT_FRAME_PROTECTION_REQUIRED : NO_MGMT_FRAME_PROTECTION;
 	return android::binder::Status::ok();
 }
 
@@ -283,6 +366,7 @@
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
 	RETURN_IF_NETWORK_INVALID(wpa_ssid);
+	*key_mgmt_mask = wpa_ssid->key_mgmt;
 	return android::binder::Status::ok();
 }
 
@@ -290,6 +374,7 @@
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
 	RETURN_IF_NETWORK_INVALID(wpa_ssid);
+	*proto_mask = wpa_ssid->proto;
 	return android::binder::Status::ok();
 }
 
@@ -297,6 +382,7 @@
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
 	RETURN_IF_NETWORK_INVALID(wpa_ssid);
+	*auth_alg_mask = wpa_ssid->auth_alg;
 	return android::binder::Status::ok();
 }
 
@@ -304,6 +390,7 @@
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
 	RETURN_IF_NETWORK_INVALID(wpa_ssid);
+	*group_cipher_mask = wpa_ssid->group_cipher;
 	return android::binder::Status::ok();
 }
 
@@ -312,6 +399,7 @@
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
 	RETURN_IF_NETWORK_INVALID(wpa_ssid);
+	*pairwise_cipher_mask = wpa_ssid->pairwise_cipher;
 	return android::binder::Status::ok();
 }
 
@@ -360,6 +448,8 @@
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
 	RETURN_IF_NETWORK_INVALID(wpa_ssid);
+
+	*enable = (wpa_ssid->ieee80211w == MGMT_FRAME_PROTECTION_REQUIRED);
 	return android::binder::Status::ok();
 }
 
