servget.c

来自「支持SSL v2/v3, TLS, PKCS #5, PKCS #7, PKCS」· C语言 代码 · 共 1,008 行 · 第 1/2 页

C
1,008
字号
    if (poolp == NULL) {        return NULL;    }    newReqMsg = PORT_ArenaZNew(poolp, CRMFCertReqMsg);    newReqMsg->poolp = poolp;    if (newReqMsg == NULL) {        goto loser;    }    newReqMsg->certReq = crmf_copy_cert_request(poolp, srcReqMsg->certReq);    if (newReqMsg->certReq == NULL) {        goto loser;    }    newReqMsg->pop = crmf_copy_pop(poolp, srcReqMsg->pop);    if (newReqMsg->pop == NULL) {        goto loser;    }    /* None of my set/get routines operate on the regInfo field, so     * for now, that won't get copied over.     */    return newReqMsg; loser:    if (newReqMsg != NULL) {        CRMF_DestroyCertReqMsg(newReqMsg);    }    return NULL;}CRMFCertReqMsg*CRMF_CertReqMessagesGetCertReqMsgAtIndex(CRMFCertReqMessages *inReqMsgs,					 int                  index){    int numMsgs;    PORT_Assert(inReqMsgs != NULL && index >= 0);    if (inReqMsgs == NULL) {        return NULL;    }    numMsgs = CRMF_CertReqMessagesGetNumMessages(inReqMsgs);    if (index < 0 || index >= numMsgs) {        return NULL;    }    return crmf_copy_cert_req_msg(inReqMsgs->messages[index]);}intCRMF_CertReqMessagesGetNumMessages(CRMFCertReqMessages *inCertReqMsgs){    int numMessages = 0;    PORT_Assert(inCertReqMsgs != NULL);    if (inCertReqMsgs == NULL) {        return 0;    }    while (inCertReqMsgs->messages[numMessages] != NULL) {        numMessages++;    }    return numMessages;}CRMFCertRequest*CRMF_CertReqMsgGetCertRequest(CRMFCertReqMsg *inCertReqMsg){    PRArenaPool     *poolp      = NULL;    CRMFCertRequest *newCertReq = NULL;    PORT_Assert(inCertReqMsg != NULL);    poolp = PORT_NewArena(CRMF_DEFAULT_ARENA_SIZE);    if (poolp == NULL) {        goto loser;    }    newCertReq = crmf_copy_cert_request(poolp, inCertReqMsg->certReq);    if (newCertReq == NULL) {        goto loser;    }    newCertReq->poolp = poolp;    return newCertReq; loser:    if (poolp != NULL) {        PORT_FreeArena(poolp, PR_FALSE);    }    return NULL;}SECStatusCRMF_CertReqMsgGetID(CRMFCertReqMsg *inCertReqMsg, long *destID){    PORT_Assert(inCertReqMsg != NULL && destID != NULL);    if (inCertReqMsg == NULL || inCertReqMsg->certReq == NULL) {        return SECFailure;    }    return crmf_extract_long_from_item(&inCertReqMsg->certReq->certReqId, 				       destID);}SECStatusCRMF_CertReqMsgGetPOPKeyAgreement(CRMFCertReqMsg   *inCertReqMsg,				  CRMFPOPOPrivKey **destKey){    PORT_Assert(inCertReqMsg != NULL && destKey != NULL);    if (inCertReqMsg == NULL || destKey == NULL ||	CRMF_CertReqMsgGetPOPType(inCertReqMsg) != crmfKeyAgreement) {        return SECFailure;    }    *destKey = PORT_ZNew(CRMFPOPOPrivKey);    if (*destKey == NULL) {        return SECFailure;    }    return crmf_copy_popoprivkey(NULL,				 &inCertReqMsg->pop->popChoice.keyAgreement,				 *destKey);}SECStatusCRMF_CertReqMsgGetPOPKeyEncipherment(CRMFCertReqMsg   *inCertReqMsg,				     CRMFPOPOPrivKey **destKey){    PORT_Assert(inCertReqMsg != NULL && destKey != NULL);    if (inCertReqMsg == NULL || destKey == NULL ||	CRMF_CertReqMsgGetPOPType(inCertReqMsg) != crmfKeyEncipherment) {        return SECFailure;    }    *destKey = PORT_ZNew(CRMFPOPOPrivKey);    if (destKey == NULL) {       return SECFailure;    }    return crmf_copy_popoprivkey(NULL,				 &inCertReqMsg->pop->popChoice.keyEncipherment,				 *destKey);}SECStatusCRMF_CertReqMsgGetPOPOSigningKey(CRMFCertReqMsg      *inCertReqMsg,				 CRMFPOPOSigningKey **destKey){    CRMFProofOfPossession *pop;    PORT_Assert(inCertReqMsg != NULL);    if (inCertReqMsg  == NULL) {        return SECFailure;    }    pop = inCertReqMsg->pop;;    if (pop->popUsed != crmfSignature) {        return SECFailure;    }    *destKey = PORT_ZNew(CRMFPOPOSigningKey);    if (*destKey == NULL) {        return SECFailure;    }    return crmf_copy_poposigningkey(NULL,&pop->popChoice.signature, *destKey);}static SECStatuscrmf_copy_name(CERTName *destName, CERTName *srcName){  PRArenaPool *poolp = NULL;  SECStatus rv;  if (destName->arena != NULL) {    poolp = destName->arena;  } else {    poolp = PORT_NewArena(CRMF_DEFAULT_ARENA_SIZE);  }  if (poolp == NULL) {    return SECFailure;  }  /* Need to do this so that CERT_CopyName doesn't free out   * the arena from underneath us.   */  destName->arena = NULL;  rv = CERT_CopyName(poolp, destName, srcName);   destName->arena = poolp;  return rv;}SECStatusCRMF_CertRequestGetCertTemplateIssuer(CRMFCertRequest *inCertReq,				      CERTName        *destIssuer){    PORT_Assert(inCertReq != NULL);    if (inCertReq == NULL) {        return SECFailure;    }    if (CRMF_DoesRequestHaveField(inCertReq, crmfIssuer)) {        return crmf_copy_name(destIssuer, 			      inCertReq->certTemplate.issuer);    }    return SECFailure;}SECStatus CRMF_CertRequestGetCertTemplateIssuerUID(CRMFCertRequest *inCertReq,					 SECItem         *destIssuerUID){    PORT_Assert(inCertReq != NULL);    if (inCertReq == NULL) {        return SECFailure;    }    if (CRMF_DoesRequestHaveField(inCertReq, crmfIssuerUID)) {        return crmf_make_bitstring_copy(NULL, destIssuerUID,					&inCertReq->certTemplate.issuerUID);    }    return SECFailure;}SECStatusCRMF_CertRequestGetCertTemplatePublicKey(CRMFCertRequest          *inCertReq,				       CERTSubjectPublicKeyInfo *destPublicKey){    PORT_Assert (inCertReq != NULL);    if (inCertReq == NULL) {        return SECFailure;    }    if (CRMF_DoesRequestHaveField(inCertReq, crmfPublicKey)) {        return SECKEY_CopySubjectPublicKeyInfo(NULL, destPublicKey,					inCertReq->certTemplate.publicKey);    }    return SECFailure;}SECStatusCRMF_CertRequestGetCertTemplateSerialNumber(CRMFCertRequest *inCertReq,					    long            *serialNumber){    PORT_Assert(inCertReq != NULL);    if (inCertReq == NULL) {        return SECFailure;    }    if (CRMF_DoesRequestHaveField(inCertReq, crmfSerialNumber)) {        return 	  crmf_extract_long_from_item(&inCertReq->certTemplate.serialNumber,				      serialNumber);    }    return SECFailure;}SECStatusCRMF_CertRequestGetCertTemplateSigningAlg(CRMFCertRequest *inCertReq,					  SECAlgorithmID  *destAlg){    PORT_Assert(inCertReq != NULL);    if (inCertReq == NULL) {        return SECFailure;    }    if (CRMF_DoesRequestHaveField(inCertReq, crmfSigningAlg)) {        return SECOID_CopyAlgorithmID(NULL, destAlg, 				      inCertReq->certTemplate.signingAlg);    }    return SECFailure;}SECStatus CRMF_CertRequestGetCertTemplateSubject(CRMFCertRequest *inCertReq,				       CERTName        *destSubject){  PORT_Assert(inCertReq != NULL);  if (inCertReq == NULL) {      return SECFailure;  }  if (CRMF_DoesRequestHaveField(inCertReq, crmfSubject)) {      return crmf_copy_name(destSubject, inCertReq->certTemplate.subject);  }  return SECFailure;}SECStatusCRMF_CertRequestGetCertTemplateSubjectUID(CRMFCertRequest *inCertReq,					  SECItem         *destSubjectUID){    PORT_Assert(inCertReq != NULL);    if (inCertReq == NULL) {        return SECFailure;    }    if (CRMF_DoesRequestHaveField(inCertReq, crmfSubjectUID)) {        return crmf_make_bitstring_copy(NULL, destSubjectUID, 					&inCertReq->certTemplate.subjectUID);    }    return SECFailure;}SECStatus CRMF_CertRequestGetCertTemplateVersion(CRMFCertRequest *inCertReq, 				       long            *version){    PORT_Assert (inCertReq != NULL);    if (inCertReq == NULL) {        return SECFailure;    }    if (CRMF_DoesRequestHaveField(inCertReq, crmfVersion)) {        return crmf_extract_long_from_item(&inCertReq->certTemplate.version,					   version);    }     return SECFailure;}static SECStatuscrmf_copy_validity(CRMFGetValidity      *destValidity,		   CRMFOptionalValidity *src){    SECStatus rv;        destValidity->notBefore = destValidity->notAfter = NULL;    if (src->notBefore.data != NULL) {        rv = crmf_create_prtime(&src->notBefore, 				&destValidity->notBefore);	if (rv != SECSuccess) {	    return rv;	}    }    if (src->notAfter.data != NULL) {        rv = crmf_create_prtime(&src->notAfter,				&destValidity->notAfter);	if (rv != SECSuccess) {	    return rv;	}    }    return SECSuccess;}SECStatus CRMF_CertRequestGetCertTemplateValidity(CRMFCertRequest *inCertReq,					CRMFGetValidity *destValidity){    PORT_Assert(inCertReq != NULL);    if (inCertReq == NULL) {        return SECFailure;    }    if (CRMF_DoesRequestHaveField(inCertReq, crmfValidity)) {        return crmf_copy_validity(destValidity, 				  inCertReq->certTemplate.validity);    }    return SECFailure;}CRMFControl*CRMF_CertRequestGetControlAtIndex(CRMFCertRequest *inCertReq, int index){    CRMFControl *newControl, *srcControl;    int          numControls;    SECStatus    rv;    PORT_Assert(inCertReq != NULL);    if (inCertReq == NULL) {        return NULL;    }    numControls = CRMF_CertRequestGetNumControls(inCertReq);    if (index >= numControls || index < 0) {        return NULL;    }    newControl = PORT_ZNew(CRMFControl);    if (newControl == NULL) {        return NULL;    }    srcControl = inCertReq->controls[index];    newControl->tag = srcControl->tag;    rv = SECITEM_CopyItem (NULL, &newControl->derTag, &srcControl->derTag);    if (rv != SECSuccess) {        goto loser;    }    rv = SECITEM_CopyItem(NULL, &newControl->derValue, 			  &srcControl->derValue);    if (rv != SECSuccess) {        goto loser;    }    /* Copy over the PKIArchiveOptions stuff */    switch (srcControl->tag) {    case SEC_OID_PKIX_REGCTRL_REGTOKEN:    case SEC_OID_PKIX_REGCTRL_AUTHENTICATOR:        /* No further processing necessary for these types. */        rv = SECSuccess;	break;    case SEC_OID_PKIX_REGCTRL_OLD_CERT_ID:    case SEC_OID_PKIX_REGCTRL_PKIPUBINFO:    case SEC_OID_PKIX_REGCTRL_PROTOCOL_ENC_KEY:        /* These aren't supported yet, so no post-processing will	 * be done at this time.  But we don't want to fail in case	 * we read in DER that has one of these options.	 */        rv = SECSuccess;	break;    case SEC_OID_PKIX_REGCTRL_PKI_ARCH_OPTIONS:        rv = crmf_copy_pkiarchiveoptions(NULL, 					 &newControl->value.archiveOptions,					 &srcControl->value.archiveOptions);	break;    default:        rv = SECFailure;    }    if (rv != SECSuccess) {        goto loser;    }    return newControl; loser:    if (newControl != NULL) {        CRMF_DestroyControl(newControl);    }    return NULL;}static SECItem*crmf_copy_control_value(CRMFControl *inControl){    return SECITEM_DupItem(&inControl->derValue);}SECItem*CRMF_ControlGetAuthenticatorControlValue(CRMFControl *inControl){    PORT_Assert (inControl!= NULL);    if (inControl == NULL ||	CRMF_ControlGetControlType(inControl) != crmfAuthenticatorControl) {        return NULL;    }    return crmf_copy_control_value(inControl);}CRMFControlTypeCRMF_ControlGetControlType(CRMFControl *inControl){    CRMFControlType retType;    PORT_Assert(inControl != NULL);    switch (inControl->tag) {    case SEC_OID_PKIX_REGCTRL_REGTOKEN:        retType = crmfRegTokenControl;	break;    case SEC_OID_PKIX_REGCTRL_AUTHENTICATOR:        retType = crmfAuthenticatorControl;	break;    case SEC_OID_PKIX_REGCTRL_PKIPUBINFO:        retType = crmfPKIPublicationInfoControl;	break;    case SEC_OID_PKIX_REGCTRL_PKI_ARCH_OPTIONS:        retType = crmfPKIArchiveOptionsControl;	break;    case SEC_OID_PKIX_REGCTRL_OLD_CERT_ID:        retType = crmfOldCertIDControl;	break;    case SEC_OID_PKIX_REGCTRL_PROTOCOL_ENC_KEY:        retType = crmfProtocolEncrKeyControl;	break;    default:        retType = crmfNoControl;    }    return retType;}CRMFPKIArchiveOptions*CRMF_ControlGetPKIArchiveOptions(CRMFControl *inControl){    CRMFPKIArchiveOptions *newOpt = NULL;    SECStatus rv;    PORT_Assert(inControl != NULL);    if (inControl == NULL ||	CRMF_ControlGetControlType(inControl) != crmfPKIArchiveOptionsControl){        goto loser;    }    newOpt = PORT_ZNew(CRMFPKIArchiveOptions);    if (newOpt == NULL) {        goto loser;    }    rv = crmf_copy_pkiarchiveoptions(NULL, newOpt, 				     &inControl->value.archiveOptions);    if (rv != SECSuccess) {        goto loser;    } loser:    if (newOpt != NULL) {        CRMF_DestroyPKIArchiveOptions(newOpt);    }    return NULL;}SECItem*CRMF_ControlGetRegTokenControlValue(CRMFControl *inControl){    PORT_Assert(inControl != NULL);    if (inControl == NULL ||	CRMF_ControlGetControlType(inControl) != crmfRegTokenControl) {        return NULL;    }    return crmf_copy_control_value(inControl);;}CRMFCertExtension*CRMF_CertRequestGetExtensionAtIndex(CRMFCertRequest *inCertReq,				    int              index){    int numExtensions;    PORT_Assert(inCertReq != NULL);    numExtensions = CRMF_CertRequestGetNumberOfExtensions(inCertReq);    if (index >= numExtensions || index < 0) {        return NULL;    }    return       crmf_copy_cert_extension(NULL, 			       inCertReq->certTemplate.extensions[index]);}

⌨️ 快捷键说明

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