⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ssltest.c

📁 mediastreamer2是开源的网络传输媒体流的库
💻 C
📖 第 1 页 / 共 4 页
字号:
					   through `letters' and keep the					   elements having the value 2 as set,					   and clear all the others. */					fprintf(stderr, "  Certificate proxy rights = %*.*s", i, i, s);					while(i-- > 0)						{						int c = *s++;						if (isascii(c) && isalpha(c))							{							if (islower(c))								c = toupper(c);							letters[c - 'A']++;							}						}					for (i = 0; i < 26; i++)						if (letters[i] < 2)							letters[i] = 0;						else							letters[i] = 1;					}				found_any = 0;				fprintf(stderr,					", resulting proxy rights = ");				for(i = 0; i < 26; i++)					if (letters[i])						{						fprintf(stderr, "%c", i + 'A');						found_any = 1;						}				if (!found_any)					fprintf(stderr, "none");				fprintf(stderr, "\n");				PROXY_CERT_INFO_EXTENSION_free(pci);				}			}		}	return(ok);	}static void process_proxy_debug(int indent, const char *format, ...)	{	static const char indentation[] =		">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"		">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"; /* That's 80 > */	char my_format[256];	va_list args;	BIO_snprintf(my_format, sizeof(my_format), "%*.*s %s",		indent, indent, indentation, format);	va_start(args, format);	vfprintf(stderr, my_format, args);	va_end(args);	}/* Priority levels:   0	[!]var, ()   1	& ^   2	|*/static int process_proxy_cond_adders(unsigned int letters[26],	const char *cond, const char **cond_end, int *pos, int indent);static int process_proxy_cond_val(unsigned int letters[26],	const char *cond, const char **cond_end, int *pos, int indent)	{	int c;	int ok = 1;	int negate = 0;	while(isspace((int)*cond))		{		cond++; (*pos)++;		}	c = *cond;	if (debug)		process_proxy_debug(indent,			"Start process_proxy_cond_val at position %d: %s\n",			*pos, cond);	while(c == '!')		{		negate = !negate;		cond++; (*pos)++;		while(isspace((int)*cond))			{			cond++; (*pos)++;			}		c = *cond;		}	if (c == '(')		{		cond++; (*pos)++;		ok = process_proxy_cond_adders(letters, cond, cond_end, pos,			indent + 1);		cond = *cond_end;		if (ok < 0)			goto end;		while(isspace((int)*cond))			{			cond++; (*pos)++;			}		c = *cond;		if (c != ')')			{			fprintf(stderr,				"Weird condition character in position %d: "				"%c\n", *pos, c);			ok = -1;			goto end;			}		cond++; (*pos)++;		}	else if (isascii(c) && isalpha(c))		{		if (islower(c))			c = toupper(c);		ok = letters[c - 'A'];		cond++; (*pos)++;		}	else		{		fprintf(stderr,			"Weird condition character in position %d: "			"%c\n", *pos, c);		ok = -1;		goto end;		} end:	*cond_end = cond;	if (ok >= 0 && negate)		ok = !ok;	if (debug)		process_proxy_debug(indent,			"End process_proxy_cond_val at position %d: %s, returning %d\n",			*pos, cond, ok);	return ok;	}static int process_proxy_cond_multipliers(unsigned int letters[26],	const char *cond, const char **cond_end, int *pos, int indent)	{	int ok;	char c;	if (debug)		process_proxy_debug(indent,			"Start process_proxy_cond_multipliers at position %d: %s\n",			*pos, cond);	ok = process_proxy_cond_val(letters, cond, cond_end, pos, indent + 1);	cond = *cond_end;	if (ok < 0)		goto end;	while(ok >= 0)		{		while(isspace((int)*cond))			{			cond++; (*pos)++;			}		c = *cond;		switch(c)			{		case '&':		case '^':			{			int save_ok = ok;			cond++; (*pos)++;			ok = process_proxy_cond_val(letters,				cond, cond_end, pos, indent + 1);			cond = *cond_end;			if (ok < 0)				break;			switch(c)				{			case '&':				ok &= save_ok;				break;			case '^':				ok ^= save_ok;				break;			default:				fprintf(stderr, "SOMETHING IS SERIOUSLY WRONG!"					" STOPPING\n");				EXIT(1);				}			}			break;		default:			goto end;			}		} end:	if (debug)		process_proxy_debug(indent,			"End process_proxy_cond_multipliers at position %d: %s, returning %d\n",			*pos, cond, ok);	*cond_end = cond;	return ok;	}static int process_proxy_cond_adders(unsigned int letters[26],	const char *cond, const char **cond_end, int *pos, int indent)	{	int ok;	char c;	if (debug)		process_proxy_debug(indent,			"Start process_proxy_cond_adders at position %d: %s\n",			*pos, cond);	ok = process_proxy_cond_multipliers(letters, cond, cond_end, pos,		indent + 1);	cond = *cond_end;	if (ok < 0)		goto end;	while(ok >= 0)		{		while(isspace((int)*cond))			{			cond++; (*pos)++;			}		c = *cond;		switch(c)			{		case '|':			{			int save_ok = ok;			cond++; (*pos)++;			ok = process_proxy_cond_multipliers(letters,				cond, cond_end, pos, indent + 1);			cond = *cond_end;			if (ok < 0)				break;			switch(c)				{			case '|':				ok |= save_ok;				break;			default:				fprintf(stderr, "SOMETHING IS SERIOUSLY WRONG!"					" STOPPING\n");				EXIT(1);				}			}			break;		default:			goto end;			}		} end:	if (debug)		process_proxy_debug(indent,			"End process_proxy_cond_adders at position %d: %s, returning %d\n",			*pos, cond, ok);	*cond_end = cond;	return ok;	}static int process_proxy_cond(unsigned int letters[26],	const char *cond, const char **cond_end)	{	int pos = 1;	return process_proxy_cond_adders(letters, cond, cond_end, &pos, 1);	}static int MS_CALLBACK app_verify_callback(X509_STORE_CTX *ctx, void *arg)	{	int ok=1;	struct app_verify_arg *cb_arg = arg;	unsigned int letters[26]; /* only used with proxy_auth */	if (cb_arg->app_verify)		{		char *s = NULL,buf[256];		fprintf(stderr, "In app_verify_callback, allowing cert. ");		fprintf(stderr, "Arg is: %s\n", cb_arg->string);		fprintf(stderr, "Finished printing do we have a context? 0x%p a cert? 0x%p\n",			(void *)ctx, (void *)ctx->cert);		if (ctx->cert)			s=X509_NAME_oneline(X509_get_subject_name(ctx->cert),buf,256);		if (s != NULL)			{			fprintf(stderr,"cert depth=%d %s\n",ctx->error_depth,buf);			}		return(1);		}	if (cb_arg->proxy_auth)		{		int found_any = 0, i;		char *sp;		for(i = 0; i < 26; i++)			letters[i] = 0;		for(sp = cb_arg->proxy_auth; *sp; sp++)			{			int c = *sp;			if (isascii(c) && isalpha(c))				{				if (islower(c))					c = toupper(c);				letters[c - 'A'] = 1;				}			}		fprintf(stderr,			"  Initial proxy rights = ");		for(i = 0; i < 26; i++)			if (letters[i])				{				fprintf(stderr, "%c", i + 'A');				found_any = 1;				}		if (!found_any)			fprintf(stderr, "none");		fprintf(stderr, "\n");		X509_STORE_CTX_set_ex_data(ctx,			get_proxy_auth_ex_data_idx(),letters);		}	if (cb_arg->allow_proxy_certs)		{		X509_STORE_CTX_set_flags(ctx, X509_V_FLAG_ALLOW_PROXY_CERTS);		}#ifndef OPENSSL_NO_X509_VERIFY# ifdef OPENSSL_FIPS	if(s->version == TLS1_VERSION)		FIPS_allow_md5(1);# endif	ok = X509_verify_cert(ctx);# ifdef OPENSSL_FIPS	if(s->version == TLS1_VERSION)		FIPS_allow_md5(0);# endif#endif	if (cb_arg->proxy_auth)		{		if (ok)			{			const char *cond_end = NULL;			ok = process_proxy_cond(letters,				cb_arg->proxy_cond, &cond_end);			if (ok < 0)				EXIT(3);			if (*cond_end)				{				fprintf(stderr, "Stopped processing condition before it's end.\n");				ok = 0;				}			if (!ok)				fprintf(stderr, "Proxy rights check with condition '%s' proved invalid\n",					cb_arg->proxy_cond);			else				fprintf(stderr, "Proxy rights check with condition '%s' proved valid\n",					cb_arg->proxy_cond);			}		}	return(ok);	}#ifndef OPENSSL_NO_RSAstatic RSA *rsa_tmp=NULL;static RSA MS_CALLBACK *tmp_rsa_cb(SSL *s, int is_export, int keylength)	{	BIGNUM *bn = NULL;	if (rsa_tmp == NULL)		{		bn = BN_new();		rsa_tmp = RSA_new();		if(!bn || !rsa_tmp || !BN_set_word(bn, RSA_F4))			{			BIO_printf(bio_err, "Memory error...");			goto end;			}		BIO_printf(bio_err,"Generating temp (%d bit) RSA key...",keylength);		(void)BIO_flush(bio_err);		if(!RSA_generate_key_ex(rsa_tmp,keylength,bn,NULL))			{			BIO_printf(bio_err, "Error generating key.");			RSA_free(rsa_tmp);			rsa_tmp = NULL;			}end:		BIO_printf(bio_err,"\n");		(void)BIO_flush(bio_err);		}	if(bn) BN_free(bn);	return(rsa_tmp);	}static void free_tmp_rsa(void)	{	if (rsa_tmp != NULL)		{		RSA_free(rsa_tmp);		rsa_tmp = NULL;		}	}#endif#ifndef OPENSSL_NO_DH/* These DH parameters have been generated as follows: *    $ openssl dhparam -C -noout 512 *    $ openssl dhparam -C -noout 1024 *    $ openssl dhparam -C -noout -dsaparam 1024 * (The third function has been renamed to avoid name conflicts.) */static DH *get_dh512()	{	static unsigned char dh512_p[]={		0xCB,0xC8,0xE1,0x86,0xD0,0x1F,0x94,0x17,0xA6,0x99,0xF0,0xC6,		0x1F,0x0D,0xAC,0xB6,0x25,0x3E,0x06,0x39,0xCA,0x72,0x04,0xB0,		0x6E,0xDA,0xC0,0x61,0xE6,0x7A,0x77,0x25,0xE8,0x3B,0xB9,0x5F,		0x9A,0xB6,0xB5,0xFE,0x99,0x0B,0xA1,0x93,0x4E,0x35,0x33,0xB8,		0xE1,0xF1,0x13,0x4F,0x59,0x1A,0xD2,0x57,0xC0,0x26,0x21,0x33,		0x02,0xC5,0xAE,0x23,		};	static unsigned char dh512_g[]={		0x02,		};	DH *dh;	if ((dh=DH_new()) == NULL) return(NULL);	dh->p=BN_bin2bn(dh512_p,sizeof(dh512_p),NULL);	dh->g=BN_bin2bn(dh512_g,sizeof(dh512_g),NULL);	if ((dh->p == NULL) || (dh->g == NULL))		{ DH_free(dh); return(NULL); }	return(dh);	}static DH *get_dh1024()	{	static unsigned char dh1024_p[]={		0xF8,0x81,0x89,0x7D,0x14,0x24,0xC5,0xD1,0xE6,0xF7,0xBF,0x3A,		0xE4,0x90,0xF4,0xFC,0x73,0xFB,0x34,0xB5,0xFA,0x4C,0x56,0xA2,		0xEA,0xA7,0xE9,0xC0,0xC0,0xCE,0x89,0xE1,0xFA,0x63,0x3F,0xB0,		0x6B,0x32,0x66,0xF1,0xD1,0x7B,0xB0,0x00,0x8F,0xCA,0x87,0xC2,		0xAE,0x98,0x89,0x26,0x17,0xC2,0x05,0xD2,0xEC,0x08,0xD0,0x8C,		0xFF,0x17,0x52,0x8C,0xC5,0x07,0x93,0x03,0xB1,0xF6,0x2F,0xB8,		0x1C,0x52,0x47,0x27,0x1B,0xDB,0xD1,0x8D,0x9D,0x69,0x1D,0x52,		0x4B,0x32,0x81,0xAA,0x7F,0x00,0xC8,0xDC,0xE6,0xD9,0xCC,0xC1,		0x11,0x2D,0x37,0x34,0x6C,0xEA,0x02,0x97,0x4B,0x0E,0xBB,0xB1,		0x71,0x33,0x09,0x15,0xFD,0xDD,0x23,0x87,0x07,0x5E,0x89,0xAB,		0x6B,0x7C,0x5F,0xEC,0xA6,0x24,0xDC,0x53,		};	static unsigned char dh1024_g[]={		0x02,		};	DH *dh;	if ((dh=DH_new()) == NULL) return(NULL);	dh->p=BN_bin2bn(dh1024_p,sizeof(dh1024_p),NULL);	dh->g=BN_bin2bn(dh1024_g,sizeof(dh1024_g),NULL);	if ((dh->p == NULL) || (dh->g == NULL))		{ DH_free(dh); return(NULL); }	return(dh);	}static DH *get_dh1024dsa()	{	static unsigned char dh1024_p[]={		0xC8,0x00,0xF7,0x08,0x07,0x89,0x4D,0x90,0x53,0xF3,0xD5,0x00,		0x21,0x1B,0xF7,0x31,0xA6,0xA2,0xDA,0x23,0x9A,0xC7,0x87,0x19,		0x3B,0x47,0xB6,0x8C,0x04,0x6F,0xFF,0xC6,0x9B,0xB8,0x65,0xD2,		0xC2,0x5F,0x31,0x83,0x4A,0xA7,0x5F,0x2F,0x88,0x38,0xB6,0x55,		0xCF,0xD9,0x87,0x6D,0x6F,0x9F,0xDA,0xAC,0xA6,0x48,0xAF,0xFC,		0x33,0x84,0x37,0x5B,0x82,0x4A,0x31,0x5D,0xE7,0xBD,0x52,0x97,		0xA1,0x77,0xBF,0x10,0x9E,0x37,0xEA,0x64,0xFA,0xCA,0x28,0x8D,		0x9D,0x3B,0xD2,0x6E,0x09,0x5C,0x68,0xC7,0x45,0x90,0xFD,0xBB,		0x70,0xC9,0x3A,0xBB,0xDF,0xD4,0x21,0x0F,0xC4,0x6A,0x3C,0xF6,		0x61,0xCF,0x3F,0xD6,0x13,0xF1,0x5F,0xBC,0xCF,0xBC,0x26,0x9E,		0xBC,0x0B,0xBD,0xAB,0x5D,0xC9,0x54,0x39,		};	static unsigned char dh1024_g[]={		0x3B,0x40,0x86,0xE7,0xF3,0x6C,0xDE,0x67,0x1C,0xCC,0x80,0x05,		0x5A,0xDF,0xFE,0xBD,0x20,0x27,0x74,0x6C,0x24,0xC9,0x03,0xF3,		0xE1,0x8D,0xC3,0x7D,0x98,0x27,0x40,0x08,0xB8,0x8C,0x6A,0xE9,		0xBB,0x1A,0x3A,0xD6,0x86,0x83,0x5E,0x72,0x41,0xCE,0x85,0x3C,		0xD2,0xB3,0xFC,0x13,0xCE,0x37,0x81,0x9E,0x4C,0x1C,0x7B,0x65,		0xD3,0xE6,0xA6,0x00,0xF5,0x5A,0x95,0x43,0x5E,0x81,0xCF,0x60,		0xA2,0x23,0xFC,0x36,0xA7,0x5D,0x7A,0x4C,0x06,0x91,0x6E,0xF6,		0x57,0xEE,0x36,0xCB,0x06,0xEA,0xF5,0x3D,0x95,0x49,0xCB,0xA7,		0xDD,0x81,0xDF,0x80,0x09,0x4A,0x97,0x4D,0xA8,0x22,0x72,0xA1,		0x7F,0xC4,0x70,0x56,0x70,0xE8,0x20,0x10,0x18,0x8F,0x2E,0x60,		0x07,0xE7,0x68,0x1A,0x82,0x5D,0x32,0xA2,		};	DH *dh;	if ((dh=DH_new()) == NULL) return(NULL);	dh->p=BN_bin2bn(dh1024_p,sizeof(dh1024_p),NULL);	dh->g=BN_bin2bn(dh1024_g,sizeof(dh1024_g),NULL);	if ((dh->p == NULL) || (dh->g == NULL))		{ DH_free(dh); return(NULL); }	dh->length = 160;	return(dh);	}static int do_test_cipherlist(void)	{	int i = 0;	const SSL_METHOD *meth;	SSL_CIPHER *ci, *tci = NULL;	fprintf(stderr, "testing SSLv2 cipher list order: ");	meth = SSLv2_method();	while ((ci = meth->get_cipher(i++)) != NULL)		{		if (tci != NULL)			if (ci->id >= tci->id)				{				fprintf(stderr, "failed %lx vs. %lx\n", ci->id, tci->id);				return 0;				}		tci = ci;		}	fprintf(stderr, "ok\n");	fprintf(stderr, "testing SSLv3 cipher list order: ");	meth = SSLv3_method();	tci = NULL;	while ((ci = meth->get_cipher(i++)) != NULL)		{		if (tci != NULL)			if (ci->id >= tci->id)				{				fprintf(stderr, "failed %lx vs. %lx\n", ci->id, tci->id);				return 0;				}		tci = ci;		}	fprintf(stderr, "ok\n");	fprintf(stderr, "testing TLSv1 cipher list order: ");	meth = TLSv1_method();	tci = NULL;	while ((ci = meth->get_cipher(i++)) != NULL)		{		if (tci != NULL)			if (ci->id >= tci->id)				{				fprintf(stderr, "failed %lx vs. %lx\n", ci->id, tci->id);				return 0;				}		tci = ci;		}	fprintf(stderr, "ok\n");	return 1;	}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -