apps/s_client.c:437: error: BUFFER_OVERRUN_L3
  Offset: [1, +oo] Size: [0, +oo] by call to `print_stuff`.
Showing all 25 steps of the trace


apps/s_client.c:348:7: Call
346.   
347.   	SSL_CTX_set_verify(ctx,verify,verify_callback);
348.   	if (!set_cert_stuff(ctx,cert_file,key_file))
             ^
349.   		goto end;
350.   

apps/s_cb.c:133:7: Call
  131.   		*/
  132.   
  133.   		if (SSL_CTX_use_certificate_file(ctx,cert_file,
               ^
  134.   			SSL_FILETYPE_PEM) <= 0)
  135.   			{

ssl/ssl_rsa.c:497:1: Parameter `*ctx->cert->pkeys[*].x509->signature->data`
    495.   
    496.   #ifndef NO_STDIO
    497. > int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type)
    498.   	{
    499.   	int j;

apps/s_client.c:361:13: Call
359.   	SSL_load_error_strings();
360.   
361.   	con=(SSL *)SSL_new(ctx);
                   ^
362.   /*	SSL_set_cipher_list(con,"RC4-MD5"); */
363.   

ssl/ssl_lib.c:162:1: Parameter `*ctx->cert->pkeys[*].x509->signature->data`
  160.   	}
  161.   
  162. > SSL *SSL_new(SSL_CTX *ctx)
  163.   	{
  164.   	SSL *s;

apps/s_client.c:437:5: Call
435.   				{
436.   				in_init=0;
437.   				print_stuff(bio_c_out,con,full_log);
           ^
438.   				if (full_log > 0) full_log--;
439.   

apps/s_client.c:677:1: Parameter `*s->session->peer->cert_info->key->public_key->data`
  675.   
  676.   
  677. > static void print_stuff(BIO *bio, SSL *s, int full)
  678.   	{
  679.   	X509 *peer=NULL;

apps/s_client.c:785:11: Call
  783.   	if (peer != NULL) {
  784.   		EVP_PKEY *pktmp;
  785.   		pktmp = X509_get_pubkey(peer);
                   ^
  786.   		BIO_printf(bio,"Server public key is %d bit\n",
  787.   							 EVP_PKEY_bits(pktmp));

crypto/x509/x509_cmp.c:239:1: Parameter `*x->cert_info->key->public_key->data`
    237.   	}
    238.   
    239. > EVP_PKEY *X509_get_pubkey(X509 *x)
    240.   	{
    241.   	if ((x == NULL) || (x->cert_info == NULL))

crypto/x509/x509_cmp.c:243:9: Call
    241.   	if ((x == NULL) || (x->cert_info == NULL))
    242.   		return(NULL);
    243.   	return(X509_PUBKEY_get(x->cert_info->key));
                   ^
    244.   	}
    245.   

crypto/asn1/x_pubkey.c:200:1: Parameter `*key->public_key->data`
      198.   	}
      199.   
      200. > EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key)
      201.   	{
      202.   	EVP_PKEY *ret=NULL;

crypto/asn1/x_pubkey.c:221:2: Assignment
      219.   
      220.   	type=OBJ_obj2nid(key->algor->algorithm);
      221.   	p=key->public_key->data;
              ^
      222.           j=key->public_key->length;
      223.           if ((ret=d2i_PublicKey(type,NULL,&p,(long)j)) == NULL)

crypto/asn1/x_pubkey.c:223:18: Call
      221.   	p=key->public_key->data;
      222.           j=key->public_key->length;
      223.           if ((ret=d2i_PublicKey(type,NULL,&p,(long)j)) == NULL)
                              ^
      224.   		{
      225.   		X509err(X509_F_X509_PUBKEY_GET,X509_R_ERR_ASN1_LIB);

crypto/asn1/d2i_pu.c:66:1: Parameter `**pp`
        64.   #include <openssl/x509.h>
        65.   
        66. > EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, unsigned char **pp,
        67.   	     long length)
        68.   	{

crypto/asn1/d2i_pu.c:87:22: Call
        85.   #ifndef NO_RSA
        86.   	case EVP_PKEY_RSA:
        87.   		if ((ret->pkey.rsa=d2i_RSAPublicKey(NULL,pp,length)) == NULL)
                                   ^
        88.   			{
        89.   			ASN1err(ASN1_F_D2I_PUBLICKEY,ERR_R_ASN1_LIB);

crypto/asn1/d2i_r_pu.c:71:1: Parameter `**pp`
          69.   #endif
          70.   
          71. > RSA *d2i_RSAPublicKey(RSA **a, unsigned char **pp, long length)
          72.   	{
          73.   	int i=ASN1_R_PARSING;

crypto/asn1/d2i_r_pu.c:77:2: Assignment
          75.   	M_ASN1_D2I_vars(a,RSA *,RSA_new);
          76.   
          77.   	M_ASN1_D2I_Init();
                 ^
          78.   	M_ASN1_D2I_start_sequence();
          79.   	M_ASN1_D2I_get(bs,d2i_ASN1_INTEGER);

crypto/asn1/d2i_r_pu.c:78:2: Call
          76.   
          77.   	M_ASN1_D2I_Init();
          78.   	M_ASN1_D2I_start_sequence();
                 ^
          79.   	M_ASN1_D2I_get(bs,d2i_ASN1_INTEGER);
          80.   	if ((ret->n=BN_bin2bn(bs->data,bs->length,ret->n)) == NULL) goto err_bn;

crypto/asn1/asn1_lib.c:277:1: Parameter `*c->p`
            275.   	}
            276.   
            277. > int asn1_GetSequence(ASN1_CTX *c, long *length)
            278.   	{
            279.   	unsigned char *q;

crypto/asn1/asn1_lib.c:282:9: Call
            280.   
            281.   	q=c->p;
            282.   	c->inf=ASN1_get_object(&(c->p),&(c->slen),&(c->tag),&(c->xclass),
                           ^
            283.   		*length);
            284.   	if (c->inf & 0x80)

crypto/asn1/asn1_lib.c:83:1: <Length trace>
81.   
82.   
83. > int ASN1_get_object(unsigned char **pp, long *plength, int *ptag, int *pclass,
84.   	     long omax)
85.   	{

crypto/asn1/asn1_lib.c:83:1: Parameter `**pp`
              81.   
              82.   
              83. > int ASN1_get_object(unsigned char **pp, long *plength, int *ptag, int *pclass,
              84.   	     long omax)
              85.   	{

crypto/asn1/asn1_lib.c:88:2: Assignment
              86.   	int i,ret;
              87.   	long l;
              88.   	unsigned char *p= *pp;
                     ^
              89.   	int tag,xclass,inf;
              90.   	long max=omax;

crypto/asn1/asn1_lib.c:98:3: Assignment
              96.   	if (i == V_ASN1_PRIMITIVE_TAG)
              97.   		{		/* high-tag */
              98.   		p++;
                       ^
              99.   		if (--max == 0) goto err;
              100.   		l=0;

crypto/asn1/asn1_lib.c:101:10: Array access: Offset: [1, +oo] Size: [0, +oo] by call to `print_stuff` 
              99.   		if (--max == 0) goto err;
              100.   		l=0;
              101.   		while (*p&0x80)
                              ^
              102.   			{
              103.   			l<<=7L;

int ASN1_get_object(unsigned char **pp, long *plength, int *ptag, int *pclass,
	     long omax)
	{
	int i,ret;
	long l;
	unsigned char *p= *pp;
	int tag,xclass,inf;
	long max=omax;
	if (!max) goto err;
	ret=(*p&V_ASN1_CONSTRUCTED);
	xclass=(*p&V_ASN1_PRIVATE);
	i= *p&V_ASN1_PRIMITIVE_TAG;
	if (i == V_ASN1_PRIMITIVE_TAG)
		{
		p++;
		if (--max == 0) goto err;
		l=0;
		while (*p&0x80)
			{
			l<<=7L;
			l|= *(p++)&0x7f;
			if (--max == 0) goto err;
			}
		l<<=7L;
		l|= *(p++)&0x7f;
		tag=(int)l;
		}
	else
		{
		tag=i;
		p++;
		if (--max == 0) goto err;
		}
	*ptag=tag;
	*pclass=xclass;
	if (!asn1_get_length(&p,&inf,plength,(int)max)) goto err;
#if 0
	fprintf(stderr,"p=%d + *plength=%ld > omax=%ld + *pp=%d  (%d > %d)\n",
		(int)p,*plength,omax,(int)*pp,(int)(p+ *plength),
		(int)(omax+ *pp));
#endif
#if 0
	if ((p+ *plength) > (omax+ *pp))
		{
		ASN1err(ASN1_F_ASN1_GET_OBJECT,ASN1_R_TOO_LONG);
		ret|=0x80;
		}
#endif
	*pp=p;
	return(ret|inf);
err:
	ASN1err(ASN1_F_ASN1_GET_OBJECT,ASN1_R_HEADER_TOO_LONG);
	return(0x80);
	}
['int MAIN(int argc, char **argv)\n\t{\n\tint off=0;\n\tSSL *con=NULL,*con2=NULL;\n\tint s,k,width,state=0;\n\tchar *cbuf=NULL,*sbuf=NULL;\n\tint cbuf_len,cbuf_off;\n\tint sbuf_len,sbuf_off;\n\tfd_set readfds,writefds;\n\tshort port=PORT;\n\tint full_log=1;\n\tchar *host=SSL_HOST_NAME;\n\tchar *cert_file=NULL,*key_file=NULL;\n\tchar *CApath=NULL,*CAfile=NULL,*cipher=NULL;\n\tint reconnect=0,badop=0,verify=SSL_VERIFY_NONE,bugs=0;\n\tint write_tty,read_tty,write_ssl,read_ssl,tty_on,ssl_pending;\n\tSSL_CTX *ctx=NULL;\n\tint ret=1,in_init=1,i,nbio_test=0;\n\tSSL_METHOD *meth=NULL;\n\tBIO *sbio;\n#if !defined(NO_SSL2) && !defined(NO_SSL3)\n\tmeth=SSLv23_client_method();\n#elif !defined(NO_SSL3)\n\tmeth=SSLv3_client_method();\n#elif !defined(NO_SSL2)\n\tmeth=SSLv2_client_method();\n#endif\n\tapps_startup();\n\tc_Pause=0;\n\tc_quiet=0;\n\tc_debug=0;\n\tc_showcerts=0;\n\tif (bio_err == NULL)\n\t\tbio_err=BIO_new_fp(stderr,BIO_NOCLOSE);\n\tif (\t((cbuf=Malloc(BUFSIZZ)) == NULL) ||\n\t\t((sbuf=Malloc(BUFSIZZ)) == NULL))\n\t\t{\n\t\tBIO_printf(bio_err,"out of memory\\n");\n\t\tgoto end;\n\t\t}\n\tverify_depth=0;\n\tverify_error=X509_V_OK;\n#ifdef FIONBIO\n\tc_nbio=0;\n#endif\n\targc--;\n\targv++;\n\twhile (argc >= 1)\n\t\t{\n\t\tif\t(strcmp(*argv,"-host") == 0)\n\t\t\t{\n\t\t\tif (--argc < 1) goto bad;\n\t\t\thost= *(++argv);\n\t\t\t}\n\t\telse if\t(strcmp(*argv,"-port") == 0)\n\t\t\t{\n\t\t\tif (--argc < 1) goto bad;\n\t\t\tport=atoi(*(++argv));\n\t\t\tif (port == 0) goto bad;\n\t\t\t}\n\t\telse if (strcmp(*argv,"-connect") == 0)\n\t\t\t{\n\t\t\tif (--argc < 1) goto bad;\n\t\t\tif (!extract_host_port(*(++argv),&host,NULL,&port))\n\t\t\t\tgoto bad;\n\t\t\t}\n\t\telse if\t(strcmp(*argv,"-verify") == 0)\n\t\t\t{\n\t\t\tverify=SSL_VERIFY_PEER;\n\t\t\tif (--argc < 1) goto bad;\n\t\t\tverify_depth=atoi(*(++argv));\n\t\t\tBIO_printf(bio_err,"verify depth is %d\\n",verify_depth);\n\t\t\t}\n\t\telse if\t(strcmp(*argv,"-cert") == 0)\n\t\t\t{\n\t\t\tif (--argc < 1) goto bad;\n\t\t\tcert_file= *(++argv);\n\t\t\t}\n\t\telse if\t(strcmp(*argv,"-quiet") == 0)\n\t\t\tc_quiet=1;\n\t\telse if\t(strcmp(*argv,"-pause") == 0)\n\t\t\tc_Pause=1;\n\t\telse if\t(strcmp(*argv,"-debug") == 0)\n\t\t\tc_debug=1;\n\t\telse if\t(strcmp(*argv,"-showcerts") == 0)\n\t\t\tc_showcerts=1;\n\t\telse if\t(strcmp(*argv,"-nbio_test") == 0)\n\t\t\tnbio_test=1;\n\t\telse if\t(strcmp(*argv,"-state") == 0)\n\t\t\tstate=1;\n#ifndef NO_SSL2\n\t\telse if\t(strcmp(*argv,"-ssl2") == 0)\n\t\t\tmeth=SSLv2_client_method();\n#endif\n#ifndef NO_SSL3\n\t\telse if\t(strcmp(*argv,"-ssl3") == 0)\n\t\t\tmeth=SSLv3_client_method();\n#endif\n#ifndef NO_TLS1\n\t\telse if\t(strcmp(*argv,"-tls1") == 0)\n\t\t\tmeth=TLSv1_client_method();\n#endif\n\t\telse if (strcmp(*argv,"-bugs") == 0)\n\t\t\tbugs=1;\n\t\telse if\t(strcmp(*argv,"-key") == 0)\n\t\t\t{\n\t\t\tif (--argc < 1) goto bad;\n\t\t\tkey_file= *(++argv);\n\t\t\t}\n\t\telse if\t(strcmp(*argv,"-reconnect") == 0)\n\t\t\t{\n\t\t\treconnect=5;\n\t\t\t}\n\t\telse if\t(strcmp(*argv,"-CApath") == 0)\n\t\t\t{\n\t\t\tif (--argc < 1) goto bad;\n\t\t\tCApath= *(++argv);\n\t\t\t}\n\t\telse if\t(strcmp(*argv,"-CAfile") == 0)\n\t\t\t{\n\t\t\tif (--argc < 1) goto bad;\n\t\t\tCAfile= *(++argv);\n\t\t\t}\n\t\telse if (strcmp(*argv,"-no_tls1") == 0)\n\t\t\toff|=SSL_OP_NO_TLSv1;\n\t\telse if (strcmp(*argv,"-no_ssl3") == 0)\n\t\t\toff|=SSL_OP_NO_SSLv3;\n\t\telse if (strcmp(*argv,"-no_ssl2") == 0)\n\t\t\toff|=SSL_OP_NO_SSLv2;\n\t\telse if\t(strcmp(*argv,"-cipher") == 0)\n\t\t\t{\n\t\t\tif (--argc < 1) goto bad;\n\t\t\tcipher= *(++argv);\n\t\t\t}\n#ifdef FIONBIO\n\t\telse if (strcmp(*argv,"-nbio") == 0)\n\t\t\t{ c_nbio=1; }\n#endif\n\t\telse\n\t\t\t{\n\t\t\tBIO_printf(bio_err,"unknown option %s\\n",*argv);\n\t\t\tbadop=1;\n\t\t\tbreak;\n\t\t\t}\n\t\targc--;\n\t\targv++;\n\t\t}\n\tif (badop)\n\t\t{\nbad:\n\t\tsc_usage();\n\t\tgoto end;\n\t\t}\n\tif (bio_c_out == NULL)\n\t\t{\n\t\tif (c_quiet)\n\t\t\t{\n\t\t\tbio_c_out=BIO_new(BIO_s_null());\n\t\t\t}\n\t\telse\n\t\t\t{\n\t\t\tif (bio_c_out == NULL)\n\t\t\t\tbio_c_out=BIO_new_fp(stdout,BIO_NOCLOSE);\n\t\t\t}\n\t\t}\n\tSSLeay_add_ssl_algorithms();\n\tctx=SSL_CTX_new(meth);\n\tif (ctx == NULL)\n\t\t{\n\t\tERR_print_errors(bio_err);\n\t\tgoto end;\n\t\t}\n\tif (bugs)\n\t\tSSL_CTX_set_options(ctx,SSL_OP_ALL|off);\n\telse\n\t\tSSL_CTX_set_options(ctx,off);\n\tif (state) SSL_CTX_set_info_callback(ctx,apps_ssl_info_callback);\n\tif (cipher != NULL)\n\t\tSSL_CTX_set_cipher_list(ctx,cipher);\n#if 0\n\telse\n\t\tSSL_CTX_set_cipher_list(ctx,getenv("SSL_CIPHER"));\n#endif\n\tSSL_CTX_set_verify(ctx,verify,verify_callback);\n\tif (!set_cert_stuff(ctx,cert_file,key_file))\n\t\tgoto end;\n\tif ((!SSL_CTX_load_verify_locations(ctx,CAfile,CApath)) ||\n\t\t(!SSL_CTX_set_default_verify_paths(ctx)))\n\t\t{\n\t\tERR_print_errors(bio_err);\n\t\t}\n\tSSL_load_error_strings();\n\tcon=(SSL *)SSL_new(ctx);\nre_start:\n\tif (init_client(&s,host,port) == 0)\n\t\t{\n\t\tBIO_printf(bio_err,"connect:errno=%d\\n",get_last_socket_error());\n\t\tSHUTDOWN(s);\n\t\tgoto end;\n\t\t}\n\tBIO_printf(bio_c_out,"CONNECTED(%08X)\\n",s);\n#ifdef FIONBIO\n\tif (c_nbio)\n\t\t{\n\t\tunsigned long l=1;\n\t\tBIO_printf(bio_c_out,"turning on non blocking io\\n");\n\t\tif (BIO_socket_ioctl(s,FIONBIO,&l) < 0)\n\t\t\t{\n\t\t\tERR_print_errors(bio_err);\n\t\t\tgoto end;\n\t\t\t}\n\t\t}\n#endif\n\tif (c_Pause & 0x01) con->debug=1;\n\tsbio=BIO_new_socket(s,BIO_NOCLOSE);\n\tif (nbio_test)\n\t\t{\n\t\tBIO *test;\n\t\ttest=BIO_new(BIO_f_nbio_test());\n\t\tsbio=BIO_push(test,sbio);\n\t\t}\n\tif (c_debug)\n\t\t{\n\t\tcon->debug=1;\n\t\tBIO_set_callback(sbio,bio_dump_cb);\n\t\tBIO_set_callback_arg(sbio,bio_c_out);\n\t\t}\n\tSSL_set_bio(con,sbio,sbio);\n\tSSL_set_connect_state(con);\n\twidth=SSL_get_fd(con)+1;\n\tread_tty=1;\n\twrite_tty=0;\n\ttty_on=0;\n\tread_ssl=1;\n\twrite_ssl=1;\n\tcbuf_len=0;\n\tcbuf_off=0;\n\tsbuf_len=0;\n\tsbuf_off=0;\n\tfor (;;)\n\t\t{\n\t\tFD_ZERO(&readfds);\n\t\tFD_ZERO(&writefds);\n\t\tif (SSL_in_init(con) && !SSL_total_renegotiations(con))\n\t\t\t{\n\t\t\tin_init=1;\n\t\t\ttty_on=0;\n\t\t\t}\n\t\telse\n\t\t\t{\n\t\t\ttty_on=1;\n\t\t\tif (in_init)\n\t\t\t\t{\n\t\t\t\tin_init=0;\n\t\t\t\tprint_stuff(bio_c_out,con,full_log);\n\t\t\t\tif (full_log > 0) full_log--;\n\t\t\t\tif (reconnect)\n\t\t\t\t\t{\n\t\t\t\t\treconnect--;\n\t\t\t\t\tBIO_printf(bio_c_out,"drop connection and then reconnect\\n");\n\t\t\t\t\tSSL_shutdown(con);\n\t\t\t\t\tSSL_set_connect_state(con);\n\t\t\t\t\tSHUTDOWN(SSL_get_fd(con));\n\t\t\t\t\tgoto re_start;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tssl_pending = read_ssl && SSL_pending(con);\n\t\tif (!ssl_pending)\n\t\t\t{\n#ifndef WINDOWS\n\t\t\tif (tty_on)\n\t\t\t\t{\n\t\t\t\tif (read_tty)  FD_SET(fileno(stdin),&readfds);\n\t\t\t\tif (write_tty) FD_SET(fileno(stdout),&writefds);\n\t\t\t\t}\n#endif\n\t\t\tif (read_ssl)\n\t\t\t\tFD_SET(SSL_get_fd(con),&readfds);\n\t\t\tif (write_ssl)\n\t\t\t\tFD_SET(SSL_get_fd(con),&writefds);\n\t\t\ti=select(width,(void *)&readfds,(void *)&writefds,\n\t\t\t\t NULL,NULL);\n\t\t\tif ( i < 0)\n\t\t\t\t{\n\t\t\t\tBIO_printf(bio_err,"bad select %d\\n",\n\t\t\t\tget_last_socket_error());\n\t\t\t\tgoto shut;\n\t\t\t\t}\n\t\t\t}\n\t\tif (!ssl_pending && FD_ISSET(SSL_get_fd(con),&writefds))\n\t\t\t{\n\t\t\tk=SSL_write(con,&(cbuf[cbuf_off]),\n\t\t\t\t(unsigned int)cbuf_len);\n\t\t\tswitch (SSL_get_error(con,k))\n\t\t\t\t{\n\t\t\tcase SSL_ERROR_NONE:\n\t\t\t\tcbuf_off+=k;\n\t\t\t\tcbuf_len-=k;\n\t\t\t\tif (k <= 0) goto end;\n\t\t\t\tif (cbuf_len <= 0)\n\t\t\t\t\t{\n\t\t\t\t\tread_tty=1;\n\t\t\t\t\twrite_ssl=0;\n\t\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\tread_tty=0;\n\t\t\t\t\twrite_ssl=1;\n\t\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase SSL_ERROR_WANT_WRITE:\n\t\t\t\tBIO_printf(bio_c_out,"write W BLOCK\\n");\n\t\t\t\twrite_ssl=1;\n\t\t\t\tread_tty=0;\n\t\t\t\tbreak;\n\t\t\tcase SSL_ERROR_WANT_READ:\n\t\t\t\tBIO_printf(bio_c_out,"write R BLOCK\\n");\n\t\t\t\twrite_tty=0;\n\t\t\t\tread_ssl=1;\n\t\t\t\twrite_ssl=0;\n\t\t\t\tbreak;\n\t\t\tcase SSL_ERROR_WANT_X509_LOOKUP:\n\t\t\t\tBIO_printf(bio_c_out,"write X BLOCK\\n");\n\t\t\t\tbreak;\n\t\t\tcase SSL_ERROR_ZERO_RETURN:\n\t\t\t\tif (cbuf_len != 0)\n\t\t\t\t\t{\n\t\t\t\t\tBIO_printf(bio_c_out,"shutdown\\n");\n\t\t\t\t\tgoto shut;\n\t\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\tread_tty=1;\n\t\t\t\t\twrite_ssl=0;\n\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\tcase SSL_ERROR_SYSCALL:\n\t\t\t\tif ((k != 0) || (cbuf_len != 0))\n\t\t\t\t\t{\n\t\t\t\t\tBIO_printf(bio_err,"write:errno=%d\\n",\n\t\t\t\t\t\tget_last_socket_error());\n\t\t\t\t\tgoto shut;\n\t\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\tread_tty=1;\n\t\t\t\t\twrite_ssl=0;\n\t\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase SSL_ERROR_SSL:\n\t\t\t\tERR_print_errors(bio_err);\n\t\t\t\tgoto shut;\n\t\t\t\t}\n\t\t\t}\n#ifndef WINDOWS\n\t\telse if (!ssl_pending && FD_ISSET(fileno(stdout),&writefds))\n\t\t\t{\n\t\t\ti=write(fileno(stdout),&(sbuf[sbuf_off]),sbuf_len);\n\t\t\tif (i <= 0)\n\t\t\t\t{\n\t\t\t\tBIO_printf(bio_c_out,"DONE\\n");\n\t\t\t\tgoto shut;\n\t\t\t\t}\n\t\t\tsbuf_len-=i;;\n\t\t\tsbuf_off+=i;\n\t\t\tif (sbuf_len <= 0)\n\t\t\t\t{\n\t\t\t\tread_ssl=1;\n\t\t\t\twrite_tty=0;\n\t\t\t\t}\n\t\t\t}\n#endif\n\t\telse if (ssl_pending || FD_ISSET(SSL_get_fd(con),&readfds))\n\t\t\t{\n#ifdef RENEG\n{ static int iiii; if (++iiii == 52) { SSL_renegotiate(con); iiii=0; } }\n#endif\n#if 1\n\t\t\tk=SSL_read(con,sbuf,1024   );\n#else\n\t\t\tk=SSL_read(con,sbuf,16);\n{ char zbuf[10240];\nprintf("read=%d pending=%d peek=%d\\n",k,SSL_pending(con),SSL_peek(con,zbuf,10240));\n}\n#endif\n\t\t\tswitch (SSL_get_error(con,k))\n\t\t\t\t{\n\t\t\tcase SSL_ERROR_NONE:\n\t\t\t\tif (k <= 0)\n\t\t\t\t\tgoto end;\n\t\t\t\tsbuf_off=0;\n\t\t\t\tsbuf_len=k;\n\t\t\t\tread_ssl=0;\n\t\t\t\twrite_tty=1;\n\t\t\t\tbreak;\n\t\t\tcase SSL_ERROR_WANT_WRITE:\n\t\t\t\tBIO_printf(bio_c_out,"read W BLOCK\\n");\n\t\t\t\twrite_ssl=1;\n\t\t\t\tread_tty=0;\n\t\t\t\tbreak;\n\t\t\tcase SSL_ERROR_WANT_READ:\n\t\t\t\tBIO_printf(bio_c_out,"read R BLOCK\\n");\n\t\t\t\twrite_tty=0;\n\t\t\t\tread_ssl=1;\n\t\t\t\tif ((read_tty == 0) && (write_ssl == 0))\n\t\t\t\t\twrite_ssl=1;\n\t\t\t\tbreak;\n\t\t\tcase SSL_ERROR_WANT_X509_LOOKUP:\n\t\t\t\tBIO_printf(bio_c_out,"read X BLOCK\\n");\n\t\t\t\tbreak;\n\t\t\tcase SSL_ERROR_SYSCALL:\n\t\t\t\tBIO_printf(bio_err,"read:errno=%d\\n",get_last_socket_error());\n\t\t\t\tgoto shut;\n\t\t\tcase SSL_ERROR_ZERO_RETURN:\n\t\t\t\tBIO_printf(bio_c_out,"closed\\n");\n\t\t\t\tgoto shut;\n\t\t\tcase SSL_ERROR_SSL:\n\t\t\t\tERR_print_errors(bio_err);\n\t\t\t\tgoto shut;\n\t\t\t\t}\n\t\t\t}\n#ifndef WINDOWS\n\t\telse if (FD_ISSET(fileno(stdin),&readfds))\n\t\t\t{\n\t\t\ti=read(fileno(stdin),cbuf,BUFSIZZ);\n\t\t\tif ((!c_quiet) && ((i <= 0) || (cbuf[0] == \'Q\')))\n\t\t\t\t{\n\t\t\t\tBIO_printf(bio_err,"DONE\\n");\n\t\t\t\tgoto shut;\n\t\t\t\t}\n\t\t\tif ((!c_quiet) && (cbuf[0] == \'R\'))\n\t\t\t\t{\n\t\t\t\tBIO_printf(bio_err,"RENEGOTIATING\\n");\n\t\t\t\tSSL_renegotiate(con);\n\t\t\t\tcbuf_len=0;\n\t\t\t\t}\n\t\t\telse\n\t\t\t\t{\n\t\t\t\tcbuf_len=i;\n\t\t\t\tcbuf_off=0;\n\t\t\t\t}\n\t\t\twrite_ssl=1;\n\t\t\tread_tty=0;\n\t\t\t}\n#endif\n\t\t}\nshut:\n\tSSL_shutdown(con);\n\tSHUTDOWN(SSL_get_fd(con));\n\tret=0;\nend:\n\tif (con != NULL) SSL_free(con);\n\tif (con2 != NULL) SSL_free(con2);\n\tif (ctx != NULL) SSL_CTX_free(ctx);\n\tif (cbuf != NULL) { memset(cbuf,0,BUFSIZZ); Free(cbuf); }\n\tif (sbuf != NULL) { memset(sbuf,0,BUFSIZZ); Free(sbuf); }\n\tif (bio_c_out != NULL)\n\t\t{\n\t\tBIO_free(bio_c_out);\n\t\tbio_c_out=NULL;\n\t\t}\n\tEXIT(ret);\n\t}', 'int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type)\n\t{\n\tint j;\n\tBIO *in;\n\tint ret=0;\n\tX509 *x=NULL;\n\tin=BIO_new(BIO_s_file_internal());\n\tif (in == NULL)\n\t\t{\n\t\tSSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE,ERR_R_BUF_LIB);\n\t\tgoto end;\n\t\t}\n\tif (BIO_read_filename(in,file) <= 0)\n\t\t{\n\t\tSSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE,ERR_R_SYS_LIB);\n\t\tgoto end;\n\t\t}\n\tif (type == SSL_FILETYPE_ASN1)\n\t\t{\n\t\tj=ERR_R_ASN1_LIB;\n\t\tx=d2i_X509_bio(in,NULL);\n\t\t}\n\telse if (type == SSL_FILETYPE_PEM)\n\t\t{\n\t\tj=ERR_R_PEM_LIB;\n\t\tx=PEM_read_bio_X509(in,NULL,ctx->default_passwd_callback);\n\t\t}\n\telse\n\t\t{\n\t\tSSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE,SSL_R_BAD_SSL_FILETYPE);\n\t\tgoto end;\n\t\t}\n\tif (x == NULL)\n\t\t{\n\t\tSSLerr(SSL_F_SSL_CTX_USE_CERTIFICATE_FILE,j);\n\t\tgoto end;\n\t\t}\n\tret=SSL_CTX_use_certificate(ctx,x);\nend:\n\tif (x != NULL) X509_free(x);\n\tif (in != NULL) BIO_free(in);\n\treturn(ret);\n\t}', 'SSL *SSL_new(SSL_CTX *ctx)\n\t{\n\tSSL *s;\n\tif (ctx == NULL)\n\t\t{\n\t\tSSLerr(SSL_F_SSL_NEW,SSL_R_NULL_SSL_CTX);\n\t\treturn(NULL);\n\t\t}\n\tif (ctx->method == NULL)\n\t\t{\n\t\tSSLerr(SSL_F_SSL_NEW,SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION);\n\t\treturn(NULL);\n\t\t}\n\ts=(SSL *)Malloc(sizeof(SSL));\n\tif (s == NULL) goto err;\n\tmemset(s,0,sizeof(SSL));\n\tif (ctx->cert != NULL)\n\t\t{\n\t\ts->cert = ssl_cert_dup(ctx->cert);\n\t\tif (s->cert == NULL)\n\t\t\tgoto err;\n\t\t}\n\telse\n\t\ts->cert=NULL;\n\ts->sid_ctx_length=ctx->sid_ctx_length;\n\tmemcpy(&s->sid_ctx,&ctx->sid_ctx,sizeof(s->sid_ctx));\n\ts->verify_mode=ctx->verify_mode;\n\ts->verify_depth=ctx->verify_depth;\n\ts->verify_callback=ctx->default_verify_callback;\n\tCRYPTO_add(&ctx->references,1,CRYPTO_LOCK_SSL_CTX);\n\ts->ctx=ctx;\n\ts->verify_result=X509_V_OK;\n\ts->method=ctx->method;\n\tif (!s->method->ssl_new(s))\n\t\tgoto err;\n\ts->quiet_shutdown=ctx->quiet_shutdown;\n\ts->references=1;\n\ts->server=(ctx->method->ssl_accept == ssl_undefined_function)?0:1;\n\ts->options=ctx->options;\n\tSSL_clear(s);\n\tCRYPTO_new_ex_data(ssl_meth,(char *)s,&s->ex_data);\n\treturn(s);\nerr:\n\tif (s != NULL)\n\t\t{\n\t\tif (s->cert != NULL)\n\t\t\tssl_cert_free(s->cert);\n\t\tif (s->ctx != NULL)\n\t\t\tSSL_CTX_free(s->ctx);\n\t\tFree(s);\n\t\t}\n\tSSLerr(SSL_F_SSL_NEW,ERR_R_MALLOC_FAILURE);\n\treturn(NULL);\n\t}', 'static void print_stuff(BIO *bio, SSL *s, int full)\n\t{\n\tX509 *peer=NULL;\n\tchar *p;\n\tstatic char *space="                ";\n\tchar buf[BUFSIZ];\n\tSTACK_OF(X509) *sk;\n\tSTACK_OF(X509_NAME) *sk2;\n\tSSL_CIPHER *c;\n\tX509_NAME *xn;\n\tint j,i;\n\tif (full)\n\t\t{\n\t\tint got_a_chain = 0;\n\t\tsk=SSL_get_peer_cert_chain(s);\n\t\tif (sk != NULL)\n\t\t\t{\n\t\t\tgot_a_chain = 1;\n\t\t\tBIO_printf(bio,"---\\nCertificate chain\\n");\n\t\t\tfor (i=0; i<sk_X509_num(sk); i++)\n\t\t\t\t{\n\t\t\t\tX509_NAME_oneline(X509_get_subject_name(\n\t\t\t\t\tsk_X509_value(sk,i)),buf,BUFSIZ);\n\t\t\t\tBIO_printf(bio,"%2d s:%s\\n",i,buf);\n\t\t\t\tX509_NAME_oneline(X509_get_issuer_name(\n\t\t\t\t\tsk_X509_value(sk,i)),buf,BUFSIZ);\n\t\t\t\tBIO_printf(bio,"   i:%s\\n",buf);\n\t\t\t\tif (c_showcerts)\n\t\t\t\t\tPEM_write_bio_X509(bio,sk_X509_value(sk,i));\n\t\t\t\t}\n\t\t\t}\n\t\tBIO_printf(bio,"---\\n");\n\t\tpeer=SSL_get_peer_certificate(s);\n\t\tif (peer != NULL)\n\t\t\t{\n\t\t\tBIO_printf(bio,"Server certificate\\n");\n\t\t\tif (!(c_showcerts && got_a_chain))\n\t\t\t\tPEM_write_bio_X509(bio,peer);\n\t\t\tX509_NAME_oneline(X509_get_subject_name(peer),\n\t\t\t\tbuf,BUFSIZ);\n\t\t\tBIO_printf(bio,"subject=%s\\n",buf);\n\t\t\tX509_NAME_oneline(X509_get_issuer_name(peer),\n\t\t\t\tbuf,BUFSIZ);\n\t\t\tBIO_printf(bio,"issuer=%s\\n",buf);\n\t\t\t}\n\t\telse\n\t\t\tBIO_printf(bio,"no peer certificate available\\n");\n\t\tsk2=SSL_get_client_CA_list(s);\n\t\tif ((sk2 != NULL) && (sk_X509_NAME_num(sk2) > 0))\n\t\t\t{\n\t\t\tBIO_printf(bio,"---\\nAcceptable client certificate CA names\\n");\n\t\t\tfor (i=0; i<sk_X509_NAME_num(sk2); i++)\n\t\t\t\t{\n\t\t\t\txn=sk_X509_NAME_value(sk2,i);\n\t\t\t\tX509_NAME_oneline(xn,buf,sizeof(buf));\n\t\t\t\tBIO_write(bio,buf,strlen(buf));\n\t\t\t\tBIO_write(bio,"\\n",1);\n\t\t\t\t}\n\t\t\t}\n\t\telse\n\t\t\t{\n\t\t\tBIO_printf(bio,"---\\nNo client certificate CA names sent\\n");\n\t\t\t}\n\t\tp=SSL_get_shared_ciphers(s,buf,BUFSIZ);\n\t\tif (p != NULL)\n\t\t\t{\n\t\t\tBIO_printf(bio,"---\\nCiphers common between both SSL endpoints:\\n");\n\t\t\tj=i=0;\n\t\t\twhile (*p)\n\t\t\t\t{\n\t\t\t\tif (*p == \':\')\n\t\t\t\t\t{\n\t\t\t\t\tBIO_write(bio,space,15-j%25);\n\t\t\t\t\ti++;\n\t\t\t\t\tj=0;\n\t\t\t\t\tBIO_write(bio,((i%3)?" ":"\\n"),1);\n\t\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\tBIO_write(bio,p,1);\n\t\t\t\t\tj++;\n\t\t\t\t\t}\n\t\t\t\tp++;\n\t\t\t\t}\n\t\t\tBIO_write(bio,"\\n",1);\n\t\t\t}\n\t\tBIO_printf(bio,"---\\nSSL handshake has read %ld bytes and written %ld bytes\\n",\n\t\t\tBIO_number_read(SSL_get_rbio(s)),\n\t\t\tBIO_number_written(SSL_get_wbio(s)));\n\t\t}\n\tBIO_printf(bio,((s->hit)?"---\\nReused, ":"---\\nNew, "));\n\tc=SSL_get_current_cipher(s);\n\tBIO_printf(bio,"%s, Cipher is %s\\n",\n\t\tSSL_CIPHER_get_version(c),\n\t\tSSL_CIPHER_get_name(c));\n\tif (peer != NULL) {\n\t\tEVP_PKEY *pktmp;\n\t\tpktmp = X509_get_pubkey(peer);\n\t\tBIO_printf(bio,"Server public key is %d bit\\n",\n\t\t\t\t\t\t\t EVP_PKEY_bits(pktmp));\n\t\tEVP_PKEY_free(pktmp);\n\t}\n\tSSL_SESSION_print(bio,SSL_get_session(s));\n\tBIO_printf(bio,"---\\n");\n\tif (peer != NULL)\n\t\tX509_free(peer);\n\t}', 'EVP_PKEY *X509_get_pubkey(X509 *x)\n\t{\n\tif ((x == NULL) || (x->cert_info == NULL))\n\t\treturn(NULL);\n\treturn(X509_PUBKEY_get(x->cert_info->key));\n\t}', 'EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key)\n\t{\n\tEVP_PKEY *ret=NULL;\n\tlong j;\n\tint type;\n\tunsigned char *p;\n#ifndef NO_DSA\n\tX509_ALGOR *a;\n#endif\n\tif (key == NULL) goto err;\n\tif (key->pkey != NULL)\n\t    {\n\t    CRYPTO_add(&key->pkey->references,1,CRYPTO_LOCK_EVP_PKEY);\n\t    return(key->pkey);\n\t    }\n\tif (key->public_key == NULL) goto err;\n\ttype=OBJ_obj2nid(key->algor->algorithm);\n\tp=key->public_key->data;\n        j=key->public_key->length;\n        if ((ret=d2i_PublicKey(type,NULL,&p,(long)j)) == NULL)\n\t\t{\n\t\tX509err(X509_F_X509_PUBKEY_GET,X509_R_ERR_ASN1_LIB);\n\t\tgoto err;\n\t\t}\n\tret->save_parameters=0;\n#ifndef NO_DSA\n\ta=key->algor;\n\tif (ret->type == EVP_PKEY_DSA)\n\t\t{\n\t\tif (a->parameter->type == V_ASN1_SEQUENCE)\n\t\t\t{\n\t\t\tret->pkey.dsa->write_params=0;\n\t\t\tp=a->parameter->value.sequence->data;\n\t\t\tj=a->parameter->value.sequence->length;\n\t\t\tif (!d2i_DSAparams(&ret->pkey.dsa,&p,(long)j))\n\t\t\t\tgoto err;\n\t\t\t}\n\t\tret->save_parameters=1;\n\t\t}\n#endif\n\tkey->pkey=ret;\n\tCRYPTO_add(&ret->references,1,CRYPTO_LOCK_EVP_PKEY);\n\treturn(ret);\nerr:\n\tif (ret != NULL)\n\t\tEVP_PKEY_free(ret);\n\treturn(NULL);\n\t}', 'EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, unsigned char **pp,\n\t     long length)\n\t{\n\tEVP_PKEY *ret;\n\tif ((a == NULL) || (*a == NULL))\n\t\t{\n\t\tif ((ret=EVP_PKEY_new()) == NULL)\n\t\t\t{\n\t\t\tASN1err(ASN1_F_D2I_PUBLICKEY,ERR_R_EVP_LIB);\n\t\t\treturn(NULL);\n\t\t\t}\n\t\t}\n\telse\tret= *a;\n\tret->save_type=type;\n\tret->type=EVP_PKEY_type(type);\n\tswitch (ret->type)\n\t\t{\n#ifndef NO_RSA\n\tcase EVP_PKEY_RSA:\n\t\tif ((ret->pkey.rsa=d2i_RSAPublicKey(NULL,pp,length)) == NULL)\n\t\t\t{\n\t\t\tASN1err(ASN1_F_D2I_PUBLICKEY,ERR_R_ASN1_LIB);\n\t\t\tgoto err;\n\t\t\t}\n\t\tbreak;\n#endif\n#ifndef NO_DSA\n\tcase EVP_PKEY_DSA:\n\t\tif ((ret->pkey.dsa=d2i_DSAPublicKey(NULL,pp,length)) == NULL)\n\t\t\t{\n\t\t\tASN1err(ASN1_F_D2I_PUBLICKEY,ERR_R_ASN1_LIB);\n\t\t\tgoto err;\n\t\t\t}\n\t\tbreak;\n#endif\n\tdefault:\n\t\tASN1err(ASN1_F_D2I_PUBLICKEY,ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE);\n\t\tgoto err;\n\t\t}\n\tif (a != NULL) (*a)=ret;\n\treturn(ret);\nerr:\n\tif ((ret != NULL) && ((a == NULL) || (*a != ret))) EVP_PKEY_free(ret);\n\treturn(NULL);\n\t}', 'RSA *d2i_RSAPublicKey(RSA **a, unsigned char **pp, long length)\n\t{\n\tint i=ASN1_R_PARSING;\n\tASN1_INTEGER *bs=NULL;\n\tM_ASN1_D2I_vars(a,RSA *,RSA_new);\n\tM_ASN1_D2I_Init();\n\tM_ASN1_D2I_start_sequence();\n\tM_ASN1_D2I_get(bs,d2i_ASN1_INTEGER);\n\tif ((ret->n=BN_bin2bn(bs->data,bs->length,ret->n)) == NULL) goto err_bn;\n\tM_ASN1_D2I_get(bs,d2i_ASN1_INTEGER);\n\tif ((ret->e=BN_bin2bn(bs->data,bs->length,ret->e)) == NULL) goto err_bn;\n\tASN1_INTEGER_free(bs);\n\tbs=NULL;\n\tM_ASN1_D2I_Finish_2(a);\nerr_bn:\n\ti=ERR_R_BN_LIB;\nerr:\n\tASN1err(ASN1_F_D2I_RSAPUBLICKEY,i);\n\tif ((ret != NULL) && ((a == NULL) || (*a != ret))) RSA_free(ret);\n\tif (bs != NULL) ASN1_INTEGER_free(bs);\n\treturn(NULL);\n\t}', 'int asn1_GetSequence(ASN1_CTX *c, long *length)\n\t{\n\tunsigned char *q;\n\tq=c->p;\n\tc->inf=ASN1_get_object(&(c->p),&(c->slen),&(c->tag),&(c->xclass),\n\t\t*length);\n\tif (c->inf & 0x80)\n\t\t{\n\t\tc->error=ERR_R_BAD_GET_ASN1_OBJECT_CALL;\n\t\treturn(0);\n\t\t}\n\tif (c->tag != V_ASN1_SEQUENCE)\n\t\t{\n\t\tc->error=ERR_R_EXPECTING_AN_ASN1_SEQUENCE;\n\t\treturn(0);\n\t\t}\n\t(*length)-=(c->p-q);\n\tif (c->max && (*length < 0))\n\t\t{\n\t\tc->error=ERR_R_ASN1_LENGTH_MISMATCH;\n\t\treturn(0);\n\t\t}\n\tif (c->inf == (1|V_ASN1_CONSTRUCTED))\n\t\tc->slen= *length+ *(c->pp)-c->p;\n\tc->eos=0;\n\treturn(1);\n\t}', 'int ASN1_get_object(unsigned char **pp, long *plength, int *ptag, int *pclass,\n\t     long omax)\n\t{\n\tint i,ret;\n\tlong l;\n\tunsigned char *p= *pp;\n\tint tag,xclass,inf;\n\tlong max=omax;\n\tif (!max) goto err;\n\tret=(*p&V_ASN1_CONSTRUCTED);\n\txclass=(*p&V_ASN1_PRIVATE);\n\ti= *p&V_ASN1_PRIMITIVE_TAG;\n\tif (i == V_ASN1_PRIMITIVE_TAG)\n\t\t{\n\t\tp++;\n\t\tif (--max == 0) goto err;\n\t\tl=0;\n\t\twhile (*p&0x80)\n\t\t\t{\n\t\t\tl<<=7L;\n\t\t\tl|= *(p++)&0x7f;\n\t\t\tif (--max == 0) goto err;\n\t\t\t}\n\t\tl<<=7L;\n\t\tl|= *(p++)&0x7f;\n\t\ttag=(int)l;\n\t\t}\n\telse\n\t\t{\n\t\ttag=i;\n\t\tp++;\n\t\tif (--max == 0) goto err;\n\t\t}\n\t*ptag=tag;\n\t*pclass=xclass;\n\tif (!asn1_get_length(&p,&inf,plength,(int)max)) goto err;\n#if 0\n\tfprintf(stderr,"p=%d + *plength=%ld > omax=%ld + *pp=%d  (%d > %d)\\n",\n\t\t(int)p,*plength,omax,(int)*pp,(int)(p+ *plength),\n\t\t(int)(omax+ *pp));\n#endif\n#if 0\n\tif ((p+ *plength) > (omax+ *pp))\n\t\t{\n\t\tASN1err(ASN1_F_ASN1_GET_OBJECT,ASN1_R_TOO_LONG);\n\t\tret|=0x80;\n\t\t}\n#endif\n\t*pp=p;\n\treturn(ret|inf);\nerr:\n\tASN1err(ASN1_F_ASN1_GET_OBJECT,ASN1_R_HEADER_TOO_LONG);\n\treturn(0x80);\n\t}']