Commit | Line | Data |
---|---|---|
635d2b00 GKH |
1 | /* |
2 | * --------------------------------------------------------------------------- | |
3 | * FILE: data_tx.c | |
4 | * | |
5 | * PURPOSE: | |
6 | * This file provides functions to send data requests to the UniFi. | |
7 | * | |
8 | * Copyright (C) 2007-2009 by Cambridge Silicon Radio Ltd. | |
9 | * | |
10 | * Refer to LICENSE.txt included with this source code for details on | |
11 | * the license terms. | |
12 | * | |
13 | * --------------------------------------------------------------------------- | |
14 | */ | |
15 | #include "csr_wifi_hip_unifi.h" | |
16 | #include "unifi_priv.h" | |
17 | ||
18 | int | |
19 | uf_verify_m4(unifi_priv_t *priv, const unsigned char *packet, unsigned int length) | |
20 | { | |
7c5745cc GKH |
21 | const unsigned char *p = packet; |
22 | u16 keyinfo; | |
635d2b00 GKH |
23 | |
24 | ||
dbff11c9 | 25 | if (length < (4 + 5 + 8 + 32 + 16 + 8 + 8 + 16 + 1 + 8)) |
7c5745cc | 26 | return 1; |
635d2b00 | 27 | |
7c5745cc GKH |
28 | p += 8; |
29 | keyinfo = p[5] << 8 | p[6]; /* big-endian */ | |
30 | if ( | |
31 | (p[0] == 1 || p[0] == 2) /* protocol version 802.1X-2001 (WPA) or -2004 (WPA2) */ && | |
32 | p[1] == 3 /* EAPOL-Key */ && | |
33 | /* don't bother checking p[2] p[3] (hh ll, packet body length) */ | |
34 | (p[4] == 254 || p[4] == 2) /* descriptor type P802.1i-D3.0 (WPA) or 802.11i-2004 (WPA2) */ && | |
35 | ((keyinfo & 0x0007) == 1 || (keyinfo & 0x0007) == 2) /* key descriptor version */ && | |
36 | (keyinfo & ~0x0207U) == 0x0108 && /* key info for 4/4 or 4/2 -- ignore key desc version and sec bit (since varies in WPA 4/4) */ | |
37 | (p[4 + 5 + 8 + 32 + 16 + 8 + 8 + 16 + 0] == 0 && /* key data length (2 octets) 0 for 4/4 only */ | |
38 | p[4 + 5 + 8 + 32 + 16 + 8 + 8 + 16 + 1] == 0) | |
39 | ) { | |
0567e1ec | 40 | unifi_trace(priv, UDBG1, "uf_verify_m4: M4 detected\n"); |
7c5745cc | 41 | return 0; |
dbff11c9 | 42 | } else { |
7c5745cc GKH |
43 | return 1; |
44 | } | |
635d2b00 GKH |
45 | } |
46 | ||
47 | /* | |
48 | * --------------------------------------------------------------------------- | |
49 | * | |
50 | * Data transport signals. | |
51 | * | |
52 | * --------------------------------------------------------------------------- | |
53 | */ | |
54 |