| @@ -24,27 +24,27 @@ | | | @@ -24,27 +24,27 @@ |
24 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | | 24 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
25 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | | 25 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
26 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | | 26 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
27 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | | 27 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
28 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | | 28 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
29 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | | 29 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
30 | */ | | 30 | */ |
31 | | | 31 | |
32 | #include <sys/cdefs.h> | | 32 | #include <sys/cdefs.h> |
33 | #ifdef __FreeBSD__ | | 33 | #ifdef __FreeBSD__ |
34 | __FBSDID("$FreeBSD: src/sys/net80211/ieee80211_crypto_wep.c,v 1.7 2005/06/10 16:11:24 sam Exp $"); | | 34 | __FBSDID("$FreeBSD: src/sys/net80211/ieee80211_crypto_wep.c,v 1.7 2005/06/10 16:11:24 sam Exp $"); |
35 | #endif | | 35 | #endif |
36 | #ifdef __NetBSD__ | | 36 | #ifdef __NetBSD__ |
37 | __KERNEL_RCSID(0, "$NetBSD: ieee80211_crypto_wep.c,v 1.8 2008/12/17 20:51:37 cegger Exp $"); | | 37 | __KERNEL_RCSID(0, "$NetBSD: ieee80211_crypto_wep.c,v 1.9 2016/10/09 14:50:20 christos Exp $"); |
38 | #endif | | 38 | #endif |
39 | | | 39 | |
40 | /* | | 40 | /* |
41 | * IEEE 802.11 WEP crypto support. | | 41 | * IEEE 802.11 WEP crypto support. |
42 | */ | | 42 | */ |
43 | #include <sys/param.h> | | 43 | #include <sys/param.h> |
44 | #include <sys/systm.h> | | 44 | #include <sys/systm.h> |
45 | #include <sys/mbuf.h> | | 45 | #include <sys/mbuf.h> |
46 | #include <sys/malloc.h> | | 46 | #include <sys/malloc.h> |
47 | #include <sys/kernel.h> | | 47 | #include <sys/kernel.h> |
48 | #include <sys/endian.h> | | 48 | #include <sys/endian.h> |
49 | | | 49 | |
50 | #include <sys/socket.h> | | 50 | #include <sys/socket.h> |
| @@ -411,27 +411,27 @@ wep_decrypt(struct ieee80211_key *key, s | | | @@ -411,27 +411,27 @@ wep_decrypt(struct ieee80211_key *key, s |
411 | memcpy(rc4key + IEEE80211_WEP_IVLEN, key->wk_key, key->wk_keylen); | | 411 | memcpy(rc4key + IEEE80211_WEP_IVLEN, key->wk_key, key->wk_keylen); |
412 | | | 412 | |
413 | /* Setup RC4 state */ | | 413 | /* Setup RC4 state */ |
414 | for (i = 0; i < 256; i++) | | 414 | for (i = 0; i < 256; i++) |
415 | S[i] = i; | | 415 | S[i] = i; |
416 | j = 0; | | 416 | j = 0; |
417 | keylen = key->wk_keylen + IEEE80211_WEP_IVLEN; | | 417 | keylen = key->wk_keylen + IEEE80211_WEP_IVLEN; |
418 | for (i = 0; i < 256; i++) { | | 418 | for (i = 0; i < 256; i++) { |
419 | j = (j + S[i] + rc4key[i % keylen]) & 0xff; | | 419 | j = (j + S[i] + rc4key[i % keylen]) & 0xff; |
420 | S_SWAP(i, j); | | 420 | S_SWAP(i, j); |
421 | } | | 421 | } |
422 | | | 422 | |
423 | off = hdrlen + wep.ic_header; | | 423 | off = hdrlen + wep.ic_header; |
424 | data_len = m->m_pkthdr.len - (off + wep.ic_trailer), | | 424 | data_len = m->m_pkthdr.len - (off + wep.ic_trailer); |
425 | | | 425 | |
426 | /* Compute CRC32 over unencrypted data and apply RC4 to data */ | | 426 | /* Compute CRC32 over unencrypted data and apply RC4 to data */ |
427 | crc = ~0; | | 427 | crc = ~0; |
428 | i = j = 0; | | 428 | i = j = 0; |
429 | pos = mtod(m, uint8_t *) + off; | | 429 | pos = mtod(m, uint8_t *) + off; |
430 | buflen = m->m_len - off; | | 430 | buflen = m->m_len - off; |
431 | for (;;) { | | 431 | for (;;) { |
432 | if (buflen > data_len) | | 432 | if (buflen > data_len) |
433 | buflen = data_len; | | 433 | buflen = data_len; |
434 | data_len -= buflen; | | 434 | data_len -= buflen; |
435 | for (k = 0; k < buflen; k++) { | | 435 | for (k = 0; k < buflen; k++) { |
436 | i = (i + 1) & 0xff; | | 436 | i = (i + 1) & 0xff; |
437 | j = (j + S[i]) & 0xff; | | 437 | j = (j + S[i]) & 0xff; |