~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/net/mac80211/key.h

Version: ~ [ linux-5.8-rc4 ] ~ [ linux-5.7.7 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.50 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.131 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.187 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.229 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.229 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.85 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * Copyright 2002-2004, Instant802 Networks, Inc.
  3  * Copyright 2005, Devicescape Software, Inc.
  4  *
  5  * This program is free software; you can redistribute it and/or modify
  6  * it under the terms of the GNU General Public License version 2 as
  7  * published by the Free Software Foundation.
  8  */
  9 
 10 #ifndef IEEE80211_KEY_H
 11 #define IEEE80211_KEY_H
 12 
 13 #include <linux/types.h>
 14 #include <linux/list.h>
 15 #include <linux/crypto.h>
 16 #include <linux/rcupdate.h>
 17 #include <net/mac80211.h>
 18 
 19 #define NUM_DEFAULT_KEYS 4
 20 #define NUM_DEFAULT_MGMT_KEYS 2
 21 
 22 struct ieee80211_local;
 23 struct ieee80211_sub_if_data;
 24 struct sta_info;
 25 
 26 /**
 27  * enum ieee80211_internal_key_flags - internal key flags
 28  *
 29  * @KEY_FLAG_UPLOADED_TO_HARDWARE: Indicates that this key is present
 30  *      in the hardware for TX crypto hardware acceleration.
 31  * @KEY_FLAG_TAINTED: Key is tainted and packets should be dropped.
 32  * @KEY_FLAG_CIPHER_SCHEME: This key is for a hardware cipher scheme
 33  */
 34 enum ieee80211_internal_key_flags {
 35         KEY_FLAG_UPLOADED_TO_HARDWARE   = BIT(0),
 36         KEY_FLAG_TAINTED                = BIT(1),
 37         KEY_FLAG_CIPHER_SCHEME          = BIT(2),
 38 };
 39 
 40 enum ieee80211_internal_tkip_state {
 41         TKIP_STATE_NOT_INIT,
 42         TKIP_STATE_PHASE1_DONE,
 43         TKIP_STATE_PHASE1_HW_UPLOADED,
 44 };
 45 
 46 struct tkip_ctx {
 47         u16 p1k[5];     /* p1k cache */
 48         u32 p1k_iv32;   /* iv32 for which p1k computed */
 49         enum ieee80211_internal_tkip_state state;
 50 };
 51 
 52 struct tkip_ctx_rx {
 53         struct tkip_ctx ctx;
 54         u32 iv32;       /* current iv32 */
 55         u16 iv16;       /* current iv16 */
 56 };
 57 
 58 struct ieee80211_key {
 59         struct ieee80211_local *local;
 60         struct ieee80211_sub_if_data *sdata;
 61         struct sta_info *sta;
 62 
 63         /* for sdata list */
 64         struct list_head list;
 65 
 66         /* protected by key mutex */
 67         unsigned int flags;
 68 
 69         union {
 70                 struct {
 71                         /* protects tx context */
 72                         spinlock_t txlock;
 73 
 74                         /* last used TSC */
 75                         struct tkip_ctx tx;
 76 
 77                         /* last received RSC */
 78                         struct tkip_ctx_rx rx[IEEE80211_NUM_TIDS];
 79 
 80                         /* number of mic failures */
 81                         u32 mic_failures;
 82                 } tkip;
 83                 struct {
 84                         /*
 85                          * Last received packet number. The first
 86                          * IEEE80211_NUM_TIDS counters are used with Data
 87                          * frames and the last counter is used with Robust
 88                          * Management frames.
 89                          */
 90                         u8 rx_pn[IEEE80211_NUM_TIDS + 1][IEEE80211_CCMP_PN_LEN];
 91                         struct crypto_aead *tfm;
 92                         u32 replays; /* dot11RSNAStatsCCMPReplays */
 93                 } ccmp;
 94                 struct {
 95                         u8 rx_pn[IEEE80211_CMAC_PN_LEN];
 96                         struct crypto_shash *tfm;
 97                         u32 replays; /* dot11RSNAStatsCMACReplays */
 98                         u32 icverrors; /* dot11RSNAStatsCMACICVErrors */
 99                 } aes_cmac;
100                 struct {
101                         u8 rx_pn[IEEE80211_GMAC_PN_LEN];
102                         struct crypto_aead *tfm;
103                         u32 replays; /* dot11RSNAStatsCMACReplays */
104                         u32 icverrors; /* dot11RSNAStatsCMACICVErrors */
105                 } aes_gmac;
106                 struct {
107                         /* Last received packet number. The first
108                          * IEEE80211_NUM_TIDS counters are used with Data
109                          * frames and the last counter is used with Robust
110                          * Management frames.
111                          */
112                         u8 rx_pn[IEEE80211_NUM_TIDS + 1][IEEE80211_GCMP_PN_LEN];
113                         struct crypto_aead *tfm;
114                         u32 replays; /* dot11RSNAStatsGCMPReplays */
115                 } gcmp;
116                 struct {
117                         /* generic cipher scheme */
118                         u8 rx_pn[IEEE80211_NUM_TIDS + 1][IEEE80211_MAX_PN_LEN];
119                 } gen;
120         } u;
121 
122 #ifdef CONFIG_MAC80211_DEBUGFS
123         struct {
124                 struct dentry *stalink;
125                 struct dentry *dir;
126                 int cnt;
127         } debugfs;
128 #endif
129 
130         /*
131          * key config, must be last because it contains key
132          * material as variable length member
133          */
134         struct ieee80211_key_conf conf;
135 };
136 
137 struct ieee80211_key *
138 ieee80211_key_alloc(u32 cipher, int idx, size_t key_len,
139                     const u8 *key_data,
140                     size_t seq_len, const u8 *seq,
141                     const struct ieee80211_cipher_scheme *cs);
142 /*
143  * Insert a key into data structures (sdata, sta if necessary)
144  * to make it used, free old key. On failure, also free the new key.
145  */
146 int ieee80211_key_link(struct ieee80211_key *key,
147                        struct ieee80211_sub_if_data *sdata,
148                        struct sta_info *sta);
149 void ieee80211_key_free(struct ieee80211_key *key, bool delay_tailroom);
150 void ieee80211_key_free_unused(struct ieee80211_key *key);
151 void ieee80211_set_default_key(struct ieee80211_sub_if_data *sdata, int idx,
152                                bool uni, bool multi);
153 void ieee80211_set_default_mgmt_key(struct ieee80211_sub_if_data *sdata,
154                                     int idx);
155 void ieee80211_free_keys(struct ieee80211_sub_if_data *sdata,
156                          bool force_synchronize);
157 void ieee80211_free_sta_keys(struct ieee80211_local *local,
158                              struct sta_info *sta);
159 void ieee80211_enable_keys(struct ieee80211_sub_if_data *sdata);
160 void ieee80211_reset_crypto_tx_tailroom(struct ieee80211_sub_if_data *sdata);
161 
162 #define key_mtx_dereference(local, ref) \
163         rcu_dereference_protected(ref, lockdep_is_held(&((local)->key_mtx)))
164 
165 void ieee80211_delayed_tailroom_dec(struct work_struct *wk);
166 
167 #endif /* IEEE80211_KEY_H */
168 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp