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

📄 hw_cswift.c

📁 开源项目openssl的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
		!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;	}/* 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 *rsa_p = NULL;	BIGNUM *rsa_q = NULL;	BIGNUM *rsa_dmp1 = NULL;	BIGNUM *rsa_dmq1 = NULL;	BIGNUM *rsa_iqmp = NULL;	BIGNUM *argument = NULL;	BIGNUM *result = NULL;	int to_return = 0; /* expect failure */	int acquired = 0; 	if(!get_context(&hac))		{		CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP_CRT,CSWIFT_R_UNIT_FAILURE);		goto err;		}	acquired = 1;	/* Prepare the params */	BN_CTX_start(ctx);	rsa_p = BN_CTX_get(ctx);	rsa_q = BN_CTX_get(ctx);	rsa_dmp1 = BN_CTX_get(ctx);	rsa_dmq1 = BN_CTX_get(ctx);	rsa_iqmp = BN_CTX_get(ctx);	argument = BN_CTX_get(ctx);	result = BN_CTX_get(ctx);	if(!result)		{		CSWIFTerr(CSWIFT_F_CSWIFT_MOD_EXP_CRT,CSWIFT_R_BN_CTX_FULL);		goto err;		}	if(!bn_wexpand(rsa_p, p->top) || !bn_wexpand(rsa_q, q->top) ||			!bn_wexpand(rsa_dmp1, dmp1->top) ||			!bn_wexpand(rsa_dmq1, dmq1->top) ||			!bn_wexpand(rsa_iqmp, iqmp->top) ||			!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;		}	sw_param.type = SW_ALG_CRT;	sw_param.up.crt.p.nbytes = BN_bn2bin(p, (unsigned char *)rsa_p->d);	sw_param.up.crt.p.value = (unsigned char *)rsa_p->d;	sw_param.up.crt.q.nbytes = BN_bn2bin(q, (unsigned char *)rsa_q->d);	sw_param.up.crt.q.value = (unsigned char *)rsa_q->d;	sw_param.up.crt.dmp1.nbytes = BN_bn2bin(dmp1,		(unsigned char *)rsa_dmp1->d);	sw_param.up.crt.dmp1.value = (unsigned char *)rsa_dmp1->d;	sw_param.up.crt.dmq1.nbytes = BN_bn2bin(dmq1,		(unsigned char *)rsa_dmq1->d);	sw_param.up.crt.dmq1.value = (unsigned char *)rsa_dmq1->d;	sw_param.up.crt.iqmp.nbytes = BN_bn2bin(iqmp,		(unsigned char *)rsa_iqmp->d);	sw_param.up.crt.iqmp.value = (unsigned char *)rsa_iqmp->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_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(acquired)		release_context(hac);	BN_CTX_end(ctx);	return to_return;	} #ifndef OPENSSL_NO_RSAstatic int cswift_rsa_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa)	{	BN_CTX *ctx;	int to_return = 0;	if((ctx = BN_CTX_new()) == NULL)		goto err;	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:	if(ctx)		BN_CTX_free(ctx);	return to_return;	}#endif/* 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)	{	return cswift_mod_exp(r, a, p, m, ctx);	}#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;	size_t nbytes = 0;	int acquired = 0;	int to_return = 0; /* assume failure */	if (!get_context(&hac))	{		CSWIFTerr(CSWIFT_F_CSWIFT_CTRL, CSWIFT_R_UNIT_FAILURE);		goto err;	}	acquired = 1;	while (nbytes < (size_t)num)	{		/* 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. */		largenum.value = (SW_BYTE *) buf + nbytes;		if (4096 > num - nbytes)			largenum.nbytes = num - nbytes;		else			largenum.nbytes = 4096;		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;		}		nbytes += largenum.nbytes;	}	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. */#ifdef ENGINE_DYNAMIC_SUPPORTstatic 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 /* ENGINE_DYNAMIC_SUPPORT */#endif /* !OPENSSL_NO_HW_CSWIFT */#endif /* !OPENSSL_NO_HW */

⌨️ 快捷键说明

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