diff options
Diffstat (limited to 'drivers/staging/rtl8187se/ieee80211/ieee80211_crypt_wep.c')
-rw-r--r-- | drivers/staging/rtl8187se/ieee80211/ieee80211_crypt_wep.c | 103 |
1 files changed, 10 insertions, 93 deletions
diff --git a/drivers/staging/rtl8187se/ieee80211/ieee80211_crypt_wep.c b/drivers/staging/rtl8187se/ieee80211/ieee80211_crypt_wep.c index 68a22b32fcf..371ef871222 100644 --- a/drivers/staging/rtl8187se/ieee80211/ieee80211_crypt_wep.c +++ b/drivers/staging/rtl8187se/ieee80211/ieee80211_crypt_wep.c @@ -20,18 +20,8 @@ #include "ieee80211.h" -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) -#include "rtl_crypto.h" -#else #include <linux/crypto.h> -#endif - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) - #include <asm/scatterlist.h> -#else - #include <linux/scatterlist.h> -#endif -//#include <asm/scatterlist.h> +#include <linux/scatterlist.h> #include <linux/crc32.h> MODULE_AUTHOR("Jouni Malinen"); @@ -51,12 +41,8 @@ struct prism2_wep_data { u8 key[WEP_KEY_LEN + 1]; u8 key_len; u8 key_idx; - #if((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21))&&(!IN_OPENSUSE_SLED)) - struct crypto_tfm *tfm; - #else struct crypto_blkcipher *tx_tfm; struct crypto_blkcipher *rx_tfm; - #endif }; @@ -69,14 +55,6 @@ static void * prism2_wep_init(int keyidx) goto fail; memset(priv, 0, sizeof(*priv)); priv->key_idx = keyidx; - #if((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21))&&(!IN_OPENSUSE_SLED)) - priv->tfm = crypto_alloc_tfm("arc4", 0); - if (priv->tfm == NULL) { - printk(KERN_DEBUG "ieee80211_crypt_wep: could not allocate " - "crypto API arc4\n"); - goto fail; - } - #else priv->tx_tfm = crypto_alloc_blkcipher("ecb(arc4)", 0, CRYPTO_ALG_ASYNC); if (IS_ERR(priv->tx_tfm)) { printk(KERN_DEBUG "ieee80211_crypt_wep: could not allocate " @@ -91,7 +69,6 @@ static void * prism2_wep_init(int keyidx) priv->rx_tfm = NULL; goto fail; } - #endif /* start WEP IV from a random value */ get_random_bytes(&priv->iv, 4); @@ -99,14 +76,6 @@ static void * prism2_wep_init(int keyidx) return priv; fail: - //#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) - #if((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21))&&(!IN_OPENSUSE_SLED)) - if (priv) { - if (priv->tfm) - crypto_free_tfm(priv->tfm); - kfree(priv); - } - #else if (priv) { if (priv->tx_tfm) crypto_free_blkcipher(priv->tx_tfm); @@ -114,7 +83,7 @@ fail: crypto_free_blkcipher(priv->rx_tfm); kfree(priv); } - #endif + return NULL; } @@ -122,18 +91,14 @@ fail: static void prism2_wep_deinit(void *priv) { struct prism2_wep_data *_priv = priv; - //#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) - #if((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21))&&(!IN_OPENSUSE_SLED)) - if (_priv && _priv->tfm) - crypto_free_tfm(_priv->tfm); - #else + if (_priv) { if (_priv->tx_tfm) crypto_free_blkcipher(_priv->tx_tfm); if (_priv->rx_tfm) crypto_free_blkcipher(_priv->rx_tfm); } - #endif + kfree(priv); } @@ -147,10 +112,7 @@ static void prism2_wep_deinit(void *priv) static int prism2_wep_encrypt(struct sk_buff *skb, int hdr_len, void *priv) { struct prism2_wep_data *wep = priv; -//#if(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)) -#if((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21))||(IN_OPENSUSE_SLED)) - struct blkcipher_desc desc = {.tfm = wep->tx_tfm}; -#endif + struct blkcipher_desc desc = { .tfm = wep->tx_tfm }; u32 klen, len; u8 key[WEP_KEY_LEN + 3]; u8 *pos; @@ -192,37 +154,17 @@ static int prism2_wep_encrypt(struct sk_buff *skb, int hdr_len, void *priv) #ifndef JOHN_HWSEC /* Append little-endian CRC32 and encrypt it to produce ICV */ -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) crc = ~crc32_le(~0, pos, len); -#else - crc = ~ether_crc_le(len, pos); -#endif icv = skb_put(skb, 4); icv[0] = crc; icv[1] = crc >> 8; icv[2] = crc >> 16; icv[3] = crc >> 24; - //#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) - #if((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21))&&(!IN_OPENSUSE_SLED)) - crypto_cipher_setkey(wep->tfm, key, klen); - sg.page = virt_to_page(pos); - sg.offset = offset_in_page(pos); - sg.length = len + 4; - crypto_cipher_encrypt(wep->tfm, &sg, &sg, len + 4); - - return 0; - #else crypto_blkcipher_setkey(wep->tx_tfm, key, klen); - #if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) - sg.page = virt_to_page(pos); - sg.offset = offset_in_page(pos); - sg.length = len + 4; - #else - sg_init_one(&sg, pos, len+4); - #endif + sg_init_one(&sg, pos, len + 4); + return crypto_blkcipher_encrypt(&desc, &sg, &sg, len + 4); - #endif #endif /* JOHN_HWSEC */ return 0; } @@ -238,10 +180,7 @@ static int prism2_wep_encrypt(struct sk_buff *skb, int hdr_len, void *priv) static int prism2_wep_decrypt(struct sk_buff *skb, int hdr_len, void *priv) { struct prism2_wep_data *wep = priv; - //#if(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)) - #if((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21))||(IN_OPENSUSE_SLED)) - struct blkcipher_desc desc = {.tfm = wep->rx_tfm}; - #endif + struct blkcipher_desc desc = { .tfm = wep->rx_tfm }; u32 klen, plen; u8 key[WEP_KEY_LEN + 3]; u8 keyidx, *pos; @@ -269,31 +208,13 @@ static int prism2_wep_decrypt(struct sk_buff *skb, int hdr_len, void *priv) /* Apply RC4 to data and compute CRC32 over decrypted data */ plen = skb->len - hdr_len - 8; #ifndef JOHN_HWSEC -//#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) -#if((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21))&&(!IN_OPENSUSE_SLED)) - crypto_cipher_setkey(wep->tfm, key, klen); - sg.page = virt_to_page(pos); - sg.offset = offset_in_page(pos); - sg.length = plen + 4; - crypto_cipher_decrypt(wep->tfm, &sg, &sg, plen + 4); -#else crypto_blkcipher_setkey(wep->rx_tfm, key, klen); - #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) - sg.page = virt_to_page(pos); - sg.offset = offset_in_page(pos); - sg.length = plen + 4; - #else - sg_init_one(&sg, pos, plen+4); - #endif + sg_init_one(&sg, pos, plen + 4); + if (crypto_blkcipher_decrypt(&desc, &sg, &sg, plen + 4)) return -7; -#endif -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) crc = ~crc32_le(~0, pos, plen); -#else - crc = ~ether_crc_le(plen, pos); -#endif icv[0] = crc; icv[1] = crc >> 8; icv[2] = crc >> 16; @@ -384,11 +305,7 @@ void ieee80211_wep_null(void) return; } #if 0 -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) EXPORT_SYMBOL(ieee80211_wep_null); -#else -EXPORT_SYMBOL_NOVERS(ieee80211_wep_null); -#endif #endif //module_init(ieee80211_crypto_wep_init); //module_exit(ieee80211_crypto_wep_exit); |