Lines Matching +full:conf +full:- +full:rx

1 // SPDX-License-Identifier: GPL-2.0-only
29 get_random_bytes(&local->wep_iv, IEEE80211_WEP_IV_LEN); in ieee80211_wep_init()
51 local->wep_iv++; in ieee80211_wep_get_iv()
52 if (ieee80211_wep_weak_iv(local->wep_iv, keylen)) in ieee80211_wep_get_iv()
53 local->wep_iv += 0x0100; in ieee80211_wep_get_iv()
58 *iv++ = (local->wep_iv >> 16) & 0xff; in ieee80211_wep_get_iv()
59 *iv++ = (local->wep_iv >> 8) & 0xff; in ieee80211_wep_get_iv()
60 *iv++ = local->wep_iv & 0xff; in ieee80211_wep_get_iv()
69 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; in ieee80211_wep_add_iv()
74 hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_PROTECTED); in ieee80211_wep_add_iv()
79 hdrlen = ieee80211_hdrlen(hdr->frame_control); in ieee80211_wep_add_iv()
84 if (info->control.hw_key && in ieee80211_wep_add_iv()
85 (info->control.hw_key->flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE)) in ieee80211_wep_add_iv()
97 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; in ieee80211_wep_remove_iv()
100 hdrlen = ieee80211_hdrlen(hdr->frame_control); in ieee80211_wep_remove_iv()
101 memmove(skb->data + IEEE80211_WEP_IV_LEN, skb->data, hdrlen); in ieee80211_wep_remove_iv()
107 * for 4-byte ICV. data_len must not include this ICV. Note: this function
141 return -1; in ieee80211_wep_encrypt()
145 return -1; in ieee80211_wep_encrypt()
147 len = skb->len - (iv + IEEE80211_WEP_IV_LEN - skb->data); in ieee80211_wep_encrypt()
149 /* Prepend 24-bit IV to RC4 key */ in ieee80211_wep_encrypt()
158 return ieee80211_wep_encrypt_data(&local->wep_tx_ctx, rc4key, keylen + 3, in ieee80211_wep_encrypt()
164 * payload, including 4-byte ICV, but _not_ IV. data_len must not include ICV.
165 * Return 0 on success and -1 on ICV mismatch. */
178 return -1; in ieee80211_wep_decrypt_data()
186 * ICV (4 bytes). skb->len includes both IV and ICV.
188 * Returns 0 if frame was decrypted successfully and ICV was correct and -1 on
199 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; in ieee80211_wep_decrypt()
204 if (!ieee80211_has_protected(hdr->frame_control)) in ieee80211_wep_decrypt()
205 return -1; in ieee80211_wep_decrypt()
207 hdrlen = ieee80211_hdrlen(hdr->frame_control); in ieee80211_wep_decrypt()
208 if (skb->len < hdrlen + IEEE80211_WEP_IV_LEN + IEEE80211_WEP_ICV_LEN) in ieee80211_wep_decrypt()
209 return -1; in ieee80211_wep_decrypt()
211 len = skb->len - hdrlen - IEEE80211_WEP_IV_LEN - IEEE80211_WEP_ICV_LEN; in ieee80211_wep_decrypt()
213 keyidx = skb->data[hdrlen + 3] >> 6; in ieee80211_wep_decrypt()
215 if (!key || keyidx != key->conf.keyidx) in ieee80211_wep_decrypt()
216 return -1; in ieee80211_wep_decrypt()
218 klen = 3 + key->conf.keylen; in ieee80211_wep_decrypt()
220 /* Prepend 24-bit IV to RC4 key */ in ieee80211_wep_decrypt()
221 memcpy(rc4key, skb->data + hdrlen, 3); in ieee80211_wep_decrypt()
224 memcpy(rc4key + 3, key->conf.key, key->conf.keylen); in ieee80211_wep_decrypt()
226 if (ieee80211_wep_decrypt_data(&local->wep_rx_ctx, rc4key, klen, in ieee80211_wep_decrypt()
227 skb->data + hdrlen + in ieee80211_wep_decrypt()
229 ret = -1; in ieee80211_wep_decrypt()
232 skb_trim(skb, skb->len - IEEE80211_WEP_ICV_LEN); in ieee80211_wep_decrypt()
235 memmove(skb->data + IEEE80211_WEP_IV_LEN, skb->data, hdrlen); in ieee80211_wep_decrypt()
242 ieee80211_crypto_wep_decrypt(struct ieee80211_rx_data *rx) in ieee80211_crypto_wep_decrypt() argument
244 struct sk_buff *skb = rx->skb; in ieee80211_crypto_wep_decrypt()
246 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; in ieee80211_crypto_wep_decrypt()
247 __le16 fc = hdr->frame_control; in ieee80211_crypto_wep_decrypt()
252 if (!(status->flag & RX_FLAG_DECRYPTED)) { in ieee80211_crypto_wep_decrypt()
253 if (skb_linearize(rx->skb)) in ieee80211_crypto_wep_decrypt()
255 if (ieee80211_wep_decrypt(rx->local, rx->skb, rx->key)) in ieee80211_crypto_wep_decrypt()
257 } else if (!(status->flag & RX_FLAG_IV_STRIPPED)) { in ieee80211_crypto_wep_decrypt()
258 if (!pskb_may_pull(rx->skb, ieee80211_hdrlen(fc) + in ieee80211_crypto_wep_decrypt()
261 ieee80211_wep_remove_iv(rx->local, rx->skb, rx->key); in ieee80211_crypto_wep_decrypt()
263 if (!(status->flag & RX_FLAG_ICV_STRIPPED) && in ieee80211_crypto_wep_decrypt()
264 pskb_trim(rx->skb, rx->skb->len - IEEE80211_WEP_ICV_LEN)) in ieee80211_crypto_wep_decrypt()
274 struct ieee80211_key_conf *hw_key = info->control.hw_key; in wep_encrypt_skb()
277 if (ieee80211_wep_encrypt(tx->local, skb, tx->key->conf.key, in wep_encrypt_skb()
278 tx->key->conf.keylen, in wep_encrypt_skb()
279 tx->key->conf.keyidx)) in wep_encrypt_skb()
280 return -1; in wep_encrypt_skb()
281 } else if ((hw_key->flags & IEEE80211_KEY_FLAG_GENERATE_IV) || in wep_encrypt_skb()
282 (hw_key->flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE)) { in wep_encrypt_skb()
283 if (!ieee80211_wep_add_iv(tx->local, skb, in wep_encrypt_skb()
284 tx->key->conf.keylen, in wep_encrypt_skb()
285 tx->key->conf.keyidx)) in wep_encrypt_skb()
286 return -1; in wep_encrypt_skb()
299 skb_queue_walk(&tx->skbs, skb) { in ieee80211_crypto_wep_encrypt()
301 I802_DEBUG_INC(tx->local->tx_handlers_drop_wep); in ieee80211_crypto_wep_encrypt()