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

📄 sctloc.c

📁 SecuDe是一个由安全应用程序接口组成,对验证机制、证件处理、PEM、X.400报文处理和密钥管理提供支持。SecuDe提供DES、 RSA杂凑函数、密钥生成以及数字签名的生成和核实等多种密码机制。
💻 C
📖 第 1 页 / 共 5 页
字号:
			return (NULL);		};		if (RQDATKEYATTR->key_attr.MAC_length > 8) {			sct_errno = EINVPAR;			sct_errmsg = sct_error[sct_errno].msg;			return (NULL);		};		ldata = 5;		if ((s_apdu = SCTalloc(ldata, &p_elem->secure_messaging,				       lapdu)) == NULL)			return (NULL);		ptr = s_apdu + 2;		SCTparam(&ptr, RQP1.kid, S_NOTUSED);		SCTplength(&ptr, ldata);		SCTssc(&ptr, p_elem);		SCTbinval(&ptr, RQDATKEYATTR->key_inst_mode);		e_KeyAttrList(&ptr, RQDATKEYATTR, NOT_DEFINED);		break;		/*--------------------------*/		/* create S_DEL_USER_KEY    */		/*--------------------------*/	case S_DEL_USER_KEY:		s_apdu = SCTnodata(p_elem, RQP1.kid, S_NOTUSED, lapdu);		break;		/*----------------------------*/		/* create S_GET_RNO           */		/*----------------------------*/	case S_GET_RNO:		if (RQP1.lrno > 255) {			sct_errno = EINVPAR;			sct_errmsg = sct_error[sct_errno].msg;			return (NULL);		};		s_apdu = SCTnodata(p_elem, RQP1.lrno, S_NOTUSED, lapdu);		break;		/*----------------------------*/		/* create S_RSA_SIGN          */		/*----------------------------*/	case S_RSA_SIGN:		s_apdu = SCTwithMdata(p_elem, RQP1.kid, S_NOTUSED,				      RQDATA.hash, lapdu);		break;		/*----------------------------*/		/* create S_RSA_VERIFY        */		/*----------------------------*/	case S_RSA_VERIFY:		if ((RQDATVERIFY == VERNULL) ||		    (RQDATVERIFY->public == PUBNULL) ||		    (RQDATVERIFY->public->modulus == BYTENULL) ||		    (RQDATVERIFY->public->modulus->nbytes == 0) ||		    (RQDATVERIFY->public->modulus->bytes == NULL) ||		    (RQDATVERIFY->signature == BYTENULL) ||		    (RQDATVERIFY->signature->nbytes == 0) ||		    (RQDATVERIFY->signature->bytes == NULL) ||		    (RQDATVERIFY->hash == BYTENULL) ||		    (RQDATVERIFY->hash->nbytes == 0) ||		    (RQDATVERIFY->hash->bytes == NULL)) {			sct_errno = EPARMISSED;			sct_errmsg = sct_error[sct_errno].msg;			return (NULL);		};		ldata = LofPublic(RQDATVERIFY->public);		ldata += RQDATVERIFY->signature->nbytes;		ldata++;		if (RQDATVERIFY->signature->nbytes >= 255)			ldata += 2;		ldata += RQDATVERIFY->hash->nbytes;		ldata++;		if (RQDATVERIFY->hash->nbytes >= 255)			ldata += 2;		if ((s_apdu = SCTalloc(ldata, &p_elem->secure_messaging,				       lapdu)) == NULL)			return (NULL);		ptr = s_apdu + 2;		SCTparam(&ptr, RQP1.kid, S_NOTUSED);		SCTplength(&ptr, ldata);		SCTssc(&ptr, p_elem);		SCTppublic(&ptr, RQDATVERIFY->public);		SCTplength(&ptr, RQDATVERIFY->signature->nbytes);		SCTbytestring(&ptr, RQDATVERIFY->signature);		SCTplength(&ptr, RQDATVERIFY->hash->nbytes);		SCTbytestring(&ptr, RQDATVERIFY->hash);		break;		/*----------------------------*/		/* create S_DES_ENC           */		/*----------------------------*/	case S_DES_ENC:		s_apdu = SCTwithMdata(p_elem, RQP1.kid, (unsigned) RQP2.more,				      RQDATA.plaintext, lapdu);		break;		/*----------------------------*/		/* create S_RSA_ENC           */		/*----------------------------*/	case S_RSA_ENC:		if ((RQDATENC == ENCNULL) ||		    (RQDATENC->plaintext == BYTENULL) ||		    (RQDATENC->plaintext->nbytes == 0) ||		    (RQDATENC->plaintext->bytes == NULL)) {			sct_errno = EPARMISSED;			sct_errmsg = sct_error[sct_errno].msg;			return (NULL);		};		ldata = LofPublic(RQDATENC->public);		if (ldata == 2)			ldata = 0;		lenofpublic = ldata;		ldata += RQDATENC->plaintext->nbytes;		if ((s_apdu = SCTalloc(ldata, &p_elem->secure_messaging,				       lapdu)) == NULL)			return (NULL);		ptr = s_apdu + 2;		SCTparam(&ptr, RQP1.kid, (unsigned) RQP2.more);		SCTplength(&ptr, ldata);		SCTssc(&ptr, p_elem);		if (lenofpublic > 2)			SCTppublic(&ptr, RQDATENC->public);		SCTbytestring(&ptr, RQDATENC->plaintext);		break;		/*----------------------------*/		/* create S_RSA_DEC           */		/* create S_DES_DEC           */		/*----------------------------*/	case S_RSA_DEC:	case S_DES_DEC:		if ((RQDATA.chiffrat == BYTENULL) ||		    (RQDATA.chiffrat->nbytes == 0) ||		    (RQDATA.chiffrat->bytes == NULL)) {			sct_errno = EPARMISSED;			sct_errmsg = sct_error[sct_errno].msg;			return (NULL);		};		s_apdu = SCTwithMdata(p_elem, RQP1.kid, (unsigned) RQP2.more,				      RQDATA.chiffrat, lapdu);		break;		/*----------------------------*/		/* create S_ENC_DES_KEY       */		/*----------------------------*/	case S_ENC_DES_KEY:		if ((RQDATPUB == PUBNULL) ||		    (RQDATPUB->modulus == BYTENULL) ||		    (RQDATPUB->modulus->nbytes == 0) ||		    (RQDATPUB->modulus->bytes == NULL)) {			sct_errno = EPARMISSED;			sct_errmsg = sct_error[sct_errno].msg;			return (NULL);		};		ldata = LofPublic(RQDATPUB);		if ((s_apdu = SCTalloc(ldata, &p_elem->secure_messaging,				       lapdu)) == NULL)			return (NULL);		ptr = s_apdu + 2;		SCTparam(&ptr, RQP1.kid, S_NOTUSED);		SCTplength(&ptr, ldata);		SCTssc(&ptr, p_elem);		SCTppublic(&ptr, RQDATPUB);		break;		/*----------------------------*/		/* create S_DEC_DES_KEY       */		/*----------------------------*/	case S_DEC_DES_KEY:		if ((RQDATDESKEY == DESKNULL) ||		    (RQDATDESKEY->chiffrat == BYTENULL) ||		    (RQDATDESKEY->chiffrat->nbytes == 0) ||		    (RQDATDESKEY->chiffrat->bytes == NULL)) {			sct_errno = EPARMISSED;			sct_errmsg = sct_error[sct_errno].msg;			return (NULL);		};		ldata = 1 + RQDATDESKEY->chiffrat->nbytes;		if ((s_apdu = SCTalloc(ldata, &p_elem->secure_messaging,				       lapdu)) == NULL)			return (NULL);		ptr = s_apdu + 2;		SCTparam(&ptr, RQP1.kid, RQP2.kid);		SCTplength(&ptr, ldata);		SCTssc(&ptr, p_elem);		*ptr++ = RQDATDESKEY->algid;		SCTbytestring(&ptr, RQDATDESKEY->chiffrat);		break;		/*----------------------------*/		/* create S_GEN_DEV_KEY       */		/*----------------------------*/	case S_GEN_DEV_KEY:		if (RQDATDEV == DEVNULL) {			sct_errno = EPARMISSED;			sct_errmsg = sct_error[sct_errno].msg;			return (NULL);		};		ldata = 3;		if ((s_apdu = SCTalloc(ldata, &p_elem->secure_messaging,				       lapdu)) == NULL)			return (NULL);		ptr = s_apdu + 2;		SCTparam(&ptr, RQP1.kid, RQP2.algid);		SCTplength(&ptr, ldata);		SCTssc(&ptr, p_elem);		SCTdevkeyinfo(&ptr, RQDATDEV);		break;		/*----------------------------*/		/* create S_INST_DEV_KEY      */		/*----------------------------*/	case S_INST_DEV_KEY:		if (RQDATKEYATTR == KEYATTRNULL) {			sct_errno = EPARMISSED;			sct_errmsg = sct_error[sct_errno].msg;			return (NULL);		};		if (RQDATKEYATTR->key_attr.MAC_length > 8) {			sct_errno = EINVPAR;			sct_errmsg = sct_error[sct_errno].msg;			return (NULL);		};		ldata = 5;		if ((s_apdu = SCTalloc(ldata, &p_elem->secure_messaging,				       lapdu)) == NULL)			return (NULL);		ptr = s_apdu + 2;		if (RQP2.status == DEV_OWN) {			purpose = SCTpurpose(&RQP1.dev_inst_key->pval.purpose);			SCTparam(&ptr, purpose, RQP2.status);		} else			SCTparam(&ptr, RQP1.dev_inst_key->pval.kid, RQP2.status);		SCTplength(&ptr, ldata);		SCTssc(&ptr, p_elem);		SCTbinval(&ptr, RQDATKEYATTR->key_inst_mode);		e_KeyAttrList(&ptr, RQDATKEYATTR, NOT_DEFINED);		break;		/*--------------------------*/		/* create S_DEL_DEV_KEY     */		/*--------------------------*/	case S_DEL_DEV_KEY:		if (RQP2.status == DEV_OWN) {			purpose = SCTpurpose(&RQP1.dev_inst_key->pval.purpose);			s_apdu = SCTnodata(p_elem, purpose, RQP2.status, lapdu);		} else			s_apdu = SCTnodata(p_elem, RQP1.dev_inst_key->pval.kid,					   RQP2.status, lapdu);		break;		/*----------------------------*/		/* create S_INST_PIN          */		/*----------------------------*/	case S_INST_PIN:		if ((RQDATPIN == PINNULL) ||		    (RQDATPIN->pin_attr == KEYATTRNULL) ||		    (RQDATPIN->pin_record == BYTENULL) ||		    (RQDATPIN->pin_record->nbytes == 0) ||		    (RQDATPIN->pin_record->bytes == NULL)) {			sct_errno = EPARMISSED;			sct_errmsg = sct_error[sct_errno].msg;			return (NULL);		};		if (RQDATPIN->pin_attr->key_attr.MAC_length > 8) {			sct_errno = EINVPAR;			sct_errmsg = sct_error[sct_errno].msg;			return (NULL);		};		ldata = 6 + RQDATPIN->pin_record->nbytes;		if ((s_apdu = SCTalloc(ldata, &p_elem->secure_messaging,				       lapdu)) == NULL)			return (NULL);		ptr = s_apdu + 2;		SCTparam(&ptr, RQP1.kid, S_NOTUSED);		SCTplength(&ptr, ldata);		SCTssc(&ptr, p_elem);		SCTpininfo(&ptr, RQDATPIN);		break;		/*--------------------------------*/		/* create S_CHANGE_PIN            */		/* the parameter 2 will be coded  */		/* by this procedure              */		/*--------------------------------*/	case S_CHANGE_PIN:		class = SCTclass(RQP2.sec_mode);		s_apdu = SCTnodata(p_elem, RQP1.kid, class, lapdu);		*flag = TRUE;		break;		/*----------------------------*/		/* create S_AUTH              */		/*----------------------------*/	case S_AUTH:		if ((RQP2.acp == PIN_USER) || (RQP2.acp == PUK_CHECK)) {			ldata = 1;			class = SCTclass(RQDATA.auth_secmode);		} else			ldata = 0;		if ((s_apdu = SCTalloc(ldata, &p_elem->secure_messaging,				       lapdu)) == NULL)			return (NULL);		ptr = s_apdu + 2;

⌨️ 快捷键说明

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