Blame view

net/mac80211/key.h 4.43 KB
f0706e828   Jiri Benc   [MAC80211]: Add m...
1
2
3
4
5
6
7
8
9
10
11
12
13
  /*
   * Copyright 2002-2004, Instant802 Networks, Inc.
   * Copyright 2005, Devicescape Software, Inc.
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License version 2 as
   * published by the Free Software Foundation.
   */
  
  #ifndef IEEE80211_KEY_H
  #define IEEE80211_KEY_H
  
  #include <linux/types.h>
8f37171a6   Johannes Berg   [MAC80211]: remov...
14
  #include <linux/list.h>
f0706e828   Jiri Benc   [MAC80211]: Add m...
15
  #include <linux/crypto.h>
db4d1169d   Johannes Berg   mac80211: split i...
16
  #include <linux/rcupdate.h>
f0706e828   Jiri Benc   [MAC80211]: Add m...
17
  #include <net/mac80211.h>
ffd7891dc   Luis R. Rodriguez   mac80211: Let dri...
18
19
20
21
22
23
24
25
26
27
28
29
  #define WEP_IV_LEN		4
  #define WEP_ICV_LEN		4
  #define ALG_TKIP_KEY_LEN	32
  #define ALG_CCMP_KEY_LEN	16
  #define CCMP_HDR_LEN		8
  #define CCMP_MIC_LEN		8
  #define CCMP_TK_LEN		16
  #define CCMP_PN_LEN		6
  #define TKIP_IV_LEN		8
  #define TKIP_ICV_LEN		4
  
  #define NUM_RX_DATA_QUEUES	17
f0706e828   Jiri Benc   [MAC80211]: Add m...
30

11a843b7e   Johannes Berg   [MAC80211]: rewor...
31
32
33
  struct ieee80211_local;
  struct ieee80211_sub_if_data;
  struct sta_info;
db4d1169d   Johannes Berg   mac80211: split i...
34
35
36
37
38
  /**
   * enum ieee80211_internal_key_flags - internal key flags
   *
   * @KEY_FLAG_UPLOADED_TO_HARDWARE: Indicates that this key is present
   *	in the hardware for TX crypto hardware acceleration.
3b96766f0   Johannes Berg   mac80211: fix key...
39
40
41
   * @KEY_FLAG_TODO_DELETE: Key is marked for deletion and will, after an
   *	RCU grace period, no longer be reachable other than from the
   *	todo list.
3a2457669   Johannes Berg   mac80211: fix key...
42
43
44
   * @KEY_FLAG_TODO_HWACCEL_ADD: Key needs to be added to hardware acceleration.
   * @KEY_FLAG_TODO_HWACCEL_REMOVE: Key needs to be removed from hardware
   *	acceleration.
3b96766f0   Johannes Berg   mac80211: fix key...
45
46
   * @KEY_FLAG_TODO_DEFKEY: Key is default key and debugfs needs to be updated.
   * @KEY_FLAG_TODO_ADD_DEBUGFS: Key needs to be added to debugfs.
3cfcf6ac6   Jouni Malinen   mac80211: 802.11w...
47
48
   * @KEY_FLAG_TODO_DEFMGMTKEY: Key is default management key and debugfs needs
   *	to be updated.
db4d1169d   Johannes Berg   mac80211: split i...
49
50
51
   */
  enum ieee80211_internal_key_flags {
  	KEY_FLAG_UPLOADED_TO_HARDWARE	= BIT(0),
3b96766f0   Johannes Berg   mac80211: fix key...
52
  	KEY_FLAG_TODO_DELETE		= BIT(1),
3a2457669   Johannes Berg   mac80211: fix key...
53
54
55
56
  	KEY_FLAG_TODO_HWACCEL_ADD	= BIT(2),
  	KEY_FLAG_TODO_HWACCEL_REMOVE	= BIT(3),
  	KEY_FLAG_TODO_DEFKEY		= BIT(4),
  	KEY_FLAG_TODO_ADD_DEBUGFS	= BIT(5),
3cfcf6ac6   Jouni Malinen   mac80211: 802.11w...
57
  	KEY_FLAG_TODO_DEFMGMTKEY	= BIT(6),
db4d1169d   Johannes Berg   mac80211: split i...
58
  };
11a843b7e   Johannes Berg   [MAC80211]: rewor...
59

b0f76b335   Harvey Harrison   mac80211: add a s...
60
61
62
63
64
65
  struct tkip_ctx {
  	u32 iv32;
  	u16 iv16;
  	u16 p1k[5];
  	int initialized;
  };
f0706e828   Jiri Benc   [MAC80211]: Add m...
66
  struct ieee80211_key {
11a843b7e   Johannes Berg   [MAC80211]: rewor...
67
68
69
  	struct ieee80211_local *local;
  	struct ieee80211_sub_if_data *sdata;
  	struct sta_info *sta;
3b96766f0   Johannes Berg   mac80211: fix key...
70
  	/* for sdata list */
11a843b7e   Johannes Berg   [MAC80211]: rewor...
71
  	struct list_head list;
3b96766f0   Johannes Berg   mac80211: fix key...
72
73
  	/* for todo list */
  	struct list_head todo;
11a843b7e   Johannes Berg   [MAC80211]: rewor...
74

3b96766f0   Johannes Berg   mac80211: fix key...
75
  	/* protected by todo lock! */
11a843b7e   Johannes Berg   [MAC80211]: rewor...
76
  	unsigned int flags;
f0706e828   Jiri Benc   [MAC80211]: Add m...
77
78
79
  	union {
  		struct {
  			/* last used TSC */
b0f76b335   Harvey Harrison   mac80211: add a s...
80
  			struct tkip_ctx tx;
f0706e828   Jiri Benc   [MAC80211]: Add m...
81
82
  
  			/* last received RSC */
b0f76b335   Harvey Harrison   mac80211: add a s...
83
  			struct tkip_ctx rx[NUM_RX_DATA_QUEUES];
f0706e828   Jiri Benc   [MAC80211]: Add m...
84
85
86
87
88
89
90
91
92
93
94
95
96
  		} tkip;
  		struct {
  			u8 tx_pn[6];
  			u8 rx_pn[NUM_RX_DATA_QUEUES][6];
  			struct crypto_cipher *tfm;
  			u32 replays; /* dot11RSNAStatsCCMPReplays */
  			/* scratch buffers for virt_to_page() (crypto API) */
  #ifndef AES_BLOCK_LEN
  #define AES_BLOCK_LEN 16
  #endif
  			u8 tx_crypto_buf[6 * AES_BLOCK_LEN];
  			u8 rx_crypto_buf[6 * AES_BLOCK_LEN];
  		} ccmp;
765cb46a3   Jouni Malinen   mac80211: 802.11w...
97
98
99
100
101
102
103
104
105
106
  		struct {
  			u8 tx_pn[6];
  			u8 rx_pn[6];
  			struct crypto_cipher *tfm;
  			u32 replays; /* dot11RSNAStatsCMACReplays */
  			u32 icverrors; /* dot11RSNAStatsCMACICVErrors */
  			/* scratch buffers for virt_to_page() (crypto API) */
  			u8 tx_crypto_buf[2 * AES_BLOCK_LEN];
  			u8 rx_crypto_buf[2 * AES_BLOCK_LEN];
  		} aes_cmac;
f0706e828   Jiri Benc   [MAC80211]: Add m...
107
  	} u;
f0706e828   Jiri Benc   [MAC80211]: Add m...
108

8f20fc249   Johannes Berg   [MAC80211]: embed...
109
110
  	/* number of times this key has been used */
  	int tx_rx_count;
f0706e828   Jiri Benc   [MAC80211]: Add m...
111

e9f207f0f   Jiri Benc   [MAC80211]: Add d...
112
113
114
115
116
  #ifdef CONFIG_MAC80211_DEBUGFS
  	struct {
  		struct dentry *stalink;
  		struct dentry *dir;
  		struct dentry *keylen;
8f20fc249   Johannes Berg   [MAC80211]: embed...
117
  		struct dentry *flags;
e9f207f0f   Jiri Benc   [MAC80211]: Add d...
118
119
120
121
122
123
124
  		struct dentry *keyidx;
  		struct dentry *hw_key_idx;
  		struct dentry *tx_rx_count;
  		struct dentry *algorithm;
  		struct dentry *tx_spec;
  		struct dentry *rx_spec;
  		struct dentry *replays;
3cfcf6ac6   Jouni Malinen   mac80211: 802.11w...
125
  		struct dentry *icverrors;
e9f207f0f   Jiri Benc   [MAC80211]: Add d...
126
  		struct dentry *key;
e7a64f12a   Johannes Berg   [MAC80211]: add i...
127
  		struct dentry *ifindex;
d9c58f30b   Johannes Berg   mac80211: fix key...
128
  		int cnt;
e9f207f0f   Jiri Benc   [MAC80211]: Add d...
129
130
  	} debugfs;
  #endif
8f20fc249   Johannes Berg   [MAC80211]: embed...
131
132
133
134
135
  	/*
  	 * key config, must be last because it contains key
  	 * material as variable length member
  	 */
  	struct ieee80211_key_conf conf;
f0706e828   Jiri Benc   [MAC80211]: Add m...
136
  };
db4d1169d   Johannes Berg   mac80211: split i...
137
  struct ieee80211_key *ieee80211_key_alloc(enum ieee80211_key_alg alg,
11a843b7e   Johannes Berg   [MAC80211]: rewor...
138
139
  					  int idx,
  					  size_t key_len,
faa8fdc85   Jouni Malinen   nl80211: Add RSC ...
140
141
  					  const u8 *key_data,
  					  size_t seq_len, const u8 *seq);
db4d1169d   Johannes Berg   mac80211: split i...
142
143
144
145
146
147
148
  /*
   * Insert a key into data structures (sdata, sta if necessary)
   * to make it used, free old key.
   */
  void ieee80211_key_link(struct ieee80211_key *key,
  			struct ieee80211_sub_if_data *sdata,
  			struct sta_info *sta);
11a843b7e   Johannes Berg   [MAC80211]: rewor...
149
150
  void ieee80211_key_free(struct ieee80211_key *key);
  void ieee80211_set_default_key(struct ieee80211_sub_if_data *sdata, int idx);
3cfcf6ac6   Jouni Malinen   mac80211: 802.11w...
151
152
  void ieee80211_set_default_mgmt_key(struct ieee80211_sub_if_data *sdata,
  				    int idx);
11a843b7e   Johannes Berg   [MAC80211]: rewor...
153
154
155
  void ieee80211_free_keys(struct ieee80211_sub_if_data *sdata);
  void ieee80211_enable_keys(struct ieee80211_sub_if_data *sdata);
  void ieee80211_disable_keys(struct ieee80211_sub_if_data *sdata);
3b96766f0   Johannes Berg   mac80211: fix key...
156
  void ieee80211_key_todo(void);
f0706e828   Jiri Benc   [MAC80211]: Add m...
157
  #endif /* IEEE80211_KEY_H */