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

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

?? ssl.c

?? 一個開源的VPN原碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
    printf ("%s\n", cipher_name);  printf ("\n");  SSL_free (ssl);  SSL_CTX_free (ctx);}/* * The OpenSSL library has a notion of preference in TLS * ciphers.  Higher preference == more secure. * Return the highest preference cipher. */voidget_highest_preference_tls_cipher (char *buf, int size){  SSL_CTX *ctx;  SSL *ssl;  const char *cipher_name;  ctx = SSL_CTX_new (TLSv1_method ());  if (!ctx)    msg (M_SSLERR, "Cannot create SSL_CTX object");  ssl = SSL_new (ctx);  if (!ssl)    msg (M_SSLERR, "Cannot create SSL object");  cipher_name = SSL_get_cipher_list (ssl, 0);  strncpynt (buf, cipher_name, size);  SSL_free (ssl);  SSL_CTX_free (ctx);}/* * Map internal constants to ascii names. */static const char *state_name (int state){  switch (state)    {    case S_UNDEF:      return "S_UNDEF";    case S_INITIAL:      return "S_INITIAL";    case S_PRE_START:      return "S_PRE_START";    case S_START:      return "S_START";    case S_SENT_KEY:      return "S_SENT_KEY";    case S_GOT_KEY:      return "S_GOT_KEY";    case S_ACTIVE:      return "S_ACTIVE";    case S_ERROR:      return "S_ERROR";    default:      return "S_???";    }}static const char *packet_opcode_name (int op){  switch (op)    {    case P_CONTROL_HARD_RESET_CLIENT_V1:      return "P_CONTROL_HARD_RESET_CLIENT_V1";    case P_CONTROL_HARD_RESET_SERVER_V1:      return "P_CONTROL_HARD_RESET_SERVER_V1";    case P_CONTROL_SOFT_RESET_V1:      return "P_CONTROL_SOFT_RESET_V1";    case P_CONTROL_V1:      return "P_CONTROL_V1";    case P_ACK_V1:      return "P_ACK_V1";    case P_DATA_V1:      return "P_DATA_V1";    default:      return "P_???";    }}static const char *session_index_name (int index){  switch (index)    {    case TM_ACTIVE:      return "TM_ACTIVE";    case TM_UNTRUSTED:      return "TM_UNTRUSTED";    case TM_LAME_DUCK:      return "TM_LAME_DUCK";    default:      return "TM_???";    }}/* * For debugging. */static const char *print_key_id (struct tls_multi *multi){  int i;  struct buffer out = alloc_buf_gc (256);  for (i = 0; i < KEY_SCAN_SIZE; ++i)    {      struct key_state *ks = multi->key_scan[i];      buf_printf (&out, " [key#%d state=%s id=%d sid=%s]", i,		  state_name (ks->state), ks->key_id,		  session_id_print (&ks->session_id_remote));    }  return out.data;}/* * OpenVPN's interface to SSL/TLS authentication, * encryption, and decryption is exclusively * through "memory BIOs". */static BIO *getbio (BIO_METHOD * type, const char *desc){  BIO *ret;  ret = BIO_new (type);  if (!ret)    msg (M_SSLERR, "Error creating %s BIO", desc);  return ret;}/* * Write to an OpenSSL BIO in non-blocking mode. */static intbio_write (BIO * bio, struct buffer *buf, const char *desc){  int i;  int ret = 0;  ASSERT (buf->len >= 0);  if (buf->len)    {      /*       * Free the L_TLS lock prior to calling BIO routines       * so that foreground thread can still call       * tls_pre_decrypt or tls_pre_encrypt,       * allowing tunnel packet forwarding to continue.       */#ifdef BIO_DEBUG      bio_debug_data ("write", bio, BPTR (buf), BLEN (buf), desc);#endif      mutex_unlock (L_TLS);      i = BIO_write (bio, BPTR (buf), BLEN (buf));      mutex_lock (L_TLS);      if (i < 0)	{	  if (BIO_should_retry (bio))	    {	      ;	    }	  else	    {	      msg (D_TLS_ERRORS | M_SSL, "TLS ERROR: BIO write %s error",		   desc);	      ret = -1;	    }	}      else if (i != buf->len)	{	  msg (D_TLS_ERRORS | M_SSL,	       "TLS ERROR: BIO write %s incomplete %d/%d", desc, i, buf->len);	  ret = -1;	}      else	{			/* successful write */	  msg (D_HANDSHAKE_VERBOSE, "BIO write %s %d bytes", desc, i);	  memset (BPTR (buf), 0, BLEN (buf)); /* erase data just written */	  buf->len = 0;	  ret = 1;	}    }  return ret;}/* * Read from an OpenSSL BIO in non-blocking mode. */static intbio_read (BIO * bio, struct buffer *buf, int maxlen, const char *desc){  int i;  int ret = 0;  ASSERT (buf->len >= 0);  if (buf->len)    {      ;    }  else    {      int len = buf_forward_capacity (buf);      if (maxlen < len)	len = maxlen;      /*       * Free the L_TLS lock prior to calling BIO routines       * so that foreground thread can still call       * tls_pre_decrypt or tls_pre_encrypt,       * allowing tunnel packet forwarding to continue.       *       * BIO_read brackets most of the serious RSA       * key negotiation number crunching.       */      mutex_unlock (L_TLS);      i = BIO_read (bio, BPTR (buf), len);      mutex_lock (L_TLS);#ifdef BIO_DEBUG      bio_debug_data ("read", bio, BPTR (buf), i, desc);#endif      if (i < 0)	{	  if (BIO_should_retry (bio))	    {	      ;	    }	  else	    {	      msg (D_TLS_ERRORS | M_SSL, "TLS_ERROR: BIO read %s error",		   desc);	      buf->len = 0;	      ret = -1;	    }	}      else if (!i)	{	  buf->len = 0;	}      else	{			/* successful read */	  msg (D_HANDSHAKE_VERBOSE, "BIO read %s %d bytes", desc, i);	  buf->len = i;	  ret = 1;	}    }  return ret;}/* * Inline functions for reading from and writing * to BIOs. */static inline intkey_state_write_plaintext (struct key_state *ks, struct buffer *buf){  return bio_write (ks->ssl_bio, buf, "tls_write_plaintext");}static inline intkey_state_write_ciphertext (struct key_state *ks, struct buffer *buf){  return bio_write (ks->ct_in, buf, "tls_write_ciphertext");}static inline intkey_state_read_plaintext (struct key_state *ks, struct buffer *buf,			  int maxlen){  return bio_read (ks->ssl_bio, buf, maxlen, "tls_read_plaintext");}static inline intkey_state_read_ciphertext (struct key_state *ks, struct buffer *buf,			   int maxlen){  return bio_read (ks->ct_out, buf, maxlen, "tls_read_ciphertext");}/* * Initialize a key_state.  Each key_state corresponds to * a specific SSL/TLS session. */static voidkey_state_init (struct tls_session *session, struct key_state *ks,		time_t current){  /*   * Build TLS object that reads/writes ciphertext   * to/from memory BIOs.   */  CLEAR (*ks);  ks->ssl = SSL_new (session->opt->ssl_ctx);  if (!ks->ssl)    msg (M_SSLERR, "SSL_new failed");  ks->ssl_bio = getbio (BIO_f_ssl (), "ssl_bio");  ks->ct_in = getbio (BIO_s_mem (), "ct_in");  ks->ct_out = getbio (BIO_s_mem (), "ct_out");#ifdef BIO_DEBUG  bio_debug_oc ("open ssl_bio", ks->ssl_bio);  bio_debug_oc ("open ct_in", ks->ct_in);  bio_debug_oc ("open ct_out", ks->ct_out);#endif  if (session->opt->server)    SSL_set_accept_state (ks->ssl);  else    SSL_set_connect_state (ks->ssl);  SSL_set_bio (ks->ssl, ks->ct_in, ks->ct_out);  BIO_set_ssl (ks->ssl_bio, ks->ssl, BIO_NOCLOSE);  /* Set control-channel initiation mode */  ks->initial_opcode = session->initial_opcode;  session->initial_opcode = P_CONTROL_SOFT_RESET_V1;  ks->state = S_INITIAL;  ks->key_id = session->key_id;  /*   * key_id increments to KEY_ID_MASK then recycles back to 1.   * This way you know that if key_id is 0, it is the first key.   */  ++session->key_id;  session->key_id &= P_KEY_ID_MASK;  if (!session->key_id)    session->key_id = 1;  /* allocate buffers */  ks->plaintext_read_buf = alloc_buf (BUF_SIZE (&session->opt->frame));  ks->plaintext_write_buf = alloc_buf (BUF_SIZE (&session->opt->frame));  ks->ack_write_buf = alloc_buf (BUF_SIZE (&session->opt->frame));  reliable_init (&ks->send_reliable, BUF_SIZE (&session->opt->frame),		 EXTRA_FRAME (&session->opt->frame));  reliable_init (&ks->rec_reliable, BUF_SIZE (&session->opt->frame),		 EXTRA_FRAME (&session->opt->frame));  reliable_set_timeout (&ks->send_reliable, session->opt->packet_timeout);}static voidkey_state_free (struct key_state *ks, bool clear){  ks->state = S_UNDEF;  if (ks->ssl) {#ifdef BIO_DEBUG    bio_debug_oc ("close ssl_bio", ks->ssl_bio);    bio_debug_oc ("close ct_in", ks->ct_in);    bio_debug_oc ("close ct_out", ks->ct_out);#endif    BIO_free_all(ks->ssl_bio);    SSL_free (ks->ssl);  }  free_key_ctx_bi (&ks->key);  free_buf (&ks->plaintext_read_buf);  free_buf (&ks->plaintext_write_buf);  free_buf (&ks->ack_write_buf);  reliable_free (&ks->send_reliable);  reliable_free (&ks->rec_reliable);  if (clear)    CLEAR (*ks);}/* * Must be called if we move a tls_session in memory. */static inline void tls_session_set_self_referential_pointers (struct tls_session* session) {  session->tls_auth.packet_id = &session->tls_auth_pid;}/* * Initialize a TLS session.  A TLS session normally has 2 key_state objects, * one for the current key, and one for the retiring key. */static voidtls_session_init (struct tls_multi *multi, struct tls_session *session){  msg (D_TLS_DEBUG, "tls_session_init: entry");  CLEAR (*session);  session->opt = &multi->opt;    while (!session_id_defined(&session->session_id))    session_id_random (&session->session_id);  session->initial_opcode = session->opt->server ?    P_CONTROL_HARD_RESET_SERVER_V1 : P_CONTROL_HARD_RESET_CLIENT_V1;  /* Initialize control channel authentication parameters */  session->tls_auth = session->opt->tls_auth;  tls_session_set_self_referential_pointers(session);  key_state_init (session, &session->key[KS_PRIMARY], time (NULL));  msg (D_TLS_DEBUG, "tls_session_init: new session object, sid=%s",       session_id_print (&session->session_id));}static voidtls_session_free (struct tls_session *session, bool clear){  int i;  for (i = 0; i < KS_SIZE; ++i)    key_state_free (&session->key[i], false);  if (clear)    CLEAR (*session);}static voidmove_session(struct tls_multi* multi, int dest, int src, bool reinit_src){  msg (D_TLS_DEBUG_LOW, "move_session: dest=%s src=%s reinit_src=%d",       session_index_name(dest),       session_index_name(src),       reinit_src);  ASSERT (src != dest);  ASSERT (src >= 0 && src < TM_SIZE);  ASSERT (dest >= 0 && dest < TM_SIZE);  tls_session_free (&multi->session[dest], false);  multi->session[dest] = multi->session[src];  tls_session_set_self_referential_pointers (&multi->session[dest]);  if (reinit_src)    tls_session_init (multi, &multi->session[src]);  else    CLEAR (multi->session[src]);  msg (D_TLS_DEBUG, "move_session: exit");}static voidreset_session (struct tls_multi *multi, struct tls_session *session){  tls_session_free (session, false);  tls_session_init (multi, session);}#if 0/* * Transmit a TLS reset on our untrusted channel. */static voidinitiate_untrusted_session (struct tls_multi *multi, struct sockaddr_in *to){  struct tls_session *session = &multi->session[TM_UNTRUSTED];  struct key_state *ks = &session->key[KS_PRIMARY];  reset_session (multi, session);  ks->remote_addr = *to;  msg (D_TLS_DEBUG_LOW, "initiate_untrusted_session: addr=%s", print_sockaddr (to));}#endif/* * Used to determine in how many seconds we should be * called again. */static inline voidcompute_earliest_wakeup (time_t* earliest, int seconds_from_now) {  if (seconds_from_now > 0 && (seconds_from_now < *earliest || !*earliest))    *earliest = seconds_from_now;}/* * Return true if "lame duck" or retiring key has expired and can * no longer be used. */static inline boollame_duck_must_die (const struct tls_session* session, time_t* wakeup, time_t current){  const struct key_state* lame = &session->key[KS_LAME_DUCK];  if (lame->state >= S_INITIAL)    {      ASSERT (lame->must_die); /* a lame duck key must always have an expiration */      if (current < lame->must_die)	{	  compute_earliest_wakeup (wakeup, lame->must_die - current);	  return false;	}      else	return true;    }  else if (lame->state == S_ERROR)    return true;  else    return false;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美精品在线观看| 久久精品综合网| 在线观看日韩电影| 色哟哟日韩精品| 96av麻豆蜜桃一区二区| 成人国产精品免费观看视频| 国产精品一区二区不卡| 国产激情一区二区三区| 国产成人免费视频精品含羞草妖精| 精一区二区三区| 久久精品国产99国产精品| 美国十次综合导航| 极品少妇一区二区| 国产一区视频网站| 国产成人福利片| av在线不卡观看免费观看| 成人蜜臀av电影| 91麻豆精品秘密| 色综合久久中文综合久久97| 色婷婷亚洲精品| 精品国产自在久精品国产| 精品成人a区在线观看| 久久午夜免费电影| 最新日韩av在线| 亚洲成人av电影| 日韩成人一级大片| 国模娜娜一区二区三区| 粉嫩av一区二区三区粉嫩| 色老头久久综合| 91精品国产综合久久精品性色| 欧美精品一区视频| 国产精品夫妻自拍| 亚洲午夜视频在线| 国内精品免费**视频| 国产风韵犹存在线视精品| 91美女视频网站| 欧美一区二区三区白人| 久久久久9999亚洲精品| 中文字幕在线一区免费| 亚洲国产成人porn| 国内精品伊人久久久久影院对白| 成人性视频免费网站| 欧美日韩第一区日日骚| 久久精品在线免费观看| 亚洲一区二区美女| 狠狠久久亚洲欧美| 天天综合色天天综合色h| 亚洲国产精品一区二区www在线 | 国产一区二区三区在线观看免费| 亚洲天堂网中文字| 亚洲国产精品久久久久婷婷884| 日韩高清一区二区| 粉嫩嫩av羞羞动漫久久久| 欧美日韩视频一区二区| 精品国产伦一区二区三区免费 | 91视视频在线观看入口直接观看www| 精品国产91亚洲一区二区三区婷婷 | 972aa.com艺术欧美| 欧美一区午夜精品| 国产精品高潮呻吟| 免费成人性网站| 99久久精品久久久久久清纯| 日韩女优制服丝袜电影| 亚洲欧美日韩一区| 国产综合久久久久久鬼色| 日本久久精品电影| 欧美高清在线精品一区| 日本一不卡视频| 99久久婷婷国产精品综合| 欧美本精品男人aⅴ天堂| 一区二区三区精品在线观看| 国产精品亚洲人在线观看| 欧美日韩精品一区二区三区四区| 国产精品久久久久久久久晋中| 日韩av不卡在线观看| 色婷婷激情综合| 欧美国产禁国产网站cc| 美国av一区二区| 欧美日韩在线免费视频| 中文字幕色av一区二区三区| 精品综合久久久久久8888| 欧美日韩大陆在线| 一区二区三区91| jiyouzz国产精品久久| 26uuu欧美日本| 久久国产人妖系列| 91精品国产综合久久精品性色| 亚洲综合免费观看高清在线观看| 9色porny自拍视频一区二区| 久久精品一区二区三区不卡| 久久99热国产| 日韩美女在线视频| 日韩专区欧美专区| 欧美人与禽zozo性伦| 亚洲精品一二三四区| 99久久精品国产精品久久| 国产精品网站一区| 大尺度一区二区| 精品福利二区三区| 激情成人综合网| 精品日韩欧美在线| 国产曰批免费观看久久久| 精品久久久久99| 国模一区二区三区白浆| 精品国产乱码久久| 国产福利91精品一区二区三区| 久久看人人爽人人| 国产精品69毛片高清亚洲| 国产欧美视频一区二区| 成人毛片视频在线观看| 国产精品久久久久天堂| 91蜜桃婷婷狠狠久久综合9色| 亚洲情趣在线观看| 欧美日韩免费观看一区三区| 亚洲综合成人在线| 欧美日韩不卡一区| 理论电影国产精品| 久久综合av免费| 成人免费毛片app| 亚洲狠狠丁香婷婷综合久久久| 99久久99久久精品免费看蜜桃| 亚洲欧美色图小说| 欧美日韩国产在线观看| 日产精品久久久久久久性色| 精品国产成人系列| 大白屁股一区二区视频| 一区二区三区视频在线看| 91超碰这里只有精品国产| 美脚の诱脚舐め脚责91| 国产女主播视频一区二区| 91丨九色丨尤物| 天堂av在线一区| 精品国产99国产精品| av亚洲精华国产精华| 亚洲午夜精品在线| 精品国产一区二区在线观看| 风间由美一区二区av101| 亚洲综合激情小说| 欧美mv和日韩mv的网站| 99在线热播精品免费| 香蕉加勒比综合久久| 日韩精品一区二区三区在线| www..com久久爱| 天天综合网天天综合色 | 捆绑调教美女网站视频一区| 国产日产欧产精品推荐色| 色综合天天狠狠| 免费看日韩精品| 国产精品久久久久久久裸模| 欧美色手机在线观看| 国产一区二区免费在线| 亚洲精品免费播放| 精品国产一区二区在线观看| 91麻豆蜜桃一区二区三区| 久久99久久99| 一区二区激情小说| 久久精品视频在线看| 欧美日韩精品免费观看视频| 国产精品77777竹菊影视小说| 亚洲成人一区二区| 亚洲国产精品国自产拍av| 91麻豆精品91久久久久同性| 国产91精品一区二区麻豆亚洲| 亚洲福利视频一区| 国产精品的网站| 欧美精品一区二区三区久久久| 欧美性生活久久| 成人教育av在线| 精品一区二区三区在线观看国产| 一区二区三区在线免费视频| 国产亚洲一区二区三区四区| 4438亚洲最大| 色噜噜久久综合| 成人动漫精品一区二区| 国模少妇一区二区三区| 视频一区视频二区中文| 一区二区在线观看视频在线观看| 久久久久久久一区| 欧美一区三区二区| 欧美视频一区在线| av不卡一区二区三区| 国产成人aaa| 狠狠v欧美v日韩v亚洲ⅴ| 日韩国产一区二| 亚洲一二三区视频在线观看| 亚洲欧美国产三级| 国产精品久久久久一区| 国产亚洲成年网址在线观看| 欧美一级二级三级蜜桃| 欧美撒尿777hd撒尿| 在线亚洲一区二区| 99re热这里只有精品视频| 国产成人av一区二区| 韩国视频一区二区| 免费在线观看一区二区三区| 亚洲国产wwwccc36天堂| 一区二区三区中文字幕| 亚洲激情自拍偷拍| 亚洲激情第一区| 亚洲一区在线播放|