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

📄 e_cswift.c

📁 mediastreamer2是开源的网络传输媒体流的库
💻 C
📖 第 1 页 / 共 3 页
字号:
		def_rsa_method=RSA_null_method();#else#if 0		def_rsa_method=RSA_PKCS1_RSAref();#else		def_rsa_method=RSA_PKCS1_SSLeay();#endif#endif		if(def_rsa_method)			return def_rsa_method->rsa_mod_exp(r0, I, rsa, ctx);	}	if(!rsa->p || !rsa->q || !rsa->dmp1 || !rsa->dmq1 || !rsa->iqmp)		{		CSWIFTerr(CSWIFT_F_CSWIFT_RSA_MOD_EXP,CSWIFT_R_MISSING_KEY_COMPONENTS);		goto err;		}	to_return = cswift_mod_exp_crt(r0, I, rsa->p, rsa->q, rsa->dmp1,		rsa->dmq1, rsa->iqmp, ctx);err:	return to_return;	}/* This function is aliased to mod_exp (with the mont stuff dropped). */static int cswift_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,		const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx)	{	const RSA_METHOD * def_rsa_method;	/* Try the limits of RSA (2048 bits) */	if(BN_num_bytes(r) > 256 ||		BN_num_bytes(a) > 256 ||		BN_num_bytes(m) > 256)	{#ifdef RSA_NULL		def_rsa_method=RSA_null_method();#else#if 0		def_rsa_method=RSA_PKCS1_RSAref();#else		def_rsa_method=RSA_PKCS1_SSLeay();#endif#endif		if(def_rsa_method)			return def_rsa_method->bn_mod_exp(r, a, p, m, ctx, m_ctx);	}	return cswift_mod_exp(r, a, p, m, ctx);	}#endif	/* OPENSSL_NO_RSA */#ifndef OPENSSL_NO_DSAstatic DSA_SIG *cswift_dsa_sign(const unsigned char *dgst, int dlen, DSA *dsa)	{	SW_CONTEXT_HANDLE hac;	SW_PARAM sw_param;	SW_STATUS sw_status;	SW_LARGENUMBER arg, res;	unsigned char *ptr;	BN_CTX *ctx;	BIGNUM *dsa_p = NULL;	BIGNUM *dsa_q = NULL;	BIGNUM *dsa_g = NULL;	BIGNUM *dsa_key = NULL;	BIGNUM *result = NULL;	DSA_SIG *to_return = NULL;	int acquired = 0;	if((ctx = BN_CTX_new()) == NULL)		goto err;	if(!get_context(&hac))		{		CSWIFTerr(CSWIFT_F_CSWIFT_DSA_SIGN,CSWIFT_R_UNIT_FAILURE);		goto err;		}	acquired = 1;	/* Prepare the params */	BN_CTX_start(ctx);	dsa_p = BN_CTX_get(ctx);	dsa_q = BN_CTX_get(ctx);	dsa_g = BN_CTX_get(ctx);	dsa_key = BN_CTX_get(ctx);	result = BN_CTX_get(ctx);	if(!result)		{		CSWIFTerr(CSWIFT_F_CSWIFT_DSA_SIGN,CSWIFT_R_BN_CTX_FULL);		goto err;		}	if(!bn_wexpand(dsa_p, dsa->p->top) ||			!bn_wexpand(dsa_q, dsa->q->top) ||			!bn_wexpand(dsa_g, dsa->g->top) ||			!bn_wexpand(dsa_key, dsa->priv_key->top) ||			!bn_wexpand(result, dsa->p->top))		{		CSWIFTerr(CSWIFT_F_CSWIFT_DSA_SIGN,CSWIFT_R_BN_EXPAND_FAIL);		goto err;		}	sw_param.type = SW_ALG_DSA;	sw_param.up.dsa.p.nbytes = BN_bn2bin(dsa->p,				(unsigned char *)dsa_p->d);	sw_param.up.dsa.p.value = (unsigned char *)dsa_p->d;	sw_param.up.dsa.q.nbytes = BN_bn2bin(dsa->q,				(unsigned char *)dsa_q->d);	sw_param.up.dsa.q.value = (unsigned char *)dsa_q->d;	sw_param.up.dsa.g.nbytes = BN_bn2bin(dsa->g,				(unsigned char *)dsa_g->d);	sw_param.up.dsa.g.value = (unsigned char *)dsa_g->d;	sw_param.up.dsa.key.nbytes = BN_bn2bin(dsa->priv_key,				(unsigned char *)dsa_key->d);	sw_param.up.dsa.key.value = (unsigned char *)dsa_key->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_DSA_SIGN,CSWIFT_R_BAD_KEY_SIZE);		goto err;	default:		{		char tmpbuf[DECIMAL_SIZE(sw_status)+1];		CSWIFTerr(CSWIFT_F_CSWIFT_DSA_SIGN,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 = dlen;	arg.value = (unsigned char *)dgst;	res.nbytes = BN_num_bytes(dsa->p);	memset(result->d, 0, res.nbytes);	res.value = (unsigned char *)result->d;	/* Perform the operation */	sw_status = p_CSwift_SimpleRequest(hac, SW_CMD_DSS_SIGN, &arg, 1,		&res, 1);	if(sw_status != SW_OK)		{		char tmpbuf[DECIMAL_SIZE(sw_status)+1];		CSWIFTerr(CSWIFT_F_CSWIFT_DSA_SIGN,CSWIFT_R_REQUEST_FAILED);		sprintf(tmpbuf, "%ld", sw_status);		ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);		goto err;		}	/* Convert the response */	ptr = (unsigned char *)result->d;	if((to_return = DSA_SIG_new()) == NULL)		goto err;	to_return->r = BN_bin2bn((unsigned char *)result->d, 20, NULL);	to_return->s = BN_bin2bn((unsigned char *)result->d + 20, 20, NULL);err:	if(acquired)		release_context(hac);	if(ctx)		{		BN_CTX_end(ctx);		BN_CTX_free(ctx);		}	return to_return;	}static int cswift_dsa_verify(const unsigned char *dgst, int dgst_len,				DSA_SIG *sig, DSA *dsa)	{	SW_CONTEXT_HANDLE hac;	SW_PARAM sw_param;	SW_STATUS sw_status;	SW_LARGENUMBER arg[2], res;	unsigned long sig_result;	BN_CTX *ctx;	BIGNUM *dsa_p = NULL;	BIGNUM *dsa_q = NULL;	BIGNUM *dsa_g = NULL;	BIGNUM *dsa_key = NULL;	BIGNUM *argument = NULL;	int to_return = -1;	int acquired = 0;	if((ctx = BN_CTX_new()) == NULL)		goto err;	if(!get_context(&hac))		{		CSWIFTerr(CSWIFT_F_CSWIFT_DSA_VERIFY,CSWIFT_R_UNIT_FAILURE);		goto err;		}	acquired = 1;	/* Prepare the params */	BN_CTX_start(ctx);	dsa_p = BN_CTX_get(ctx);	dsa_q = BN_CTX_get(ctx);	dsa_g = BN_CTX_get(ctx);	dsa_key = BN_CTX_get(ctx);	argument = BN_CTX_get(ctx);	if(!argument)		{		CSWIFTerr(CSWIFT_F_CSWIFT_DSA_VERIFY,CSWIFT_R_BN_CTX_FULL);		goto err;		}	if(!bn_wexpand(dsa_p, dsa->p->top) ||			!bn_wexpand(dsa_q, dsa->q->top) ||			!bn_wexpand(dsa_g, dsa->g->top) ||			!bn_wexpand(dsa_key, dsa->pub_key->top) ||			!bn_wexpand(argument, 40))		{		CSWIFTerr(CSWIFT_F_CSWIFT_DSA_VERIFY,CSWIFT_R_BN_EXPAND_FAIL);		goto err;		}	sw_param.type = SW_ALG_DSA;	sw_param.up.dsa.p.nbytes = BN_bn2bin(dsa->p,				(unsigned char *)dsa_p->d);	sw_param.up.dsa.p.value = (unsigned char *)dsa_p->d;	sw_param.up.dsa.q.nbytes = BN_bn2bin(dsa->q,				(unsigned char *)dsa_q->d);	sw_param.up.dsa.q.value = (unsigned char *)dsa_q->d;	sw_param.up.dsa.g.nbytes = BN_bn2bin(dsa->g,				(unsigned char *)dsa_g->d);	sw_param.up.dsa.g.value = (unsigned char *)dsa_g->d;	sw_param.up.dsa.key.nbytes = BN_bn2bin(dsa->pub_key,				(unsigned char *)dsa_key->d);	sw_param.up.dsa.key.value = (unsigned char *)dsa_key->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_DSA_VERIFY,CSWIFT_R_BAD_KEY_SIZE);		goto err;	default:		{		char tmpbuf[DECIMAL_SIZE(sw_status)+1];		CSWIFTerr(CSWIFT_F_CSWIFT_DSA_VERIFY,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[0].nbytes = dgst_len;	arg[0].value = (unsigned char *)dgst;	arg[1].nbytes = 40;	arg[1].value = (unsigned char *)argument->d;	memset(arg[1].value, 0, 40);	BN_bn2bin(sig->r, arg[1].value + 20 - BN_num_bytes(sig->r));	BN_bn2bin(sig->s, arg[1].value + 40 - BN_num_bytes(sig->s));	res.nbytes = 4; /* unsigned long */	res.value = (unsigned char *)(&sig_result);	/* Perform the operation */	sw_status = p_CSwift_SimpleRequest(hac, SW_CMD_DSS_VERIFY, arg, 2,		&res, 1);	if(sw_status != SW_OK)		{		char tmpbuf[DECIMAL_SIZE(sw_status)+1];		CSWIFTerr(CSWIFT_F_CSWIFT_DSA_VERIFY,CSWIFT_R_REQUEST_FAILED);		sprintf(tmpbuf, "%ld", sw_status);		ERR_add_error_data(2, "CryptoSwift error number is ",tmpbuf);		goto err;		}	/* Convert the response */	to_return = ((sig_result == 0) ? 0 : 1);err:	if(acquired)		release_context(hac);	if(ctx)		{		BN_CTX_end(ctx);		BN_CTX_free(ctx);		}	return to_return;	}#endif#ifndef OPENSSL_NO_DH/* This function is aliased to mod_exp (with the dh and mont dropped). */static int cswift_mod_exp_dh(const DH *dh, BIGNUM *r,		const BIGNUM *a, const BIGNUM *p,		const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx)	{	return cswift_mod_exp(r, a, p, m, ctx);	}#endif/* Random bytes are good */static int cswift_rand_bytes(unsigned char *buf, int num){	SW_CONTEXT_HANDLE hac;	SW_STATUS swrc;	SW_LARGENUMBER largenum;	int acquired = 0;	int to_return = 0; /* assume failure */	unsigned char buf32[1024];	if (!get_context(&hac))	{		CSWIFTerr(CSWIFT_F_CSWIFT_RAND_BYTES, CSWIFT_R_UNIT_FAILURE);		goto err;	}	acquired = 1;	/************************************************************************/	/* 04/02/2003                                                           */	/* Modified by Frederic Giudicelli (deny-all.com) to overcome the       */	/* limitation of cswift with values not a multiple of 32                */	/************************************************************************/	while(num >= (int)sizeof(buf32))	{		largenum.value = buf;		largenum.nbytes = sizeof(buf32);		/* tell CryptoSwift how many bytes we want and where we want it.		 * Note: - CryptoSwift cannot do more than 4096 bytes at a time.		 *       - CryptoSwift can only do multiple of 32-bits. */		swrc = p_CSwift_SimpleRequest(hac, SW_CMD_RAND, NULL, 0, &largenum, 1);		if (swrc != SW_OK)		{			char tmpbuf[20];			CSWIFTerr(CSWIFT_F_CSWIFT_RAND_BYTES, CSWIFT_R_REQUEST_FAILED);			sprintf(tmpbuf, "%ld", swrc);			ERR_add_error_data(2, "CryptoSwift error number is ", tmpbuf);			goto err;		}		buf += sizeof(buf32);		num -= sizeof(buf32);	}	if(num)	{		largenum.nbytes = sizeof(buf32);		largenum.value = buf32;		swrc = p_CSwift_SimpleRequest(hac, SW_CMD_RAND, NULL, 0, &largenum, 1);		if (swrc != SW_OK)		{			char tmpbuf[20];			CSWIFTerr(CSWIFT_F_CSWIFT_CTRL, CSWIFT_R_REQUEST_FAILED);			sprintf(tmpbuf, "%ld", swrc);			ERR_add_error_data(2, "CryptoSwift error number is ", tmpbuf);			goto err;		}		memcpy(buf, largenum.value, num);	}	to_return = 1;  /* success */err:	if (acquired)		release_context(hac);	return to_return;}static int cswift_rand_status(void){	return 1;}/* This stuff is needed if this ENGINE is being compiled into a self-contained * shared-library. */#ifndef OPENSSL_NO_DYNAMIC_ENGINEstatic int bind_fn(ENGINE *e, const char *id)	{	if(id && (strcmp(id, engine_cswift_id) != 0))		return 0;	if(!bind_helper(e))		return 0;	return 1;	}       IMPLEMENT_DYNAMIC_CHECK_FN()IMPLEMENT_DYNAMIC_BIND_FN(bind_fn)#endif /* OPENSSL_NO_DYNAMIC_ENGINE */#endif /* !OPENSSL_NO_HW_CSWIFT */#endif /* !OPENSSL_NO_HW */

⌨️ 快捷键说明

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