tkip.c
Go to the documentation of this file.
00001 /*
00002  * Copyright 2002-2004, Instant802 Networks, Inc.
00003  * Copyright 2005, Devicescape Software, Inc.
00004  *
00005  * This program is free software; you can redistribute it and/or modify
00006  * it under the terms of the GNU General Public License version 2 as
00007  * published by the Free Software Foundation.
00008  */
00009 #include <linux/kernel.h>
00010 #include <linux/bitops.h>
00011 #include <linux/types.h>
00012 #include <linux/netdevice.h>
00013 #include <linux/export.h>
00014 #include <asm/unaligned.h>
00015 
00016 #include <net/mac80211.h>
00017 #include "driver-ops.h"
00018 #include "key.h"
00019 #include "tkip.h"
00020 #include "wep.h"
00021 
00022 #define PHASE1_LOOP_COUNT 8
00023 
00024 /*
00025  * 2-byte by 2-byte subset of the full AES S-box table; second part of this
00026  * table is identical to first part but byte-swapped
00027  */
00028 static const u16 tkip_sbox[256] =
00029 {
00030         0xC6A5, 0xF884, 0xEE99, 0xF68D, 0xFF0D, 0xD6BD, 0xDEB1, 0x9154,
00031         0x6050, 0x0203, 0xCEA9, 0x567D, 0xE719, 0xB562, 0x4DE6, 0xEC9A,
00032         0x8F45, 0x1F9D, 0x8940, 0xFA87, 0xEF15, 0xB2EB, 0x8EC9, 0xFB0B,
00033         0x41EC, 0xB367, 0x5FFD, 0x45EA, 0x23BF, 0x53F7, 0xE496, 0x9B5B,
00034         0x75C2, 0xE11C, 0x3DAE, 0x4C6A, 0x6C5A, 0x7E41, 0xF502, 0x834F,
00035         0x685C, 0x51F4, 0xD134, 0xF908, 0xE293, 0xAB73, 0x6253, 0x2A3F,
00036         0x080C, 0x9552, 0x4665, 0x9D5E, 0x3028, 0x37A1, 0x0A0F, 0x2FB5,
00037         0x0E09, 0x2436, 0x1B9B, 0xDF3D, 0xCD26, 0x4E69, 0x7FCD, 0xEA9F,
00038         0x121B, 0x1D9E, 0x5874, 0x342E, 0x362D, 0xDCB2, 0xB4EE, 0x5BFB,
00039         0xA4F6, 0x764D, 0xB761, 0x7DCE, 0x527B, 0xDD3E, 0x5E71, 0x1397,
00040         0xA6F5, 0xB968, 0x0000, 0xC12C, 0x4060, 0xE31F, 0x79C8, 0xB6ED,
00041         0xD4BE, 0x8D46, 0x67D9, 0x724B, 0x94DE, 0x98D4, 0xB0E8, 0x854A,
00042         0xBB6B, 0xC52A, 0x4FE5, 0xED16, 0x86C5, 0x9AD7, 0x6655, 0x1194,
00043         0x8ACF, 0xE910, 0x0406, 0xFE81, 0xA0F0, 0x7844, 0x25BA, 0x4BE3,
00044         0xA2F3, 0x5DFE, 0x80C0, 0x058A, 0x3FAD, 0x21BC, 0x7048, 0xF104,
00045         0x63DF, 0x77C1, 0xAF75, 0x4263, 0x2030, 0xE51A, 0xFD0E, 0xBF6D,
00046         0x814C, 0x1814, 0x2635, 0xC32F, 0xBEE1, 0x35A2, 0x88CC, 0x2E39,
00047         0x9357, 0x55F2, 0xFC82, 0x7A47, 0xC8AC, 0xBAE7, 0x322B, 0xE695,
00048         0xC0A0, 0x1998, 0x9ED1, 0xA37F, 0x4466, 0x547E, 0x3BAB, 0x0B83,
00049         0x8CCA, 0xC729, 0x6BD3, 0x283C, 0xA779, 0xBCE2, 0x161D, 0xAD76,
00050         0xDB3B, 0x6456, 0x744E, 0x141E, 0x92DB, 0x0C0A, 0x486C, 0xB8E4,
00051         0x9F5D, 0xBD6E, 0x43EF, 0xC4A6, 0x39A8, 0x31A4, 0xD337, 0xF28B,
00052         0xD532, 0x8B43, 0x6E59, 0xDAB7, 0x018C, 0xB164, 0x9CD2, 0x49E0,
00053         0xD8B4, 0xACFA, 0xF307, 0xCF25, 0xCAAF, 0xF48E, 0x47E9, 0x1018,
00054         0x6FD5, 0xF088, 0x4A6F, 0x5C72, 0x3824, 0x57F1, 0x73C7, 0x9751,
00055         0xCB23, 0xA17C, 0xE89C, 0x3E21, 0x96DD, 0x61DC, 0x0D86, 0x0F85,
00056         0xE090, 0x7C42, 0x71C4, 0xCCAA, 0x90D8, 0x0605, 0xF701, 0x1C12,
00057         0xC2A3, 0x6A5F, 0xAEF9, 0x69D0, 0x1791, 0x9958, 0x3A27, 0x27B9,
00058         0xD938, 0xEB13, 0x2BB3, 0x2233, 0xD2BB, 0xA970, 0x0789, 0x33A7,
00059         0x2DB6, 0x3C22, 0x1592, 0xC920, 0x8749, 0xAAFF, 0x5078, 0xA57A,
00060         0x038F, 0x59F8, 0x0980, 0x1A17, 0x65DA, 0xD731, 0x84C6, 0xD0B8,
00061         0x82C3, 0x29B0, 0x5A77, 0x1E11, 0x7BCB, 0xA8FC, 0x6DD6, 0x2C3A,
00062 };
00063 
00064 static u16 tkipS(u16 val)
00065 {
00066         return tkip_sbox[val & 0xff] ^ swab16(tkip_sbox[val >> 8]);
00067 }
00068 
00069 static u8 *write_tkip_iv(u8 *pos, u16 iv16)
00070 {
00071         *pos++ = iv16 >> 8;
00072         *pos++ = ((iv16 >> 8) | 0x20) & 0x7f;
00073         *pos++ = iv16 & 0xFF;
00074         return pos;
00075 }
00076 
00077 /*
00078  * P1K := Phase1(TA, TK, TSC)
00079  * TA = transmitter address (48 bits)
00080  * TK = dot11DefaultKeyValue or dot11KeyMappingValue (128 bits)
00081  * TSC = TKIP sequence counter (48 bits, only 32 msb bits used)
00082  * P1K: 80 bits
00083  */
00084 static void tkip_mixing_phase1(const u8 *tk, struct tkip_ctx *ctx,
00085                                const u8 *ta, u32 tsc_IV32)
00086 {
00087         int i, j;
00088         u16 *p1k = ctx->p1k;
00089 
00090         p1k[0] = tsc_IV32 & 0xFFFF;
00091         p1k[1] = tsc_IV32 >> 16;
00092         p1k[2] = get_unaligned_le16(ta + 0);
00093         p1k[3] = get_unaligned_le16(ta + 2);
00094         p1k[4] = get_unaligned_le16(ta + 4);
00095 
00096         for (i = 0; i < PHASE1_LOOP_COUNT; i++) {
00097                 j = 2 * (i & 1);
00098                 p1k[0] += tkipS(p1k[4] ^ get_unaligned_le16(tk + 0 + j));
00099                 p1k[1] += tkipS(p1k[0] ^ get_unaligned_le16(tk + 4 + j));
00100                 p1k[2] += tkipS(p1k[1] ^ get_unaligned_le16(tk + 8 + j));
00101                 p1k[3] += tkipS(p1k[2] ^ get_unaligned_le16(tk + 12 + j));
00102                 p1k[4] += tkipS(p1k[3] ^ get_unaligned_le16(tk + 0 + j)) + i;
00103         }
00104         ctx->state = TKIP_STATE_PHASE1_DONE;
00105         ctx->p1k_iv32 = tsc_IV32;
00106 }
00107 
00108 static void tkip_mixing_phase2(const u8 *tk, struct tkip_ctx *ctx,
00109                                u16 tsc_IV16, u8 *rc4key)
00110 {
00111         u16 ppk[6];
00112         const u16 *p1k = ctx->p1k;
00113         int i;
00114 
00115         ppk[0] = p1k[0];
00116         ppk[1] = p1k[1];
00117         ppk[2] = p1k[2];
00118         ppk[3] = p1k[3];
00119         ppk[4] = p1k[4];
00120         ppk[5] = p1k[4] + tsc_IV16;
00121 
00122         ppk[0] += tkipS(ppk[5] ^ get_unaligned_le16(tk + 0));
00123         ppk[1] += tkipS(ppk[0] ^ get_unaligned_le16(tk + 2));
00124         ppk[2] += tkipS(ppk[1] ^ get_unaligned_le16(tk + 4));
00125         ppk[3] += tkipS(ppk[2] ^ get_unaligned_le16(tk + 6));
00126         ppk[4] += tkipS(ppk[3] ^ get_unaligned_le16(tk + 8));
00127         ppk[5] += tkipS(ppk[4] ^ get_unaligned_le16(tk + 10));
00128         ppk[0] += ror16(ppk[5] ^ get_unaligned_le16(tk + 12), 1);
00129         ppk[1] += ror16(ppk[0] ^ get_unaligned_le16(tk + 14), 1);
00130         ppk[2] += ror16(ppk[1], 1);
00131         ppk[3] += ror16(ppk[2], 1);
00132         ppk[4] += ror16(ppk[3], 1);
00133         ppk[5] += ror16(ppk[4], 1);
00134 
00135         rc4key = write_tkip_iv(rc4key, tsc_IV16);
00136         *rc4key++ = ((ppk[5] ^ get_unaligned_le16(tk)) >> 1) & 0xFF;
00137 
00138         for (i = 0; i < 6; i++)
00139                 put_unaligned_le16(ppk[i], rc4key + 2 * i);
00140 }
00141 
00142 /* Add TKIP IV and Ext. IV at @pos. @iv0, @iv1, and @iv2 are the first octets
00143  * of the IV. Returns pointer to the octet following IVs (i.e., beginning of
00144  * the packet payload). */
00145 u8 *ieee80211_tkip_add_iv(u8 *pos, struct ieee80211_key *key)
00146 {
00147         lockdep_assert_held(&key->u.tkip.txlock);
00148 
00149         pos = write_tkip_iv(pos, key->u.tkip.tx.iv16);
00150         *pos++ = (key->conf.keyidx << 6) | (1 << 5) /* Ext IV */;
00151         put_unaligned_le32(key->u.tkip.tx.iv32, pos);
00152         return pos + 4;
00153 }
00154 
00155 static void ieee80211_compute_tkip_p1k(struct ieee80211_key *key, u32 iv32)
00156 {
00157         struct ieee80211_sub_if_data *sdata = key->sdata;
00158         struct tkip_ctx *ctx = &key->u.tkip.tx;
00159         const u8 *tk = &key->conf.key[NL80211_TKIP_DATA_OFFSET_ENCR_KEY];
00160 
00161         lockdep_assert_held(&key->u.tkip.txlock);
00162 
00163         /*
00164          * Update the P1K when the IV32 is different from the value it
00165          * had when we last computed it (or when not initialised yet).
00166          * This might flip-flop back and forth if packets are processed
00167          * out-of-order due to the different ACs, but then we have to
00168          * just compute the P1K more often.
00169          */
00170         if (ctx->p1k_iv32 != iv32 || ctx->state == TKIP_STATE_NOT_INIT)
00171                 tkip_mixing_phase1(tk, ctx, sdata->vif.addr, iv32);
00172 }
00173 
00174 void ieee80211_get_tkip_p1k_iv(struct ieee80211_key_conf *keyconf,
00175                                u32 iv32, u16 *p1k)
00176 {
00177         struct ieee80211_key *key = (struct ieee80211_key *)
00178                         container_of(keyconf, struct ieee80211_key, conf);
00179         struct tkip_ctx *ctx = &key->u.tkip.tx;
00180         unsigned long flags;
00181 
00182         spin_lock_irqsave(&key->u.tkip.txlock, flags);
00183         ieee80211_compute_tkip_p1k(key, iv32);
00184         memcpy(p1k, ctx->p1k, sizeof(ctx->p1k));
00185         spin_unlock_irqrestore(&key->u.tkip.txlock, flags);
00186 }
00187 EXPORT_SYMBOL(ieee80211_get_tkip_p1k_iv);
00188 
00189 void ieee80211_get_tkip_rx_p1k(struct ieee80211_key_conf *keyconf,
00190                                const u8 *ta, u32 iv32, u16 *p1k)
00191 {
00192         const u8 *tk = &keyconf->key[NL80211_TKIP_DATA_OFFSET_ENCR_KEY];
00193         struct tkip_ctx ctx;
00194 
00195         tkip_mixing_phase1(tk, &ctx, ta, iv32);
00196         memcpy(p1k, ctx.p1k, sizeof(ctx.p1k));
00197 }
00198 EXPORT_SYMBOL(ieee80211_get_tkip_rx_p1k);
00199 
00200 void ieee80211_get_tkip_p2k(struct ieee80211_key_conf *keyconf,
00201                             struct sk_buff *skb, u8 *p2k)
00202 {
00203         struct ieee80211_key *key = (struct ieee80211_key *)
00204                         container_of(keyconf, struct ieee80211_key, conf);
00205         const u8 *tk = &key->conf.key[NL80211_TKIP_DATA_OFFSET_ENCR_KEY];
00206         struct tkip_ctx *ctx = &key->u.tkip.tx;
00207         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
00208         const u8 *data = (u8 *)hdr + ieee80211_hdrlen(hdr->frame_control);
00209         u32 iv32 = get_unaligned_le32(&data[4]);
00210         u16 iv16 = data[2] | (data[0] << 8);
00211         unsigned long flags;
00212 
00213         spin_lock_irqsave(&key->u.tkip.txlock, flags);
00214         ieee80211_compute_tkip_p1k(key, iv32);
00215         tkip_mixing_phase2(tk, ctx, iv16, p2k);
00216         spin_unlock_irqrestore(&key->u.tkip.txlock, flags);
00217 }
00218 EXPORT_SYMBOL(ieee80211_get_tkip_p2k);
00219 
00220 /*
00221  * Encrypt packet payload with TKIP using @key. @pos is a pointer to the
00222  * beginning of the buffer containing payload. This payload must include
00223  * the IV/Ext.IV and space for (taildroom) four octets for ICV.
00224  * @payload_len is the length of payload (_not_ including IV/ICV length).
00225  * @ta is the transmitter addresses.
00226  */
00227 int ieee80211_tkip_encrypt_data(struct crypto_cipher *tfm,
00228                                 struct ieee80211_key *key,
00229                                 struct sk_buff *skb,
00230                                 u8 *payload, size_t payload_len)
00231 {
00232         u8 rc4key[16];
00233 
00234         ieee80211_get_tkip_p2k(&key->conf, skb, rc4key);
00235 
00236         return ieee80211_wep_encrypt_data(tfm, rc4key, 16,
00237                                           payload, payload_len);
00238 }
00239 
00240 /* Decrypt packet payload with TKIP using @key. @pos is a pointer to the
00241  * beginning of the buffer containing IEEE 802.11 header payload, i.e.,
00242  * including IV, Ext. IV, real data, Michael MIC, ICV. @payload_len is the
00243  * length of payload, including IV, Ext. IV, MIC, ICV.  */
00244 int ieee80211_tkip_decrypt_data(struct crypto_cipher *tfm,
00245                                 struct ieee80211_key *key,
00246                                 u8 *payload, size_t payload_len, u8 *ta,
00247                                 u8 *ra, int only_iv, int queue,
00248                                 u32 *out_iv32, u16 *out_iv16)
00249 {
00250         u32 iv32;
00251         u32 iv16;
00252         u8 rc4key[16], keyid, *pos = payload;
00253         int res;
00254         const u8 *tk = &key->conf.key[NL80211_TKIP_DATA_OFFSET_ENCR_KEY];
00255 
00256         if (payload_len < 12)
00257                 return -1;
00258 
00259         iv16 = (pos[0] << 8) | pos[2];
00260         keyid = pos[3];
00261         iv32 = get_unaligned_le32(pos + 4);
00262         pos += 8;
00263 #ifdef CONFIG_MAC80211_TKIP_DEBUG
00264         {
00265                 int i;
00266                 printk(KERN_DEBUG "TKIP decrypt: data(len=%zd)", payload_len);
00267                 for (i = 0; i < payload_len; i++)
00268                         printk(" %02x", payload[i]);
00269                 printk("\n");
00270                 printk(KERN_DEBUG "TKIP decrypt: iv16=%04x iv32=%08x\n",
00271                        iv16, iv32);
00272         }
00273 #endif
00274 
00275         if (!(keyid & (1 << 5)))
00276                 return TKIP_DECRYPT_NO_EXT_IV;
00277 
00278         if ((keyid >> 6) != key->conf.keyidx)
00279                 return TKIP_DECRYPT_INVALID_KEYIDX;
00280 
00281         if (key->u.tkip.rx[queue].state != TKIP_STATE_NOT_INIT &&
00282             (iv32 < key->u.tkip.rx[queue].iv32 ||
00283              (iv32 == key->u.tkip.rx[queue].iv32 &&
00284               iv16 <= key->u.tkip.rx[queue].iv16))) {
00285 #ifdef CONFIG_MAC80211_TKIP_DEBUG
00286                 printk(KERN_DEBUG "TKIP replay detected for RX frame from "
00287                        "%pM (RX IV (%04x,%02x) <= prev. IV (%04x,%02x)\n",
00288                        ta,
00289                        iv32, iv16, key->u.tkip.rx[queue].iv32,
00290                        key->u.tkip.rx[queue].iv16);
00291 #endif
00292                 return TKIP_DECRYPT_REPLAY;
00293         }
00294 
00295         if (only_iv) {
00296                 res = TKIP_DECRYPT_OK;
00297                 key->u.tkip.rx[queue].state = TKIP_STATE_PHASE1_HW_UPLOADED;
00298                 goto done;
00299         }
00300 
00301         if (key->u.tkip.rx[queue].state == TKIP_STATE_NOT_INIT ||
00302             key->u.tkip.rx[queue].iv32 != iv32) {
00303                 /* IV16 wrapped around - perform TKIP phase 1 */
00304                 tkip_mixing_phase1(tk, &key->u.tkip.rx[queue], ta, iv32);
00305 #ifdef CONFIG_MAC80211_TKIP_DEBUG
00306                 {
00307                         int i;
00308                         u8 key_offset = NL80211_TKIP_DATA_OFFSET_ENCR_KEY;
00309                         printk(KERN_DEBUG "TKIP decrypt: Phase1 TA=%pM"
00310                                " TK=", ta);
00311                         for (i = 0; i < 16; i++)
00312                                 printk("%02x ",
00313                                        key->conf.key[key_offset + i]);
00314                         printk("\n");
00315                         printk(KERN_DEBUG "TKIP decrypt: P1K=");
00316                         for (i = 0; i < 5; i++)
00317                                 printk("%04x ", key->u.tkip.rx[queue].p1k[i]);
00318                         printk("\n");
00319                 }
00320 #endif
00321         }
00322         if (key->local->ops->update_tkip_key &&
00323             key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE &&
00324             key->u.tkip.rx[queue].state != TKIP_STATE_PHASE1_HW_UPLOADED) {
00325                 struct ieee80211_sub_if_data *sdata = key->sdata;
00326 
00327                 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
00328                         sdata = container_of(key->sdata->bss,
00329                                         struct ieee80211_sub_if_data, u.ap);
00330                 drv_update_tkip_key(key->local, sdata, &key->conf, key->sta,
00331                                 iv32, key->u.tkip.rx[queue].p1k);
00332                 key->u.tkip.rx[queue].state = TKIP_STATE_PHASE1_HW_UPLOADED;
00333         }
00334 
00335         tkip_mixing_phase2(tk, &key->u.tkip.rx[queue], iv16, rc4key);
00336 #ifdef CONFIG_MAC80211_TKIP_DEBUG
00337         {
00338                 int i;
00339                 printk(KERN_DEBUG "TKIP decrypt: Phase2 rc4key=");
00340                 for (i = 0; i < 16; i++)
00341                         printk("%02x ", rc4key[i]);
00342                 printk("\n");
00343         }
00344 #endif
00345 
00346         res = ieee80211_wep_decrypt_data(tfm, rc4key, 16, pos, payload_len - 12);
00347  done:
00348         if (res == TKIP_DECRYPT_OK) {
00349                 /*
00350                  * Record previously received IV, will be copied into the
00351                  * key information after MIC verification. It is possible
00352                  * that we don't catch replays of fragments but that's ok
00353                  * because the Michael MIC verication will then fail.
00354                  */
00355                 *out_iv32 = iv32;
00356                 *out_iv16 = iv16;
00357         }
00358 
00359         return res;
00360 }


ros_rt_wmp
Author(s): Danilo Tardioli, dantard@unizar.es
autogenerated on Mon Oct 6 2014 08:27:11