Пример #1
0
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);
}
Пример #2
0
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);
}
Пример #3
0
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);
}
Пример #4
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);
}