⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bcmwpa.c

📁 wi-fi sources for asus wl138g v2 pci card
💻 C
字号:
/* *   bcmwpa.c - shared WPA-related functions * * * Copyright 2005-2006, Broadcom Corporation * All Rights Reserved. *  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE. * $Id$ */#include <bcmendian.h>/* include wl driver config file if this file is compiled for driver */#ifdef BCMDRIVER#include <osl.h>#else#if defined(__GNUC__)extern void bcopy(const void *src, void *dst, int len);extern int bcmp(const void *b1, const void *b2, int len);extern void bzero(void *b, int len);#else#define	bcopy(src, dst, len)	memcpy((dst), (src), (len))#define	bcmp(b1, b2, len)	memcmp((b1), (b2), (len))#define	bzero(b, len)		memset((b), 0, (len))#endif /* defined(__GNUC__) */#endif /* BCMDRIVER */#include <wlioctl.h>#include <proto/802.11.h>#include <proto/eapol.h>#include <bcmutils.h>#include <bcmwpa.h>/* Convert WPA/WPA2 IE cipher suite to locally used value */static boolrsn_cipher(wpa_suite_t *suite, ushort *cipher, uint8 *std_oui, bool wep_ok){	bool ret = TRUE;	if (!bcmp((char *)suite->oui, std_oui, DOT11_OUI_LEN)) {		switch (suite->type) {		case WPA_CIPHER_TKIP:			*cipher = CRYPTO_ALGO_TKIP;			break;		case WPA_CIPHER_AES_CCM:			*cipher = CRYPTO_ALGO_AES_CCM;			break;		case WPA_CIPHER_WEP_40:			if (wep_ok)				*cipher = CRYPTO_ALGO_WEP1;			else				ret = FALSE;			break;		case WPA_CIPHER_WEP_104:			if (wep_ok)				*cipher = CRYPTO_ALGO_WEP128;			else				ret = FALSE;			break;		default:			ret = FALSE;			break;		}		return ret;	}	/* check for other vendor OUIs */	return FALSE;}boolwpa_cipher(wpa_suite_t *suite, ushort *cipher, bool wep_ok){	return rsn_cipher(suite, cipher, (uchar*)WPA_OUI, wep_ok);}/* Is this body of this tlvs entry a WPA entry? If *//* not update the tlvs buffer pointer/length */boolbcm_is_wpa_ie(uint8 *ie, uint8 **tlvs, uint *tlvs_len){	/* If the contents match the WPA_OUI and type=1 */	if ((ie[TLV_LEN_OFF] > (WPA_OUI_LEN+1)) &&	    !bcmp(&ie[TLV_BODY_OFF], WPA_OUI "\x01", WPA_OUI_LEN + 1)) {		return TRUE;	}	/* point to the next ie */	ie += ie[TLV_LEN_OFF] + TLV_HDR_LEN;	/* calculate the length of the rest of the buffer */	*tlvs_len -= (int)(ie - *tlvs);	/* update the pointer to the start of the buffer */	*tlvs = ie;	return FALSE;}wpa_ie_fixed_t *bcm_find_wpaie(uint8 *parse, uint len){	bcm_tlv_t *ie;	while ((ie = bcm_parse_tlvs(parse, len, DOT11_MNG_WPA_ID))) {		if (bcm_is_wpa_ie((uint8*)ie, &parse, &len)) {			return (wpa_ie_fixed_t *)ie;		}	}	return NULL;}uchar *wpa_array_cmp(int max, uint8 *x, uint8 *y, int len){	int i;	uint8 *ret = x;	for (i = 0; i < len; i++)		if (x[i] != y[i])			break;	if (i == len) {		return NULL;	}	if (max && (y[i] > x[i]))		ret = y;	if (!max && (y[i] < x[i]))		ret = y;	return (ret);}voidwpa_incr_array(uint8 *array, int len){	int i;	for (i = (len-1); i >= 0; i--)		if (array[i]++ != 0xff) {			break;		}}/* map akm suite to internal WPA_AUTH_XXXX *//* akms points to 4 byte suite (oui + type) */boolbcmwpa_akm2WPAauth(uint8 *akm, uint32 *auth){	if (!bcmp(akm, WPA_OUI, DOT11_OUI_LEN)) {		switch (akm[DOT11_OUI_LEN]) {		case RSN_AKM_NONE:			*auth = WPA_AUTH_NONE;			break;		case RSN_AKM_UNSPECIFIED:			*auth = WPA_AUTH_UNSPECIFIED;			break;		case RSN_AKM_PSK:			*auth = WPA_AUTH_PSK;			break;		default:			return FALSE;		}		return TRUE;	}	return FALSE;}/* map cipher suite to internal WSEC_XXXX *//* cs points 4 byte cipher suite, and only the type is used for non CCX ciphers */boolbcmwpa_cipher2wsec(uint8 *cipher, uint32 *wsec){	switch (cipher[DOT11_OUI_LEN]) {	case WPA_CIPHER_NONE:		*wsec = 0;		break;	case WPA_CIPHER_WEP_40:	case WPA_CIPHER_WEP_104:		*wsec = WEP_ENABLED;		break;	case WPA_CIPHER_TKIP:		*wsec = TKIP_ENABLED;		break;	case WPA_CIPHER_AES_CCM:		*wsec = AES_ENABLED;		break;	default:		return FALSE;	}	return TRUE;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -