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 /*
39 * IEEE 802.11 NULL crypto support.
40 */
41 #include "net80211_impl.h"
42
43 static void *none_attach(struct ieee80211com *, struct ieee80211_key *);
44 static void none_detach(struct ieee80211_key *);
45 static int none_setkey(struct ieee80211_key *);
46 static int none_encap(struct ieee80211_key *, mblk_t *, uint8_t);
47 static int none_decap(struct ieee80211_key *, mblk_t *, int);
48 static int none_enmic(struct ieee80211_key *, mblk_t *, int);
49 static int none_demic(struct ieee80211_key *, mblk_t *, int);
50
51 const struct ieee80211_cipher ieee80211_cipher_none = {
52 "NONE",
53 IEEE80211_CIPHER_NONE,
54 0,
55 0,
56 0,
57 none_attach,
58 none_detach,
59 none_setkey,
60 none_encap,
61 none_decap,
62 none_enmic,
63 none_demic,
64 };
65
66 /* ARGSUSED */
67 static void *
none_attach(struct ieee80211com * ic,struct ieee80211_key * k)68 none_attach(struct ieee80211com *ic, struct ieee80211_key *k)
69 {
70 return (ic); /* for diagnostics+stats */
71 }
72
73 /* ARGSUSED */
74 static void
none_detach(struct ieee80211_key * k)75 none_detach(struct ieee80211_key *k)
76 {
77 /* noop */
78 }
79
80 /* ARGSUSED */
81 static int
none_setkey(struct ieee80211_key * k)82 none_setkey(struct ieee80211_key *k)
83 {
84 return (1);
85 }
86
87 /* ARGSUSED */
88 static int
none_encap(struct ieee80211_key * k,mblk_t * mp,uint8_t keyid)89 none_encap(struct ieee80211_key *k, mblk_t *mp, uint8_t keyid)
90 {
91 /*
92 * The specified key is not setup; this can
93 * happen, at least, when changing keys.
94 */
95 ieee80211_dbg(IEEE80211_MSG_CRYPTO, "none_encap: "
96 "key id %u is not set (encap)\n", keyid >> 6);
97 return (0);
98 }
99
100 /* ARGSUSED */
101 static int
none_decap(struct ieee80211_key * k,mblk_t * mp,int hdrlen)102 none_decap(struct ieee80211_key *k, mblk_t *mp, int hdrlen)
103 {
104 struct ieee80211_frame *wh = (struct ieee80211_frame *)mp->b_rptr;
105 const uint8_t *ivp = (const uint8_t *)&wh[1];
106
107 /*
108 * The specified key is not setup; this can
109 * happen, at least, when changing keys.
110 */
111 ieee80211_dbg(IEEE80211_MSG_CRYPTO, "none_decap"
112 "key id %u is not set (decap)\n",
113 ivp[IEEE80211_WEP_IVLEN] >> 6);
114 return (0);
115 }
116
117 /* ARGSUSED */
118 static int
none_enmic(struct ieee80211_key * k,mblk_t * mp,int force)119 none_enmic(struct ieee80211_key *k, mblk_t *mp, int force)
120 {
121 return (0);
122 }
123
124 /* ARGSUSED */
125 static int
none_demic(struct ieee80211_key * k,mblk_t * mp,int force)126 none_demic(struct ieee80211_key *k, mblk_t *mp, int force)
127 {
128 return (0);
129 }
130