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

1 // SPDX-License-Identifier: GPL-2.0-only
28 get_random_bytes(&local->wep_iv, IEEE80211_WEP_IV_LEN); in ieee80211_wep_init()
50 local->wep_iv++; in ieee80211_wep_get_iv()
51 if (ieee80211_wep_weak_iv(local->wep_iv, keylen)) in ieee80211_wep_get_iv()
52 local->wep_iv += 0x0100; in ieee80211_wep_get_iv()
57 *iv++ = (local->wep_iv >> 16) & 0xff; in ieee80211_wep_get_iv()
58 *iv++ = (local->wep_iv >> 8) & 0xff; in ieee80211_wep_get_iv()
59 *iv++ = local->wep_iv & 0xff; in ieee80211_wep_get_iv()
68 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; in ieee80211_wep_add_iv()
73 hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_PROTECTED); in ieee80211_wep_add_iv()
78 hdrlen = ieee80211_hdrlen(hdr->frame_control); in ieee80211_wep_add_iv()
83 if (info->control.hw_key && in ieee80211_wep_add_iv()
84 (info->control.hw_key->flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE)) in ieee80211_wep_add_iv()
96 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; in ieee80211_wep_remove_iv()
99 hdrlen = ieee80211_hdrlen(hdr->frame_control); in ieee80211_wep_remove_iv()
100 memmove(skb->data + IEEE80211_WEP_IV_LEN, skb->data, hdrlen); in ieee80211_wep_remove_iv()
106 * for 4-byte ICV. data_len must not include this ICV. Note: this function
140 return -1; in ieee80211_wep_encrypt()
144 return -1; in ieee80211_wep_encrypt()
146 len = skb->len - (iv + IEEE80211_WEP_IV_LEN - skb->data); in ieee80211_wep_encrypt()
148 /* Prepend 24-bit IV to RC4 key */ in ieee80211_wep_encrypt()
157 return ieee80211_wep_encrypt_data(&local->wep_tx_ctx, rc4key, keylen + 3, in ieee80211_wep_encrypt()
163 * payload, including 4-byte ICV, but _not_ IV. data_len must not include ICV.
164 * Return 0 on success and -1 on ICV mismatch. */
177 return -1; in ieee80211_wep_decrypt_data()
185 * ICV (4 bytes). skb->len includes both IV and ICV.
187 * Returns 0 if frame was decrypted successfully and ICV was correct and -1 on
198 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; in ieee80211_wep_decrypt()
203 if (!ieee80211_has_protected(hdr->frame_control)) in ieee80211_wep_decrypt()
204 return -1; in ieee80211_wep_decrypt()
206 hdrlen = ieee80211_hdrlen(hdr->frame_control); in ieee80211_wep_decrypt()
207 if (skb->len < hdrlen + IEEE80211_WEP_IV_LEN + IEEE80211_WEP_ICV_LEN) in ieee80211_wep_decrypt()
208 return -1; in ieee80211_wep_decrypt()
210 len = skb->len - hdrlen - IEEE80211_WEP_IV_LEN - IEEE80211_WEP_ICV_LEN; in ieee80211_wep_decrypt()
212 keyidx = skb->data[hdrlen + 3] >> 6; in ieee80211_wep_decrypt()
214 if (!key || keyidx != key->conf.keyidx) in ieee80211_wep_decrypt()
215 return -1; in ieee80211_wep_decrypt()
217 klen = 3 + key->conf.keylen; in ieee80211_wep_decrypt()
219 /* Prepend 24-bit IV to RC4 key */ in ieee80211_wep_decrypt()
220 memcpy(rc4key, skb->data + hdrlen, 3); in ieee80211_wep_decrypt()
223 memcpy(rc4key + 3, key->conf.key, key->conf.keylen); in ieee80211_wep_decrypt()
225 if (ieee80211_wep_decrypt_data(&local->wep_rx_ctx, rc4key, klen, in ieee80211_wep_decrypt()
226 skb->data + hdrlen + in ieee80211_wep_decrypt()
228 ret = -1; in ieee80211_wep_decrypt()
231 skb_trim(skb, skb->len - IEEE80211_WEP_ICV_LEN); in ieee80211_wep_decrypt()
234 memmove(skb->data + IEEE80211_WEP_IV_LEN, skb->data, hdrlen); in ieee80211_wep_decrypt()
241 ieee80211_crypto_wep_decrypt(struct ieee80211_rx_data *rx) in ieee80211_crypto_wep_decrypt() argument
243 struct sk_buff *skb = rx->skb; in ieee80211_crypto_wep_decrypt()
245 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; in ieee80211_crypto_wep_decrypt()
246 __le16 fc = hdr->frame_control; in ieee80211_crypto_wep_decrypt()
251 if (!(status->flag & RX_FLAG_DECRYPTED)) { in ieee80211_crypto_wep_decrypt()
252 if (skb_linearize(rx->skb)) in ieee80211_crypto_wep_decrypt()
254 if (ieee80211_wep_decrypt(rx->local, rx->skb, rx->key)) in ieee80211_crypto_wep_decrypt()
256 } else if (!(status->flag & RX_FLAG_IV_STRIPPED)) { in ieee80211_crypto_wep_decrypt()
257 if (!pskb_may_pull(rx->skb, ieee80211_hdrlen(fc) + in ieee80211_crypto_wep_decrypt()
260 ieee80211_wep_remove_iv(rx->local, rx->skb, rx->key); in ieee80211_crypto_wep_decrypt()
262 if (!(status->flag & RX_FLAG_ICV_STRIPPED) && in ieee80211_crypto_wep_decrypt()
263 pskb_trim(rx->skb, rx->skb->len - IEEE80211_WEP_ICV_LEN)) in ieee80211_crypto_wep_decrypt()
273 struct ieee80211_key_conf *hw_key = info->control.hw_key; in wep_encrypt_skb()
276 if (ieee80211_wep_encrypt(tx->local, skb, tx->key->conf.key, in wep_encrypt_skb()
277 tx->key->conf.keylen, in wep_encrypt_skb()
278 tx->key->conf.keyidx)) in wep_encrypt_skb()
279 return -1; in wep_encrypt_skb()
280 } else if ((hw_key->flags & IEEE80211_KEY_FLAG_GENERATE_IV) || in wep_encrypt_skb()
281 (hw_key->flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE)) { in wep_encrypt_skb()
282 if (!ieee80211_wep_add_iv(tx->local, skb, in wep_encrypt_skb()
283 tx->key->conf.keylen, in wep_encrypt_skb()
284 tx->key->conf.keyidx)) in wep_encrypt_skb()
285 return -1; in wep_encrypt_skb()
298 skb_queue_walk(&tx->skbs, skb) { in ieee80211_crypto_wep_encrypt()
300 I802_DEBUG_INC(tx->local->tx_handlers_drop_wep); in ieee80211_crypto_wep_encrypt()