Denis Kenzior
9c2d61db2c
wsc: Optionally disconnect before starting EAP-WSC
...
If the device is currently connected, we will initiate a disconnection
(or wait for the disconnection to complete) prior to starting the
WSC-EAP association.
2016-09-22 16:29:19 -05:00
Denis Kenzior
9a63ab6712
netdev: Make invoking disconnect_cb reentrant safe
2016-09-22 16:20:33 -05:00
Denis Kenzior
886ffc2edb
netdev: keep track of operational state
...
We should not attempt to call connect_failed if we're have become
operational. E.g. successfully associated, ran eapol if necessary and
set operstate.
2016-09-22 16:19:30 -05:00
Denis Kenzior
2d87556b6b
device: destroy state watchlist after removed event
2016-09-22 15:28:56 -05:00
Denis Kenzior
42d26089e9
watchlist: Make re-entrant safe
2016-09-22 15:28:29 -05:00
Denis Kenzior
d2ccc367ef
device: modify autoconnect behavior
...
In case Disconnect() is called for any reason, make sure autoconnect is
off. Set autoconnect to true whenever we successfully connect.
2016-09-22 15:28:14 -05:00
Denis Kenzior
a766823ffc
device: Make scanning into a bitfield
2016-09-22 13:48:05 -05:00
Denis Kenzior
ecacdd88e4
device: Add device_get_state
2016-09-22 13:48:05 -05:00
Denis Kenzior
1585ccc897
netdev: Return -EINPROGRESS if already disconnecting
2016-09-22 11:55:32 -05:00
Denis Kenzior
47fa0435ba
wsc: Start walk timer
...
PBC mode mandates a 120-second walk timer. The PBC transaction must be
completed within that time or be aborted.
2016-09-22 11:32:18 -05:00
Andrew Zaborowski
0ffec2e481
dbus: Switch to using org.freedesktop.DBus.Properties
...
Use the org.freedesktop.DBus.Properties interfaces on objects with
properties and drop the old style GetProperty/SetProperty methods on
individual interfaces. Agent and KnownNetworks have no properties at
this time so don't add org.freedesktop.DBus.Properties interfaces.
2016-09-21 16:46:34 -05:00
Andrew Zaborowski
c6e38dacac
scan: Zero destroy callback in scan_cancel
...
Otherwise it may be called again in get_scan_done.
2016-09-21 16:39:05 -05:00
Denis Kenzior
31ba824acc
wsc: Try using credentials
...
We send the scan results where we obtained a PushButton target over to
device object. If EAP-WSC transaction is successful, then the scan
results are searched to find a network/bss combination found in the
credentials obtained. If found, the network is connected to
automatically.
2016-09-21 16:21:53 -05:00
Denis Kenzior
5fa37b9a1d
wsc: Write credentials to storage
2016-09-21 16:21:28 -05:00
Denis Kenzior
3fd51c2d72
network: Add network_set_psk
2016-09-21 16:20:09 -05:00
Denis Kenzior
c380940b43
netdev: Deauthenticate prior to calling connect_cb
2016-09-21 16:19:47 -05:00
Denis Kenzior
92a51805c4
netdev: Finalize disconnects on device removal
...
When device is removed or otherwise freed, netdev_connect callbacks are
invoked. Treat disconnects similarly
2016-09-21 15:23:06 -05:00
Denis Kenzior
29387e012a
network: Use uint8_t instead of unsigned char
2016-09-21 14:38:43 -05:00
Denis Kenzior
954f4ebca2
network: Close settings if ineligible for autoconnect
2016-09-21 14:35:30 -05:00
Denis Kenzior
7661f1b7c0
network: Expose network_bss_select
2016-09-21 14:00:59 -05:00
Denis Kenzior
38a4a9668f
wsc: Record credentials obtained from EAP-WSC
...
Multiple credentials can be obtained via the event, record them until we
are ready to process them.
2016-09-21 13:51:11 -05:00
Denis Kenzior
42fb2a7c0f
device: Add device_set_scan_results
2016-09-19 20:35:57 -05:00
Denis Kenzior
9c9e6f6f29
network: Add network_bss_find_by_addr
2016-09-19 20:26:41 -05:00
Denis Kenzior
dc3a6a2f77
device: Add device_network_find
2016-09-19 20:19:34 -05:00
Denis Kenzior
29d5eeb3ca
network: Use const char * to represent ssid
...
This also fixes a potential buffer overflow since the ssid was cast to a
string inside network_create. However, ssid is a buffer of 32 bytes,
and would not be null-terminated in the case of a 32-byte SSID.
2016-09-19 20:18:53 -05:00
Denis Kenzior
12fca8b7f7
network: Make network_settings_close private
2016-09-19 17:04:51 -05:00
Denis Kenzior
a239b49707
network: Make network_load_settings static
2016-09-19 17:03:51 -05:00
Denis Kenzior
69ea4db15c
wsc: Base RF freq on BSS we're connecting to
2016-09-16 12:42:58 -05:00
Denis Kenzior
099e2a028d
wsc: Add support for initial WSC association
2016-09-14 21:56:20 -05:00
Denis Kenzior
15ac5c3f38
wscutil: Fix uninitialized warning
...
==5362== Conditional jump or move depends on uninitialised value(s)
==5362== at 0x419B62: wsc_wfa_ext_iter_next (wscutil.c:52)
==5362== by 0x41B869: wsc_parse_probe_response (wscutil.c:1016)
==5362== by 0x41FD77: scan_results (wsc.c:218)
==5362== by 0x415669: get_scan_done (scan.c:892)
==5362== by 0x432932: destroy_request (genl.c:134)
==5362== by 0x433245: process_unicast (genl.c:394)
==5362== by 0x43361A: received_data (genl.c:506)
==5362== by 0x42FDC2: io_callback (io.c:120)
==5362== by 0x42EABE: l_main_run (main.c:381)
==5362== by 0x402F90: main (main.c:234)
2016-09-14 21:56:18 -05:00
Denis Kenzior
9b0113018f
scan: Fix running active scans
...
A wildcard SSID of zero length is needed
2016-09-14 21:56:18 -05:00
Denis Kenzior
a3fdb88a9a
device: add device_get_netdev
2016-09-14 21:56:18 -05:00
Denis Kenzior
959ebd505b
device: Free eapol_sm on netdev_connect failure
2016-09-14 21:56:18 -05:00
Denis Kenzior
09dcd78e30
device: Convert device watches to watchlist
2016-09-14 21:56:18 -05:00
Denis Kenzior
ef18c03322
device: Make device_enter_state static
2016-09-14 21:56:18 -05:00
Denis Kenzior
4419a6325a
device: Add state watch api
2016-09-14 21:56:16 -05:00
Denis Kenzior
6d410b0bec
watchlist: Add watchlist utilities
2016-09-14 20:26:49 -05:00
Denis Kenzior
d9c18deed7
device: Remove extra whitespace
2016-09-14 00:17:27 -05:00
Denis Kenzior
f77d363840
netdev: Add netdev_connect_wsc
2016-09-13 20:50:24 -05:00
Denis Kenzior
8a50054925
device: Make device_disassociated static
2016-09-13 20:49:36 -05:00
Denis Kenzior
db8794460f
eapol: Remove io argument from eapol_start
2016-09-13 17:37:13 -05:00
Denis Kenzior
047a196c70
wscutil: Add wsc_build_association_response
2016-09-13 17:26:18 -05:00
Denis Kenzior
77abdb7d96
wscutil: add wsc_build_association_request
2016-09-13 17:23:43 -05:00
Denis Kenzior
da36b87531
wscutil: Add wsc_parse_association_request
2016-09-13 15:59:30 -05:00
Denis Kenzior
022d24474b
wscutil: Add wsc_parse_association_response
2016-09-13 15:57:16 -05:00
Denis Kenzior
f3d5adfc3c
wsc: report session overlap error
2016-09-13 14:55:13 -05:00
Denis Kenzior
1627b3a2bd
wsc: Squash wsc_sm structure
...
eap-wsc now handles most of the details
2016-09-13 14:53:30 -05:00
Denis Kenzior
c60d34cd8d
wiphy: Add wiphy_get_supported_bands
2016-09-13 14:36:46 -05:00
Denis Kenzior
4518394b0e
eap-wsc: Send credential obtained events
2016-09-13 13:32:47 -05:00
Denis Kenzior
9fde037b8f
eapol: Add eapol_sm_set_event_func
2016-09-13 13:30:54 -05:00
Denis Kenzior
1b72fe9713
eap: Add eap event_func
...
This is used to get arbitrary information out of the EAP method. Needed
for EAP-WSC to signal credential information obtained from the peer.
Other uses include signaling why EAP-WSC failed (e.g. invalid PIN, etc)
and processing of M2D discovery messages. The information in M2Ds might
be useful to external clients.
2016-09-13 11:50:52 -05:00
Denis Kenzior
baf72d7f86
eapol: Move to a single PAE socket
...
We used to open a socket for each wireless interface. This patch uses a
single socket with an attached BPF to handle all EAPoL traffic via a
single file descriptor.
2016-09-12 10:02:04 -05:00
Denis Kenzior
8e50144d17
eap-wsc: Handle EAP WSC_NACK Requests
...
These should be responded to with a NACK as well.
2016-09-09 13:40:41 -05:00
Denis Kenzior
d2d9ce7be5
eap-wsc: implement NACK sending
2016-09-09 12:44:36 -05:00
Denis Kenzior
b93a992ed1
eap-wsc: Handle M8 messages
2016-09-08 21:59:04 -05:00
Denis Kenzior
1dc197d176
wscutil: Rename parse/build_nack
...
... to parse/build_wsc_nack to be more consistent with the spec naming
2016-09-08 21:34:32 -05:00
Denis Kenzior
983d598d1d
wscutil: Add wsc_build_wsc_ack
2016-09-08 21:33:40 -05:00
Denis Kenzior
9c9ecfa239
wscutil: Add wsc_parse_wsc_ack
2016-09-08 21:33:20 -05:00
Denis Kenzior
aa518811b3
wscutil: Add wsc_build_wsc_done
2016-09-08 21:27:44 -05:00
Denis Kenzior
d8b8c25848
wscutil: Add wsc_parse_wsc_done
2016-09-08 21:27:18 -05:00
Andrew Zaborowski
1b1bf3cf65
eapol: On EAP success save the second 256 bits of MSK
2016-09-06 14:07:35 -05:00
Andrew Zaborowski
443e363c20
crypto: Implement crypto_derive_ft_ptk
2016-09-06 13:50:17 -05:00
Andrew Zaborowski
efbbe9870b
crypto: Implement crypto_derive_pmk_r1
2016-09-06 13:48:50 -05:00
Andrew Zaborowski
994ffd94c5
crypto: Implement crypto_derive_pmk_r0
2016-09-06 13:47:18 -05:00
Andrew Zaborowski
955c88a64a
ie: Consistently set group_management_cipher
...
RSNE_ADVANCE may return and if it is before the assignment of
info.group_management_cipher, that assignment will be dependent on where
the RSNE ends.
2016-09-05 23:10:29 -05:00
Andrew Zaborowski
316752c5e4
ie: Error in tlv_iter_next if no space to length byte
...
When parsing the EAPoL-Key key data field we don't strip the 0xdd /
0x00 padding from the decrypted data so there may be trailing padding
after the IE sequence and valgrind will report an invalid read of the
length byte. Same thing may happen if we're sent garbage.
2016-09-05 23:00:01 -05:00
Denis Kenzior
b67e3f26b5
wscutil: Add wsc_parse_credential
2016-08-31 22:36:21 -05:00
Denis Kenzior
d83bf50a39
wscutil: Add wsc_parse_m8_encrypted_settings
2016-08-31 21:59:52 -05:00
Denis Kenzior
addba697da
wscutil: Add wsc_build_m8
2016-08-31 14:14:11 -05:00
Denis Kenzior
ead40f0431
wscutil: Add wsc_parse_m8
2016-08-31 14:14:01 -05:00
Denis Kenzior
34ed84dc41
eap-wsc: Send M7 messages
2016-08-31 12:50:44 -05:00
Denis Kenzior
9bb4ba42dd
wscutil: Add wsc_build_m7_encrypted_settings
2016-08-31 11:39:06 -05:00
Denis Kenzior
8df0f9fa28
wscutil: Add wsc_parse_m7_encrypted_settings
2016-08-31 11:38:52 -05:00
Denis Kenzior
a113cba4f2
wscutil: Add wsc_build_m7
2016-08-31 11:32:51 -05:00
Denis Kenzior
b7d44d302a
wscutil: Add wsc_parse_m7
2016-08-31 11:32:21 -05:00
Denis Kenzior
6dae861ce2
eap-wsc: Handle M6 messages
2016-08-31 11:18:21 -05:00
Denis Kenzior
2ac78e1306
eap-wsc: split out R_Hash verification
...
So it can be used in M6 processing
2016-08-31 11:17:29 -05:00
Denis Kenzior
11550b2756
wscutil: Add wsc_m6_build_encrypted_settings
2016-08-31 11:15:35 -05:00
Denis Kenzior
3719e78094
wscutil: Add wsc_parse_m6_encrypted_settings
2016-08-31 11:15:12 -05:00
Denis Kenzior
4e0c932dc9
wscutil: Add wsc_build_m6
2016-08-31 11:14:48 -05:00
Denis Kenzior
815f685c2d
wscutil: Add wsc_parse_m6
2016-08-31 11:14:48 -05:00
Denis Kenzior
ba55afa3f4
eap-wsc: Generate M5 messages
2016-08-30 23:20:24 -05:00
Denis Kenzior
c0de9d1790
eap-wsc: optionally load IV1 & IV2 for debugging
...
When we send M5 & M7, we need to generate a random IV. For testing
purposes, the IV can be provided in settings, otherwise it will be
generated randomly.
2016-08-30 23:18:53 -05:00
Denis Kenzior
62623e0eb3
eap-wsc: Handle M4 messages
2016-08-30 21:52:24 -05:00
Denis Kenzior
48c3f4a55a
eap-wsc: Store PSK1 & PSK2
...
We will need to use PSK1 & PSK2 when computing R_Hash1 & R_Hash2 when
processing M4 & M6.
2016-08-30 21:51:14 -05:00
Denis Kenzior
9a47f98ccd
eap-wsc: Store M2 for future use
...
We need quite a bit of attributes of M2 for the duration of the WSC
handshake. Most importantly, we need to use the peer's public key when
processing M4 and M6. RegistrarNonce is also needed for generating any
ACK/NACK messages as needed.
Also, peer's device attributes such as Model, Manufacturer, etc might be
useful to report upon successful handshake.
2016-08-30 21:10:57 -05:00
Denis Kenzior
633389f2f4
eap-wsc: Add utility to decrypt EncryptedSettings
2016-08-30 14:43:49 -05:00
Denis Kenzior
b78bef2be8
eap-wsc: Add utility to check KeyWrapAuthenticator
2016-08-30 14:42:43 -05:00
Denis Kenzior
046c7b8994
eap-wsc: clear out intermediate key data
2016-08-30 14:41:58 -05:00
Denis Kenzior
39d6acb07d
eap-wsc: Don't store AuthKey | KeyWrapKey | EMSK
...
AuthKey is already uploaded into auth_key_hmac. KeyWrapKey is now
uploaded into the AES-CBC(128) cipher. We currently have no use for
EMSK.
So we no longer need to keep the wsc_session_key structure around.
2016-08-30 14:34:03 -05:00
Denis Kenzior
24dfe6e436
wscutil: Add wsc_build_m5_encrypted_settings
2016-08-30 14:10:20 -05:00
Denis Kenzior
7bdb1a0225
wscutil: Add wsc_parse_m5_encrypted_settings
2016-08-30 14:07:53 -05:00
Denis Kenzior
d59086c791
wscutil: Add wsc_build_m4_encrypted_settings
2016-08-30 13:57:28 -05:00
Denis Kenzior
11e56031c0
wscutil: Add wsc_parse_m4_encrypted_settings
2016-08-30 13:38:08 -05:00
Denis Kenzior
757e4dbb90
wscutil: Prepare for parsing of Encrypted Settings
...
Encrypted Settings TLVs are structured similarly to the various WSC
messages. However, they lack a version2 extension field and use a Key
Wrap Authenticator element instead of Authenticator.
2016-08-30 13:33:17 -05:00
Denis Kenzior
642804f9d7
wscutil: Handle Key Wrap Authenticator
2016-08-30 13:30:06 -05:00
Denis Kenzior
7810a45a9c
eap-wsc: Rework state logic a bit
...
Mostly so repetitive code is not required
2016-08-30 10:10:11 -05:00
Denis Kenzior
a8580c7ed0
wscutil: Add wsc_build_m5
2016-08-30 09:45:39 -05:00
Denis Kenzior
0081bf4f64
wscutil: Add wsc_parse_m5
2016-08-30 09:34:34 -05:00
Denis Kenzior
05c230c46a
eap-wsc: Send M3
2016-08-30 09:22:35 -05:00