shill: Add support for connecting to WPA+802.1x networks

This includes supporting EAP-TTLS and EAP-PEAP networks.

Also, also add a "connectability" check for 802.1x networks which
checks if there are sufficient and necessary EAP parameters to attempt
a connection.

BUG=chromium-os:20901, chromium-os:23466
TEST=2 new unit tests + 3 new autotests pass (019CheckWPA_1x_AES,
     072CheckWPA_1x_PEAP and 073CheckWPA_1x_TTLS)

Change-Id: I46c1886d8fd901c1f95387c984975f2aac89b28e
Reviewed-on: https://gerrit.chromium.org/gerrit/13063
Reviewed-by: mukesh agrawal <quiche@chromium.org>
Commit-Ready: Gaurav Shah <gauravsh@chromium.org>
Tested-by: Gaurav Shah <gauravsh@chromium.org>
diff --git a/wpa_supplicant.cc b/wpa_supplicant.cc
index 544e9ff..6ba5eef 100644
--- a/wpa_supplicant.cc
+++ b/wpa_supplicant.cc
@@ -11,6 +11,9 @@
 const char kBSSPropertySSID[]       = "SSID";
 const char kBSSPropertyMode[]       = "Mode";
 const char kBSSPropertySignal[]     = "Signal";
+// TODO(gauravsh): Make this path be a configurable option. crosbug.com/25661
+// Location of the system root CA certificates.
+const char kCaPath[] = "/etc/ssl/certs";
 const char kCurrentBSSNull[] = "/";
 const char kDBusAddr[]              = "fi.w1.wpa_supplicant1";
 const char kDBusPath[]              = "/fi/w1/wpa_supplicant1";
@@ -36,11 +39,25 @@
 const char kNetworkModeAdHoc[]       = "ad-hoc";
 const char kNetworkModeAccessPoint[] = "ap";
 const char kNetworkPropertyBgscan[] = "bgscan";
+const char kNetworkPropertyCaPath[] = "ca_path";
+const char kNetworkPropertyEapKeyManagement[] = "key_mgmt";
+const char kNetworkPropertyEapIdentity[] = "identity";
+const char kNetworkPropertyEapEap[] = "eap";
+const char kNetworkPropertyEapInnerEap[] = "phase2";
+const char kNetworkPropertyEapAnonymousIdentity[] = "anonymous_identity";
+const char kNetworkPropertyEapClientCert[] = "client_cert";
+const char kNetworkPropertyEapPrivateKey[] = "private_key";
+const char kNetworkPropertyEapPrivateKeyPassword[] = "private_key_passwd";
+const char kNetworkPropertyEapCaCert[] = "ca_cert";
+const char kNetworkPropertyEapCaPassword[] = "password";
+const char kNetworkPropertyEapCertId[] = "cert_id";
+const char kNetworkPropertyEapKeyId[] = "key_id";
+const char kNetworkPropertyEapCaCertId[] = "ca_cert_id";
+const char kNetworkPropertyEapPin[] = "pin";
 const char kNetworkPropertyMode[]   = "mode";
 const char kNetworkPropertyScanSSID[] = "scan_ssid";
 const char kNetworkPropertySSID[]   = "ssid";
 const char kPropertyAuthAlg[]       = "auth_alg";
-const char kPropertyKeyManagement[] = "key_mgmt";
 const char kPropertyPreSharedKey[]  = "psk";
 const char kPropertyPrivacy[]       = "Privacy";
 const char kPropertyRSN[]           = "RSN";