* @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)
 {
  * 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,
 
 
 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 {
        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,
 
        /* 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);
        }
 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)
 /* 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;
        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;
 }
 /* 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)
 
 
 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);