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 *
none_attach(struct ieee80211com * ic,struct ieee80211_key * k)70 none_attach(struct ieee80211com *ic, struct ieee80211_key *k)
71 {
72 	return (ic);		/* for diagnostics+stats */
73 }
74 
75 /* ARGSUSED */
76 static void
none_detach(struct ieee80211_key * k)77 none_detach(struct ieee80211_key *k)
78 {
79 	/* noop */
80 }
81 
82 /* ARGSUSED */
83 static int
none_setkey(struct ieee80211_key * k)84 none_setkey(struct ieee80211_key *k)
85 {
86 	return (1);
87 }
88 
89 /* ARGSUSED */
90 static int
none_encap(struct ieee80211_key * k,mblk_t * mp,uint8_t keyid)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
none_decap(struct ieee80211_key * k,mblk_t * mp,int hdrlen)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
none_enmic(struct ieee80211_key * k,mblk_t * mp,int force)121 none_enmic(struct ieee80211_key *k, mblk_t *mp, int force)
122 {
123 	return (0);
124 }
125 
126 /* ARGSUSED */
127 static int
none_demic(struct ieee80211_key * k,mblk_t * mp,int force)128 none_demic(struct ieee80211_key *k, mblk_t *mp, int force)
129 {
130 	return (0);
131 }
132