diff options
| author | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2011-03-25 21:28:22 +0000 | 
|---|---|---|
| committer | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2011-03-25 21:28:22 +0000 | 
| commit | 2a6f8ab8cf345e33d515b79207e27eb842c9fc30 (patch) | |
| tree | cc636aa4c472e3db13c9e9652b8b7ab3094f53a1 /package/mac80211/patches/300-pending_work.patch | |
| parent | f27317a2dc11d91f667c64eb625e9766ee8abc4e (diff) | |
mac80211: add a pending patch to remove the dependency on ecb
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@26295 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/mac80211/patches/300-pending_work.patch')
| -rw-r--r-- | package/mac80211/patches/300-pending_work.patch | 158 | 
1 files changed, 158 insertions, 0 deletions
diff --git a/package/mac80211/patches/300-pending_work.patch b/package/mac80211/patches/300-pending_work.patch index 40fd32db2..4cd18b4c7 100644 --- a/package/mac80211/patches/300-pending_work.patch +++ b/package/mac80211/patches/300-pending_work.patch @@ -84,3 +84,161 @@   }   static void +--- a/net/mac80211/ieee80211_i.h ++++ b/net/mac80211/ieee80211_i.h +@@ -814,8 +814,8 @@ struct ieee80211_local { +  + 	struct rate_control_ref *rate_ctrl; +  +-	struct crypto_blkcipher *wep_tx_tfm; +-	struct crypto_blkcipher *wep_rx_tfm; ++	struct crypto_cipher *wep_tx_tfm; ++	struct crypto_cipher *wep_rx_tfm; + 	u32 wep_iv; +  + 	/* see iface.c */ +--- a/net/mac80211/tkip.c ++++ b/net/mac80211/tkip.c +@@ -202,7 +202,7 @@ EXPORT_SYMBOL(ieee80211_get_tkip_key); +  * @payload_len is the length of payload (_not_ including IV/ICV length). +  * @ta is the transmitter addresses. +  */ +-int ieee80211_tkip_encrypt_data(struct crypto_blkcipher *tfm, ++int ieee80211_tkip_encrypt_data(struct crypto_cipher *tfm, + 				struct ieee80211_key *key, + 				u8 *pos, size_t payload_len, u8 *ta) + { +@@ -223,7 +223,7 @@ int ieee80211_tkip_encrypt_data(struct c +  * beginning of the buffer containing IEEE 802.11 header payload, i.e., +  * including IV, Ext. IV, real data, Michael MIC, ICV. @payload_len is the +  * length of payload, including IV, Ext. IV, MIC, ICV.  */ +-int ieee80211_tkip_decrypt_data(struct crypto_blkcipher *tfm, ++int ieee80211_tkip_decrypt_data(struct crypto_cipher *tfm, + 				struct ieee80211_key *key, + 				u8 *payload, size_t payload_len, u8 *ta, + 				u8 *ra, int only_iv, int queue, +--- a/net/mac80211/tkip.h ++++ b/net/mac80211/tkip.h +@@ -15,7 +15,7 @@ +  + u8 *ieee80211_tkip_add_iv(u8 *pos, struct ieee80211_key *key, u16 iv16); +  +-int ieee80211_tkip_encrypt_data(struct crypto_blkcipher *tfm, ++int ieee80211_tkip_encrypt_data(struct crypto_cipher *tfm, + 				 struct ieee80211_key *key, + 				 u8 *pos, size_t payload_len, u8 *ta); + enum { +@@ -24,7 +24,7 @@ enum { + 	TKIP_DECRYPT_INVALID_KEYIDX = -2, + 	TKIP_DECRYPT_REPLAY = -3, + }; +-int ieee80211_tkip_decrypt_data(struct crypto_blkcipher *tfm, ++int ieee80211_tkip_decrypt_data(struct crypto_cipher *tfm, + 				struct ieee80211_key *key, + 				u8 *payload, size_t payload_len, u8 *ta, + 				u8 *ra, int only_iv, int queue, +--- a/net/mac80211/wep.c ++++ b/net/mac80211/wep.c +@@ -30,17 +30,15 @@ int ieee80211_wep_init(struct ieee80211_ + 	/* start WEP IV from a random value */ + 	get_random_bytes(&local->wep_iv, WEP_IV_LEN); +  +-	local->wep_tx_tfm = crypto_alloc_blkcipher("ecb(arc4)", 0, +-						CRYPTO_ALG_ASYNC); ++	local->wep_tx_tfm = crypto_alloc_cipher("arc4", 0, CRYPTO_ALG_ASYNC); + 	if (IS_ERR(local->wep_tx_tfm)) { + 		local->wep_rx_tfm = ERR_PTR(-EINVAL); + 		return PTR_ERR(local->wep_tx_tfm); + 	} +  +-	local->wep_rx_tfm = crypto_alloc_blkcipher("ecb(arc4)", 0, +-						CRYPTO_ALG_ASYNC); ++	local->wep_rx_tfm = crypto_alloc_cipher("arc4", 0, CRYPTO_ALG_ASYNC); + 	if (IS_ERR(local->wep_rx_tfm)) { +-		crypto_free_blkcipher(local->wep_tx_tfm); ++		crypto_free_cipher(local->wep_tx_tfm); + 		local->wep_tx_tfm = ERR_PTR(-EINVAL); + 		return PTR_ERR(local->wep_rx_tfm); + 	} +@@ -51,9 +49,9 @@ int ieee80211_wep_init(struct ieee80211_ + void ieee80211_wep_free(struct ieee80211_local *local) + { + 	if (!IS_ERR(local->wep_tx_tfm)) +-		crypto_free_blkcipher(local->wep_tx_tfm); ++		crypto_free_cipher(local->wep_tx_tfm); + 	if (!IS_ERR(local->wep_rx_tfm)) +-		crypto_free_blkcipher(local->wep_rx_tfm); ++		crypto_free_cipher(local->wep_rx_tfm); + } +  + static inline bool ieee80211_wep_weak_iv(u32 iv, int keylen) +@@ -127,12 +125,11 @@ static void ieee80211_wep_remove_iv(stru + /* Perform WEP encryption using given key. data buffer must have tailroom +  * for 4-byte ICV. data_len must not include this ICV. Note: this function +  * does _not_ add IV. data = RC4(data | CRC32(data)) */ +-int ieee80211_wep_encrypt_data(struct crypto_blkcipher *tfm, u8 *rc4key, ++int ieee80211_wep_encrypt_data(struct crypto_cipher *tfm, u8 *rc4key, + 			       size_t klen, u8 *data, size_t data_len) + { +-	struct blkcipher_desc desc = { .tfm = tfm }; +-	struct scatterlist sg; + 	__le32 icv; ++	int i; +  + 	if (IS_ERR(tfm)) + 		return -1; +@@ -140,9 +137,9 @@ int ieee80211_wep_encrypt_data(struct cr + 	icv = cpu_to_le32(~crc32_le(~0, data, data_len)); + 	put_unaligned(icv, (__le32 *)(data + data_len)); +  +-	crypto_blkcipher_setkey(tfm, rc4key, klen); +-	sg_init_one(&sg, data, data_len + WEP_ICV_LEN); +-	crypto_blkcipher_encrypt(&desc, &sg, &sg, sg.length); ++	crypto_cipher_setkey(tfm, rc4key, klen); ++	for (i = 0; i < data_len + WEP_ICV_LEN; i++) ++		crypto_cipher_encrypt_one(tfm, data + i, data + i); +  + 	return 0; + } +@@ -186,19 +183,18 @@ int ieee80211_wep_encrypt(struct ieee802 + /* Perform WEP decryption using given key. data buffer includes encrypted +  * payload, including 4-byte ICV, but _not_ IV. data_len must not include ICV. +  * Return 0 on success and -1 on ICV mismatch. */ +-int ieee80211_wep_decrypt_data(struct crypto_blkcipher *tfm, u8 *rc4key, ++int ieee80211_wep_decrypt_data(struct crypto_cipher *tfm, u8 *rc4key, + 			       size_t klen, u8 *data, size_t data_len) + { +-	struct blkcipher_desc desc = { .tfm = tfm }; +-	struct scatterlist sg; + 	__le32 crc; ++	int i; +  + 	if (IS_ERR(tfm)) + 		return -1; +  +-	crypto_blkcipher_setkey(tfm, rc4key, klen); +-	sg_init_one(&sg, data, data_len + WEP_ICV_LEN); +-	crypto_blkcipher_decrypt(&desc, &sg, &sg, sg.length); ++	crypto_cipher_setkey(tfm, rc4key, klen); ++	for (i = 0; i < data_len + WEP_ICV_LEN; i++) ++		crypto_cipher_decrypt_one(tfm, data + i, data + i); +  + 	crc = cpu_to_le32(~crc32_le(~0, data, data_len)); + 	if (memcmp(&crc, data + data_len, WEP_ICV_LEN) != 0) +--- a/net/mac80211/wep.h ++++ b/net/mac80211/wep.h +@@ -18,12 +18,12 @@ +  + int ieee80211_wep_init(struct ieee80211_local *local); + void ieee80211_wep_free(struct ieee80211_local *local); +-int ieee80211_wep_encrypt_data(struct crypto_blkcipher *tfm, u8 *rc4key, ++int ieee80211_wep_encrypt_data(struct crypto_cipher *tfm, u8 *rc4key, + 				size_t klen, u8 *data, size_t data_len); + int ieee80211_wep_encrypt(struct ieee80211_local *local, + 			  struct sk_buff *skb, + 			  const u8 *key, int keylen, int keyidx); +-int ieee80211_wep_decrypt_data(struct crypto_blkcipher *tfm, u8 *rc4key, ++int ieee80211_wep_decrypt_data(struct crypto_cipher *tfm, u8 *rc4key, + 			       size_t klen, u8 *data, size_t data_len); + bool ieee80211_wep_is_weak_iv(struct sk_buff *skb, struct ieee80211_key *key); +   | 
