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

📄 e_cswift.c

📁 mediastreamer2是开源的网络传输媒体流的库
💻 C
📖 第 1 页 / 共 3 页
字号:
/* (de)initialisation functions. */static int cswift_init(ENGINE *e)	{        SW_CONTEXT_HANDLE hac;        t_swAcquireAccContext *p1;        t_swAttachKeyParam *p2;        t_swSimpleRequest *p3;        t_swReleaseAccContext *p4;	if(cswift_dso != NULL)		{		CSWIFTerr(CSWIFT_F_CSWIFT_INIT,CSWIFT_R_ALREADY_LOADED);		goto err;		}	/* Attempt to load libswift.so/swift.dll/whatever. */	cswift_dso = DSO_load(NULL, get_CSWIFT_LIBNAME(), NULL, 0);	if(cswift_dso == NULL)		{		CSWIFTerr(CSWIFT_F_CSWIFT_INIT,CSWIFT_R_NOT_LOADED);		goto err;		}	if(!(p1 = (t_swAcquireAccContext *)				DSO_bind_func(cswift_dso, CSWIFT_F1)) ||			!(p2 = (t_swAttachKeyParam *)				DSO_bind_func(cswift_dso, CSWIFT_F2)) ||			!(p3 = (t_swSimpleRequest *)				DSO_bind_func(cswift_dso, CSWIFT_F3)) ||			!(p4 = (t_swReleaseAccContext *)				DSO_bind_func(cswift_dso, CSWIFT_F4)))		{		CSWIFTerr(CSWIFT_F_CSWIFT_INIT,CSWIFT_R_NOT_LOADED);		goto err;		}	/* Copy the pointers */	p_CSwift_AcquireAccContext = p1;	p_CSwift_AttachKeyParam = p2;	p_CSwift_SimpleRequest = p3;	p_CSwift_ReleaseAccContext = p4;	/* Try and get a context - if not, we may have a DSO but no	 * accelerator! */	if(!get_context(&hac))		{		CSWIFTerr(CSWIFT_F_CSWIFT_INIT,CSWIFT_R_UNIT_FAILURE);		goto err;		}	release_context(hac);	/* Everything's fine. */	return 1;err:	if(cswift_dso)	{		DSO_free(cswift_dso);		cswift_dso = NULL;	}	p_CSwift_AcquireAccContext = NULL;	p_CSwift_AttachKeyParam = NULL;	p_CSwift_SimpleRequest = NULL;	p_CSwift_ReleaseAccContext = NULL;	return 0;	}static int cswift_finish(ENGINE *e)	{	free_CSWIFT_LIBNAME();	if(cswift_dso == NULL)		{		CSWIFTerr(CSWIFT_F_CSWIFT_FINISH,CSWIFT_R_NOT_LOADED);		return 0;		}	if(!DSO_free(cswift_dso))		{		CSWIFTerr(CSWIFT_F_CSWIFT_FINISH,CSWIFT_R_UNIT_FAILURE);		return 0;		}	cswift_dso = NULL;	p_CSwift_AcquireAccContext = NULL;	p_CSwift_AttachKeyParam = NULL;	p_CSwift_SimpleRequest = NULL;	p_CSwift_ReleaseAccContext = NULL;	return 1;	}static int cswift_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)(void))	{	int initialised = ((cswift_dso == NULL) ? 0 : 1);	switch(cmd)		{	case CSWIFT_CMD_SO_PATH:		if(p == NULL)			{			CSWIFTerr(CSWIFT_F_CSWIFT_CTRL,ERR_R_PASSED_NULL_PARAMETER);			return 0;			}		if(initialised)			{			CSWIFTerr(CSWIFT_F_CSWIFT_CTRL,CSWIFT_R_ALREADY_LOADED);			return 0;			}		return set_CSWIFT_LIBNAME((const char *)p);	default:		break;		}	CSWIFTerr(CSWIFT_F_CSWIFT_CTRL,CSWIFT_R_CTRL_COMMAND_NOT_IMPLEMENTED);	return 0;	}/* Un petit mod_exp */static int cswift_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,			const BIGNUM *m, BN_CTX *ctx)	{	/* I need somewhere to store temporary serialised values for	 * use with the CryptoSwift API calls. A neat cheat - I'll use	 * BIGNUMs from the BN_CTX but access their arrays directly as	 * byte arrays <grin>. This way I don't have to clean anything	 * up. */	BIGNUM *modulus;	BIGNUM *exponent;	BIGNUM *argument;	BIGNUM *result;	SW_STATUS sw_status;	SW_LARGENUMBER arg, res;	SW_PARAM sw_param;	SW_CONTEXT_HANDLE hac;	int to_return, acquired; 	modulus = exponent = argument = result = NULL;	to_return = 0; /* expect failure */	acquired = 0; 	if(!get_context(&hac))		{		CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP,CSWIFT_R_UNIT_FAILURE);		goto err;		}	acquired = 1;	/* Prepare the params */	BN_CTX_start(ctx);	modulus = BN_CTX_get(ctx);	exponent = BN_CTX_get(ctx);	argument = BN_CTX_get(ctx);	result = BN_CTX_get(ctx);	if(!result)		{		CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP,CSWIFT_R_BN_CTX_FULL);		goto err;		}	if(!bn_wexpand(modulus, m->top) || !bn_wexpand(exponent, p->top) ||		!bn_wexpand(argument, a->top) || !bn_wexpand(result, m->top))		{		CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP,CSWIFT_R_BN_EXPAND_FAIL);		goto err;		}	sw_param.type = SW_ALG_EXP;	sw_param.up.exp.modulus.nbytes = BN_bn2bin(m,		(unsigned char *)modulus->d);	sw_param.up.exp.modulus.value = (unsigned char *)modulus->d;	sw_param.up.exp.exponent.nbytes = BN_bn2bin(p,		(unsigned char *)exponent->d);	sw_param.up.exp.exponent.value = (unsigned char *)exponent->d;	/* Attach the key params */	sw_status = p_CSwift_AttachKeyParam(hac, &sw_param);	switch(sw_status)		{	case SW_OK:		break;	case SW_ERR_INPUT_SIZE:		CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP,CSWIFT_R_BAD_KEY_SIZE);		goto err;	default:		{		char tmpbuf[DECIMAL_SIZE(sw_status)+1];		CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP,CSWIFT_R_REQUEST_FAILED);		sprintf(tmpbuf, "%ld", sw_status);		ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);		}		goto err;		}	/* Prepare the argument and response */	arg.nbytes = BN_bn2bin(a, (unsigned char *)argument->d);	arg.value = (unsigned char *)argument->d;	res.nbytes = BN_num_bytes(m);	memset(result->d, 0, res.nbytes);	res.value = (unsigned char *)result->d;	/* Perform the operation */	if((sw_status = p_CSwift_SimpleRequest(hac, SW_CMD_MODEXP, &arg, 1,		&res, 1)) != SW_OK)		{		char tmpbuf[DECIMAL_SIZE(sw_status)+1];		CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP,CSWIFT_R_REQUEST_FAILED);		sprintf(tmpbuf, "%ld", sw_status);		ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);		goto err;		}	/* Convert the response */	BN_bin2bn((unsigned char *)result->d, res.nbytes, r);	to_return = 1;err:	if(acquired)		release_context(hac);	BN_CTX_end(ctx);	return to_return;	}#ifndef OPENSSL_NO_RSAint cswift_bn_32copy(SW_LARGENUMBER * out, const BIGNUM * in){	int mod;	int numbytes = BN_num_bytes(in);	mod = 0;	while( ((out->nbytes = (numbytes+mod)) % 32) )	{		mod++;	}	out->value = (unsigned char*)OPENSSL_malloc(out->nbytes);	if(!out->value)	{		return 0;	}	BN_bn2bin(in, &out->value[mod]);	if(mod)		memset(out->value, 0, mod);	return 1;}#endif#ifndef OPENSSL_NO_RSA/* Un petit mod_exp chinois */static int cswift_mod_exp_crt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,			const BIGNUM *q, const BIGNUM *dmp1,			const BIGNUM *dmq1, const BIGNUM *iqmp, BN_CTX *ctx)	{	SW_STATUS sw_status;	SW_LARGENUMBER arg, res;	SW_PARAM sw_param;	SW_CONTEXT_HANDLE hac;	BIGNUM *result = NULL;	BIGNUM *argument = NULL;	int to_return = 0; /* expect failure */	int acquired = 0;	sw_param.up.crt.p.value = NULL;	sw_param.up.crt.q.value = NULL;	sw_param.up.crt.dmp1.value = NULL;	sw_param.up.crt.dmq1.value = NULL;	sw_param.up.crt.iqmp.value = NULL; 	if(!get_context(&hac))		{		CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP_CRT,CSWIFT_R_UNIT_FAILURE);		goto err;		}	acquired = 1;	/* Prepare the params */	argument = BN_new();	result = BN_new();	if(!result || !argument)		{		CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP_CRT,CSWIFT_R_BN_CTX_FULL);		goto err;		}	sw_param.type = SW_ALG_CRT;	/************************************************************************/	/* 04/02/2003                                                           */	/* Modified by Frederic Giudicelli (deny-all.com) to overcome the       */	/* limitation of cswift with values not a multiple of 32                */	/************************************************************************/	if(!cswift_bn_32copy(&sw_param.up.crt.p, p))	{		CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP_CRT,CSWIFT_R_BN_EXPAND_FAIL);		goto err;	}	if(!cswift_bn_32copy(&sw_param.up.crt.q, q))	{		CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP_CRT,CSWIFT_R_BN_EXPAND_FAIL);		goto err;	}	if(!cswift_bn_32copy(&sw_param.up.crt.dmp1, dmp1))	{		CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP_CRT,CSWIFT_R_BN_EXPAND_FAIL);		goto err;	}	if(!cswift_bn_32copy(&sw_param.up.crt.dmq1, dmq1))	{		CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP_CRT,CSWIFT_R_BN_EXPAND_FAIL);		goto err;	}	if(!cswift_bn_32copy(&sw_param.up.crt.iqmp, iqmp))	{		CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP_CRT,CSWIFT_R_BN_EXPAND_FAIL);		goto err;	}	if(	!bn_wexpand(argument, a->top) ||			!bn_wexpand(result, p->top + q->top))		{		CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP_CRT,CSWIFT_R_BN_EXPAND_FAIL);		goto err;		}	/* Attach the key params */	sw_status = p_CSwift_AttachKeyParam(hac, &sw_param);	switch(sw_status)		{	case SW_OK:		break;	case SW_ERR_INPUT_SIZE:		CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP_CRT,CSWIFT_R_BAD_KEY_SIZE);		goto err;	default:		{		char tmpbuf[DECIMAL_SIZE(sw_status)+1];		CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP_CRT,CSWIFT_R_REQUEST_FAILED);		sprintf(tmpbuf, "%ld", sw_status);		ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);		}		goto err;		}	/* Prepare the argument and response */	arg.nbytes = BN_bn2bin(a, (unsigned char *)argument->d);	arg.value = (unsigned char *)argument->d;	res.nbytes = 2 * BN_num_bytes(p);	memset(result->d, 0, res.nbytes);	res.value = (unsigned char *)result->d;	/* Perform the operation */	if((sw_status = p_CSwift_SimpleRequest(hac, SW_CMD_MODEXP_CRT, &arg, 1,		&res, 1)) != SW_OK)		{		char tmpbuf[DECIMAL_SIZE(sw_status)+1];		CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP_CRT,CSWIFT_R_REQUEST_FAILED);		sprintf(tmpbuf, "%ld", sw_status);		ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);		goto err;		}	/* Convert the response */	BN_bin2bn((unsigned char *)result->d, res.nbytes, r);	to_return = 1;err:	if(sw_param.up.crt.p.value)		OPENSSL_free(sw_param.up.crt.p.value);	if(sw_param.up.crt.q.value)		OPENSSL_free(sw_param.up.crt.q.value);	if(sw_param.up.crt.dmp1.value)		OPENSSL_free(sw_param.up.crt.dmp1.value);	if(sw_param.up.crt.dmq1.value)		OPENSSL_free(sw_param.up.crt.dmq1.value);	if(sw_param.up.crt.iqmp.value)		OPENSSL_free(sw_param.up.crt.iqmp.value);	if(result)		BN_free(result);	if(argument)		BN_free(argument);	if(acquired)		release_context(hac);	return to_return;	}#endif #ifndef OPENSSL_NO_RSAstatic int cswift_rsa_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx)	{	int to_return = 0;	const RSA_METHOD * def_rsa_method;	/* Try the limits of RSA (2048 bits) */	if(BN_num_bytes(rsa->p) > 128 ||		BN_num_bytes(rsa->q) > 128 ||		BN_num_bytes(rsa->dmp1) > 128 ||		BN_num_bytes(rsa->dmq1) > 128 ||		BN_num_bytes(rsa->iqmp) > 128)	{#ifdef RSA_NULL

⌨️ 快捷键说明

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