aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/wlags49_h2/wl_enc.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/wlags49_h2/wl_enc.c')
-rw-r--r--drivers/staging/wlags49_h2/wl_enc.c231
1 files changed, 231 insertions, 0 deletions
diff --git a/drivers/staging/wlags49_h2/wl_enc.c b/drivers/staging/wlags49_h2/wl_enc.c
new file mode 100644
index 000000000000..48c44c8fdb28
--- /dev/null
+++ b/drivers/staging/wlags49_h2/wl_enc.c
@@ -0,0 +1,231 @@
+
+/*******************************************************************************
+ * Agere Systems Inc.
+ * Wireless device driver for Linux (wlags49).
+ *
+ * Copyright (c) 1998-2003 Agere Systems Inc.
+ * All rights reserved.
+ * http://www.agere.com
+ *
+ * Initially developed by TriplePoint, Inc.
+ * http://www.triplepoint.com
+ *
+ *------------------------------------------------------------------------------
+ *
+ * This file defines functions related to WEP key coding/decoding.
+ *
+ *------------------------------------------------------------------------------
+ *
+ * SOFTWARE LICENSE
+ *
+ * This software is provided subject to the following terms and conditions,
+ * which you should read carefully before using the software. Using this
+ * software indicates your acceptance of these terms and conditions. If you do
+ * not agree with these terms and conditions, do not use the software.
+ *
+ * Copyright © 2003 Agere Systems Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source or binary forms, with or without
+ * modifications, are permitted provided that the following conditions are met:
+ *
+ * . Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following Disclaimer as comments in the code as
+ * well as in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * . 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.
+ *
+ * . Neither the name of Agere Systems Inc. nor the names of the contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * Disclaimer
+ *
+ * THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY
+ * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN
+ * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS 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, INCLUDING, BUT NOT LIMITED TO, 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.
+ *
+ ******************************************************************************/
+
+/*******************************************************************************
+ * include files
+ ******************************************************************************/
+#include <wl_version.h>
+
+#include <debug.h>
+#include <hcf.h>
+
+#include <wl_enc.h>
+
+
+
+
+/*******************************************************************************
+ * global definitions
+ ******************************************************************************/
+#if DBG
+
+extern dbg_info_t *DbgInfo;
+
+#endif /* DBG */
+
+
+
+
+/*******************************************************************************
+ * wl_wep_code()
+ *******************************************************************************
+ *
+ * DESCRIPTION:
+ *
+ * This function encodes a set of wep keys for privacy
+ *
+ * PARAMETERS:
+ *
+ * szCrypt -
+ * szDest -
+ * Data -
+ * nLen -
+ *
+ * RETURNS:
+ *
+ * OK
+ *
+ ******************************************************************************/
+int wl_wep_code( char *szCrypt, char *szDest, void *Data, int nLen )
+{
+ int i;
+ int t;
+ int k ;
+ char bits;
+ char *szData = (char *) Data;
+ /*------------------------------------------------------------------------*/
+
+
+ for( i = bits = 0 ; i < MACADDRESS_STR_LEN; i++ ) {
+ bits ^= szCrypt[i];
+ bits += szCrypt[i];
+ }
+
+ for( i = t = *szDest = 0; i < nLen; i++, t++ ) {
+ k = szData[i] ^ ( bits + i );
+
+
+ switch( i % 3 ) {
+
+ case 0 :
+
+ szDest[t] = ((k & 0xFC) >> 2) + CH_START ;
+ szDest[t+1] = ((k & 0x03) << 4) + CH_START ;
+ szDest[t+2] = '\0';
+
+ break;
+
+
+ case 1 :
+
+ szDest[t] += (( k & 0xF0 ) >> 4 );
+ szDest[t+1] = (( k & 0x0F ) << 2 ) + CH_START ;
+ szDest[t+2] = '\0';
+
+ break;
+
+
+ case 2 :
+
+ szDest[t] += (( k & 0xC0 ) >> 6 );
+ szDest[t+1] = ( k & 0x3F ) + CH_START ;
+ szDest[t+2] = '\0';
+ t++;
+
+ break;
+ }
+ }
+
+ return( strlen( szDest )) ;
+
+}
+/*============================================================================*/
+
+
+
+
+/*******************************************************************************
+ * wl_wep_decode()
+ *******************************************************************************
+ *
+ * DESCRIPTION:
+ *
+ * This function decodes a set of WEP keys for use by the card.
+ *
+ * PARAMETERS:
+ *
+ * szCrypt -
+ * szDest -
+ * Data -
+ *
+ * RETURNS:
+ *
+ * OK
+ *
+ ******************************************************************************/
+int wl_wep_decode( char *szCrypt, void *Dest, char *szData )
+{
+ int i;
+ int t;
+ int nLen;
+ char bits;
+ char *szDest = Dest;
+ /*------------------------------------------------------------------------*/
+
+
+ for( i = bits = 0 ; i < 12; i++ ) {
+ bits ^= szCrypt[i] ;
+ bits += szCrypt[i] ;
+ }
+
+ nLen = ( strlen( szData ) * 3) / 4 ;
+
+ for( i = t = 0; i < nLen; i++, t++ ) {
+ switch( i % 3 ) {
+ case 0 :
+
+ szDest[i] = ((( szData[t]-CH_START ) & 0x3f ) << 2 ) +
+ ((( szData[t+1]-CH_START ) & 0x30 ) >> 4 );
+ break;
+
+
+ case 1 :
+ szDest[i] = ((( szData[t]-CH_START ) & 0x0f ) << 4 ) +
+ ((( szData[t+1]-CH_START ) & 0x3c ) >> 2 );
+ break;
+
+
+ case 2 :
+ szDest[i] = ((( szData[t]-CH_START ) & 0x03 ) << 6 ) +
+ (( szData[t+1]-CH_START ) & 0x3f );
+ t++;
+ break;
+ }
+
+ szDest[i] ^= ( bits + i ) ;
+
+ }
+
+ return( i ) ;
+
+}
+/*============================================================================*/
+