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

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

?? ssl.c

?? 一個開源的VPN原碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
 * below this point must be called with the L_TLS lock held. */booltls_pre_decrypt (struct tls_multi *multi,		 struct sockaddr_in *from,		 struct buffer *buf,		 struct crypto_options *opt,		 time_t current){  bool ret = false;  if (buf->len > 0)    {      int i;      int op;      int key_id;      /* get opcode and key ID */      {	uint8_t c = *BPTR (buf);	op = c >> P_OPCODE_SHIFT;	key_id = c & P_KEY_ID_MASK;      }      if (op == P_DATA_V1)	{			/* data channel packet */	  for (i = 0; i < KEY_SCAN_SIZE; ++i)	    {	      struct key_state *ks = multi->key_scan[i];	      if (DECRYPT_KEY_ENABLED (multi, ks)		  && key_id == ks->key_id		  && addr_match(from, &ks->remote_addr))		{		  /* return appropriate data channel decrypt key in opt */		  opt->key_ctx_bi = &ks->key;		  opt->packet_id = multi->opt.packet_id ? &ks->packet_id : NULL;		  opt->packet_id_long_form = multi->opt.packet_id_long_form;		  ASSERT (buf_advance (buf, 1));		  ++ks->n_packets;		  ks->n_bytes += buf->len;		  msg (D_TLS_DEBUG,		       "tls_pre_decrypt: data channel, key_id=%d, IP=%s",		       key_id, print_sockaddr (from));		  return ret;		}	    }	  msg (D_TLS_ERRORS,	       "TLS Error: Unknown data channel key ID or IP address received from %s: %d",	       print_sockaddr (from), key_id);	}      else			  /* control channel packet */	{	  bool do_burst = false;	  bool new_link = false;	  struct session_id sid;  /* remote session ID */	  /* verify legal opcode */	  if (op < P_FIRST_OPCODE || op > P_LAST_OPCODE)	    {	      msg (D_TLS_ERRORS,		   "TLS Error: unknown opcode received from %s op=%d",		   print_sockaddr (from), op);	      goto done;	    }	  /* hard reset ? */	  if (HARD_RESET(op))	    {	      /* verify client -> server or server -> client connection */	      if ((op == P_CONTROL_HARD_RESET_CLIENT_V1 && !multi->opt.server) ||		  (op == P_CONTROL_HARD_RESET_SERVER_V1 && multi->opt.server))		{		  msg (D_TLS_ERRORS,		       "TLS Error: client->client or server->server connection attempted from %s",		       print_sockaddr (from));		  goto done;		}	    }	  /*	   * Authenticate Packet	   */	  msg (D_TLS_DEBUG, "tls_pre_decrypt: control channel, op=%s, IP=%s",	       packet_opcode_name (op), print_sockaddr (from));	  /* get remote session-id */	  {	    struct buffer tmp = *buf;	    buf_advance (&tmp, 1);	    if (!session_id_read (&sid, &tmp) || !session_id_defined (&sid))	      {		msg (D_TLS_ERRORS,		     "TLS Error: session-id not found in packet from %s",		     print_sockaddr (from));		goto done;	      }	  }	  /* use session ID to match up packet with appropriate tls_session object */	  for (i = 0; i < TM_SIZE; ++i)	    {	      struct tls_session *session = &multi->session[i];	      struct key_state *ks = &session->key[KS_PRIMARY];	      msg (D_TLS_DEBUG,		   "tls_pre_decrypt: initial packet test, i=%d state=%s, mysid=%s, rec-sid=%s, rec-ip=%s, stored-sid=%s, stored-ip=%s",		   i,		   state_name (ks->state),		   session_id_print (&session->session_id),		   session_id_print (&sid),		   print_sockaddr (from),		   session_id_print (&ks->session_id_remote),		   print_sockaddr (&ks->remote_addr));	      if (session_id_equal (&ks->session_id_remote, &sid))		/* found a match */		{		  if (i == TM_LAME_DUCK) {		    msg (D_TLS_ERRORS,			 "TLS ERROR: received control packet with stale session-id=%s",			 session_id_print (&sid));		    goto done;		  }		  msg (D_TLS_DEBUG,		       "tls_pre_decrypt: found match, session[%d], sid=%s",		       i, session_id_print (&sid));		  break;		}	    }	  /*	   * check if this is the first response from a host to which	   * we sent an initial packet	   */	  if (i == TM_SIZE && HARD_RESET(op))	    {	      struct tls_session *session = &multi->session[TM_ACTIVE];	      struct key_state *ks = &session->key[KS_PRIMARY];	      if (!session_id_defined (&ks->session_id_remote))		{		  msg (D_TLS_DEBUG_LOW,		       "tls_pre_decrypt: first response to initial packet sid=%s",		       session_id_print (&sid));		  do_burst = true;		  new_link = true;		  i = TM_ACTIVE;		}	    }	  if (i == TM_SIZE && HARD_RESET(op))	    {	      /*	       * No match with existing sessions,	       * probably a new session.	       */	      struct tls_session *session = &multi->session[TM_UNTRUSTED];	      if (!read_control_auth (buf, &session->tls_auth, from, current))		goto done;	      /*	       * New session-initiating control packet is authenticated at this point	       * assuming that the --tls-auth command line option was used.	       *	       * Without --tls-auth, we leave authentication entirely up to TLS.	       */	      msg (D_TLS_DEBUG_LOW,		   "tls_pre_decrypt: new session incoming connection from %s",		   print_sockaddr (from));	      new_link = true;	      i = TM_UNTRUSTED;	    }	  else	    {	      struct tls_session *session = &multi->session[i];	      struct key_state *ks = &session->key[KS_PRIMARY];	      /*	       * Packet must belong to an existing session.	       */	      if (i != TM_ACTIVE && i != TM_UNTRUSTED)		{		  msg (D_TLS_ERRORS,		       "TLS Error: Unroutable control packet received from %s (si=%d op=%s)",		       print_sockaddr (from),		       i,		       packet_opcode_name (op));		  goto done;		}	      /*	       * Verify remote IP address	       */	      if (!new_link && !addr_match (&ks->remote_addr, from))		{		  msg (D_TLS_ERRORS, "TLS Error: Received control packet from unexpected IP addr: %s",		      print_sockaddr (from));		  goto done;		}	      /*	       * Remote is requesting a key renegotiation	       */	      if (op == P_CONTROL_SOFT_RESET_V1		  && DECRYPT_KEY_ENABLED (multi, ks))		{		  if (!read_control_auth (buf, &session->tls_auth, from, current))		    goto done;		  key_state_soft_reset (session, current);		  msg (D_TLS_DEBUG,		       "tls_pre_decrypt: received P_CONTROL_SOFT_RESET_V1 s=%d sid=%s",		       i, session_id_print (&sid));		}	      else		{		  /*		   * Remote responding to our key renegotiation request?		   */		  if (op == P_CONTROL_SOFT_RESET_V1)		    do_burst = true;		  if (!read_control_auth (buf, &session->tls_auth, from, current))		    goto done;		  msg (D_TLS_DEBUG,		       "tls_pre_decrypt: received control channel packet s#=%d sid=%s",		       i, session_id_print (&sid));		}	    }	  	  /*	   * If --single-session, don't allow more than one session.	   */	  if (multi->opt.single_session && new_link && multi->n_sessions)	    {	      msg (D_TLS_ERRORS,		   "TLS Error: Cannot accept new session request from %s due to --single-session",		   print_sockaddr (from));	      goto done;	    }	  /*	   * We have an authenticated packet (if --tls-auth was set).           * Now pass to our reliability level which deals with	   * packet acknowledgements, retransmits, sequencing, etc.	   */	  {	    struct tls_session *session = &multi->session[i];	    struct key_state *ks = &session->key[KS_PRIMARY];	    /* Make sure we were initialized and that we're not in an error state */	    ASSERT (ks->state != S_UNDEF);	    ASSERT (ks->state != S_ERROR);	    ASSERT (session_id_defined (&session->session_id));	    /* Let our caller know we processed a control channel packet */	    ret = true;	    /*	     * Set our remote address and remote session_id	     */	    if (new_link)	      {		ks->session_id_remote = sid;		ks->remote_addr = *from;		++multi->n_sessions;	      }	    else if (!addr_match (&ks->remote_addr, from))	      {		msg (D_TLS_ERRORS,		     "TLS Error: Existing session control channel packet from unknown IP address: %s",		     print_sockaddr (from));		goto done;	      }	    /*	     * Should we do a retransmit of all unacknowledged packets in	     * the send buffer?  This improves the start-up efficiency of the	     * initial key negotiation after the 2nd peer comes online.	     */	    if (do_burst && !session->burst)	      {		reliable_schedule_now (&ks->send_reliable, current);		session->burst = true;	      }	    /* Check key_id */	    if (ks->key_id != key_id)	      {		msg (D_TLS_ERRORS,		     "TLS ERROR: local/remote key IDs out of sync (%d/%d) ID: %s",		     ks->key_id, key_id, print_key_id (multi));		goto done;	      }	      	    /*	     * Process incoming ACKs for packets we can now	     * delete from reliable send buffer	     */	    {	      /* buffers all packet IDs to delete from send_reliable */	      struct reliable_ack send_ack;	      send_ack.len = 0;	      if (!reliable_ack_read		  (&send_ack, buf, &session->session_id))		{		  msg (D_TLS_ERRORS,		       "TLS Error: reading acknowledgement record from packet");		  goto done;		}	      reliable_send_purge (&ks->send_reliable, &send_ack);	    }	    /* Process outgoing acknowledgment for packet just received */	    if (op != P_ACK_V1 && reliable_can_get (&ks->rec_reliable))	      {		packet_id_type id;		/* Save incoming ciphertext packet to reliable buffer */		if (reliable_ack_read_packet_id (&ks->rec_ack, buf, &id))		  {		    struct buffer *in = reliable_get_buf (&ks->rec_reliable);		    ASSERT (in);		    ASSERT (buf_copy (in, buf));		    reliable_mark_active_incoming (&ks->rec_reliable, in, id, op);		  }	      }	  }	}    } done:  buf->len = 0;  opt->key_ctx_bi = NULL;  opt->packet_id = NULL;  opt->packet_id_long_form = false;  return ret;}/* Choose the key with which to encrypt a data packet */voidtls_pre_encrypt (struct tls_multi *multi,		 struct buffer *buf, struct crypto_options *opt){  multi->save_ks = NULL;  if (buf->len > 0)    {      int i;      for (i = 0; i < KEY_SCAN_SIZE; ++i)	{	  struct key_state *ks = multi->key_scan[i];	  if (ks->state == S_ACTIVE)	    {	      opt->key_ctx_bi = &ks->key;	      opt->packet_id = multi->opt.packet_id ? &ks->packet_id : NULL;	      opt->packet_id_long_form = multi->opt.packet_id_long_form;	      multi->save_ks = ks;	      msg (D_TLS_DEBUG, "tls_pre_encrypt: key_id=%d", ks->key_id);	      return;	    }	}      msg (D_TLS_NO_SEND_KEY, "TLS Warning: no data channel send key available: %s",	   print_key_id (multi));    }  buf->len = 0;  opt->key_ctx_bi = NULL;  opt->packet_id = NULL;  opt->packet_id_long_form = false;}/* Prepend the appropriate opcode to encrypted buffer prior to UDP send */voidtls_post_encrypt (struct tls_multi *multi, struct buffer *buf){  struct key_state *ks;  uint8_t *op;  ks = multi->save_ks;  multi->save_ks = NULL;  if (buf->len > 0)    {      ASSERT (ks);      ASSERT (op = buf_prepend (buf, 1));      *op = (P_DATA_V1 << P_OPCODE_SHIFT) | ks->key_id;      ++ks->n_packets;      ks->n_bytes += buf->len;    }}/* * Dump a human-readable rendition of an openvpn packet * into a garbage collectable string which is returned. */const char *protocol_dump (struct buffer *buffer, unsigned int flags){  struct buffer out = alloc_buf_gc (256);  struct buffer buf = *buffer;  uint8_t c;  int op;  int key_id;  int tls_auth_hmac_size = (flags & PD_TLS_AUTH_HMAC_SIZE_MASK);  if (buf.len <= 0)    {      buf_printf (&out, "DATA UNDEF len=%d", buf.len);      goto done;    }  if (!(flags & PD_TLS))    goto print_data;  /*   * Initial byte (opcode)   */  if (!buf_read (&buf, &c, sizeof (c)))    goto done;  op = (c >> P_OPCODE_SHIFT);  key_id = c & P_KEY_ID_MASK;  buf_printf (&out, "%s kid=%d", packet_opcode_name (op), key_id);  if (op == P_DATA_V1)    goto print_data;  /*   * Session ID   */  {    struct session_id sid;    if (!session_id_read (&sid, &buf))      goto done;    buf_printf (&out, " sid=%s", session_id_print (&sid));  }  /*   * tls-auth hmac + packet_id   */  if (tls_auth_hmac_size)    {      struct packet_id_net pin;      uint8_t tls_auth_hmac[MAX_HMAC_KEY_LENGTH];      ASSERT (tls_auth_hmac_size <= MAX_HMAC_KEY_LENGTH);      if (!buf_read (&buf, tls_auth_hmac, tls_auth_hmac_size))	goto done;      buf_printf (&out, " tls_hmac=%s", format_hex (tls_auth_hmac, tls_auth_hmac_size, 0));      if (!packet_id_read (&pin, &buf, true))	goto done;      buf_printf(&out, " pid=%s", packet_id_net_print (&pin));    }  /*   * ACK list   */  buf_printf (&out, " %s", reliable_ack_print(&buf));  if (op == P_ACK_V1)    goto done;  /*   * Packet ID   */  {    packet_id_type l;    if (!buf_read (&buf, &l, sizeof (l)))      goto done;    l = ntohpid (l);    buf_printf (&out, " pid=" packet_id_format, l);  }print_data:  if (flags & PD_SHOW_DATA)    buf_printf (&out, " DATA %s", format_hex (BPTR (&buf), BLEN (&buf), 80));  else    buf_printf (&out, " DATA len=%d", buf.len);done:  return out.data;}#endif /* USE_CRYPTO && USE_SSL*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲妇女屁股眼交7| 日本一区二区综合亚洲| 国产成人av电影在线播放| 婷婷中文字幕一区三区| 欧美国产日韩亚洲一区| 日韩欧美中文字幕制服| 欧美日韩高清不卡| 欧美系列一区二区| 欧美性videosxxxxx| 色噜噜夜夜夜综合网| bt7086福利一区国产| 国产精品一区二区黑丝| 国产在线精品一区二区| 国产一区二区三区四区五区美女| 亚洲图片欧美视频| 日本在线观看不卡视频| 日本视频一区二区| 九九热在线视频观看这里只有精品| 美脚の诱脚舐め脚责91| 免费久久99精品国产| 精品在线播放免费| 国产精品一卡二卡在线观看| 国产成人日日夜夜| 91蜜桃视频在线| 欧美日韩免费观看一区二区三区 | 欧美三片在线视频观看| 欧美日韩激情在线| 精品久久久久久亚洲综合网 | 伊人夜夜躁av伊人久久| 免费观看在线综合色| 日本中文字幕一区二区视频 | 欧美高清在线一区二区| 亚洲欧美偷拍另类a∨色屁股| 一区二区三区91| 精品在线观看视频| 在线观看一区日韩| 91精品国产麻豆国产自产在线| 久久久久久久久久久久久女国产乱| 国产精品卡一卡二| 久久91精品国产91久久小草| 99国产精品一区| 日韩一区二区免费在线电影| 国产日韩欧美a| 久久99在线观看| 欧美无乱码久久久免费午夜一区 | 亚洲国产三级在线| 丰满少妇久久久久久久| 欧美日韩国产成人在线91| 欧美激情艳妇裸体舞| 青青草精品视频| 色婷婷久久一区二区三区麻豆| 亚洲精品在线电影| 免费不卡在线视频| 欧美理论片在线| 亚洲视频每日更新| 亚洲第一在线综合网站| 成人97人人超碰人人99| 日韩视频免费观看高清完整版在线观看 | 丝袜亚洲精品中文字幕一区| 99久久亚洲一区二区三区青草| 日韩欧美激情在线| 丝袜诱惑制服诱惑色一区在线观看| 成人精品高清在线| 日韩欧美国产一区二区三区| 亚洲国产一区视频| 97se亚洲国产综合自在线观| 久久先锋资源网| 久久精品二区亚洲w码| 91精品欧美一区二区三区综合在| 亚洲欧美日韩在线播放| 91麻豆国产福利在线观看| 亚洲私人影院在线观看| av资源站一区| 亚洲精品少妇30p| 欧美午夜寂寞影院| 久久疯狂做爰流白浆xx| 日韩一区二区免费电影| 日韩国产成人精品| 欧美性xxxxxx少妇| 免费看欧美女人艹b| 欧美激情一二三区| 色呦呦国产精品| 成人污视频在线观看| 国产精品国产三级国产aⅴ原创| 粉嫩aⅴ一区二区三区四区| 欧美韩日一区二区三区四区| 91色在线porny| 亚洲精品日产精品乱码不卡| 亚洲日穴在线视频| 欧美日韩一级大片网址| 另类人妖一区二区av| 精品久久久久久无| 99re热这里只有精品视频| 丝袜脚交一区二区| 日韩欧美成人激情| av一区二区三区黑人| 日韩中文字幕亚洲一区二区va在线 | 国产一区二区久久| 亚洲嫩草精品久久| 欧美日韩国产免费一区二区| 国产盗摄女厕一区二区三区 | 久久久午夜精品理论片中文字幕| 不卡视频一二三四| 亚洲品质自拍视频| 欧美日韩一本到| 成人av网在线| 国产精品亚洲午夜一区二区三区| 91蝌蚪porny九色| 亚洲成人av一区二区| 精品国产电影一区二区| 7777女厕盗摄久久久| 91麻豆国产在线观看| 色婷婷狠狠综合| 狠狠色狠狠色综合系列| 亚洲欧洲综合另类在线| 精品国产123| 欧美日韩精品一区二区三区蜜桃| 韩日av一区二区| 亚洲成人av一区二区| 中文字幕亚洲电影| 欧美成人精品福利| 欧美色爱综合网| 欧洲亚洲国产日韩| 日本乱码高清不卡字幕| 色综合久久九月婷婷色综合| 麻豆成人av在线| 国内精品伊人久久久久影院对白| 奇米888四色在线精品| 日韩高清不卡一区二区三区| 日韩综合在线视频| 麻豆精品在线看| 精品亚洲欧美一区| 国产美女一区二区三区| 精品一区二区精品| 久久精品国产亚洲a| 久久国产精品99久久久久久老狼 | 国产精品三级av| 中日韩av电影| 午夜婷婷国产麻豆精品| 精品中文字幕一区二区小辣椒| 国产成人精品免费| 天天av天天翘天天综合网色鬼国产| 久久久一区二区| 亚洲一区二区三区四区在线免费观看 | 国产精品天干天干在线综合| 国产欧美精品日韩区二区麻豆天美| 久久精子c满五个校花| 久久先锋资源网| 亚洲欧美综合在线精品| 亚洲成a人片在线不卡一二三区| 蜜臀国产一区二区三区在线播放| 韩国三级在线一区| 色综合久久久久综合99| 精品女同一区二区| 五月婷婷激情综合网| 盗摄精品av一区二区三区| 91蜜桃婷婷狠狠久久综合9色| 欧美精品亚洲二区| 国产婷婷色一区二区三区在线| 国产精品女同一区二区三区| 免费在线成人网| 成人av一区二区三区| 欧美日韩免费电影| 一区二区免费视频| 国产剧情在线观看一区二区| 91精品国产综合久久香蕉麻豆 | 99vv1com这只有精品| 欧洲av一区二区嗯嗯嗯啊| 久久久久久久久蜜桃| 伊人夜夜躁av伊人久久| 国产a精品视频| 久久综合久久综合九色| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 91精品国产色综合久久久蜜香臀| 亚洲综合网站在线观看| 日韩一区二区免费在线电影| 黄色精品一二区| 亚洲色图丝袜美腿| 美女被吸乳得到大胸91| www一区二区| 天天色天天操综合| 欧美午夜免费电影| 婷婷国产在线综合| 欧美日韩精品电影| 亚洲一区日韩精品中文字幕| 91在线视频免费观看| 亚洲一区二区欧美日韩| 欧美日韩欧美一区二区| 亚洲成av人片在线| 欧美一级高清片在线观看| 精品在线你懂的| 亚洲精品欧美激情| 欧美年轻男男videosbes| 日韩专区在线视频| 久久精品水蜜桃av综合天堂| 成人综合婷婷国产精品久久蜜臀| 伊人色综合久久天天人手人婷| 欧美日本国产视频| 国产一区中文字幕| 亚洲伦在线观看|