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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? fgccryptoapi.cpp

?? 可用于生成證書請(qǐng)求、安裝和驗(yàn)證數(shù)字證書的activex控件
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/*  
 *	Date		:	2004-09-13
 *	Author		:	Junhui Yang
 *	Filename	:	FGCCryptoAPI.cpp
 *	Description	:	FGCCryptoAPI is a code of CA from microsofe crypto API
*/

#include "stdafx.h"
#include "FGCCryptoAPI.h"
#include "FGString.h"
#include <wincrypt.h>
extern "C" {
#include "mymd5.h"
}

#define MY_ENCODING_TYPE  (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING)

#define CERT_STORE_NAME  L"MY"

#define ISSUER_NAME  L"FGC_CA2"

CHAR szProvider1[260] = { MS_DEF_PROV };
CHAR szProvider2[260] = { MS_ENHANCED_PROV };
CHAR szProvider3[260] = { MS_STRONG_PROV };

static char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
static char codes[256];





FGCCryptoAPI::FGCCryptoAPI()
{
	inicode ();
}

FGCCryptoAPI::~FGCCryptoAPI()
{
}

BOOL FGCCryptoAPI::CreatePKS10 (FGString sub, FGString& pks10str, BOOL isM)
{
	DWORD				cbNameEncoded;
	BYTE*				pbNameEncoded;
	CERT_NAME_BLOB		SubjNameBlob;
	CERT_REQUEST_INFO	CertReqInfo;
	HCRYPTPROV			hCryptProv;
	HCRYPTKEY			hPubKey = 0;

	DWORD					cbPublicKeyInfo;
	CERT_PUBLIC_KEY_INFO*	pbPublicKeyInfo;

	CRYPT_OBJID_BLOB			Parameters;
	CRYPT_ALGORITHM_IDENTIFIER  SigAlg;

	DWORD  cbEncodedCertReqSize;
	BYTE*  pbSignedEncodedCertReq;

	if (!CertStrToName(MY_ENCODING_TYPE, sub.String(), CERT_X500_NAME_STR, NULL, NULL, &cbNameEncoded, NULL)) {
		ShowError (1);
		return FALSE;
	}

	if(!(pbNameEncoded = (BYTE*)malloc(cbNameEncoded))) {
		ShowError (2);
		return FALSE;
	}

	if (!CertStrToName(MY_ENCODING_TYPE, sub.String(), CERT_X500_NAME_STR, NULL, pbNameEncoded, &cbNameEncoded, NULL)) {
		ShowError (3);
		free(pbNameEncoded);
		return FALSE;
	}

	SubjNameBlob.cbData = cbNameEncoded;
	SubjNameBlob.pbData = pbNameEncoded;
	CertReqInfo.Subject = SubjNameBlob;
	CertReqInfo.cAttribute = 0;
	CertReqInfo.rgAttribute = NULL;
	CertReqInfo.dwVersion = CERT_REQUEST_V1;

	FGString tstr = GetNameFormSubject (sub);

	tstr = "FGC_CA_" + tstr;

	if (isM) {
		tstr = tstr + "M";
	} else {
		tstr = tstr + "T";
	}

	CHAR SCPname[260];
	if (!GetCSPName(SCPname)) {
		free(pbNameEncoded);
		return FALSE;
	}

	if (!CryptAcquireContext(
				&hCryptProv,        // Address for handle to be returned.
				tstr.String(),      // Use the current user's logon name.
				SCPname,         // Use the default provider.
				PROV_RSA_FULL,      // Need to both encrypt and sign.
				0)) 
	{
		ShowError (33);
		if (!CryptAcquireContext(
			&hCryptProv,        // Address for handle to be returned.
			tstr.String(),	//szContainer,               // Use the current user's logon name.
			SCPname,               // Use the default provider.
			PROV_RSA_FULL,      // Need to both encrypt and sign.
			CRYPT_NEWKEYSET)) 
		{
			ShowError (4);
			free(pbNameEncoded);
			return FALSE;
		}
	}


/*
	if (!CryptAcquireContext(
				&hCryptProv,        // Address for handle to be returned.
				tstr.String(),      // Use the current user's logon name.
				szProvider3,         // Use the default provider.
				PROV_RSA_FULL,      // Need to both encrypt and sign.
				0)) 
	{
		ShowError (33);
		if (!CryptAcquireContext(
			&hCryptProv,        // Address for handle to be returned.
			tstr.String(),//szContainer,               // Use the current user's logon name.
			szProvider3,               // Use the default provider.
			PROV_RSA_FULL,      // Need to both encrypt and sign.
			CRYPT_NEWKEYSET)) 
		{
			ShowError (4);

			if (!CryptAcquireContext(
						&hCryptProv,        // Address for handle to be returned.
						tstr.String(),      // Use the current user's logon name.
						szProvider2,         // Use the default provider.
						PROV_RSA_FULL,      // Need to both encrypt and sign.
						0)) 
			{
				ShowError (34);
				if (!CryptAcquireContext(
					&hCryptProv,        // Address for handle to be returned.
					tstr.String(),//szContainer,               // Use the current user's logon name.
					szProvider2,               // Use the default provider.
					PROV_RSA_FULL,      // Need to both encrypt and sign.
					CRYPT_NEWKEYSET)) 
				{
					ShowError (35);
					if (!CryptAcquireContext(
								&hCryptProv,        // Address for handle to be returned.
								tstr.String(),      // Use the current user's logon name.
								szProvider1,         // Use the default provider.
								PROV_RSA_FULL,      // Need to both encrypt and sign.
								0)) 
					{
						ShowError (36);
						if (!CryptAcquireContext(
							&hCryptProv,        // Address for handle to be returned.
							tstr.String(),//szContainer,               // Use the current user's logon name.
							szProvider1,               // Use the default provider.
							PROV_RSA_FULL,      // Need to both encrypt and sign.
							CRYPT_NEWKEYSET)) 
						{
							ShowError (37);
							free(pbNameEncoded);
							return FALSE;
						}
					}
				}
			}
		}
	}*/

	// Generate Private/Public key pair
    if (!CryptGenKey (hCryptProv, AT_SIGNATURE, CRYPT_EXPORTABLE, &hPubKey)) {
		free(pbNameEncoded);
		ShowError (5);
		return FALSE;
	}

	if (!CryptGenKey(hCryptProv, AT_KEYEXCHANGE, CRYPT_EXPORTABLE, &hPubKey)) 
	{
		free(pbNameEncoded);
		ShowError (6);
		return FALSE;
	}

	
	if (!CryptExportPublicKeyInfo(
          hCryptProv,            // Provider handle
          AT_SIGNATURE,          // Key spec
          MY_ENCODING_TYPE,      // Encoding type
          NULL,                  // pbPublicKeyInfo
          &cbPublicKeyInfo))     // Size of PublicKeyInfo
	{
		free(pbNameEncoded);
		ShowError (7);
		return FALSE;
	}

	if (!(pbPublicKeyInfo = (CERT_PUBLIC_KEY_INFO*)malloc(cbPublicKeyInfo)))
	{
		free(pbNameEncoded);
		ShowError (8);
		return FALSE;
	}

	if (!CryptExportPublicKeyInfo(
          hCryptProv,            // Provider handle
          AT_SIGNATURE,          // Key spec
          MY_ENCODING_TYPE,      // Encoding type
          pbPublicKeyInfo,       // pbPublicKeyInfo
          &cbPublicKeyInfo))     // Size of PublicKeyInfo
	{
		free(pbNameEncoded);
		free(pbPublicKeyInfo);
		ShowError (9);
		return FALSE;
	}

	CertReqInfo.SubjectPublicKeyInfo = *pbPublicKeyInfo;

	memset (&Parameters, 0, sizeof(Parameters));
	SigAlg.pszObjId = szOID_OIWSEC_sha1RSASign;
	SigAlg.Parameters = Parameters;
	
	if (!CryptSignAndEncodeCertificate(
          hCryptProv,                      // Crypto provider
          AT_KEYEXCHANGE,                  // Key spec
          MY_ENCODING_TYPE,                // Encoding type
          X509_CERT_REQUEST_TO_BE_SIGNED,  // Structure type
          &CertReqInfo,                    // Structure information
          &SigAlg,                         // Signature algorithm
          NULL,                            // Not used
          NULL,                            // pbSignedEncodedCertReq
          &cbEncodedCertReqSize))
	{
		free(pbNameEncoded);
		free(pbPublicKeyInfo);
		ShowError (10);
		return FALSE;
	}

	if (!(pbSignedEncodedCertReq = (BYTE*)malloc(cbEncodedCertReqSize)))
	{
		free(pbNameEncoded);
		free(pbPublicKeyInfo);
		ShowError (11);
		return FALSE;
	}

	if (!CryptSignAndEncodeCertificate(
          hCryptProv,                     // Crypto provider
          AT_KEYEXCHANGE,                 // Key spec
          MY_ENCODING_TYPE,               // Encoding type
          X509_CERT_REQUEST_TO_BE_SIGNED, // Struct type
          &CertReqInfo,                   // Struct info        
          &SigAlg,                        // Signature algorithm
          NULL,                           // Not used
          pbSignedEncodedCertReq,         // Pointer
          &cbEncodedCertReqSize)) 
	{
		free(pbNameEncoded);
		free(pbPublicKeyInfo);
		free(pbSignedEncodedCertReq);
		ShowError (12);
		return FALSE;
	}

	pks10str = Base64Encode (pbSignedEncodedCertReq, cbEncodedCertReqSize);

	free (pbNameEncoded);
	free (pbPublicKeyInfo);
	free (pbSignedEncodedCertReq);

	CryptReleaseContext (hCryptProv,0);



	return TRUE;
}

BOOL FGCCryptoAPI::DelAccountInStore (FGString acc, BOOL isM)
{
	HCERTSTORE hStoreHandle;

	if (!( hStoreHandle = CertOpenStore(
		CERT_STORE_PROV_SYSTEM,
		MY_ENCODING_TYPE,
		NULL,
		CERT_SYSTEM_STORE_CURRENT_USER,
		CERT_STORE_NAME)))
	{
		ShowError (13);
		return FALSE;
	}

	PCCERT_CONTEXT pSignerCert = NULL;
	FGString orgstr = "M";
	if (!isM) {
		orgstr = "T";
	}

	while (pSignerCert = CertFindCertificateInStore(
						   hStoreHandle,
						   MY_ENCODING_TYPE,
						   0,
						   CERT_FIND_ISSUER_STR,
						   ISSUER_NAME,
						   pSignerCert))
	{
		FGString substr = DecodeName (&pSignerCert->pCertInfo->Subject);
		FGString subname = GetNameFormSubject (substr);
		FGString orgname = GetOrgFormSubject (substr);
		if (subname==acc && orgname==orgstr) {
			if (!CertDeleteCertificateFromStore (pSignerCert)) {
				CertFreeCertificateContext (pSignerCert);
				CertCloseStore (hStoreHandle, 0);
				ShowError (14);
				return FALSE;
			}
			CertFreeCertificateContext (pSignerCert);
			CertCloseStore (hStoreHandle, 0);

			return TRUE;
		}
	}
 
	if (pSignerCert) {
		CertFreeCertificateContext (pSignerCert);
	}

	CertCloseStore (hStoreHandle, 0);
	return FALSE;
}

BOOL FGCCryptoAPI::SetupCert (FGString PKS7)
{
	HCERTSTORE hStoreHandle;     // PKCS#7的證書庫(kù)
	HCERTSTORE hStoreHandle2;    // 系統(tǒng)的證書庫(kù)

	PCCERT_CONTEXT certcontext;   // PKCS#7證書庫(kù)里面的證書context
	PCCERT_CONTEXT certcontext2;  // 系統(tǒng)的證書庫(kù)里面的證書context

	BYTE* certencode = NULL;//(BYTE*)PKS7.String();
	DWORD certlen = 0;
	Base64Decode ((BYTE*)PKS7.String(), PKS7.Len(), &certencode, certlen);

	CRYPT_DATA_BLOB datablob;
	ZeroMemory(&datablob, sizeof(datablob)); 
	datablob.pbData = certencode;
	datablob.cbData = certlen;

	if (!( hStoreHandle = CertOpenStore(
		   CERT_STORE_PROV_PKCS7,
		   MY_ENCODING_TYPE,
		   NULL,
		   CERT_SYSTEM_STORE_CURRENT_USER,
		   &datablob)))
	{
		if (certencode) {
			delete[] certencode;
		}
		ShowError (15);
		return FALSE;
	}

	certcontext = CertEnumCertificatesInStore (hStoreHandle, NULL);
	if (!certcontext) {
		if (certencode) {
			delete[] certencode;
		}
		CertCloseStore (hStoreHandle, 0);
		ShowError (16);
		return FALSE;
	}


	FGString sub = DecodeName (&certcontext->pCertInfo->Subject);
	FGString tstr = GetNameFormSubject(sub);
	FGString ostr = GetOrgFormSubject (sub);
	tstr = "FGC_CA_" + tstr;
	tstr = tstr + ostr;

	if (!( hStoreHandle2 = CertOpenStore(
		CERT_STORE_PROV_SYSTEM,
		MY_ENCODING_TYPE,
		NULL,
		CERT_SYSTEM_STORE_CURRENT_USER,
		CERT_STORE_NAME)))
	{
		if (certencode) {
			delete[] certencode;
		}
		ShowError (17);
		CertFreeCertificateContext (certcontext);
		CertCloseStore (hStoreHandle, 0);
		return FALSE;
	}

	if (!CertAddCertificateContextToStore(
			hStoreHandle2,
			certcontext,
			CERT_STORE_ADD_USE_EXISTING,
			&certcontext2)) 
	{
		if (certencode) {
			delete[] certencode;
		}
		CertFreeCertificateContext (certcontext);
		CertCloseStore (hStoreHandle, 0);
		CertCloseStore (hStoreHandle2, 0);
		ShowError (18);
		return FALSE;
	}

	CRYPT_KEY_PROV_INFO key_info;
	ZeroMemory(&key_info, sizeof(key_info));

	//key_info.pwszContainerName = W_CONTAINER_NAME_M;
	
	WCHAR szwProvider[260];

	CHAR SCPname[260];
	if (!GetCSPName(SCPname)) {
		if (certencode) {
			delete[] certencode;
		}
		CertFreeCertificateContext (certcontext);
		CertFreeCertificateContext (certcontext2);
		CertCloseStore (hStoreHandle, 0);
		CertCloseStore (hStoreHandle2, 0);
		return FALSE;
	}

	WCHAR szwContainer[160];

	int i = (int)mbstowcs(szwContainer, tstr.String(), (size_t)(tstr.Len()+1));
    if (i == 0)
    {
		if (certencode) {
			delete[] certencode;
		}
		CertFreeCertificateContext (certcontext);
		CertFreeCertificateContext (certcontext2);
		CertCloseStore (hStoreHandle, 0);
		CertCloseStore (hStoreHandle2, 0);
		ShowError (19);
        return FALSE;
    }

    i = MultiByteToWideChar(0, 0, SCPname, -1, szwProvider, 260);
    if (i==0)
    {
		if (certencode) {
			delete[] certencode;
		}
		CertFreeCertificateContext (certcontext);
		CertFreeCertificateContext (certcontext2);
		CertCloseStore (hStoreHandle, 0);
		CertCloseStore (hStoreHandle2, 0);
		ShowError (20);
        return FALSE;
    }


	key_info.pwszContainerName = szwContainer;
	key_info.pwszProvName = szwProvider;
	key_info.dwProvType = PROV_RSA_FULL;
	key_info.dwFlags  = CERT_SET_KEY_CONTEXT_PROP_ID;
	key_info.dwKeySpec = AT_SIGNATURE;
/*
	PCCERT_CONTEXT certcontext2 = CertEnumCertificatesInStore (hStoreHandle2, NULL);
	if (!certcontext2) {
		if (certencode) {
			delete[] certencode;
		}
		return FALSE;
	}*/

	if (!CertSetCertificateContextProperty (certcontext2, 
											CERT_KEY_PROV_INFO_PROP_ID, 
											0, 
											(LPVOID)&key_info))
	{
		if (certencode) {
			delete[] certencode;
		}
		CertFreeCertificateContext (certcontext);
		CertFreeCertificateContext (certcontext2);
		CertCloseStore (hStoreHandle, 0);
		CertCloseStore (hStoreHandle2, 0);
		ShowError (21);
		return FALSE;
	}

	CertFreeCertificateContext (certcontext);
	CertFreeCertificateContext (certcontext2);

	CertCloseStore (hStoreHandle, 0);
	CertCloseStore (hStoreHandle2, 0);

	if (certencode) {
		delete[] certencode;
	}

	return TRUE;
}

BOOL FGCCryptoAPI::SignData (FGString acc, FGString ram, FGString& signeddata, BOOL isM)
{
	HCRYPTPROV	hCryptProv;

	acc = "FGC_CA_" + acc;

	if (isM) {
		acc = acc + "M";
	} else {
		acc = acc + "T";
	}

	CHAR SCPname[260];
	if (!GetCSPName(SCPname)) {
		return FALSE;
	}

	if (!CryptAcquireContext(
				&hCryptProv,        // Address for handle to be returned.
				acc.String(),       // Use the current user's logon name.
				SCPname,         // Use the default provider.
				PROV_RSA_FULL,      // Need to both encrypt and sign.
				0)) 
	{
		ShowError (22);
		return FALSE;
	}

/*
	if (!CryptAcquireContext(
				&hCryptProv,        // Address for handle to be returned.
				acc.String(),       // Use the current user's logon name.
				szProvider3,         // Use the default provider.
				PROV_RSA_FULL,      // Need to both encrypt and sign.
				0)) 
	{
		ShowError (22);
		if (!CryptAcquireContext(
					&hCryptProv,        // Address for handle to be returned.
					acc.String(),       // Use the current user's logon name.
					szProvider2,         // Use the default provider.
					PROV_RSA_FULL,      // Need to both encrypt and sign.
					0)) 
		{
			ShowError (38);
			if (!CryptAcquireContext(
						&hCryptProv,        // Address for handle to be returned.
						acc.String(),       // Use the current user's logon name.
						szProvider1,         // Use the default provider.
						PROV_RSA_FULL,      // Need to both encrypt and sign.
						0)) 
			{
				ShowError (39);
				return FALSE;
			}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美午夜不卡视频| 久久精品二区亚洲w码| 成人一区二区三区| 国产丝袜在线精品| 懂色av一区二区三区免费观看| 久久久91精品国产一区二区三区| 美女一区二区在线观看| 欧美电视剧在线看免费| 国产不卡在线播放| 一区二区日韩电影| 欧美一区二区国产| 国产成人免费xxxxxxxx| 日韩理论片在线| 在线精品视频免费观看| 亚洲精品国产精华液| 欧美日韩国产精品自在自线| 五月天网站亚洲| 精品噜噜噜噜久久久久久久久试看| 日本美女一区二区三区视频| 日韩女优av电影| 国产一区二区在线免费观看| 久久综合久久综合亚洲| 色婷婷av一区二区三区之一色屋| 麻豆精品精品国产自在97香蕉| 国产精品久久久久久亚洲伦 | 欧美精品在线观看一区二区| 九色综合狠狠综合久久| 一区二区三区四区高清精品免费观看 | 成人黄页在线观看| 成人午夜视频网站| 99精品视频在线播放观看| 成人性视频免费网站| 国产成人午夜片在线观看高清观看| 青青草91视频| 蜜桃av一区二区| 国模娜娜一区二区三区| 国产精品一级二级三级| 99在线热播精品免费| 91同城在线观看| 欧美伦理影视网| 久久久久免费观看| 亚洲欧洲日韩女同| 三级不卡在线观看| 国产最新精品精品你懂的| 久久99精品久久久久久国产越南 | 亚洲三级在线播放| 香蕉成人伊视频在线观看| 久99久精品视频免费观看| 99久久精品国产一区| 欧美高清性hdvideosex| 国产人成一区二区三区影院| 亚洲欧美日韩一区二区三区在线观看| 亚洲高清视频在线| 国产自产高清不卡| 欧美亚洲国产怡红院影院| 日韩视频在线你懂得| 亚洲青青青在线视频| 国产精品一区二区三区四区| 欧美三级视频在线播放| 欧美国产精品一区二区三区| 一区二区三区91| 成人h精品动漫一区二区三区| 91麻豆精品国产91久久久资源速度| 国产精品乱码人人做人人爱 | 欧美精品久久99久久在免费线| 欧美激情综合五月色丁香小说| 日本不卡一区二区三区高清视频| 91免费看`日韩一区二区| 久久久久久久综合日本| 日韩高清一级片| 欧美另类高清zo欧美| 亚洲免费色视频| 欧美在线观看一二区| 日韩美女视频一区二区| 波多野结衣中文字幕一区二区三区 | 26uuu亚洲综合色欧美| 久久97超碰色| 欧美一区二区在线不卡| 日本sm残虐另类| 日韩精品一区在线| 国产在线精品免费av| 久久先锋影音av鲁色资源网| 国产成人亚洲综合a∨婷婷| 欧美成人一区二区三区| 久色婷婷小香蕉久久| 久久婷婷色综合| 国产**成人网毛片九色| 亚洲欧洲另类国产综合| 色av成人天堂桃色av| 日韩福利电影在线| 亚洲精品一线二线三线| 成人黄色在线网站| 玉米视频成人免费看| 日韩女同互慰一区二区| 成人福利视频网站| 亚洲一区二区三区美女| 日韩一级精品视频在线观看| 狠狠网亚洲精品| 中文字幕一区二区三区精华液 | 久久综合九色综合97婷婷女人| 国产成人av电影在线观看| 亚洲美女视频一区| 欧美一级欧美一级在线播放| 国产白丝精品91爽爽久久| 中文字幕日韩精品一区| 欧美一区二区视频在线观看2022| 韩国一区二区三区| 亚洲一区在线播放| 国产精品欧美久久久久无广告 | 日日欢夜夜爽一区| 亚洲欧美在线aaa| 久久久精品影视| 宅男噜噜噜66一区二区66| 不卡视频一二三| 国产一区二区三区国产| 亚洲国产综合91精品麻豆| 国产精品午夜春色av| 精品国产91久久久久久久妲己| 欧美日韩精品电影| 色婷婷精品大在线视频| 成人av在线播放网址| 狠狠色狠狠色综合系列| 日本91福利区| 久草在线在线精品观看| 日韩福利视频网| 日韩电影在线观看网站| 亚洲va中文字幕| 日韩制服丝袜av| 日本不卡一二三| 久久国产精品第一页| 狠狠色丁香婷综合久久| 国产一区二三区| 国产91丝袜在线观看| 国产激情精品久久久第一区二区| 丰满少妇久久久久久久| 99在线视频精品| 欧美日韩日日骚| 91精品一区二区三区在线观看| 欧美日韩一级片网站| 精品盗摄一区二区三区| 久久久久亚洲蜜桃| 亚洲精选在线视频| 男人的j进女人的j一区| 国产成人一级电影| 91国偷自产一区二区开放时间| 欧美日韩综合一区| 久久久综合激的五月天| |精品福利一区二区三区| 日韩一区精品视频| 粉嫩绯色av一区二区在线观看 | 国产欧美一区二区三区鸳鸯浴| 亚洲欧美综合在线精品| 日韩激情视频网站| 成人午夜短视频| 91麻豆精品国产91久久久资源速度| 777午夜精品视频在线播放| 国产三级一区二区| 亚洲成a人片综合在线| 大尺度一区二区| 欧美伦理视频网站| 国产精品午夜春色av| 一区二区三区日韩欧美| 国产在线精品免费| 91精品福利在线一区二区三区| 国产精品欧美综合在线| 激情综合色综合久久| 欧美视频一区在线| 亚洲欧美精品午睡沙发| 成人开心网精品视频| 2023国产一二三区日本精品2022| 亚洲欧美日韩国产手机在线| 国产高清成人在线| 精品少妇一区二区三区| 日韩成人一区二区三区在线观看| 99vv1com这只有精品| 日本一区二区不卡视频| 国产主播一区二区三区| 欧美成人精品高清在线播放| 久久国产乱子精品免费女| 日韩精品一区二| 极品美女销魂一区二区三区| 精品国产1区二区| 韩国欧美一区二区| 中文字幕av一区二区三区高| 国精产品一区一区三区mba视频| 精品国产精品网麻豆系列 | 韩国在线一区二区| 久久九九全国免费| 成人手机在线视频| 亚洲蜜臀av乱码久久精品蜜桃| 欧美日韩国产一区| 日韩二区在线观看| 国产日韩三级在线| 91丨porny丨中文| 亚洲成人精品一区| 久久婷婷国产综合国色天香| 99精品欧美一区| 日韩精品乱码免费| 中文字幕制服丝袜成人av | 国产一区二区电影|