亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? certtools.cpp

?? 用于處理證書請求,生成證書的CA服務器源碼,
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
		return -3002;
	}

	bResult = CryptDecodeObjectEx(
	X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
	X509_CERT_REQUEST_TO_BE_SIGNED,//X509_CERT
	(unsigned char *)szBLOB,
	pcbBinary,
	0,
	NULL,
	*pvCertReqInfo,
	&pcbStructInfo
	);

	if (!bResult)
	{
		dwError = GetLastError();
		return -3005;
	}

	return 0;

}


//從指定的hCryptProv中獲取公鑰信息
int GetPublicKey (HCRYPTPROV hCryptProv, HANDLE hHeap,CERT_PUBLIC_KEY_INFO** keyinfo)
{
		int dwError;
		DWORD dwSize;
		BOOL bResult;
		// Get Public Key Info size
		bResult = CryptExportPublicKeyInfo(hCryptProv, AT_SIGNATURE, MYCODING_TYPE, NULL, &dwSize);
		if (!bResult)
		{
			dwError = GetLastError();
			return -3010;
		}

		// Allocate memory for Public Key Info
		*keyinfo = (PCERT_PUBLIC_KEY_INFO)HeapAlloc(hHeap, 0, dwSize);
		if (!(*keyinfo))
		{
			dwError = GetLastError();
			return -3012;
		}

		// Get Public Key Info
		bResult = CryptExportPublicKeyInfo(hCryptProv, AT_SIGNATURE, MYCODING_TYPE, *keyinfo, &dwSize);
                                 
		if (!bResult)
		{
			dwError = GetLastError();
			return -3013;
		}

		return dwSize;
}


//從指定的hCryptProv中獲取公鑰的HASH信息
int GetPubKeyHash(HCRYPTPROV hCryptProv,HANDLE hHeap,CERT_PUBLIC_KEY_INFO* PublicKeyInfo,DWORD *pdwSize,BYTE** pbKeyIdentifier)
{
		int dwError;
		BOOL bResult;
		HCRYPTHASH hHash = 0;

		// Create Hash
		bResult = CryptCreateHash(hCryptProv, CALG_SHA1, 0, 0, &hHash);
		if (!bResult)
		{
			dwError = GetLastError();
			return -3022;
		}

		// Hash Public Key Info
		bResult = CryptHashData(hHash, (LPBYTE)PublicKeyInfo, *pdwSize, 0);
		if (!bResult)
		{
			dwError = GetLastError();
			return -3025;
		}

		// Get Size of Hash
		bResult = CryptGetHashParam(hHash, HP_HASHVAL, NULL, pdwSize, 0);
		if (!bResult)
		{
			dwError = GetLastError();
			return -3030;
		}

		// Allocate Memory for Key Identifier (hash of Public Key info)
		*pbKeyIdentifier = (LPBYTE)HeapAlloc(hHeap, 0, *pdwSize);
		if (!(*pbKeyIdentifier))
		{
			dwError = GetLastError();
			return -3035;
		}

		// Get Hash of Public Key Info
		bResult = CryptGetHashParam(hHash, HP_HASHVAL, *pbKeyIdentifier, pdwSize, 0);
		if (!bResult)
		{
			dwError = GetLastError();
			return -3040;
		}

		if (hHash) CryptDestroyHash(hHash);

		return *pdwSize;

}



//將X509名字編碼成Name BLOB結構
BOOL XFCertStrToName(HANDLE hHeap,DWORD dwCertEncodingType,
  LPCTSTR pszX500,
  DWORD dwStrType,
  void* pvReserved,
  BYTE** pbEncoded,
  DWORD* pcbEncoded,
  LPCTSTR* ppszError)
{
		BOOL bResult;
		int dwError;
	// Get X509 Name and convert it to a Name Blob
      bResult = CertStrToName(dwCertEncodingType,
                          pszX500,
                          dwStrType,
                          pvReserved,
                          NULL,
                          pcbEncoded,
                          ppszError);
      if (!bResult)
		{
			dwError = GetLastError();
			return FALSE;
		}

      // Allocate memory for Name Blob
      *pbEncoded = (LPBYTE)HeapAlloc(hHeap, 0, *pcbEncoded);
      if (!pbEncoded)
     {
			dwError = GetLastError();
			return FALSE;
		}

      // Convert X509 Name to Name Blob
      bResult = CertStrToName(dwCertEncodingType,
                          pszX500,
                          dwStrType,
                          pvReserved,
                          *pbEncoded,
                          pcbEncoded,
                          ppszError);
      if (!bResult)
     {
			dwError = GetLastError();
			return FALSE;
		}
	  return TRUE;
}


//ASN.1編碼
BOOL XFCryptEncodeObject(
  HANDLE hHeap,
  DWORD dwCertEncodingType,
  LPCSTR lpszStructType,
  const void* pvStructInfo,
  BYTE** pbEncoded,
  DWORD* pcbEncoded
)
{
		BOOL bResult;
		int dwError;
	  // Get Subject Key Identifier Extension size
      bResult = CryptEncodeObject(dwCertEncodingType,
                                  lpszStructType,
                                  pvStructInfo,
                                  NULL, 
								  pcbEncoded);
      if (!bResult)
     {
			dwError = GetLastError();
			return FALSE;
		}

      // Allocate Memory for Subject Key Identifier Blob
      *pbEncoded = (LPBYTE)HeapAlloc(hHeap, 0, *pcbEncoded);
      if (!pbEncoded)
      {
         dwError = GetLastError();
			return FALSE;
      }

      // Get Subject Key Identifier Extension
      bResult = CryptEncodeObject(dwCertEncodingType,
                                  lpszStructType,
                                  pvStructInfo,
                                  *pbEncoded, 
								  pcbEncoded);
     if (!bResult)
     {
			dwError = GetLastError();
			return FALSE;
		}
	return TRUE;

}


//寫數據到文件
int WriteToFile(const void* pBuf,DWORD nLen,char *FileName)
{
	FILE	*fp;
	DWORD	nRtnLen=0;
	fp = fopen(FileName,"wb");
	if(fp == NULL)
		return -3050;
	nRtnLen = fwrite(pBuf,1,nLen,fp);
	if(nRtnLen != nLen)
		return nRtnLen;
	fflush(fp);
	fclose(fp);
		return  nRtnLen;
}


//從文件讀數據
int ReadFromFile(void* pBuf,DWORD nLen,char *FileName)
{
	FILE	*fp;
	int		nRtn;
	fp = fopen(FileName,"rb");
	if(fp == NULL)
		return -3055;
	nRtn=fread(pBuf,1,nLen,fp);
	if(nRtn <= 0)
		return -3060;
	fclose(fp);
		return nRtn;
}


//從證書中獲取公鑰
BOOL GetRSAKeyFromCert(PCCERT_CONTEXT pCertContext,
                       BOOL fSign,
                       HCRYPTPROV *hProv,
                       HCRYPTKEY *hPubKey,
                       DWORD *dwKeySpec,
                       BOOL *fFreeProv)
{   
   BOOL fResult;
   BOOL fReturn = FALSE;
   DWORD dwError;
   
   while(1)
   {  
      if (hProv == NULL || hPubKey == NULL || 
          dwKeySpec == NULL || fFreeProv == NULL)
      {
         break;
      }

      *hProv = 0;
      *hPubKey = 0;
      *fFreeProv = FALSE;
    
      if (fSign)
      {
         // Acquire the certificate's private key
         fResult = CryptAcquireCertificatePrivateKey(pCertContext,
                                                     CRYPT_ACQUIRE_USE_PROV_INFO_FLAG|
                                                     CRYPT_ACQUIRE_COMPARE_KEY_FLAG,
                                                     NULL,
                                                     hProv,
                                                     dwKeySpec,
                                                     fFreeProv);
         if (!fResult)
         {
            dwError = GetLastError();
            break;
         }
      }
      else
      {
         fResult = CryptAcquireContext(hProv, 
                                       NULL, 
                                       szProvider,
                                       PROV_RSA_FULL, 
                                       CRYPT_VERIFYCONTEXT);
         if (!fResult)
         {
			dwError = GetLastError();
            break;
         }

         *fFreeProv = TRUE;

         // Import the public key from the certificate so we can verify
         fResult = CryptImportPublicKeyInfo(*hProv,
                                            MYCODING_TYPE,
                                            &(pCertContext->pCertInfo->SubjectPublicKeyInfo),
                                            hPubKey);
         if (!fResult)
         {
            dwError = GetLastError();
            break;
         } 
		 

      }

      fReturn = TRUE;
	  break;
   }	//end while


   {
      if (!fReturn)
      {
         if (*hPubKey != NULL) 
         {
            CryptDestroyKey(*hPubKey);
            *hPubKey = NULL;
         }

         if ((*fFreeProv == TRUE) && (*hProv != NULL)) 
         {
            CryptReleaseContext(*hProv, 0);
            *hProv = NULL;
            *fFreeProv = FALSE;
         }
      }
   }

   return fReturn;
}



//獲取本機的格林威治時間
bool ReadTime(unsigned char *pTimeBuf,int nBufLen)
{
	long	thistime=0;
	struct tm	*pTm=NULL;

	if(nBufLen < 16)
		return false;
	time(&thistime);
	
	pTm = gmtime(&thistime);
	sprintf((char *)pTimeBuf,"%04d%02d%02d-%02d%02d%02d",pTm->tm_year+1900,pTm->tm_mon+1,pTm->tm_mday,pTm->tm_hour,pTm->tm_min,pTm->tm_sec);
	return	true;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜婷婷国产麻豆精品| 亚洲成人精品影院| 亚洲成人先锋电影| 国产精品亚洲综合一区在线观看| 91蜜桃网址入口| 久久精品免视看| 美女在线视频一区| 欧美日高清视频| 亚洲黄色av一区| 成人性生交大片免费看在线播放| 日韩一区二区中文字幕| 亚洲黄色小说网站| 成人av综合在线| 国产欧美精品区一区二区三区| 全部av―极品视觉盛宴亚洲| 色94色欧美sute亚洲线路二| 一区在线观看视频| 国产剧情一区在线| 欧美mv日韩mv亚洲| 日韩成人一区二区三区在线观看| 色哟哟欧美精品| 亚洲色欲色欲www在线观看| 成人性视频网站| 欧美激情一区二区三区四区 | 亚洲午夜免费视频| 日本伦理一区二区| 一区二区三区中文字幕电影| 一本色道久久综合亚洲aⅴ蜜桃| 中文字幕一区二区三区色视频 | 精品日本一线二线三线不卡| 亚洲在线观看免费| 欧美无砖专区一中文字| 一区二区三区日韩精品| 欧美性淫爽ww久久久久无| 一区二区三区波多野结衣在线观看| 99久久久无码国产精品| 亚洲婷婷在线视频| 欧美亚洲综合一区| 日韩精品一二三区| 精品久久久久一区| 高清国产午夜精品久久久久久| 国产日韩av一区| 色综合夜色一区| 亚洲国产精品一区二区久久| 欧美日韩成人综合在线一区二区 | 一区二区三区.www| 欧美性受xxxx黑人xyx| 亚洲国产一区在线观看| 欧美三级电影精品| 蜜臀国产一区二区三区在线播放| 久久日一线二线三线suv| 精一区二区三区| 国产精品毛片高清在线完整版 | 日韩精品一区二区三区视频在线观看| 蜜臀av性久久久久蜜臀aⅴ四虎 | 国产精品一区一区| 国产精品理论在线观看| 欧美日精品一区视频| 久久er精品视频| 亚洲欧美经典视频| 日韩一级精品视频在线观看| 国产黑丝在线一区二区三区| 亚洲精品欧美专区| 精品国产一区二区三区久久影院 | 成人小视频在线观看| 亚洲大尺度视频在线观看| 精品免费日韩av| 97精品电影院| 国产一区三区三区| 一区二区三区免费看视频| 日韩免费高清av| 色综合久久天天综合网| 精品一区二区影视| 亚洲综合久久久久| 欧美激情在线一区二区| 欧美精品日韩一本| 91丨porny丨在线| 久久国产欧美日韩精品| 亚洲精品成人在线| 国产亚洲精品精华液| 欧美日韩一区视频| 91在线播放网址| 国产精品一区专区| 日韩**一区毛片| 一区二区三区不卡视频在线观看 | 午夜不卡av在线| 亚洲国产岛国毛片在线| 日韩欧美国产电影| 欧美日韩美女一区二区| 精品剧情在线观看| 色哟哟一区二区在线观看| 国产在线精品一区二区| 蜜臀va亚洲va欧美va天堂| 亚洲成人动漫在线免费观看| 日韩久久一区二区| 欧美国产视频在线| 久久精品日韩一区二区三区| 精品久久久久久综合日本欧美 | 久久久久久黄色| 日韩视频在线一区二区| 欧美日韩国产首页| 欧美性猛交xxxxxx富婆| 91伊人久久大香线蕉| 成人av网站在线观看免费| 韩国av一区二区三区四区| 麻豆精品一区二区av白丝在线| 日韩中文字幕麻豆| 丝袜国产日韩另类美女| 一区二区三国产精华液| 一区二区三区四区亚洲| 一区二区三区中文字幕电影| 一区二区成人在线观看| 亚洲精品国产成人久久av盗摄| 亚洲天堂成人在线观看| 亚洲欧美成aⅴ人在线观看| 亚洲精品水蜜桃| 亚洲高清免费视频| 人妖欧美一区二区| 国内外成人在线| 国产一区二区不卡在线| 国产超碰在线一区| 91在线观看下载| 欧美日韩亚洲综合在线| 欧美一区在线视频| 久久精品夜色噜噜亚洲a∨| 国产精品毛片大码女人| 一区二区三区欧美在线观看| 首页国产丝袜综合| 国内精品久久久久影院色| 国产精品一区免费在线观看| 国产91丝袜在线观看| 99re这里只有精品首页| 欧美色图在线观看| 欧美一级国产精品| 欧美国产一区二区| 亚洲一区二区三区四区的| 日本特黄久久久高潮| 粉嫩一区二区三区性色av| 91丨国产丨九色丨pron| 欧美一三区三区四区免费在线看 | 成人一级视频在线观看| 色av成人天堂桃色av| 欧美一区二区观看视频| 国产亚洲一区二区在线观看| 亚洲人精品一区| 麻豆精品一二三| 99热这里都是精品| 51精品国自产在线| 国产欧美一二三区| 亚州成人在线电影| 国产精品亚洲а∨天堂免在线| 色婷婷国产精品| 精品少妇一区二区三区在线播放| 国产精品久久久久一区二区三区共| 一区二区三区蜜桃网| 国产精品18久久久久久久久久久久 | 色综合色狠狠综合色| 日韩一区二区三区av| 国产精品久久久久影院老司| 色婷婷综合久久久中文字幕| 日韩免费视频线观看| 亚洲欧美一区二区三区孕妇| 久久精品国产久精国产| 日本黄色一区二区| 国产欧美一区二区精品性色超碰| 亚洲va欧美va人人爽午夜| 国产91精品欧美| 欧美成人精品二区三区99精品| 亚洲蜜臀av乱码久久精品| 国产白丝精品91爽爽久久| 日韩欧美美女一区二区三区| 亚洲理论在线观看| 成人短视频下载| 久久免费午夜影院| 六月婷婷色综合| 欧美人牲a欧美精品| 综合av第一页| 成人禁用看黄a在线| 久久久亚洲国产美女国产盗摄 | 91污片在线观看| 久久久久国产一区二区三区四区| 日韩影院精彩在线| 欧美日韩视频在线观看一区二区三区| 国产精品久久久久一区二区三区| 国产一区二区视频在线| 精品国一区二区三区| 久久99九九99精品| 日韩一区二区三区电影| 日韩中文字幕一区二区三区| 欧美日本在线看| 亚洲v中文字幕| 欧美久久久影院| 婷婷开心久久网| 欧美美女一区二区三区| 亚洲永久精品大片| 欧美日韩国产电影| 免费在线观看精品| 欧美刺激脚交jootjob| 久久国产精品99精品国产| 精品国产乱码久久久久久免费|