您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ ssl3_setup_buffers函数代码示例

51自学网 2021-06-03 08:19:36
  C++
这篇教程C++ ssl3_setup_buffers函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中ssl3_setup_buffers函数的典型用法代码示例。如果您正苦于以下问题:C++ ssl3_setup_buffers函数的具体用法?C++ ssl3_setup_buffers怎么用?C++ ssl3_setup_buffers使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了ssl3_setup_buffers函数的18个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: dtls1_buffer_record

int dtls1_buffer_record(SSL *s, record_pqueue *queue, unsigned char *priority){    DTLS1_RECORD_DATA *rdata;    pitem *item;    /* Limit the size of the queue to prevent DOS attacks */    if (pqueue_size(queue->q) >= 100)        return 0;    rdata = OPENSSL_malloc(sizeof(*rdata));    item = pitem_new(priority, rdata);    if (rdata == NULL || item == NULL) {        OPENSSL_free(rdata);        pitem_free(item);        SSLerr(SSL_F_DTLS1_BUFFER_RECORD, ERR_R_INTERNAL_ERROR);        return -1;    }    rdata->packet = s->rlayer.packet;    rdata->packet_length = s->rlayer.packet_length;    memcpy(&(rdata->rbuf), &s->rlayer.rbuf, sizeof(SSL3_BUFFER));    memcpy(&(rdata->rrec), &s->rlayer.rrec, sizeof(SSL3_RECORD));    item->data = rdata;#ifndef OPENSSL_NO_SCTP    /* Store bio_dgram_sctp_rcvinfo struct */    if (BIO_dgram_is_sctp(SSL_get_rbio(s)) &&        (SSL_get_state(s) == TLS_ST_SR_FINISHED         || SSL_get_state(s) == TLS_ST_CR_FINISHED)) {        BIO_ctrl(SSL_get_rbio(s), BIO_CTRL_DGRAM_SCTP_GET_RCVINFO,                 sizeof(rdata->recordinfo), &rdata->recordinfo);    }#endif    s->rlayer.packet = NULL;    s->rlayer.packet_length = 0;    memset(&s->rlayer.rbuf, 0, sizeof(s->rlayer.rbuf));    memset(&s->rlayer.rrec, 0, sizeof(s->rlayer.rrec));    if (!ssl3_setup_buffers(s)) {        SSLerr(SSL_F_DTLS1_BUFFER_RECORD, ERR_R_INTERNAL_ERROR);        OPENSSL_free(rdata->rbuf.buf);        OPENSSL_free(rdata);        pitem_free(item);        return (-1);    }    /* insert should not fail, since duplicates are dropped */    if (pqueue_insert(queue->q, item) == NULL) {        SSLerr(SSL_F_DTLS1_BUFFER_RECORD, ERR_R_INTERNAL_ERROR);        OPENSSL_free(rdata->rbuf.buf);        OPENSSL_free(rdata);        pitem_free(item);        return (-1);    }    return (1);}
开发者ID:hydnoracoin,项目名称:Open-Source-Cryptocurrency-Exchange,代码行数:59,


示例2: set_up

static HEARTBEAT_TEST_FIXTURE set_up(const char* const test_case_name,	const SSL_METHOD* meth)	{	HEARTBEAT_TEST_FIXTURE fixture;	int setup_ok = 1;	memset(&fixture, 0, sizeof(fixture));	fixture.test_case_name = test_case_name;	fixture.ctx = SSL_CTX_new(meth);	if (!fixture.ctx)		{		fprintf(stderr, "Failed to allocate SSL_CTX for test: %s/n",			test_case_name);		setup_ok = 0;		goto fail;		}	fixture.s = SSL_new(fixture.ctx);	if (!fixture.s)		{		fprintf(stderr, "Failed to allocate SSL for test: %s/n", test_case_name);		setup_ok = 0;		goto fail;		}	if (!ssl_init_wbio_buffer(fixture.s, 1))		{		fprintf(stderr, "Failed to set up wbio buffer for test: %s/n",			test_case_name);		setup_ok = 0;		goto fail;		}	if (!ssl3_setup_buffers(fixture.s))		{		fprintf(stderr, "Failed to setup buffers for test: %s/n",			test_case_name);		setup_ok = 0;		goto fail;		}	/* Clear the memory for the return buffer, since this isn't automatically	 * zeroed in opt mode and will cause spurious test failures that will change	 * with each execution.	 */	memset(fixture.s->s3->wbuf.buf, 0, fixture.s->s3->wbuf.len);	fail:	if (!setup_ok)		{		ERR_print_errors_fp(stderr);		exit(EXIT_FAILURE);		}	return fixture;	}
开发者ID:GeekMeUpScotty,项目名称:openssl,代码行数:55,


示例3: dtls1_accept

int dtls1_accept(SSL *s)	{	BUF_MEM *buf;	unsigned long l,Time=(unsigned long)time(NULL);	void (*cb)(const SSL *ssl,int type,int val)=NULL;	int ret= -1;	int new_state,state,skip=0;	int listen;	RAND_add(&Time,sizeof(Time),0);	ERR_clear_error();	clear_sys_error();	if (s->info_callback != NULL)		cb=s->info_callback;	else if (s->ctx->info_callback != NULL)		cb=s->ctx->info_callback;		listen = s->d1->listen;	/* init things to blank */	s->in_handshake++;	if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(s);	s->d1->listen = listen;	if (s->cert == NULL)		{		SSLerr(SSL_F_DTLS1_ACCEPT,SSL_R_NO_CERTIFICATE_SET);		return(-1);		}	for (;;)		{		state=s->state;		switch (s->state)			{		case SSL_ST_RENEGOTIATE:			s->new_session=1;			/* s->state=SSL_ST_ACCEPT; */		case SSL_ST_BEFORE:		case SSL_ST_ACCEPT:		case SSL_ST_BEFORE|SSL_ST_ACCEPT:		case SSL_ST_OK|SSL_ST_ACCEPT:			s->server=1;			if (cb != NULL) cb(s,SSL_CB_HANDSHAKE_START,1);			if ((s->version & 0xff00) != (DTLS1_VERSION & 0xff00))				{				SSLerr(SSL_F_DTLS1_ACCEPT, ERR_R_INTERNAL_ERROR);				return -1;				}			s->type=SSL_ST_ACCEPT;			if (s->init_buf == NULL)				{				if ((buf=BUF_MEM_new()) == NULL)					{					ret= -1;					goto end;					}				if (!BUF_MEM_grow(buf,SSL3_RT_MAX_PLAIN_LENGTH))					{					ret= -1;					goto end;					}				s->init_buf=buf;				}			if (!ssl3_setup_buffers(s))				{				ret= -1;				goto end;				}			s->init_num=0;			if (s->state != SSL_ST_RENEGOTIATE)				{				/* Ok, we now need to push on a buffering BIO so that				 * the output is sent in a way that TCP likes :-)				 */				if (!ssl_init_wbio_buffer(s,1)) { ret= -1; goto end; }				ssl3_init_finished_mac(s);				s->state=SSL3_ST_SR_CLNT_HELLO_A;				s->ctx->stats.sess_accept++;				}			else				{				/* s->state == SSL_ST_RENEGOTIATE,				 * we will just send a HelloRequest */				s->ctx->stats.sess_accept_renegotiate++;				s->state=SSL3_ST_SW_HELLO_REQ_A;				}			break;//.........这里部分代码省略.........
开发者ID:millken,项目名称:zhuxianB30,代码行数:101,


示例4: ssl23_get_client_hello

int ssl23_get_client_hello(SSL *s)	{	char buf_space[11]; /* Request this many bytes in initial read.	                     * We can detect SSL 3.0/TLS 1.0 Client Hellos	                     * ('type == 3') correctly only when the following	                     * is in a single record, which is not guaranteed by	                     * the protocol specification:	                     * Byte  Content	                     *  0     type            /	                     *  1/2   version          > record header	                     *  3/4   length          /	                     *  5     msg_type        /	                     *  6-8   length           > Client Hello message	                     *  9/10  client_version  /	                     */	char *buf= &(buf_space[0]);	unsigned char *p,*d,*d_len,*dd;	unsigned int i;	unsigned int csl,sil,cl;	int n=0,j;	int type=0;	int v[2];	if (s->state ==	SSL23_ST_SR_CLNT_HELLO_A)		{		/* read the initial header */		v[0]=v[1]=0;		if (!ssl3_setup_buffers(s)) goto err;		n=ssl23_read_bytes(s, sizeof buf_space);		if (n != sizeof buf_space) return(n); /* n == -1 || n == 0 */		p=s->packet;		memcpy(buf,p,n);		if ((p[0] & 0x80) && (p[2] == SSL2_MT_CLIENT_HELLO))			{			/*			 * SSLv2 header			 */			if ((p[3] == 0x00) && (p[4] == 0x02))				{				v[0]=p[3]; v[1]=p[4];				/* SSLv2 */				}			else if (p[3] == SSL3_VERSION_MAJOR)				{				v[0]=p[3]; v[1]=p[4];				/* SSLv3/TLSv1 */				if (p[4] >= TLS1_VERSION_MINOR)					{					if (p[4] >= TLS1_2_VERSION_MINOR &&					   !(s->options & SSL_OP_NO_TLSv1_2))						{						s->version=TLS1_2_VERSION;						s->state=SSL23_ST_SR_CLNT_HELLO_B;						}					else if (p[4] >= TLS1_1_VERSION_MINOR &&					   !(s->options & SSL_OP_NO_TLSv1_1))						{						s->version=TLS1_1_VERSION;						/* type=2; */ /* done later to survive restarts */						s->state=SSL23_ST_SR_CLNT_HELLO_B;						}					else if (!(s->options & SSL_OP_NO_TLSv1))						{						s->version=TLS1_VERSION;						/* type=2; */ /* done later to survive restarts */						s->state=SSL23_ST_SR_CLNT_HELLO_B;						}					else if (!(s->options & SSL_OP_NO_SSLv3))						{						s->version=SSL3_VERSION;						/* type=2; */						s->state=SSL23_ST_SR_CLNT_HELLO_B;						}					}				else if (!(s->options & SSL_OP_NO_SSLv3))					{					s->version=SSL3_VERSION;					/* type=2; */					s->state=SSL23_ST_SR_CLNT_HELLO_B;					}				}			}		else if ((p[0] == SSL3_RT_HANDSHAKE) &&			 (p[1] == SSL3_VERSION_MAJOR) &&			 (p[5] == SSL3_MT_CLIENT_HELLO) &&			 ((p[3] == 0 && p[4] < 5 /* silly record length? */)				|| (p[9] >= p[1])))			{			/*			 * SSLv3 or tls1 header			 */						v[0]=p[1]; /* major version (= SSL3_VERSION_MAJOR) */			/* We must look at client_version inside the Client Hello message			 * to get the correct minor version.//.........这里部分代码省略.........
开发者ID:Acidburn0zzz,项目名称:openssl,代码行数:101,


示例5: dtls1_connect

int dtls1_connect(SSL *s)	{	BUF_MEM *buf=NULL;	unsigned long Time=(unsigned long)time(NULL);	void (*cb)(const SSL *ssl,int type,int val)=NULL;	int ret= -1;	int new_state,state,skip=0;#ifndef OPENSSL_NO_SCTP	unsigned char sctpauthkey[64];	char labelbuffer[sizeof(DTLS1_SCTP_AUTH_LABEL)];#endif	RAND_add(&Time,sizeof(Time),0);	ERR_clear_error();	clear_sys_error();	if (s->info_callback != NULL)		cb=s->info_callback;	else if (s->ctx->info_callback != NULL)		cb=s->ctx->info_callback;		s->in_handshake++;	if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(s); #ifndef OPENSSL_NO_SCTP	/* Notify SCTP BIO socket to enter handshake	 * mode and prevent stream identifier other	 * than 0. Will be ignored if no SCTP is used.	 */	BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_SET_IN_HANDSHAKE, s->in_handshake, NULL);#endif#ifndef OPENSSL_NO_HEARTBEATS	/* If we're awaiting a HeartbeatResponse, pretend we	 * already got and don't await it anymore, because	 * Heartbeats don't make sense during handshakes anyway.	 */	if (s->tlsext_hb_pending)		{		dtls1_stop_timer(s);		s->tlsext_hb_pending = 0;		s->tlsext_hb_seq++;		}#endif	for (;;)		{		state=s->state;		switch(s->state)			{		case SSL_ST_RENEGOTIATE:			s->renegotiate=1;			s->state=SSL_ST_CONNECT;			s->ctx->stats.sess_connect_renegotiate++;			/* break */		case SSL_ST_BEFORE:		case SSL_ST_CONNECT:		case SSL_ST_BEFORE|SSL_ST_CONNECT:		case SSL_ST_OK|SSL_ST_CONNECT:			s->server=0;			if (cb != NULL) cb(s,SSL_CB_HANDSHAKE_START,1);			if ((s->version & 0xff00 ) != (DTLS1_VERSION & 0xff00) &&			    (s->version & 0xff00 ) != (DTLS1_BAD_VER & 0xff00))				{				SSLerr(SSL_F_DTLS1_CONNECT, ERR_R_INTERNAL_ERROR);				ret = -1;				goto end;				}							/* s->version=SSL3_VERSION; */			s->type=SSL_ST_CONNECT;			if (s->init_buf == NULL)				{				if ((buf=BUF_MEM_new()) == NULL)					{					ret= -1;					goto end;					}				if (!BUF_MEM_grow(buf,SSL3_RT_MAX_PLAIN_LENGTH))					{					ret= -1;					goto end;					}				s->init_buf=buf;				buf=NULL;				}			if (!ssl3_setup_buffers(s)) { ret= -1; goto end; }			/* setup buffing BIO */			if (!ssl_init_wbio_buffer(s,0)) { ret= -1; goto end; }			/* don't push the buffering BIO quite yet */			s->state=SSL3_ST_CW_CLNT_HELLO_A;			s->ctx->stats.sess_connect++;//.........这里部分代码省略.........
开发者ID:benlaurie,项目名称:openssl-old,代码行数:101,


示例6: dtls1_connect

int dtls1_connect(SSL *s)	{	BUF_MEM *buf=NULL;	unsigned long Time=(unsigned long)TINYCLR_SSL_TIME(NULL);	void (*cb)(const SSL *ssl,int type,int val)=NULL;	int ret= -1;	int new_state,state,skip=0;;	RAND_add(&Time,sizeof(Time),0);	ERR_clear_error();	clear_sys_error();	if (s->info_callback != NULL)		cb=s->info_callback;	else if (s->ctx->info_callback != NULL)		cb=s->ctx->info_callback;		s->in_handshake++;	if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(s); 	for (;;)		{		state=s->state;		switch(s->state)			{		case SSL_ST_RENEGOTIATE:			s->new_session=1;			s->state=SSL_ST_CONNECT;			s->ctx->stats.sess_connect_renegotiate++;			/* break */		case SSL_ST_BEFORE:		case SSL_ST_CONNECT:		case SSL_ST_BEFORE|SSL_ST_CONNECT:		case SSL_ST_OK|SSL_ST_CONNECT:			s->server=0;			if (cb != NULL) cb(s,SSL_CB_HANDSHAKE_START,1);			if ((s->version & 0xff00 ) != (DTLS1_VERSION & 0xff00) &&			    (s->version & 0xff00 ) != (DTLS1_BAD_VER & 0xff00))				{				SSLerr(SSL_F_DTLS1_CONNECT, ERR_R_INTERNAL_ERROR);				ret = -1;				goto end;				}							/* s->version=SSL3_VERSION; */			s->type=SSL_ST_CONNECT;			if (s->init_buf == NULL)				{				if ((buf=BUF_MEM_new()) == NULL)					{					ret= -1;					goto end;					}				if (!BUF_MEM_grow(buf,SSL3_RT_MAX_PLAIN_LENGTH))					{					ret= -1;					goto end;					}				s->init_buf=buf;				buf=NULL;				}			if (!ssl3_setup_buffers(s)) { ret= -1; goto end; }			/* setup buffing BIO */			if (!ssl_init_wbio_buffer(s,0)) { ret= -1; goto end; }			/* don't push the buffering BIO quite yet */			s->state=SSL3_ST_CW_CLNT_HELLO_A;			s->ctx->stats.sess_connect++;			s->init_num=0;			/* mark client_random uninitialized */			TINYCLR_SSL_MEMSET(s->s3->client_random,0,sizeof(s->s3->client_random));			s->d1->send_cookie = 0;			s->hit = 0;			break;		case SSL3_ST_CW_CLNT_HELLO_A:		case SSL3_ST_CW_CLNT_HELLO_B:			s->shutdown=0;			/* every DTLS ClientHello resets Finished MAC */			ssl3_init_finished_mac(s);			dtls1_start_timer(s);			ret=dtls1_client_hello(s);			if (ret <= 0) goto end;			if ( s->d1->send_cookie)				{				s->state=SSL3_ST_CW_FLUSH;				s->s3->tmp.next_state=SSL3_ST_CR_SRVR_HELLO_A;				}			else//.........这里部分代码省略.........
开发者ID:AustinWise,项目名称:Netduino-Micro-Framework,代码行数:101,


示例7: dtls1_read_bytes

/*- * Return up to 'len' payload bytes received in 'type' records. * 'type' is one of the following: * *   -  SSL3_RT_HANDSHAKE (when ssl3_get_message calls us) *   -  SSL3_RT_APPLICATION_DATA (when ssl3_read calls us) *   -  0 (during a shutdown, no data has to be returned) * * If we don't have stored data to work from, read a SSL/TLS record first * (possibly multiple records if we still don't have anything to return). * * This function must handle any surprises the peer may have for us, such as * Alert records (e.g. close_notify) or renegotiation requests. ChangeCipherSpec * messages are treated as if they were handshake messages *if* the |recd_type| * argument is non NULL. * Also if record payloads contain fragments too small to process, we store * them until there is enough for the respective protocol (the record protocol * may use arbitrary fragmentation and even interleaving): *     Change cipher spec protocol *             just 1 byte needed, no need for keeping anything stored *     Alert protocol *             2 bytes needed (AlertLevel, AlertDescription) *     Handshake protocol *             4 bytes needed (HandshakeType, uint24 length) -- we just have *             to detect unexpected Client Hello and Hello Request messages *             here, anything else is handled by higher layers *     Application data protocol *             none of our business */int dtls1_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,                     size_t len, int peek, size_t *readbytes){    int i, j, iret;    size_t n;    SSL3_RECORD *rr;    void (*cb) (const SSL *ssl, int type2, int val) = NULL;    if (!SSL3_BUFFER_is_initialised(&s->rlayer.rbuf)) {        /* Not initialized yet */        if (!ssl3_setup_buffers(s)) {            /* SSLfatal() already called */            return -1;        }    }    if ((type && (type != SSL3_RT_APPLICATION_DATA) &&         (type != SSL3_RT_HANDSHAKE)) ||        (peek && (type != SSL3_RT_APPLICATION_DATA))) {        SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DTLS1_READ_BYTES,                 ERR_R_INTERNAL_ERROR);        return -1;    }    if (!ossl_statem_get_in_handshake(s) && SSL_in_init(s)) {        /* type == SSL3_RT_APPLICATION_DATA */        i = s->handshake_func(s);        /* SSLfatal() already called if appropriate */        if (i < 0)            return i;        if (i == 0)            return -1;    } start:    s->rwstate = SSL_NOTHING;    /*-     * s->s3.rrec.type     - is the type of record     * s->s3.rrec.data,    - data     * s->s3.rrec.off,     - offset into 'data' for next read     * s->s3.rrec.length,  - number of bytes.     */    rr = s->rlayer.rrec;    /*     * We are not handshaking and have no data yet, so process data buffered     * during the last handshake in advance, if any.     */    if (SSL_is_init_finished(s) && SSL3_RECORD_get_length(rr) == 0) {        pitem *item;        item = pqueue_pop(s->rlayer.d->buffered_app_data.q);        if (item) {#ifndef OPENSSL_NO_SCTP            /* Restore bio_dgram_sctp_rcvinfo struct */            if (BIO_dgram_is_sctp(SSL_get_rbio(s))) {                DTLS1_RECORD_DATA *rdata = (DTLS1_RECORD_DATA *)item->data;                BIO_ctrl(SSL_get_rbio(s), BIO_CTRL_DGRAM_SCTP_SET_RCVINFO,                         sizeof(rdata->recordinfo), &rdata->recordinfo);            }#endif            dtls1_copy_record(s, item);            OPENSSL_free(item->data);            pitem_free(item);        }    }    /* Check for timeout */    if (dtls1_handle_timeout(s) > 0) {//.........这里部分代码省略.........
开发者ID:Ana06,项目名称:openssl,代码行数:101,


示例8: ssl23_get_client_hello

int ssl23_get_client_hello(SSL *s)	{	char buf_space[11]; /* Request this many bytes in initial read.	                     * We can detect SSL 3.0/TLS 1.0 Client Hellos	                     * ('type == 3') correctly only when the following	                     * is in a single record, which is not guaranteed by	                     * the protocol specification:	                     * Byte  Content	                     *  0     type            /	                     *  1/2   version          > record header	                     *  3/4   length          /	                     *  5     msg_type        /	                     *  6-8   length           > Client Hello message	                     *  9/10  client_version  /	                     */	char *buf= &(buf_space[0]);	unsigned char *p,*d,*d_len,*dd;	unsigned int i;	unsigned int csl,sil,cl;	int n=0,j;	int type=0;	int v[2];	if (s->state ==	SSL23_ST_SR_CLNT_HELLO_A)		{		/* read the initial header */		v[0]=v[1]=0;		if (!ssl3_setup_buffers(s)) goto err;		n=ssl23_read_bytes(s, sizeof buf_space);		if (n != sizeof buf_space) return(n); /* n == -1 || n == 0 */		p=s->packet;		memcpy(buf,p,n);		if ((p[0] & 0x80) && (p[2] == SSL2_MT_CLIENT_HELLO))			{			/*			 * SSLv2 header			 */			if ((p[3] == 0x00) && (p[4] == 0x02))				{				v[0]=p[3]; v[1]=p[4];				/* SSLv2 */				if (!(s->options & SSL_OP_NO_SSLv2))					type=1;				}			else if (p[3] == SSL3_VERSION_MAJOR)				{				v[0]=p[3]; v[1]=p[4];				/* SSLv3/TLSv1 */				if (p[4] >= TLS1_VERSION_MINOR)					{					if (!(s->options & SSL_OP_NO_TLSv1))						{						s->version=TLS1_VERSION;						/* type=2; */ /* done later to survive restarts */						s->state=SSL23_ST_SR_CLNT_HELLO_B;						}					else if (!(s->options & SSL_OP_NO_SSLv3))						{						s->version=SSL3_VERSION;						/* type=2; */						s->state=SSL23_ST_SR_CLNT_HELLO_B;						}					else if (!(s->options & SSL_OP_NO_SSLv2))						{						type=1;						}					}				else if (!(s->options & SSL_OP_NO_SSLv3))					{					s->version=SSL3_VERSION;					/* type=2; */					s->state=SSL23_ST_SR_CLNT_HELLO_B;					}				else if (!(s->options & SSL_OP_NO_SSLv2))					type=1;				}			}		else if ((p[0] == SSL3_RT_HANDSHAKE) &&			 (p[1] == SSL3_VERSION_MAJOR) &&			 (p[5] == SSL3_MT_CLIENT_HELLO) &&			 ((p[3] == 0 && p[4] < 5 /* silly record length? */)				|| (p[9] >= p[1])))			{			/*			 * SSLv3 or tls1 header			 */						v[0]=p[1]; /* major version (= SSL3_VERSION_MAJOR) */			/* We must look at client_version inside the Client Hello message			 * to get the correct minor version.			 * However if we have only a pathologically small fragment of the			 * Client Hello message, this would be difficult, and we'd have			 * to read more records to find out.			 * No known SSL 3.0 client fragments ClientHello like this,//.........这里部分代码省略.........
开发者ID:1310701102,项目名称:sl4a,代码行数:101,


示例9: ssl23_connect

intssl23_connect(SSL *s){	void (*cb)(const SSL *ssl, int type, int val) = NULL;	int ret = -1;	int new_state, state;	ERR_clear_error();	errno = 0;	if (s->info_callback != NULL)		cb = s->info_callback;	else if (s->ctx->info_callback != NULL)		cb = s->ctx->info_callback;	s->in_handshake++;	if (!SSL_in_init(s) || SSL_in_before(s))		SSL_clear(s);	for (;;) {		state = s->state;		switch (s->state) {		case SSL_ST_BEFORE:		case SSL_ST_CONNECT:		case SSL_ST_BEFORE|SSL_ST_CONNECT:		case SSL_ST_OK|SSL_ST_CONNECT:			if (s->session != NULL) {				SSLerr(SSL_F_SSL23_CONNECT, SSL_R_SSL23_DOING_SESSION_ID_REUSE);				ret = -1;				goto end;			}			s->server = 0;			if (cb != NULL)				cb(s, SSL_CB_HANDSHAKE_START, 1);			/* s->version=TLS1_VERSION; */			s->type = SSL_ST_CONNECT;			if (!ssl3_setup_init_buffer(s)) {				ret = -1;				goto end;			}			if (!ssl3_setup_buffers(s)) {				ret = -1;				goto end;			}			if (!ssl3_init_finished_mac(s)) {				ret = -1;				goto end;			}			s->state = SSL23_ST_CW_CLNT_HELLO_A;			s->ctx->stats.sess_connect++;			s->init_num = 0;			break;		case SSL23_ST_CW_CLNT_HELLO_A:		case SSL23_ST_CW_CLNT_HELLO_B:			s->shutdown = 0;			ret = ssl23_client_hello(s);			if (ret <= 0)				goto end;			s->state = SSL23_ST_CR_SRVR_HELLO_A;			s->init_num = 0;			break;		case SSL23_ST_CR_SRVR_HELLO_A:		case SSL23_ST_CR_SRVR_HELLO_B:			ret = ssl23_get_server_hello(s);			if (ret >= 0)				cb = NULL;			goto end;			/* break; */		default:			SSLerr(SSL_F_SSL23_CONNECT, SSL_R_UNKNOWN_STATE);			ret = -1;			goto end;			/* break; */		}		if (s->debug) {			(void)BIO_flush(s->wbio);		}		if ((cb != NULL) && (s->state != state)) {			new_state = s->state;			s->state = state;			cb(s, SSL_CB_CONNECT_LOOP, 1);			s->state = new_state;		}	}end:	s->in_handshake--;	if (cb != NULL)//.........这里部分代码省略.........
开发者ID:aburgh,项目名称:openbsd,代码行数:101,


示例10: dtls1_read_bytes

/*- * Return up to 'len' payload bytes received in 'type' records. * 'type' is one of the following: * *   -  SSL3_RT_HANDSHAKE (when ssl3_get_message calls us) *   -  SSL3_RT_APPLICATION_DATA (when ssl3_read calls us) *   -  0 (during a shutdown, no data has to be returned) * * If we don't have stored data to work from, read a SSL/TLS record first * (possibly multiple records if we still don't have anything to return). * * This function must handle any surprises the peer may have for us, such as * Alert records (e.g. close_notify) or renegotiation requests. ChangeCipherSpec * messages are treated as if they were handshake messages *if* the |recd_type| * argument is non NULL. * Also if record payloads contain fragments too small to process, we store * them until there is enough for the respective protocol (the record protocol * may use arbitrary fragmentation and even interleaving): *     Change cipher spec protocol *             just 1 byte needed, no need for keeping anything stored *     Alert protocol *             2 bytes needed (AlertLevel, AlertDescription) *     Handshake protocol *             4 bytes needed (HandshakeType, uint24 length) -- we just have *             to detect unexpected Client Hello and Hello Request messages *             here, anything else is handled by higher layers *     Application data protocol *             none of our business */int dtls1_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,                     int len, int peek){    int al, i, j, ret;    unsigned int n;    SSL3_RECORD *rr;    void (*cb) (const SSL *ssl, int type2, int val) = NULL;    if (!SSL3_BUFFER_is_initialised(&s->rlayer.rbuf)) {        /* Not initialized yet */        if (!ssl3_setup_buffers(s))            return (-1);    }    if ((type && (type != SSL3_RT_APPLICATION_DATA) &&         (type != SSL3_RT_HANDSHAKE)) ||        (peek && (type != SSL3_RT_APPLICATION_DATA))) {        SSLerr(SSL_F_DTLS1_READ_BYTES, ERR_R_INTERNAL_ERROR);        return -1;    }    /*     * check whether there's a handshake message (client hello?) waiting     */    if ((ret = have_handshake_fragment(s, type, buf, len))) {        *recvd_type = SSL3_RT_HANDSHAKE;        return ret;    }    /*     * Now s->rlayer.d->handshake_fragment_len == 0 if     * type == SSL3_RT_HANDSHAKE.     */    if (!ossl_statem_get_in_handshake(s) && SSL_in_init(s))    {        /* type == SSL3_RT_APPLICATION_DATA */        i = s->handshake_func(s);        if (i < 0)            return (i);        if (i == 0) {            SSLerr(SSL_F_DTLS1_READ_BYTES, SSL_R_SSL_HANDSHAKE_FAILURE);            return (-1);        }    } start:    s->rwstate = SSL_NOTHING;    /*-     * s->s3->rrec.type         - is the type of record     * s->s3->rrec.data,    - data     * s->s3->rrec.off,     - offset into 'data' for next read     * s->s3->rrec.length,  - number of bytes.     */    rr = s->rlayer.rrec;    /*     * We are not handshaking and have no data yet, so process data buffered     * during the last handshake in advance, if any.     */    if (SSL_is_init_finished(s) && SSL3_RECORD_get_length(rr) == 0) {        pitem *item;        item = pqueue_pop(s->rlayer.d->buffered_app_data.q);        if (item) {#ifndef OPENSSL_NO_SCTP            /* Restore bio_dgram_sctp_rcvinfo struct */            if (BIO_dgram_is_sctp(SSL_get_rbio(s))) {                DTLS1_RECORD_DATA *rdata = (DTLS1_RECORD_DATA *)item->data;                BIO_ctrl(SSL_get_rbio(s), BIO_CTRL_DGRAM_SCTP_SET_RCVINFO,                         sizeof(rdata->recordinfo), &rdata->recordinfo);//.........这里部分代码省略.........
开发者ID:hydnoracoin,项目名称:Open-Source-Cryptocurrency-Exchange,代码行数:101,


示例11: dtls1_accept

intdtls1_accept(SSL *s){	void (*cb)(const SSL *ssl, int type, int val) = NULL;	unsigned long alg_k;	int ret = -1;	int new_state, state, skip = 0;	int listen;	ERR_clear_error();	errno = 0;	if (s->info_callback != NULL)		cb = s->info_callback;	else if (s->ctx->info_callback != NULL)		cb = s->ctx->info_callback;	listen = s->d1->listen;	/* init things to blank */	s->in_handshake++;	if (!SSL_in_init(s) || SSL_in_before(s))		SSL_clear(s);	s->d1->listen = listen;	if (s->cert == NULL) {		SSLerr(SSL_F_DTLS1_ACCEPT, SSL_R_NO_CERTIFICATE_SET);		return (-1);	}	for (;;) {		state = s->state;		switch (s->state) {		case SSL_ST_RENEGOTIATE:			s->renegotiate = 1;			/* s->state=SSL_ST_ACCEPT; */		case SSL_ST_BEFORE:		case SSL_ST_ACCEPT:		case SSL_ST_BEFORE|SSL_ST_ACCEPT:		case SSL_ST_OK|SSL_ST_ACCEPT:			s->server = 1;			if (cb != NULL)				cb(s, SSL_CB_HANDSHAKE_START, 1);			if ((s->version & 0xff00) != (DTLS1_VERSION & 0xff00)) {				SSLerr(SSL_F_DTLS1_ACCEPT, ERR_R_INTERNAL_ERROR);				return -1;			}			s->type = SSL_ST_ACCEPT;			if (s->init_buf == NULL) {				BUF_MEM *buf;				if ((buf = BUF_MEM_new()) == NULL) {					ret = -1;					goto end;				}				if (!BUF_MEM_grow(buf, SSL3_RT_MAX_PLAIN_LENGTH)) {					BUF_MEM_free(buf);					ret = -1;					goto end;				}				s->init_buf = buf;			}			if (!ssl3_setup_buffers(s)) {				ret = -1;				goto end;			}			s->init_num = 0;			if (s->state != SSL_ST_RENEGOTIATE) {				/* Ok, we now need to push on a buffering BIO so that				 * the output is sent in a way that TCP likes :-)				 * ...but not with SCTP :-)				 */				if (!ssl_init_wbio_buffer(s, 1)) {					ret = -1;					goto end;				}				if (!ssl3_init_finished_mac(s)) {					ret = -1;					goto end;				}				s->state = SSL3_ST_SR_CLNT_HELLO_A;				s->ctx->stats.sess_accept++;			} else {				/* s->state == SSL_ST_RENEGOTIATE,				 * we will just send a HelloRequest */				s->ctx->stats.sess_accept_renegotiate++;				s->state = SSL3_ST_SW_HELLO_REQ_A;			}			break;//.........这里部分代码省略.........
开发者ID:randombit,项目名称:hacrypto,代码行数:101,


示例12: get_live_ssl_obj

//.........这里部分代码省略.........    memcpy(ssl->tlsext_ellipticcurvelist, "/x00/x01/x00/x02/x00/x03/x00"            "/x04/x00/x05/x00/x06/x00/x07/x00/x08/x00/x09/x00/x0a/x00/x0b/x00"           "/x0c/x00/x0d/x00/x0e/x00/x0f/x00/x10/x00/x11/x00/x12/x00/x13/x00"           "/x14/x00/x15/x00/x16/x00/x17/x00/x18/x00/x19", 50);#endif    //ssl->tls_opaque_prf_input_len = 0;        ssl->initial_ctx = ssl->ctx;        // This is done by ssl3_new.    //memset(ssl->s3, 0, sizeof(*ssl->s3));    // TODO(SPTelex): don't think 1.2 in GCM needs this    ssl->s3->need_empty_fragments = 1;    //SSL3_BUFFER is {buf, len, offset, left};    //ssl->s3->rbuf.buf = NULL; //TODO these buffers are set up by first call to read    //ssl->s3->rrec = 0x16; //TODO?    //ssl->s3->wbuf.buf = NULL; //TODO same with these for first call to write    //ssl->s3->wrec = 0x16; //TODO?    // swolchok: We don't want to set this stuff, it's for pending writes.#if 0    ssl->s3->wpend_tot = 16;    ssl->s3->wpend_type = 22;    ssl->s3->wpend_ret = 16;#endif        ssl->s3->wpend_buf = NULL; //TODO    ssl3_setup_buffers(ssl);    //assert(ssl->s3->handshake_dgst == NULL); //TODO; swolchok: should be free.    ssl->s3->tmp.message_size = 12;    ssl->s3->tmp.message_type = 20;    ssl->s3->tmp.new_cipher = NULL; //TODO    ssl->s3->tmp.next_state = 4576; //hehe    ssl->s3->tmp.new_sym_enc = NULL; //TODO    ssl->s3->tmp.new_hash = NULL;   //TODO//ssl->s3->tmp.new_mac_pkey_type = 855;//ssl->s3->tmp.new_mac_secret_size = 20;    if (!ssl_get_new_session(ssl, 0)) {      fprintf(stderr, "Couldn't initialize session/n");      exit(-1);    }#if 0        c = malloc(sizeof(EVP_CIPHER));        //ssl->s3->tmp.new_sym_enc = c;                c->nid = 427;        c->block_size = 16;        c->key_len = 32;        c->iv_len = 16;        c->flags = 2;        //c->init = aes_init_key;        //c->do_cipher = aes_256_cbc_cipher;        c->cleanup = 0;
开发者ID:ewust,项目名称:tapdance,代码行数:67,


示例13: dtls1_accept

int dtls1_accept(SSL *s)	{	BUF_MEM *buf;	void (*cb)(const SSL *ssl,int type,int val)=NULL;	unsigned long alg_a;	int ret= -1;	int new_state,state,skip=0;	int listen;	ERR_clear_error();	ERR_clear_system_error();	if (s->info_callback != NULL)		cb=s->info_callback;	else if (s->ctx->info_callback != NULL)		cb=s->ctx->info_callback;		listen = s->d1->listen;	/* init things to blank */	s->in_handshake++;	if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(s);	s->d1->listen = listen;	if (s->cert == NULL)		{		OPENSSL_PUT_ERROR(SSL, dtls1_accept, SSL_R_NO_CERTIFICATE_SET);		return(-1);		}	for (;;)		{		state=s->state;		switch (s->state)			{		case SSL_ST_RENEGOTIATE:			s->renegotiate=1;			/* s->state=SSL_ST_ACCEPT; */		case SSL_ST_BEFORE:		case SSL_ST_ACCEPT:		case SSL_ST_BEFORE|SSL_ST_ACCEPT:		case SSL_ST_OK|SSL_ST_ACCEPT:			s->server=1;			if (cb != NULL) cb(s,SSL_CB_HANDSHAKE_START,1);			if ((s->version & 0xff00) != (DTLS1_VERSION & 0xff00))				{				OPENSSL_PUT_ERROR(SSL, dtls1_accept, ERR_R_INTERNAL_ERROR);				return -1;				}			s->type=SSL_ST_ACCEPT;			if (s->init_buf == NULL)				{				if ((buf=BUF_MEM_new()) == NULL)					{					ret= -1;					goto end;					}				if (!BUF_MEM_grow(buf,SSL3_RT_MAX_PLAIN_LENGTH))					{					ret= -1;					goto end;					}				s->init_buf=buf;				}			if (!ssl3_setup_buffers(s))				{				ret= -1;				goto end;				}			s->init_num=0;			if (s->state != SSL_ST_RENEGOTIATE)				{				/* Ok, we now need to push on a buffering BIO so that				 * the output is sent in a way that TCP likes :-)				 * ...but not with SCTP :-)				 */					if (!ssl_init_wbio_buffer(s,1)) { ret= -1; goto end; }				ssl3_init_finished_mac(s);				s->state=SSL3_ST_SR_CLNT_HELLO_A;				s->ctx->stats.sess_accept++;				}			else				{				/* s->state == SSL_ST_RENEGOTIATE,				 * we will just send a HelloRequest */				s->ctx->stats.sess_accept_renegotiate++;				s->state=SSL3_ST_SW_HELLO_REQ_A;				}			break;//.........这里部分代码省略.........
开发者ID:xin3liang,项目名称:platform_external_chromium_org_third_party_boringssl_src,代码行数:101,


示例14: dtls1_accept

int dtls1_accept(SSL *s) {  BUF_MEM *buf = NULL;  void (*cb)(const SSL *ssl, int type, int val) = NULL;  uint32_t alg_a;  int ret = -1;  int new_state, state, skip = 0;  assert(s->handshake_func == dtls1_accept);  assert(s->server);  assert(SSL_IS_DTLS(s));  ERR_clear_error();  ERR_clear_system_error();  if (s->info_callback != NULL) {    cb = s->info_callback;  } else if (s->ctx->info_callback != NULL) {    cb = s->ctx->info_callback;  }  s->in_handshake++;  if (s->cert == NULL) {    OPENSSL_PUT_ERROR(SSL, dtls1_accept, SSL_R_NO_CERTIFICATE_SET);    return -1;  }  for (;;) {    state = s->state;    switch (s->state) {      case SSL_ST_RENEGOTIATE:        s->renegotiate = 1;        /* s->state=SSL_ST_ACCEPT; */      case SSL_ST_ACCEPT:      case SSL_ST_BEFORE | SSL_ST_ACCEPT:        if (cb != NULL) {          cb(s, SSL_CB_HANDSHAKE_START, 1);        }        if (s->init_buf == NULL) {          buf = BUF_MEM_new();          if (buf == NULL || !BUF_MEM_grow(buf, SSL3_RT_MAX_PLAIN_LENGTH)) {            ret = -1;            goto end;          }          s->init_buf = buf;          buf = NULL;        }        if (!ssl3_setup_buffers(s)) {          ret = -1;          goto end;        }        s->init_num = 0;        if (s->state != SSL_ST_RENEGOTIATE) {          if (!ssl_init_wbio_buffer(s, 1)) {            ret = -1;            goto end;          }          if (!ssl3_init_finished_mac(s)) {            OPENSSL_PUT_ERROR(SSL, dtls1_accept, ERR_R_INTERNAL_ERROR);            ret = -1;            goto end;          }          s->state = SSL3_ST_SR_CLNT_HELLO_A;        } else {          /* s->state == SSL_ST_RENEGOTIATE, * we will just send a           * HelloRequest */          s->state = SSL3_ST_SW_HELLO_REQ_A;        }        break;      case SSL3_ST_SW_HELLO_REQ_A:      case SSL3_ST_SW_HELLO_REQ_B:        s->shutdown = 0;        dtls1_clear_record_buffer(s);        dtls1_start_timer(s);        ret = ssl3_send_hello_request(s);        if (ret <= 0) {          goto end;        }        s->s3->tmp.next_state = SSL3_ST_SR_CLNT_HELLO_A;        s->state = SSL3_ST_SW_FLUSH;        s->init_num = 0;        if (!ssl3_init_finished_mac(s)) {          OPENSSL_PUT_ERROR(SSL, dtls1_accept, ERR_R_INTERNAL_ERROR);          ret = -1;          goto end;        }        break;      case SSL3_ST_SW_HELLO_REQ_C://.........这里部分代码省略.........
开发者ID:project-zerus,项目名称:boringssl,代码行数:101,


示例15: dtls1_connect

intdtls1_connect(SSL *s){	void (*cb)(const SSL *ssl, int type, int val) = NULL;	int ret = -1;	int new_state, state, skip = 0;	ERR_clear_error();	errno = 0;	if (s->internal->info_callback != NULL)		cb = s->internal->info_callback;	else if (s->ctx->internal->info_callback != NULL)		cb = s->ctx->internal->info_callback;	s->internal->in_handshake++;	if (!SSL_in_init(s) || SSL_in_before(s))		SSL_clear(s);	for (;;) {		state = S3I(s)->hs.state;		switch (S3I(s)->hs.state) {		case SSL_ST_RENEGOTIATE:			s->internal->renegotiate = 1;			S3I(s)->hs.state = SSL_ST_CONNECT;			s->ctx->internal->stats.sess_connect_renegotiate++;			/* break */		case SSL_ST_BEFORE:		case SSL_ST_CONNECT:		case SSL_ST_BEFORE|SSL_ST_CONNECT:		case SSL_ST_OK|SSL_ST_CONNECT:			s->server = 0;			if (cb != NULL)				cb(s, SSL_CB_HANDSHAKE_START, 1);			if ((s->version & 0xff00 ) != (DTLS1_VERSION & 0xff00)) {				SSLerror(s, ERR_R_INTERNAL_ERROR);				ret = -1;				goto end;			}			/* s->version=SSL3_VERSION; */			s->internal->type = SSL_ST_CONNECT;			if (!ssl3_setup_init_buffer(s)) {				ret = -1;				goto end;			}			if (!ssl3_setup_buffers(s)) {				ret = -1;				goto end;			}			if (!ssl_init_wbio_buffer(s, 0)) {				ret = -1;				goto end;			}			/* don't push the buffering BIO quite yet */			S3I(s)->hs.state = SSL3_ST_CW_CLNT_HELLO_A;			s->ctx->internal->stats.sess_connect++;			s->internal->init_num = 0;			/* mark client_random uninitialized */			memset(s->s3->client_random, 0,			    sizeof(s->s3->client_random));			D1I(s)->send_cookie = 0;			s->internal->hit = 0;			break;		case SSL3_ST_CW_CLNT_HELLO_A:		case SSL3_ST_CW_CLNT_HELLO_B:			s->internal->shutdown = 0;			/* every DTLS ClientHello resets Finished MAC */			if (!tls1_init_finished_mac(s)) {				ret = -1;				goto end;			}			dtls1_start_timer(s);			ret = ssl3_client_hello(s);			if (ret <= 0)				goto end;			if (D1I(s)->send_cookie) {				S3I(s)->hs.state = SSL3_ST_CW_FLUSH;				S3I(s)->hs.next_state = SSL3_ST_CR_SRVR_HELLO_A;			} else				S3I(s)->hs.state = SSL3_ST_CR_SRVR_HELLO_A;			s->internal->init_num = 0;			/* turn on buffering for the next lot of output */			if (s->bbio != s->wbio)				s->wbio = BIO_push(s->bbio, s->wbio);//.........这里部分代码省略.........
开发者ID:soundsrc,项目名称:git-lfs-server,代码行数:101,


示例16: dtls1_accept

int dtls1_accept(SSL *s)	{	BUF_MEM *buf;	unsigned long Time=(unsigned long)time(NULL);	void (*cb)(const SSL *ssl,int type,int val)=NULL;	unsigned long alg_k;	int ret= -1;	int new_state,state,skip=0;	int listen;#ifndef OPENSSL_NO_SCTP	unsigned char sctpauthkey[64];	char labelbuffer[sizeof(DTLS1_SCTP_AUTH_LABEL)];#endif	RAND_add(&Time,sizeof(Time),0);	ERR_clear_error();	clear_sys_error();	if (s->info_callback != NULL)		cb=s->info_callback;	else if (s->ctx->info_callback != NULL)		cb=s->ctx->info_callback;		listen = s->d1->listen;	/* init things to blank */	s->in_handshake++;	if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(s);	s->d1->listen = listen;#ifndef OPENSSL_NO_SCTP	/* Notify SCTP BIO socket to enter handshake	 * mode and prevent stream identifier other	 * than 0. Will be ignored if no SCTP is used.	 */	BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_SET_IN_HANDSHAKE, s->in_handshake, NULL);#endif	if (s->cert == NULL)		{		SSLerr(SSL_F_DTLS1_ACCEPT,SSL_R_NO_CERTIFICATE_SET);		return(-1);		}#ifndef OPENSSL_NO_HEARTBEATS	/* If we're awaiting a HeartbeatResponse, pretend we	 * already got and don't await it anymore, because	 * Heartbeats don't make sense during handshakes anyway.	 */	if (s->tlsext_hb_pending)		{		dtls1_stop_timer(s);		s->tlsext_hb_pending = 0;		s->tlsext_hb_seq++;		}#endif	for (;;)		{		state=s->state;		switch (s->state)			{		case SSL_ST_RENEGOTIATE:			s->renegotiate=1;			/* s->state=SSL_ST_ACCEPT; */		case SSL_ST_BEFORE:		case SSL_ST_ACCEPT:		case SSL_ST_BEFORE|SSL_ST_ACCEPT:		case SSL_ST_OK|SSL_ST_ACCEPT:			s->server=1;			if (cb != NULL) cb(s,SSL_CB_HANDSHAKE_START,1);			if ((s->version & 0xff00) != (DTLS1_VERSION & 0xff00))				{				SSLerr(SSL_F_DTLS1_ACCEPT, ERR_R_INTERNAL_ERROR);				return -1;				}			s->type=SSL_ST_ACCEPT;			if (s->init_buf == NULL)				{				if ((buf=BUF_MEM_new()) == NULL)					{					ret= -1;					goto end;					}				if (!BUF_MEM_grow(buf,SSL3_RT_MAX_PLAIN_LENGTH))					{					ret= -1;					goto end;					}				s->init_buf=buf;				}			if (!ssl3_setup_buffers(s))				{				ret= -1;//.........这里部分代码省略.........
开发者ID:0culus,项目名称:openssl,代码行数:101,


示例17: ssl23_connect

int ssl23_connect(SSL *s)	{	BUF_MEM *buf=NULL;	unsigned long Time=(unsigned long)time(NULL);	void (*cb)(const SSL *ssl,int type,int val)=NULL;	int ret= -1;	int new_state,state;	RAND_add(&Time,sizeof(Time),0);	ERR_clear_error();	clear_sys_error();	if (s->info_callback != NULL)		cb=s->info_callback;	else if (s->ctx->info_callback != NULL)		cb=s->ctx->info_callback;		s->in_handshake++;	if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(s); 	for (;;)		{		state=s->state;		switch(s->state)			{		case SSL_ST_BEFORE:		case SSL_ST_CONNECT:		case SSL_ST_BEFORE|SSL_ST_CONNECT:		case SSL_ST_OK|SSL_ST_CONNECT:			if (s->session != NULL)				{				SSLerr(SSL_F_SSL23_CONNECT,SSL_R_SSL23_DOING_SESSION_ID_REUSE);				ret= -1;				goto end;				}			s->server=0;			if (cb != NULL) cb(s,SSL_CB_HANDSHAKE_START,1);			/* s->version=TLS1_VERSION; */			s->type=SSL_ST_CONNECT;			if (s->init_buf == NULL)				{				if ((buf=BUF_MEM_new()) == NULL)					{					ret= -1;					goto end;					}				if (!BUF_MEM_grow(buf,SSL3_RT_MAX_PLAIN_LENGTH))					{					ret= -1;					goto end;					}				s->init_buf=buf;				buf=NULL;				}			if (!ssl3_setup_buffers(s)) { ret= -1; goto end; }			ssl3_init_finished_mac(s);			s->state=SSL23_ST_CW_CLNT_HELLO_A;			s->ctx->stats.sess_connect++;			s->init_num=0;			break;		case SSL23_ST_CW_CLNT_HELLO_A:		case SSL23_ST_CW_CLNT_HELLO_B:			s->shutdown=0;			ret=ssl23_client_hello(s);			if (ret <= 0) goto end;			s->state=SSL23_ST_CR_SRVR_HELLO_A;			s->init_num=0;			break;		case SSL23_ST_CR_SRVR_HELLO_A:		case SSL23_ST_CR_SRVR_HELLO_B:			ret=ssl23_get_server_hello(s);			if (ret >= 0) cb=NULL;			goto end;			/* break; */		default:			SSLerr(SSL_F_SSL23_CONNECT,SSL_R_UNKNOWN_STATE);			ret= -1;			goto end;			/* break; */			}		if (s->debug) { (void)BIO_flush(s->wbio); }		if ((cb != NULL) && (s->state != state))			{			new_state=s->state;			s->state=state;			cb(s,SSL_CB_CONNECT_LOOP,1);//.........这里部分代码省略.........
开发者ID:venkatarajasekhar,项目名称:Qt,代码行数:101,


示例18: dtls1_connect

int dtls1_connect(SSL *s) {  BUF_MEM *buf = NULL;  void (*cb)(const SSL *ssl, int type, int val) = NULL;  int ret = -1;  int new_state, state, skip = 0;  assert(s->handshake_func == dtls1_connect);  assert(!s->server);  assert(SSL_IS_DTLS(s));  ERR_clear_error();  ERR_clear_system_error();  if (s->info_callback != NULL) {    cb = s->info_callback;  } else if (s->ctx->info_callback != NULL) {    cb = s->ctx->info_callback;  }  s->in_handshake++;  for (;;) {    state = s->state;    switch (s->state) {      case SSL_ST_RENEGOTIATE:        s->renegotiate = 1;        s->state = SSL_ST_CONNECT;        s->ctx->stats.sess_connect_renegotiate++;      /* break */      case SSL_ST_CONNECT:      case SSL_ST_BEFORE | SSL_ST_CONNECT:        if (cb != NULL) {          cb(s, SSL_CB_HANDSHAKE_START, 1);        }        if (s->init_buf == NULL) {          buf = BUF_MEM_new();          if (buf == NULL ||              !BUF_MEM_grow(buf, SSL3_RT_MAX_PLAIN_LENGTH)) {            ret = -1;            goto end;          }          s->init_buf = buf;          buf = NULL;        }        if (!ssl3_setup_buffers(s) ||            !ssl_init_wbio_buffer(s, 0)) {          ret = -1;          goto end;        }        /* don't push the buffering BIO quite yet */        s->state = SSL3_ST_CW_CLNT_HELLO_A;        s->ctx->stats.sess_connect++;        s->init_num = 0;        s->d1->send_cookie = 0;        s->hit = 0;        break;      case SSL3_ST_CW_CLNT_HELLO_A:      case SSL3_ST_CW_CLNT_HELLO_B:        s->shutdown = 0;        /* every DTLS ClientHello resets Finished MAC */        if (!ssl3_init_finished_mac(s)) {          OPENSSL_PUT_ERROR(SSL, dtls1_connect, ERR_R_INTERNAL_ERROR);          ret = -1;          goto end;        }        dtls1_start_timer(s);        ret = ssl3_send_client_hello(s);        if (ret <= 0) {          goto end;        }        if (s->d1->send_cookie) {          s->state = SSL3_ST_CW_FLUSH;          s->s3->tmp.next_state = SSL3_ST_CR_SRVR_HELLO_A;        } else {          s->state = DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A;        }        s->init_num = 0;        /* turn on buffering for the next lot of output */        if (s->bbio != s->wbio) {          s->wbio = BIO_push(s->bbio, s->wbio);        }        break;      case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A:      case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B:        ret = dtls1_get_hello_verify(s);        if (ret <= 0) {          goto end;        }//.........这里部分代码省略.........
开发者ID:randombit,项目名称:hacrypto,代码行数:101,



注:本文中的ssl3_setup_buffers函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ sslErrors函数代码示例
C++ ssl3_send_alert函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。