📄 sctloc.c
字号:
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 + -