From fa639165d981e3ca2f3e0fd242f9238b244bc5d3 Mon Sep 17 00:00:00 2001 From: damien Date: Tue, 12 Aug 2008 16:56:45 +0000 Subject: [PATCH] add new IEEE80211_CIPHER_AES128_CMAC cipher and new key flag IEEE80211_KEY_IGTK. lot of cleanup while i'm here (indent function prototypes). change license since this file was completely rewritten. --- sys/net80211/ieee80211_crypto.h | 172 +++++++++++++++----------------- 1 file changed, 80 insertions(+), 92 deletions(-) diff --git a/sys/net80211/ieee80211_crypto.h b/sys/net80211/ieee80211_crypto.h index b5161d919d0..f27433304f2 100644 --- a/sys/net80211/ieee80211_crypto.h +++ b/sys/net80211/ieee80211_crypto.h @@ -1,35 +1,21 @@ -/* $OpenBSD: ieee80211_crypto.h,v 1.17 2008/08/12 16:51:39 damien Exp $ */ -/* $NetBSD: ieee80211_crypto.h,v 1.2 2003/09/14 01:14:55 dyoung Exp $ */ +/* $OpenBSD: ieee80211_crypto.h,v 1.18 2008/08/12 16:56:45 damien Exp $ */ /*- - * Copyright (c) 2001 Atsushi Onoe - * Copyright (c) 2002, 2003 Sam Leffler, Errno Consulting - * All rights reserved. + * Copyright (c) 2007,2008 Damien Bergamini * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD: src/sys/net80211/ieee80211_crypto.h,v 1.2 2003/06/27 05:13:52 sam Exp $ + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + #ifndef _NET80211_IEEE80211_CRYPTO_H_ #define _NET80211_IEEE80211_CRYPTO_H_ @@ -38,24 +24,25 @@ */ /* - * 802.11i ciphers. + * 802.11 ciphers. */ enum ieee80211_cipher { - IEEE80211_CIPHER_NONE = 0x00000000, - IEEE80211_CIPHER_USEGROUP = 0x00000001, - IEEE80211_CIPHER_WEP40 = 0x00000002, - IEEE80211_CIPHER_TKIP = 0x00000004, - IEEE80211_CIPHER_CCMP = 0x00000008, - IEEE80211_CIPHER_WEP104 = 0x00000010 + IEEE80211_CIPHER_NONE = 0x00000000, + IEEE80211_CIPHER_USEGROUP = 0x00000001, + IEEE80211_CIPHER_WEP40 = 0x00000002, + IEEE80211_CIPHER_TKIP = 0x00000004, + IEEE80211_CIPHER_CCMP = 0x00000008, + IEEE80211_CIPHER_WEP104 = 0x00000010, + IEEE80211_CIPHER_AES128_CMAC = 0x00000020 /* 11w */ }; /* - * 802.11i Authentication and Key Management Protocols. + * 802.11 Authentication and Key Management Protocols. */ enum ieee80211_akm { - IEEE80211_AKM_NONE = 0x00000000, - IEEE80211_AKM_IEEE8021X = 0x00000001, - IEEE80211_AKM_PSK = 0x00000002 + IEEE80211_AKM_NONE = 0x00000000, + IEEE80211_AKM_IEEE8021X = 0x00000001, + IEEE80211_AKM_PSK = 0x00000002 }; #define IEEE80211_KEYBUF_SIZE 16 @@ -69,11 +56,12 @@ enum ieee80211_akm { #define IEEE80211_PMK_LEN 32 struct ieee80211_key { - u_int8_t k_id; /* identifier (0-3) */ + u_int8_t k_id; /* identifier (0-5) */ enum ieee80211_cipher k_cipher; u_int k_flags; -#define IEEE80211_KEY_GROUP 0x00000001 /* group key */ +#define IEEE80211_KEY_GROUP 0x00000001 /* group data key */ #define IEEE80211_KEY_TX 0x00000002 /* Tx+Rx */ +#define IEEE80211_KEY_IGTK 0x00000004 /* integrity group key */ u_int k_len; u_int64_t k_rsc[IEEE80211_NUM_TID]; @@ -84,75 +72,75 @@ struct ieee80211_key { }; /* forward references */ -struct ieee80211com; -struct ieee80211_node; +struct ieee80211com; +struct ieee80211_node; -extern void ieee80211_crypto_attach(struct ifnet *); -extern void ieee80211_crypto_detach(struct ifnet *); - -extern const u_int8_t *ieee80211_get_pmk(struct ieee80211com *, - struct ieee80211_node *, const u_int8_t *); +void ieee80211_crypto_attach(struct ifnet *); +void ieee80211_crypto_detach(struct ifnet *); -extern struct ieee80211_key *ieee80211_get_txkey(struct ieee80211com *, +struct ieee80211_key *ieee80211_get_txkey(struct ieee80211com *, const struct ieee80211_frame *, struct ieee80211_node *); -extern struct mbuf *ieee80211_encrypt(struct ieee80211com *, struct mbuf *, +struct ieee80211_key *ieee80211_get_rxkey(struct ieee80211com *, + struct mbuf *, struct ieee80211_node *); +struct mbuf *ieee80211_encrypt(struct ieee80211com *, struct mbuf *, struct ieee80211_key *); -extern struct mbuf *ieee80211_decrypt(struct ieee80211com *, struct mbuf *, +struct mbuf *ieee80211_decrypt(struct ieee80211com *, struct mbuf *, struct ieee80211_node *); -int ieee80211_set_key(struct ieee80211com *, struct ieee80211_node *, - struct ieee80211_key *); -void ieee80211_delete_key(struct ieee80211com *, struct ieee80211_node *, - struct ieee80211_key *); - -int ieee80211_wep_set_key(struct ieee80211com *, struct ieee80211_key *); -void ieee80211_wep_delete_key(struct ieee80211com *, struct ieee80211_key *); -struct mbuf * -ieee80211_wep_encrypt(struct ieee80211com *, struct mbuf *, - struct ieee80211_key *); -struct mbuf * -ieee80211_wep_decrypt(struct ieee80211com *, struct mbuf *, - struct ieee80211_key *); - -int ieee80211_tkip_set_key(struct ieee80211com *, struct ieee80211_key *); -void ieee80211_tkip_delete_key(struct ieee80211com *, struct ieee80211_key *); -struct mbuf *ieee80211_tkip_encrypt(struct ieee80211com *, struct mbuf *, +int ieee80211_set_key(struct ieee80211com *, struct ieee80211_node *, struct ieee80211_key *); -struct mbuf *ieee80211_tkip_decrypt(struct ieee80211com *, struct mbuf *, +void ieee80211_delete_key(struct ieee80211com *, struct ieee80211_node *, struct ieee80211_key *); -int ieee80211_ccmp_set_key(struct ieee80211com *, struct ieee80211_key *); -void ieee80211_ccmp_delete_key(struct ieee80211com *, struct ieee80211_key *); -struct mbuf *ieee80211_ccmp_encrypt(struct ieee80211com *, struct mbuf *, +void ieee80211_eapol_key_mic(struct ieee80211_eapol_key *, + const u_int8_t *); +int ieee80211_eapol_key_check_mic(struct ieee80211_eapol_key *, + const u_int8_t *); +void ieee80211_eapol_key_encrypt(struct ieee80211com *, + struct ieee80211_eapol_key *, const u_int8_t *); +int ieee80211_eapol_key_decrypt(struct ieee80211_eapol_key *, + const u_int8_t *); + +const u_int8_t *ieee80211_get_pmk(struct ieee80211com *, + struct ieee80211_node *, const u_int8_t *); +void ieee80211_derive_ptk(enum ieee80211_akm, const u_int8_t *, + const u_int8_t *, const u_int8_t *, const u_int8_t *, + const u_int8_t *, struct ieee80211_ptk *); +int ieee80211_cipher_keylen(enum ieee80211_cipher); + +int ieee80211_wep_set_key(struct ieee80211com *, struct ieee80211_key *); +void ieee80211_wep_delete_key(struct ieee80211com *, + struct ieee80211_key *); +struct mbuf *ieee80211_wep_encrypt(struct ieee80211com *, struct mbuf *, struct ieee80211_key *); -struct mbuf *ieee80211_ccmp_decrypt(struct ieee80211com *, struct mbuf *, +struct mbuf *ieee80211_wep_decrypt(struct ieee80211com *, struct mbuf *, struct ieee80211_key *); -extern void ieee80211_tkip_mic(struct mbuf *, int, const u_int8_t *, +int ieee80211_tkip_set_key(struct ieee80211com *, struct ieee80211_key *); +void ieee80211_tkip_delete_key(struct ieee80211com *, + struct ieee80211_key *); +struct mbuf *ieee80211_tkip_encrypt(struct ieee80211com *, + struct mbuf *, struct ieee80211_key *); +struct mbuf *ieee80211_tkip_decrypt(struct ieee80211com *, + struct mbuf *, struct ieee80211_key *); +void ieee80211_tkip_mic(struct mbuf *, int, const u_int8_t *, u_int8_t[IEEE80211_TKIP_MICLEN]); -extern void ieee80211_michael_mic_failure(struct ieee80211com *, u_int64_t); - -extern void ieee80211_eapol_key_mic(struct ieee80211_eapol_key *, - const u_int8_t *); -extern int ieee80211_eapol_key_check_mic(struct ieee80211_eapol_key *, - const u_int8_t *); -extern void ieee80211_eapol_key_encrypt(struct ieee80211com *, - struct ieee80211_eapol_key *, const u_int8_t *); -extern int ieee80211_eapol_key_decrypt(struct ieee80211_eapol_key *, - const u_int8_t *); - -extern void ieee80211_derive_ptk(enum ieee80211_akm, const u_int8_t *, - const u_int8_t *, const u_int8_t *, const u_int8_t *, - const u_int8_t *, struct ieee80211_ptk *); -extern int ieee80211_cipher_keylen(enum ieee80211_cipher); +void ieee80211_michael_mic_failure(struct ieee80211com *, u_int64_t); -extern int ieee80211_bip_set_key(struct ieee80211com *, +int ieee80211_ccmp_set_key(struct ieee80211com *, struct ieee80211_key *); +void ieee80211_ccmp_delete_key(struct ieee80211com *, + struct ieee80211_key *); +struct mbuf *ieee80211_ccmp_encrypt(struct ieee80211com *, struct mbuf *, struct ieee80211_key *); -extern void ieee80211_bip_delete_key(struct ieee80211com *, +struct mbuf *ieee80211_ccmp_decrypt(struct ieee80211com *, struct mbuf *, + struct ieee80211_key *); + +int ieee80211_bip_set_key(struct ieee80211com *, struct ieee80211_key *); +void ieee80211_bip_delete_key(struct ieee80211com *, struct ieee80211_key *); -extern struct mbuf *ieee80211_bip_encap(struct ieee80211com *, struct mbuf *, +struct mbuf *ieee80211_bip_encap(struct ieee80211com *, struct mbuf *, struct ieee80211_key *); -extern struct mbuf *ieee80211_bip_decap(struct ieee80211com *, struct mbuf *, +struct mbuf *ieee80211_bip_decap(struct ieee80211com *, struct mbuf *, struct ieee80211_key *); #endif /* _NET80211_IEEE80211_CRYPTO_H_ */ -- 2.20.1