1 /* 2 * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 3 * Use is subject to license terms. 4 */ 5 6 /* 7 * Copyright (c) 2001 Atsushi Onoe 8 * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting 9 * All rights reserved. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions and the following disclaimer. 16 * 2. Redistributions in binary form must reproduce the above copyright 17 * notice, this list of conditions and the following disclaimer in the 18 * documentation and/or other materials provided with the distribution. 19 * 3. The name of the author may not be used to endorse or promote products 20 * derived from this software without specific prior written permission. 21 * 22 * Alternatively, this software may be distributed under the terms of the 23 * GNU General Public License ("GPL") version 2 as published by the Free 24 * Software Foundation. 25 * 26 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 27 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 28 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 29 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 30 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 31 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 32 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 33 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 35 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36 */ 37 38 #pragma ident "%Z%%M% %I% %E% SMI" 39 40 /* 41 * IEEE 802.11 NULL crypto support. 42 */ 43 #include "net80211_impl.h" 44 45 static void *none_attach(struct ieee80211com *, struct ieee80211_key *); 46 static void none_detach(struct ieee80211_key *); 47 static int none_setkey(struct ieee80211_key *); 48 static int none_encap(struct ieee80211_key *, mblk_t *, uint8_t); 49 static int none_decap(struct ieee80211_key *, mblk_t *, int); 50 static int none_enmic(struct ieee80211_key *, mblk_t *, int); 51 static int none_demic(struct ieee80211_key *, mblk_t *, int); 52 53 const struct ieee80211_cipher ieee80211_cipher_none = { 54 "NONE", 55 IEEE80211_CIPHER_NONE, 56 0, 57 0, 58 0, 59 none_attach, 60 none_detach, 61 none_setkey, 62 none_encap, 63 none_decap, 64 none_enmic, 65 none_demic, 66 }; 67 68 /* ARGSUSED */ 69 static void * 70 none_attach(struct ieee80211com *ic, struct ieee80211_key *k) 71 { 72 return (ic); /* for diagnostics+stats */ 73 } 74 75 /* ARGSUSED */ 76 static void 77 none_detach(struct ieee80211_key *k) 78 { 79 /* noop */ 80 } 81 82 /* ARGSUSED */ 83 static int 84 none_setkey(struct ieee80211_key *k) 85 { 86 return (1); 87 } 88 89 /* ARGSUSED */ 90 static int 91 none_encap(struct ieee80211_key *k, mblk_t *mp, uint8_t keyid) 92 { 93 /* 94 * The specified key is not setup; this can 95 * happen, at least, when changing keys. 96 */ 97 ieee80211_dbg(IEEE80211_MSG_CRYPTO, "none_encap: " 98 "key id %u is not set (encap)\n", keyid >> 6); 99 return (0); 100 } 101 102 /* ARGSUSED */ 103 static int 104 none_decap(struct ieee80211_key *k, mblk_t *mp, int hdrlen) 105 { 106 struct ieee80211_frame *wh = (struct ieee80211_frame *)mp->b_rptr; 107 const uint8_t *ivp = (const uint8_t *)&wh[1]; 108 109 /* 110 * The specified key is not setup; this can 111 * happen, at least, when changing keys. 112 */ 113 ieee80211_dbg(IEEE80211_MSG_CRYPTO, "none_decap" 114 "key id %u is not set (decap)\n", 115 ivp[IEEE80211_WEP_IVLEN] >> 6); 116 return (0); 117 } 118 119 /* ARGSUSED */ 120 static int 121 none_enmic(struct ieee80211_key *k, mblk_t *mp, int force) 122 { 123 return (0); 124 } 125 126 /* ARGSUSED */ 127 static int 128 none_demic(struct ieee80211_key *k, mblk_t *mp, int force) 129 { 130 return (0); 131 } 132