PTEID_Certificate &PTEID_Certificates::addCertificate(PTEID_ByteArray &cert) { PTEID_Certificate *out = NULL; BEGIN_TRY_CATCH APL_Certifs *pimpl=static_cast<APL_Certifs *>(m_impl); CByteArray baCert(cert.GetBytes(),cert.Size()); APL_Certif *pAplCert=pimpl->addCert(baCert, APL_CERTIF_TYPE_ROOT, false); out = dynamic_cast<PTEID_Certificate *>(getObject(pAplCert)); if(!out) { //CAutoMutex autoMutex(m_mutex); //pcert=dynamic_cast<PTEID_Certificate *>(getObject(pAplCert)); //if(!pcert) //{ out = new PTEID_Certificate(m_context,pAplCert); if(out) addObject(out); else throw PTEID_ExUnknown(); //} } END_TRY_CATCH return *out; }
CByteArray APL_Certif::getP15TLV() { CTLVBuffer tlv; /* typedef struct { bool bValid; 0x00 std::string csLabel; 0x01 unsigned long ulFlags; 0x02 unsigned long ulAuthID; 0x03 unsigned long ulUserConsent; 0x04 unsigned long ulID; 0x05 bool bAuthority; 0x06 bool bImplicitTrust; 0x07 std::string csPath; 0x08 } tCert; */ char buffer[50]; sprintf_s(buffer,sizeof(buffer),"%d",m_certP15.bValid); tlv.SetTagData(0x00,(unsigned char *)buffer,(unsigned long)strlen(buffer)); sprintf_s(buffer,sizeof(buffer),"%s",m_certP15.csLabel.c_str()); tlv.SetTagData(0x01,(unsigned char *)buffer,(unsigned long)strlen(buffer)); sprintf_s(buffer,sizeof(buffer),"%ld",m_certP15.ulFlags); tlv.SetTagData(0x02,(unsigned char *)buffer,(unsigned long)strlen(buffer)); sprintf_s(buffer,sizeof(buffer),"%ld",m_certP15.ulAuthID); tlv.SetTagData(0x03,(unsigned char *)buffer,(unsigned long)strlen(buffer)); sprintf_s(buffer,sizeof(buffer),"%ld",m_certP15.ulUserConsent); tlv.SetTagData(0x04,(unsigned char *)buffer,(unsigned long)strlen(buffer)); sprintf_s(buffer,sizeof(buffer),"%ld",m_certP15.ulID); tlv.SetTagData(0x05,(unsigned char *)buffer,(unsigned long)strlen(buffer)); sprintf_s(buffer,sizeof(buffer),"%d",m_certP15.bAuthority); tlv.SetTagData(0x06,(unsigned char *)buffer,(unsigned long)strlen(buffer)); sprintf_s(buffer,sizeof(buffer),"%d",m_certP15.bImplicitTrust); tlv.SetTagData(0x07,(unsigned char *)buffer,(unsigned long)strlen(buffer)); sprintf_s(buffer,sizeof(buffer),"%s",m_certP15.csPath.c_str()); tlv.SetTagData(0x08,(unsigned char *)buffer,(unsigned long)strlen(buffer)); unsigned long ulLen=tlv.GetLengthNeeded(); unsigned char *pucData= new unsigned char[ulLen]; tlv.Extract(pucData,ulLen); CByteArray baCert(pucData,ulLen); delete[] pucData; return baCert; }
CByteArray APL_Certif::getTLV() { CTLVBuffer tlv; tlv.SetTagData(0x00,getData().GetBytes(),getData().Size()); CByteArray baP15=getP15TLV(); tlv.SetTagData(0x01,baP15.GetBytes(),baP15.Size()); unsigned long ulLen=tlv.GetLengthNeeded(); unsigned char *pucData= new unsigned char[ulLen]; tlv.Extract(pucData,ulLen); CByteArray baCert(pucData,ulLen); delete[] pucData; return baCert; }