static BOOL DigiCrypt_GetDataFromCert(PCCERT_CONTEXT pCertContext) { BOOL fRes = FALSE; char sContainer[dNAME_ITEM_LEN+1]; //DWORD dwLen; if (pCertContext == NULL) return(fRes); fRes = DigiCrypt_GetCSPFromCert(pCertContext, oG_sCSPName,dSTRING_ITEM_LEN); if (fRes == TRUE) { // DigiCrypt_GetDefaultKeyContainerNameSimple(oG_sCSPName); //this is not usable. Tarmo changed that! Instead we should use the following: if (DigiCrypt_GetContainerFromCert(pCertContext, sContainer, dNAME_ITEM_LEN) == TRUE) { lstrcpy(oG_sKeyContainerName,sContainer); } } //CertGetNameString(pCertContext,CERT_NAME_SIMPLE_DISPLAY_TYPE,CERT_NAME_ISSUER_FLAG,NULL,sTemp,dSTRING_ITEM_LEN); //CertGetNameString(pCertContext,CERT_NAME_ATTR_TYPE,CERT_NAME_ISSUER_FLAG,szOID_COMMON_NAME,sTemp,dSTRING_ITEM_LEN); //CertGetNameString(pCertContext,CERT_NAME_ATTR_TYPE,CERT_NAME_ISSUER_FLAG,szOID_SUR_NAME,sTemp,dSTRING_ITEM_LEN); //CertGetNameString(pCertContext,CERT_NAME_ATTR_TYPE,CERT_NAME_ISSUER_FLAG,szOID_ORGANIZATIONAL_UNIT_NAME,sTemp,dSTRING_ITEM_LEN); return(fRes); }
static BOOL DigiCrypt_GetDataFromCert(PCCERT_CONTEXT pCertContext) { BOOL fRes = FALSE; char sContainer[dNAME_ITEM_LEN+1]; //DWORD dwLen; if (pCertContext == NULL) return(fRes); fRes = DigiCrypt_GetCSPFromCert(pCertContext, oG_sCSPName,dSTRING_ITEM_LEN); if (fRes == TRUE) { // DigiCrypt_GetDefaultKeyContainerNameSimple(oG_sCSPName); //this is not usable. Tarmo changed that! Instead we should use the following: if (DigiCrypt_GetContainerFromCert(pCertContext, sContainer, dNAME_ITEM_LEN) == TRUE) { strncpy(oG_sKeyContainerName, sContainer, sizeof(oG_sKeyContainerName)); } } return(fRes); }
static void DigiCrypt_SelectCertsFromKeyContainer(HCRYPTPROV hProv, char *psContainerName) { PCCERT_CONTEXT pCertContext = NULL; HCERTSTORE hStore; BOOL fRelease = FALSE; char sContainer[dNAME_ITEM_LEN+1]; if (memcmp(psContainerName,"AUT",3) == 0) { LOG("Find1 Ignore AUT cert"); return; } hStore = DigiCrypt_OpenStore(); if (hStore != NULL) { while (TRUE) { pCertContext = CertEnumCertificatesInStore(hStore,pCertContext); if (pCertContext == NULL) break; else { if (DigiCrypt_GetContainerFromCert(pCertContext, sContainer, dNAME_ITEM_LEN) == TRUE) { LOG("Find1 Container %s %s",sContainer,psContainerName); if (lstrcmp(sContainer+3,psContainerName+3) == 0) { LOG("Find1 Container %s accepted",sContainer); RunDlg_AddItem(pCertContext,TRUE); } } } } } else LOG("Find1 Can't open store"); if (fRelease == TRUE) CryptReleaseContext(hProv, 0); }
static PCCERT_CONTEXT DigiCrypt_SelectFromAllKeysCerts(HCRYPTPROV hProvider) { PCCERT_CONTEXT pCertContext = NULL; HCRYPTPROV hProv; BYTE pbData[dNAME_ITEM_LEN+1]; DWORD cbData = dNAME_ITEM_LEN; DWORD dwFlag; BOOL fRes; BOOL fRelease = FALSE; CRYPT_KEY_PROV_INFO* poKeyInfo = NULL; char sContainer[dNAME_ITEM_LEN+1]; hProv = hProvider; if (hProv == 0) { fRes = OpenProvider(&hProv, oG_sCSPName, CRYPT_VERIFYCONTEXT); //fRes = CryptAcquireContext(&hProv,NULL,oG_sCSPName,PROV_RSA_FULL, CRYPT_VERIFYCONTEXT); if (fRes == FALSE) { LOG("Find1 - Can't open provider"); return(pCertContext); } fRelease = TRUE; } dwFlag = CRYPT_FIRST; fRes = TRUE; while (fRes == TRUE) { cbData = dNAME_ITEM_LEN; cbData = 0; fRes = CryptGetProvParam(hProv, PP_ENUMCONTAINERS, NULL, &cbData, dwFlag); if (fRes == TRUE) fRes = CryptGetProvParam(hProv, PP_ENUMCONTAINERS, pbData, &cbData, dwFlag); dwFlag = 0; if (fRes == FALSE) { if (GetLastError() == ERROR_NO_MORE_ITEMS) { LOG("Find1 End"); fRes = TRUE; break; } } else { LOG("Find1 select certs from %s",(char *)pbData); DigiCrypt_SelectCertsFromKeyContainer(hProv, (char *)pbData); } } pCertContext = RunDlg_RunDlg(); //we have selected the cert, but do we know corresponding key? //let change values of globals when these are different if (DigiCrypt_GetContainerFromCert(pCertContext, sContainer, dNAME_ITEM_LEN) == TRUE) { lstrcpy(oG_sKeyContainerName,sContainer); } if (fRelease == TRUE) CryptReleaseContext(hProv, 0); return(pCertContext); }