/********************************************************************************* * * static functions implemented by Bin * *********************************************************************************/ static ANSC_HANDLE anscGetCertHandle ( void* raw_cert_data, ULONG raw_cert_size ) { PANSC_ASN1_CERTIFICATE pAsnCert = NULL; PUCHAR pBack = (PUCHAR)raw_cert_data; if( raw_cert_size < 32 || raw_cert_data == NULL) { return NULL; } /* create the asn.1 certificate handle */ pAsnCert = (PANSC_ASN1_CERTIFICATE)AnscAsn1CreateCertificate(NULL); if( pAsnCert == NULL) { return NULL; } /* decode it */ if( ANSC_STATUS_SUCCESS != pAsnCert->DecodingData(pAsnCert, (PVOID*)&pBack)) { pAsnCert->AsnFree(pAsnCert); return NULL; } return (ANSC_HANDLE)pAsnCert; }
/************************************************************************************** * * static callback functions to get cert and key info from PKCS12. * **************************************************************************************/ ANSC_STATUS initProc ( ANSC_HANDLE hContext, PUCHAR pCertEncoding, ULONG ulCertSize, PUCHAR pKeyEncoding, ULONG ulKeyInfoSize ) { PPKI_CLIENT_ENTITY pThisObject = (PPKI_CLIENT_ENTITY)hContext; PALCERT_CONTEXT pCertContext = NULL; PANSC_ASN1_CERTIFICATE pNewCert; PUCHAR pEncoding; if( pCertEncoding == NULL || ulCertSize == 0) { return ANSC_STATUS_FAILURE; } pCertContext = (PALCERT_CONTEXT)pThisObject->hContainerContext; if( pKeyEncoding == NULL || ulKeyInfoSize == 0) { /* add the ca cert */ if( pCertContext == NULL) { pNewCert = (PANSC_ASN1_CERTIFICATE)AnscAsn1CreateCertificate(NULL); pEncoding= pCertEncoding; pNewCert->DecodingData(pNewCert,(PVOID*)&pEncoding); AnscSListPushEntryAtBack(&pThisObject->sCAList, &pNewCert->Linkage); } else { pCertContext->AddTrustedCA ( pCertContext, "", pCertEncoding, ulCertSize ); } } else { pThisObject->SetIssuedCert(pThisObject, pCertEncoding, ulCertSize); pThisObject->SetPrivateKeyInfo(pThisObject, pKeyEncoding, ulKeyInfoSize); } if( pThisObject->pCertAttr != NULL) { pThisObject->pCertAttr->Remove(pThisObject->pCertAttr); } pThisObject->pCertAttr = GenerateAttrByCertificate(pThisObject->hUserCert); return ANSC_STATUS_SUCCESS; }