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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? sm_handler.c

?? linux 下通過(guò)802.1認(rèn)證的安裝包
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
      for (i=strlen(pin); i<8; i++)
	{
	  if (Strcat(buf2, sizeof(buf2), "FF") != 0)
	    {
	      fprintf(stderr, "Refusing to overflow string!\n");
	      return NULL;
	    }
	}
      
      len = MAXBUFF;
      if (cardio(card_hdl, buf2, reader_mode, MODE2G, (LPBYTE)&buf, &len, DO_DEBUG) != 0)
	{
	  debug_printf(DEBUG_NORMAL, "Error sending PIN to smart card! "
		       "(%s:%d)\n", __FUNCTION__, __LINE__);
	  return NULL;
	}

      // XXX When we get a GUI going, this should be sent to it.
      if ((len == 2) && (buf[0] = 0x98))
	{
	  if (buf[1] == 0x04)
	    {
	      debug_printf(DEBUG_NORMAL, "Incorrect PIN, at least one attempt "
			   "remaining!\n");
	      return NULL;
	    } 
	  else if (buf[1] == 0x40)
	    {
	      debug_printf(DEBUG_NORMAL, "Incorrect PIN, no attempts "
			   "remaining!\n");
	      return NULL;
	    }
	}
    }

  len = MAXBUFF;
  if (cardio(card_hdl, SELECT_EF_IMSI, reader_mode, MODE2G, (LPBYTE)&buf, &len, DO_DEBUG) != 0)
    {
      debug_printf(DEBUG_NORMAL, "Error attempting to select the IMSI on the"
		   " smart card!  (%s:%d)\n", __FUNCTION__, __LINE__);
      return NULL;
    }

  len = MAXBUFF;
  memset((char *)&buf, 0x00, 512);
  if (cardio(card_hdl, GET_IMSI, reader_mode, MODE2G, (LPBYTE)&buf, &len, DO_DEBUG) != 0)
    {
      debug_printf(DEBUG_NORMAL, "Error attempting to get the IMSI from the "
		   "smart card! (%s:%d)\n", __FUNCTION__, __LINE__);
      return NULL;
    }

  return decode_imsi((unsigned char *)&buf[1]);
}

int sm_handler_do_2g_auth(SCARDHANDLE *card_hdl, char reader_mode, 
			  unsigned char *challenge, unsigned char *response, 
			  unsigned char *ckey)
{
  unsigned char buf[MAXBUFF], buff2[MAXBUFF], buff3[MAXBUFF];
  int i;
  DWORD len;

  if ((!challenge) || (!response) || (!ckey))
    {
      debug_printf(DEBUG_NORMAL, "Invalid data passed to "
		   "sm_handler_do_2g_auth!\n");
      return -1;
    }

  strcpy(buff2, RUN_GSM);
  memset(&buff3, 0x00, MAXBUFF);

  for (i = 0; i < 16; i++)
    {
      sprintf(buff3,"%02X",challenge[i]);
      if (Strcat(buff2, sizeof(buff2), buff3) != 0)
	{
	  fprintf(stderr, "Refusing to overflow string!\n");
	  return -1;
	}
    }

  len = MAXBUFF;
  if (cardio(card_hdl, buff2, reader_mode, MODE2G, (LPBYTE)&buf, &len, DO_DEBUG) != 0)
    {
      debug_printf(DEBUG_NORMAL, "Error attempting to run the GSM algorithm!\n");
      return -1;
    }

  memcpy(response, &buf[0], 4);

  memcpy(ckey, &buf[4], 8);
  return XENONE;
}


char *sm_handler_3g_imsi(SCARDHANDLE *card_hdl, char reader_mode, char *pin)
{
  DWORD len;
  unsigned char buf[MAXBUFF], buf2[MAXBUFF], aid[MAXBUFF], temp[MAXBUFF], *p;
  unsigned char cmd[MAXBUFF], buf3[MAXBUFF];
  int i,l,q, foundaid=0, pinretries=0;
  unsigned char threeG[2] = { 0x10, 0x02 };
  struct t_efdir *t;

  if (!card_hdl)
    {
      debug_printf(DEBUG_NORMAL, "Invalid card handle passed to "
		   "sm_handler_3g_imsi()!\n");
      return NULL;
    }

  if (strlen(pin) > 8)
    {
      // XXX This should be returned to a GUI when we have one!
      debug_printf(DEBUG_NORMAL, "PIN is too long!\n");
      return NULL;
    }

  // Select the USIM master file.
  if (cardio(card_hdl, SELECT_MF_USIM, reader_mode, MODE3G, (LPBYTE)&buf, &len, DO_DEBUG) != 0)
    {
      debug_printf(DEBUG_NORMAL, "Error attempting to select the master file "
		   "on the SIM card! (%s:%d)\n", __FUNCTION__, __LINE__);
      return NULL;
    }

  if (buf[0] == 0x6e)
    {
      debug_printf(DEBUG_NORMAL, "3G mode not supported by this card!\n");
      return NULL;
    }

  // Select the ICCID of the card.
  if (cardio(card_hdl, SELECT_EF_ICCID, reader_mode, MODE3G, (LPBYTE)&buf, &len, DO_DEBUG) != 0)
    {
      debug_printf(DEBUG_NORMAL, "Error attempting to select the ICCID of "
		   "this SIM card! (%s:%d)\n", __FUNCTION__, __LINE__);
      return NULL;
    }

  if (cardio(card_hdl, SELECT_FCP, reader_mode, MODE3G, (LPBYTE)&buf, &len, DO_DEBUG) != 0)
    {
      debug_printf(DEBUG_NORMAL, "Error attempting to select the FCP of this "
		   "SIM card!  (%s:%d)\n", __FUNCTION__, __LINE__);
      return NULL;
    }

  if (cardio(card_hdl, SELECT_EFDIR, reader_mode, MODE3G, (LPBYTE)&buf, &len, DO_DEBUG) != 0)
    {
      debug_printf(DEBUG_NORMAL, "Error selecting the EFDIR on this SIM card!"
		   " (%s:%d)\n", __FUNCTION__, __LINE__);
      return NULL;
    }

  if (cardio(card_hdl, EFDIR_READREC1, reader_mode, MODE3G, (LPBYTE)&buf, &len, DO_DEBUG) != 0)
    {
      debug_printf(DEBUG_NORMAL, "Error attempting to read record #1 from "
		   "this SIM card! (%s:%d)\n", __FUNCTION__, __LINE__);
      return NULL;
    }

  l = buf[len-1];
  i = 1;

  // Loop over EFdir
  do {
    
    sprintf(buf, "00B2%2.2X04%2.2X",i,l);
    if (cardio(card_hdl, buf, reader_mode, MODE3G, (LPBYTE)&buf2, &len, DO_DEBUG) != 0)
      {
	debug_printf(DEBUG_NORMAL, "Error attempting to read a record from "
		     "this SIM card! (%s:%d)\n", __FUNCTION__, __LINE__);
	return NULL;
      }
    i++;
    t = (struct t_efdir *)&buf2;
    
    if (!memcmp(&t->app_code, &threeG, 2))
      {
	memset((unsigned char *)&aid, 0x00, MAXBUFF);

	p = (unsigned char *)&t->rid;
	for (q=0; q< 12; q++)
	  {
	    sprintf(temp, "%02X", *p++);
	    if (Strcat(aid, sizeof(aid), temp) != 0)
	      {
		fprintf(stderr, "Refusing to overflow string!\n");
		return NULL;
	      }
	  }
	foundaid = 1;
      }
    
  } while ((buf2[len-2] == 0x90) && (buf2[len-1] == 0));

  // Select the USIM aid.
  strcpy(cmd, "00A404040C");
  if (Strcat(cmd, sizeof(cmd), aid) != 0)
    {
      fprintf(stderr, "Refusing to overflow string!\n");
      return NULL;
    }

  if (cardio(card_hdl, cmd, reader_mode, MODE3G, (LPBYTE)&buf2, &len, DO_DEBUG) != 0)
    {
      debug_printf(DEBUG_NORMAL, "Couldn't select the USIM application ID! "
		   "(%s:%d)\n", __FUNCTION__, __LINE__);
      return NULL;
    }

  // Determine remaining CHV retires.
  if (cardio(card_hdl, CHV_RETRIES, reader_mode, MODE3G, (LPBYTE)&buf, &len, DO_DEBUG) != 0)
    {
      debug_printf(DEBUG_NORMAL, "Error requesting the remaining number of "
		   "PIN attempts from this SIM!  (%s:%d)\n", __FUNCTION__,
		   __LINE__);
      return NULL;
    }

  if (buf[0] == 0x63)
    {
      pinretries = buf[1] & 0x0f;
    }

  //  if (!(buf2[13] & 0x80))
    {
      if (pinretries == 0)
	{
	  debug_printf(DEBUG_NORMAL, "No PIN retries remaining!\n");
	  return NULL;
	}

      // Otherwise, enter the PIN.
      strcpy(buf2, CHV_ATTEMPT);
      for (i=0;i < strlen(pin); i++)
	{
	  memset((char *)&buf3, 0x00, 8);
	  sprintf(buf3, "%02X", pin[i]);
	  if (Strcat(buf2, sizeof(buf2), buf3) != 0)
	    {
	      fprintf(stderr, "Refusing to overflow string!\n");
	      return NULL;
	    }
	}
      for (i=strlen(pin); i<8; i++)
	{
	  if (Strcat(buf2, sizeof(buf2), "FF") != 0)
	    {
	      fprintf(stderr, "Refusing to overflow string!\n");
	      return NULL;
	    }
	}

      if (cardio(card_hdl, buf2, reader_mode, MODE3G, (LPBYTE)&buf, &len, DO_DEBUG) != 0)
	{
	  debug_printf(DEBUG_NORMAL, "Invalid PIN! (%d tries remain.)\n",
		       pinretries-1);
	  return NULL;
	}

      if (cardio(card_hdl, buf2, reader_mode, MODE3G, (LPBYTE)&buf, &len, DO_DEBUG) != 0)
	{
	  debug_printf(DEBUG_NORMAL, "Invalid PIN! (%d tries remain.)\n",
		       pinretries-1);
	  return NULL;
	}
    } //else {
      //      debug_printf(DEBUG_SMARTCARD, "PIN not needed!\n");
      //}

  // Now, get the IMSI
  if (cardio(card_hdl, USELECT_EF_IMSI, reader_mode, MODE3G, (LPBYTE)&buf, &len, DO_DEBUG) != 0)
    {
      debug_printf(DEBUG_NORMAL, "Error attempting to select the IMSI for this"
		   " SIM card! (%s:%d)\n", __FUNCTION__, __LINE__);
      return NULL;
    }

  // XXX For now, assume that IMSIs are 9 bytes.
  if (cardio(card_hdl, READ_IMSI, reader_mode, MODE3G, (LPBYTE)&buf, &len, DO_DEBUG) != 0)
    {
      debug_printf(DEBUG_NORMAL, "Error reading the IMSI on this SIM card! "
		   "(%s:%d)\n", __FUNCTION__, __LINE__);
      return NULL;
    }

  return decode_imsi((unsigned char *)&buf[1]);
}

/* tack on a sequence of hex command bytes to a string
 * buffer is assumed to already contain a zero-terminated string
 */
int
addhex(u8 *buffer, unsigned int buflen, const u8 *bytes, int len)
{
  u8 temp[5];
  int i;

  for (i = 0; i < len; i++) {
      sprintf(temp,"%02X", *bytes++);
      if (Strcat(buffer, buflen, temp) != 0)
	{
	  fprintf(stderr, "Refusing to overflow string!\n");
	  return -1;
	}
  }

  return 0;
}

// return -2 on sync failure. -1 for all other errors.
int sm_handler_do_3g_auth(SCARDHANDLE *card_hdl, char reader_mode, 
			  unsigned char *Rand, unsigned char *autn, 
			  unsigned char *c_auts, char *res_len, 
			  unsigned char *c_sres, unsigned char *c_ck, 
			  unsigned char *c_ik, unsigned char *c_kc)
{
  unsigned char cmd[MAXBUFF], buf[MAXBUFF], sw1, sw2, *s;
  DWORD len;

  if (Strcpy(cmd, sizeof(cmd), "008800812210") != 0)
    {
      fprintf(stderr, "Refusing to overflow string!\n");
      return -1;
    }

  if (addhex(cmd, sizeof(cmd), Rand, 16) != 0)
    {
      fprintf(stderr, "Refusing to overflow string!\n");
      return -1;
    }

  if (Strcat(cmd, sizeof(cmd), "10") != 0)
    {
      fprintf(stderr, "Refusing to overflow string!\n");
      return -1;
    }

  if (addhex(cmd, sizeof(cmd), autn, 16) != 0)
    {
      fprintf(stderr, "Refusing to overflow string!\n");
      return -1;
    }

  debug_printf(DEBUG_SMARTCARD, "Sending in '%s'\n", cmd);

  len = MAXBUFF;

  if (cardio(card_hdl, cmd, reader_mode, MODE3G, (LPBYTE)&buf, &len, DO_DEBUG) != 0)
    {
      debug_printf(DEBUG_NORMAL, "Error attempting to execute 3G "
		   "authentication! (%s:%d)\n", __FUNCTION__, __LINE__);
      return -1;
    }

  sw1 = buf[len-2]; sw2 = buf[len-1];

  if ((sw1 == 0x90) && (sw2 == 0x00) && (buf[0] == 0xdc))
    {
      debug_printf(DEBUG_NORMAL, "Sync failure! (Result length = %d)\n",
		   len);
      memcpy(c_auts, buf+2, len);
      return -2;
    }

  if ((sw1 == 0x90) && (sw2 == 0x00) && (buf[0] == 0xdb))
    {
      // Success.
      s = buf+1;
      *res_len = *s;
      memcpy(c_sres, s+1, *s); 
      s += (*s+1);  // Step over TLV vectors
      memcpy(c_ck, s+1, *s);
      s += (*s+1);  // Ditto.
      memcpy(c_ik, s+1, *s);
      s += (*s+1);
      memcpy(c_kc, s+1, *s); s += *s;
      return 0;
    }
  
  // Otherwise, we failed.
  return -1;
}

int sm_handler_card_disconnect(SCARDHANDLE *card_hdl)
{
  long ret = 0;

  if (card_hdl)
    {
      ret = SCardDisconnect(*card_hdl, SCARD_UNPOWER_CARD);
      if (ret != SCARD_S_SUCCESS)
	{
	  debug_printf(DEBUG_NORMAL, "Couldn't disconnect from Smart Card! ");
	  print_sc_error(ret);
	} else {
	  card_hdl = NULL;
	}
    }
  
  return ret;
}


int sm_handler_close_sc(SCARDHANDLE *card_hdl, SCARDCONTEXT *card_ctx)
{
  long ret;

  if (card_hdl)
    {
      ret = SCardDisconnect(*card_hdl, SCARD_UNPOWER_CARD);
      if (ret != SCARD_S_SUCCESS)
	{
	  debug_printf(DEBUG_NORMAL, "Couldn't disconnect from Smart Card! ");
	  print_sc_error(ret);
	}
    }

  if (card_ctx)
    {
      ret = SCardReleaseContext(*card_ctx);
      if (ret != SCARD_S_SUCCESS)
	{
	  debug_printf(DEBUG_NORMAL, "Couldn't release Smart Card context!  ");
	  print_sc_error(ret);
	}
    }

  return 0;
}
#endif

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品一区二区久久恐怖片| 91蜜桃网址入口| 精品视频在线免费看| 久久久不卡网国产精品一区| 性欧美疯狂xxxxbbbb| 成人免费毛片片v| 精品久久久网站| 亚洲成av人片一区二区| 99视频有精品| 中文字幕精品—区二区四季| 国产乱妇无码大片在线观看| 这里只有精品视频在线观看| 亚洲午夜私人影院| 欧美三级蜜桃2在线观看| 亚洲一区二区影院| 欧美日韩大陆一区二区| 亚洲一区成人在线| 欧美猛男超大videosgay| 中文字幕日韩一区二区| 99国产精品国产精品毛片| 国产精品久久久久影视| 不卡视频免费播放| 亚洲人吸女人奶水| 一本到不卡精品视频在线观看| 中文字幕一区免费在线观看| 丁香六月综合激情| 国产精品丝袜91| 91免费版在线看| 视频一区在线播放| 久久免费电影网| 91免费版在线| 久久99国产精品免费| 亚洲成国产人片在线观看| 国产女人18毛片水真多成人如厕| 欧美巨大另类极品videosbest| 美女脱光内衣内裤视频久久网站| 国产精品天天看| 日韩精品专区在线| 91亚洲国产成人精品一区二区三 | 欧美一级在线免费| 不卡免费追剧大全电视剧网站| 石原莉奈一区二区三区在线观看| 日韩精品一区二区三区老鸭窝| 91欧美激情一区二区三区成人| 久久国产生活片100| 婷婷国产v国产偷v亚洲高清| 国产精品二三区| 精品久久久久久久人人人人传媒 | 欧美日韩一级黄| 不卡欧美aaaaa| 粉嫩欧美一区二区三区高清影视| 午夜精品福利在线| 一区二区三区精品| 国产精品免费人成网站| 欧美成人a在线| 在线播放日韩导航| 91精品国产免费| 欧美午夜精品一区| 欧美色视频在线| 欧美图区在线视频| 色婷婷激情综合| 欧美午夜精品一区二区三区| 欧美aaa在线| 亚洲欧洲精品天堂一级| 欧美日韩大陆一区二区| 在线成人免费观看| 欧美日韩国产欧美日美国产精品| 激情图区综合网| 麻豆精品一二三| 奇米综合一区二区三区精品视频| 婷婷综合久久一区二区三区| 日韩av电影免费观看高清完整版 | 夜夜嗨av一区二区三区| 国产日韩欧美综合在线| 久久亚洲精品国产精品紫薇| 欧美电视剧在线看免费| 91麻豆福利精品推荐| 国产成人99久久亚洲综合精品| 蜜臀久久久久久久| 日韩成人dvd| 国内精品久久久久影院色| 美女精品一区二区| 国产91丝袜在线播放0| av在线不卡观看免费观看| 国产一区二区三区不卡在线观看 | 91精品国产色综合久久不卡电影| 欧美日韩精品久久久| 久久疯狂做爰流白浆xx| 成人永久免费视频| 成人午夜在线视频| 色婷婷综合久久久| 欧美日韩成人综合天天影院| 日韩一级二级三级精品视频| 亚洲欧美影音先锋| 国产精品美女久久久久久久| 日韩一区在线播放| 日韩美女视频一区二区| 裸体健美xxxx欧美裸体表演| 国产乱人伦偷精品视频不卡| 97se亚洲国产综合自在线不卡| 色狠狠av一区二区三区| 欧美大胆人体bbbb| 亚洲日本青草视频在线怡红院| 日本不卡一区二区| 欧美在线看片a免费观看| 久久精品人人爽人人爽| 亚洲第一在线综合网站| 一本一道综合狠狠老| 国产精品网站在线| 国产九色sp调教91| 欧美成人免费网站| 精品国产91乱码一区二区三区| 精品88久久久久88久久久| 一区二区三区四区激情| 91精品国产一区二区三区蜜臀 | av成人动漫在线观看| 久久久另类综合| 免费看黄色91| 在线视频你懂得一区| 亚洲色图丝袜美腿| 国产福利一区二区三区视频在线 | 国产精品久久久久精k8 | 91丨porny丨户外露出| 日韩欧美123| 日韩av电影天堂| 777久久久精品| 亚洲精品久久久蜜桃| 91国产精品成人| 亚洲va欧美va人人爽| 91免费视频网址| 亚洲精品第一国产综合野| 一本大道久久a久久综合婷婷| 中文字幕av在线一区二区三区| 国内一区二区视频| 精品国产亚洲在线| 麻豆91在线看| 欧美日韩国产高清一区二区| 婷婷中文字幕综合| 欧美区在线观看| 欧美a级理论片| 精品嫩草影院久久| 国产高清久久久| 国产欧美精品在线观看| 久草精品在线观看| 亚洲欧洲www| 欧美亚洲国产一区二区三区va| 奇米影视一区二区三区小说| 日韩欧美在线1卡| 不卡影院免费观看| 天堂va蜜桃一区二区三区| 国产精品久久久久aaaa| 欧美日韩视频不卡| 成人国产精品免费网站| 一区二区三区不卡在线观看| 精品国产自在久精品国产| 91久久国产最好的精华液| 亚洲精品中文字幕在线观看| 色综合天天综合网天天看片| 婷婷开心激情综合| 国产日韩成人精品| 欧美亚洲综合另类| 激情欧美日韩一区二区| 亚洲女子a中天字幕| 在线成人av影院| 色综合久久久网| 久久精品国产成人一区二区三区 | 99综合电影在线视频| 亚洲精品写真福利| 国产欧美中文在线| 欧美久久久久久久久久| 国产成人精品亚洲午夜麻豆| 亚洲在线视频一区| 国产日产欧美一区| 精品嫩草影院久久| 在线不卡欧美精品一区二区三区| 国产成人综合网| 麻豆成人免费电影| 午夜精品福利在线| 亚洲一区二区四区蜜桃| 中文文精品字幕一区二区| 91麻豆精品91久久久久久清纯| 91视频国产资源| 高清久久久久久| 韩国三级在线一区| 美女网站在线免费欧美精品| 日韩专区一卡二卡| 亚洲高清免费视频| 亚洲蜜臀av乱码久久精品| 国产精品欧美极品| 国产精品天天看| 亚洲自拍偷拍欧美| 亚洲一区二区三区美女| 一区二区三区中文免费| 亚洲男同性恋视频| 亚洲欧美乱综合| 亚洲色图制服诱惑| 亚洲乱码中文字幕综合| 亚洲女同ⅹxx女同tv| 亚洲视频狠狠干| 日韩精彩视频在线观看|