亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pcsc_funcs.c

?? 最新的Host AP 新添加了許多pcmcia 的驅動
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * WPA Supplicant / PC/SC smartcard interface for USIM, GSM SIM * Copyright (c) 2004-2007, Jouni Malinen <j@w1.fi> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * Alternatively, this software may be distributed under the terms of BSD * license. * * See README and COPYING for more details. * * This file implements wrapper functions for accessing GSM SIM and 3GPP USIM * cards through PC/SC smartcard library. These functions are used to implement * authentication routines for EAP-SIM and EAP-AKA. */#include "includes.h"#include <winscard.h>#include "common.h"#include "pcsc_funcs.h"/* See ETSI GSM 11.11 and ETSI TS 102 221 for details. * SIM commands: * Command APDU: CLA INS P1 P2 P3 Data *   CLA (class of instruction): A0 for GSM, 00 for USIM *   INS (instruction) *   P1 P2 P3 (parameters, P3 = length of Data) * Response APDU: Data SW1 SW2 *   SW1 SW2 (Status words) * Commands (INS P1 P2 P3): *   SELECT: A4 00 00 02 <file_id, 2 bytes> *   GET RESPONSE: C0 00 00 <len> *   RUN GSM ALG: 88 00 00 00 <RAND len = 10> *   RUN UMTS ALG: 88 00 81 <len=0x22> data: 0x10 | RAND | 0x10 | AUTN *	P1 = ID of alg in card *	P2 = ID of secret key *   READ BINARY: B0 <offset high> <offset low> <len> *   READ RECORD: B2 <record number> <mode> <len> *	P2 (mode) = '02' (next record), '03' (previous record), *		    '04' (absolute mode) *   VERIFY CHV: 20 00 <CHV number> 08 *   CHANGE CHV: 24 00 <CHV number> 10 *   DISABLE CHV: 26 00 01 08 *   ENABLE CHV: 28 00 01 08 *   UNBLOCK CHV: 2C 00 <00=CHV1, 02=CHV2> 10 *   SLEEP: FA 00 00 00 *//* GSM SIM commands */#define SIM_CMD_SELECT			0xa0, 0xa4, 0x00, 0x00, 0x02#define SIM_CMD_RUN_GSM_ALG		0xa0, 0x88, 0x00, 0x00, 0x10#define SIM_CMD_GET_RESPONSE		0xa0, 0xc0, 0x00, 0x00#define SIM_CMD_READ_BIN		0xa0, 0xb0, 0x00, 0x00#define SIM_CMD_READ_RECORD		0xa0, 0xb2, 0x00, 0x00#define SIM_CMD_VERIFY_CHV1		0xa0, 0x20, 0x00, 0x01, 0x08/* USIM commands */#define USIM_CLA			0x00#define USIM_CMD_RUN_UMTS_ALG		0x00, 0x88, 0x00, 0x81, 0x22#define USIM_CMD_GET_RESPONSE		0x00, 0xc0, 0x00, 0x00#define SIM_RECORD_MODE_ABSOLUTE 0x04#define USIM_FSP_TEMPL_TAG		0x62#define USIM_TLV_FILE_DESC		0x82#define USIM_TLV_FILE_ID		0x83#define USIM_TLV_DF_NAME		0x84#define USIM_TLV_PROPR_INFO		0xA5#define USIM_TLV_LIFE_CYCLE_STATUS	0x8A#define USIM_TLV_FILE_SIZE		0x80#define USIM_TLV_TOTAL_FILE_SIZE	0x81#define USIM_TLV_PIN_STATUS_TEMPLATE	0xC6#define USIM_TLV_SHORT_FILE_ID		0x88#define USIM_PS_DO_TAG			0x90#define AKA_RAND_LEN 16#define AKA_AUTN_LEN 16#define AKA_AUTS_LEN 14#define RES_MAX_LEN 16#define IK_LEN 16#define CK_LEN 16typedef enum { SCARD_GSM_SIM, SCARD_USIM } sim_types;struct scard_data {	SCARDCONTEXT ctx;	SCARDHANDLE card;	DWORD protocol;	sim_types sim_type;	int pin1_required;};#ifdef __MINGW32_VERSION/* MinGW does not yet support WinScard, so load the needed functions * dynamically from winscard.dll for now. */static HINSTANCE dll = NULL; /* winscard.dll */static const SCARD_IO_REQUEST *dll_g_rgSCardT0Pci, *dll_g_rgSCardT1Pci;#undef SCARD_PCI_T0#define SCARD_PCI_T0 (dll_g_rgSCardT0Pci)#undef SCARD_PCI_T1#define SCARD_PCI_T1 (dll_g_rgSCardT1Pci)static WINSCARDAPI LONG WINAPI(*dll_SCardEstablishContext)(IN DWORD dwScope,			     IN LPCVOID pvReserved1,			     IN LPCVOID pvReserved2,			     OUT LPSCARDCONTEXT phContext);#define SCardEstablishContext dll_SCardEstablishContextstatic long (*dll_SCardReleaseContext)(long hContext);#define SCardReleaseContext dll_SCardReleaseContextstatic WINSCARDAPI LONG WINAPI(*dll_SCardListReadersA)(IN SCARDCONTEXT hContext,			 IN LPCSTR mszGroups,			 OUT LPSTR mszReaders,			 IN OUT LPDWORD pcchReaders);#undef SCardListReaders#define SCardListReaders dll_SCardListReadersAstatic WINSCARDAPI LONG WINAPI(*dll_SCardConnectA)(IN SCARDCONTEXT hContext,		     IN LPCSTR szReader,		     IN DWORD dwShareMode,		     IN DWORD dwPreferredProtocols,		     OUT LPSCARDHANDLE phCard,		     OUT LPDWORD pdwActiveProtocol);#undef SCardConnect#define SCardConnect dll_SCardConnectAstatic WINSCARDAPI LONG WINAPI(*dll_SCardDisconnect)(IN SCARDHANDLE hCard,		       IN DWORD dwDisposition);#define SCardDisconnect dll_SCardDisconnectstatic WINSCARDAPI LONG WINAPI(*dll_SCardTransmit)(IN SCARDHANDLE hCard,		     IN LPCSCARD_IO_REQUEST pioSendPci,		     IN LPCBYTE pbSendBuffer,		     IN DWORD cbSendLength,		     IN OUT LPSCARD_IO_REQUEST pioRecvPci,		     OUT LPBYTE pbRecvBuffer,		     IN OUT LPDWORD pcbRecvLength);#define SCardTransmit dll_SCardTransmitstatic WINSCARDAPI LONG WINAPI(*dll_SCardBeginTransaction)(IN SCARDHANDLE hCard);#define SCardBeginTransaction dll_SCardBeginTransactionstatic WINSCARDAPI LONG WINAPI(*dll_SCardEndTransaction)(IN SCARDHANDLE hCard, IN DWORD dwDisposition);#define SCardEndTransaction dll_SCardEndTransactionstatic int mingw_load_symbols(void){	char *sym;	if (dll)		return 0;	dll = LoadLibrary("winscard");	if (dll == NULL) {		wpa_printf(MSG_DEBUG, "WinSCard: Could not load winscard.dll "			   "library");		return -1;	}#define LOADSYM(s) \	sym = #s; \	dll_ ## s = (void *) GetProcAddress(dll, sym); \	if (dll_ ## s == NULL) \		goto fail;	LOADSYM(SCardEstablishContext);	LOADSYM(SCardReleaseContext);	LOADSYM(SCardListReadersA);	LOADSYM(SCardConnectA);	LOADSYM(SCardDisconnect);	LOADSYM(SCardTransmit);	LOADSYM(SCardBeginTransaction);	LOADSYM(SCardEndTransaction);	LOADSYM(g_rgSCardT0Pci);	LOADSYM(g_rgSCardT1Pci);#undef LOADSYM	return 0;fail:	wpa_printf(MSG_DEBUG, "WinSCard: Could not get address for %s from "		   "winscard.dll", sym);	FreeLibrary(dll);	dll = NULL;	return -1;}static void mingw_unload_symbols(void){	if (dll == NULL)		return;	FreeLibrary(dll);	dll = NULL;}#else /* __MINGW32_VERSION */#define mingw_load_symbols() 0#define mingw_unload_symbols() do { } while (0)#endif /* __MINGW32_VERSION */static int _scard_select_file(struct scard_data *scard, unsigned short file_id,			      unsigned char *buf, size_t *buf_len,			      sim_types sim_type, unsigned char *aid,			      size_t aidlen);static int scard_select_file(struct scard_data *scard, unsigned short file_id,			     unsigned char *buf, size_t *buf_len);static int scard_verify_pin(struct scard_data *scard, const char *pin);static int scard_get_record_len(struct scard_data *scard,				unsigned char recnum, unsigned char mode);static int scard_read_record(struct scard_data *scard,			     unsigned char *data, size_t len,			     unsigned char recnum, unsigned char mode);static int scard_parse_fsp_templ(unsigned char *buf, size_t buf_len,				 int *ps_do, int *file_len){		unsigned char *pos, *end;		if (ps_do)			*ps_do = -1;		if (file_len)			*file_len = -1;		pos = buf;		end = pos + buf_len;		if (*pos != USIM_FSP_TEMPL_TAG) {			wpa_printf(MSG_DEBUG, "SCARD: file header did not "				   "start with FSP template tag");			return -1;		}		pos++;		if (pos >= end)			return -1;		if ((pos + pos[0]) < end)			end = pos + 1 + pos[0];		pos++;		wpa_hexdump(MSG_DEBUG, "SCARD: file header FSP template",			    pos, end - pos);		while (pos + 1 < end) {			wpa_printf(MSG_MSGDUMP, "SCARD: file header TLV "				   "0x%02x len=%d", pos[0], pos[1]);			if (pos + 2 + pos[1] > end)				break;			if (pos[0] == USIM_TLV_FILE_SIZE &&			    (pos[1] == 1 || pos[1] == 2) && file_len) {				if (pos[1] == 1)					*file_len = (int) pos[2];				else					*file_len = ((int) pos[2] << 8) |						(int) pos[3];				wpa_printf(MSG_DEBUG, "SCARD: file_size=%d",					   *file_len);			}			if (pos[0] == USIM_TLV_PIN_STATUS_TEMPLATE &&			    pos[1] >= 2 && pos[2] == USIM_PS_DO_TAG &&			    pos[3] >= 1 && ps_do) {				wpa_printf(MSG_DEBUG, "SCARD: PS_DO=0x%02x",					   pos[4]);				*ps_do = (int) pos[4];			}			pos += 2 + pos[1];			if (pos == end)				return 0;		}		return -1;}static int scard_pin_needed(struct scard_data *scard,			    unsigned char *hdr, size_t hlen){	if (scard->sim_type == SCARD_GSM_SIM) {		if (hlen > SCARD_CHV1_OFFSET &&		    !(hdr[SCARD_CHV1_OFFSET] & SCARD_CHV1_FLAG))			return 1;		return 0;	}	if (scard->sim_type == SCARD_USIM) {		int ps_do;		if (scard_parse_fsp_templ(hdr, hlen, &ps_do, NULL))			return -1;		/* TODO: there could be more than one PS_DO entry because of		 * multiple PINs in key reference.. */		if (ps_do > 0 && (ps_do & 0x80))			return 1;		return 0;	}	return -1;}static int scard_get_aid(struct scard_data *scard, unsigned char *aid,			 size_t maxlen){	int rlen, rec;	struct efdir {		unsigned char appl_template_tag; /* 0x61 */		unsigned char appl_template_len;		unsigned char appl_id_tag; /* 0x4f */		unsigned char aid_len;		unsigned char rid[5];		unsigned char appl_code[2]; /* 0x1002 for 3G USIM */	} *efdir;	unsigned char buf[100];	size_t blen;	efdir = (struct efdir *) buf;	blen = sizeof(buf);	if (scard_select_file(scard, SCARD_FILE_EF_DIR, buf, &blen)) {		wpa_printf(MSG_DEBUG, "SCARD: Failed to read EF_DIR");		return -1;	}	wpa_hexdump(MSG_DEBUG, "SCARD: EF_DIR select", buf, blen);	for (rec = 1; rec < 10; rec++) {		rlen = scard_get_record_len(scard, rec,					    SIM_RECORD_MODE_ABSOLUTE);		if (rlen < 0) {			wpa_printf(MSG_DEBUG, "SCARD: Failed to get EF_DIR "				   "record length");			return -1;		}		blen = sizeof(buf);		if (rlen > (int) blen) {			wpa_printf(MSG_DEBUG, "SCARD: Too long EF_DIR record");			return -1;		}		if (scard_read_record(scard, buf, rlen, rec,				      SIM_RECORD_MODE_ABSOLUTE) < 0) {			wpa_printf(MSG_DEBUG, "SCARD: Failed to read "				   "EF_DIR record %d", rec);			return -1;		}		wpa_hexdump(MSG_DEBUG, "SCARD: EF_DIR record", buf, rlen);		if (efdir->appl_template_tag != 0x61) {			wpa_printf(MSG_DEBUG, "SCARD: Unexpected application "				   "template tag 0x%x",				   efdir->appl_template_tag);			continue;		}		if (efdir->appl_template_len > rlen - 2) {			wpa_printf(MSG_DEBUG, "SCARD: Too long application "				   "template (len=%d rlen=%d)",				   efdir->appl_template_len, rlen);			continue;		}		if (efdir->appl_id_tag != 0x4f) {			wpa_printf(MSG_DEBUG, "SCARD: Unexpected application "				   "identifier tag 0x%x", efdir->appl_id_tag);			continue;		}		if (efdir->aid_len < 1 || efdir->aid_len > 16) {			wpa_printf(MSG_DEBUG, "SCARD: Invalid AID length %d",				   efdir->aid_len);			continue;		}		wpa_hexdump(MSG_DEBUG, "SCARD: AID from EF_DIR record",			    efdir->rid, efdir->aid_len);		if (efdir->appl_code[0] == 0x10 &&		    efdir->appl_code[1] == 0x02) {			wpa_printf(MSG_DEBUG, "SCARD: 3G USIM app found from "				   "EF_DIR record %d", rec);			break;		}	}	if (rec >= 10) {		wpa_printf(MSG_DEBUG, "SCARD: 3G USIM app not found "			   "from EF_DIR records");		return -1;	}	if (efdir->aid_len > maxlen) {		wpa_printf(MSG_DEBUG, "SCARD: Too long AID");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产v综合v亚洲欧| 国产精品国产精品国产专区不片| 久久精品免费在线观看| 一区二区三区日韩| 韩国精品久久久| 欧美剧在线免费观看网站| 欧美极品美女视频| 美女爽到高潮91| 欧美日韩一级片在线观看| 国产精品久线观看视频| 国产一区三区三区| 欧美一级二级三级乱码| 亚洲黄色小视频| 99久久777色| 国产欧美日本一区视频| 久久精品999| 91精品中文字幕一区二区三区| ㊣最新国产の精品bt伙计久久| 精彩视频一区二区三区| 911精品国产一区二区在线| 一区二区国产视频| 色域天天综合网| 国产精品久久影院| 成人av动漫网站| 国产精品福利一区| av午夜精品一区二区三区| 国产日本欧洲亚洲| 丁香六月综合激情| 中文字幕欧美国产| 风间由美一区二区三区在线观看| 久久精品亚洲麻豆av一区二区| 美国欧美日韩国产在线播放| 日韩视频在线永久播放| 奇米精品一区二区三区在线观看| 欧美精品高清视频| 日本美女一区二区| 欧美一区二区大片| 韩国精品主播一区二区在线观看| 日韩欧美电影在线| 国产在线一区二区综合免费视频| 久久综合久久综合亚洲| 国产乱码字幕精品高清av| 国产欧美视频一区二区三区| 国产成人精品一区二区三区网站观看| 久久久亚洲欧洲日产国码αv| 国产精品一区二区果冻传媒| 国产欧美精品一区| 日本道在线观看一区二区| 夜夜嗨av一区二区三区中文字幕| 在线视频亚洲一区| 日韩国产欧美在线播放| 精品日韩成人av| 国产成人激情av| 亚洲欧美国产高清| 欧美精品日韩一本| 韩国在线一区二区| 亚洲精品视频一区二区| 欧美一区二区三区系列电影| 国内精品国产成人国产三级粉色| 国产精品久久久久久久久快鸭| 91麻豆精品视频| 天天综合色天天综合色h| 精品国产伦一区二区三区观看方式 | 午夜久久久久久久久久一区二区| 欧美一区二区三区系列电影| 国产不卡视频在线观看| 亚洲午夜精品在线| 久久综合久久综合久久综合| 色激情天天射综合网| 日韩高清不卡一区| 中文字幕一区二区三区蜜月 | 一区2区3区在线看| 日韩午夜在线影院| 99re这里只有精品视频首页| 日韩不卡一二三区| 中文字幕中文字幕一区| 91精品国产综合久久久久久漫画 | 国产精品美女久久久久久久久久久 | 日韩精品中文字幕在线不卡尤物| 国产99精品视频| 日本女人一区二区三区| 亚洲色大成网站www久久九九| 91精品国产入口| 色综合久久综合网欧美综合网| 精品一区二区免费| 亚洲二区在线视频| 中文无字幕一区二区三区 | 奇米一区二区三区| 一区二区视频在线| 国产农村妇女精品| 日韩欧美一区二区在线视频| 91成人在线免费观看| 国产mv日韩mv欧美| 另类的小说在线视频另类成人小视频在线 | 日韩丝袜美女视频| 欧美美女一区二区在线观看| av成人免费在线观看| 国产高清视频一区| 久久99久久99小草精品免视看| 亚洲第一av色| 亚洲激情图片qvod| 亚洲美女屁股眼交| 亚洲欧洲日韩在线| 日本一区二区三区免费乱视频| 精品久久一区二区| 欧美精品自拍偷拍动漫精品| 欧美亚洲高清一区| 欧美综合一区二区| 欧美日韩免费一区二区三区| 一本久久综合亚洲鲁鲁五月天| 99亚偷拍自图区亚洲| caoporn国产一区二区| 国产成人亚洲综合a∨猫咪| 国产一区二区日韩精品| 久久国产尿小便嘘嘘尿| 久久不见久久见免费视频1| 日韩精品亚洲专区| 蜜臀久久99精品久久久久久9| 日韩影院免费视频| 人人超碰91尤物精品国产| 日韩福利视频网| 九一久久久久久| 国产一区二区看久久| 高清在线成人网| 不卡一区中文字幕| 91老司机福利 在线| 色婷婷综合久久久久中文一区二区 | 亚洲丝袜美腿综合| 一区二区三区高清不卡| 天堂成人免费av电影一区| 欧美aa在线视频| 国产一区二区在线观看视频| 国产成人高清在线| 日本乱码高清不卡字幕| 4438x成人网最大色成网站| 精品少妇一区二区三区在线视频| 久久女同互慰一区二区三区| 国产精品天干天干在线综合| 亚洲美女屁股眼交3| 日韩av二区在线播放| 国产高清成人在线| 色久优优欧美色久优优| 欧美一区二区大片| 国产精品美女一区二区三区 | 欧美丝袜丝交足nylons| 日韩欧美一区二区免费| 亚洲国产岛国毛片在线| 亚洲国产毛片aaaaa无费看| 精品一区二区三区日韩| 一道本成人在线| 欧美mv日韩mv国产网站| 亚洲欧美日韩国产手机在线| 麻豆免费看一区二区三区| 成人av电影免费在线播放| 欧美精品九九99久久| 国产精品少妇自拍| 同产精品九九九| 不卡电影一区二区三区| 91精品国产美女浴室洗澡无遮挡| 国产精品青草综合久久久久99| 亚洲成人激情自拍| 成人动漫视频在线| 欧美变态tickling挠脚心| 亚洲另类色综合网站| 国产尤物一区二区| 4hu四虎永久在线影院成人| 国产精品国产三级国产aⅴ入口| 免费在线观看精品| 色一区在线观看| 久久精品视频在线免费观看| 亚洲成人动漫av| 91丨九色丨尤物| 国产亚洲欧美日韩在线一区| 水野朝阳av一区二区三区| 色综合久久88色综合天天免费| 久久久久久久综合狠狠综合| 日本在线不卡视频| 欧美专区日韩专区| 亚洲色图在线播放| 成人免费视频播放| 国产午夜精品在线观看| 男女视频一区二区| 欧美猛男男办公室激情| 一区二区三区中文字幕| av在线不卡观看免费观看| 国产亚洲成aⅴ人片在线观看| 蜜桃av一区二区| 欧美精品九九99久久| 亚洲一区二区欧美激情| 一本大道av伊人久久综合| 日韩一区在线看| 成人久久18免费网站麻豆 | 日韩精品一区二区三区swag| 亚洲va欧美va天堂v国产综合| 99久精品国产| 亚洲免费观看视频| 色av综合在线| 亚洲自拍偷拍图区| 欧美综合色免费| 天堂va蜜桃一区二区三区漫画版|