Esempio n. 1
0
TEST(SKF_CONTAINER_MANAGE,SKF_ImportCertificate_Test)
{
    ULONG result;
    LPSTR containerName;
    ULONG containerType;
    SKF_ImportCertificate skf_importCertificate = SKF_ImportCertificate(GetProcAddress(hmodule,"SKF_ImportCertificate"));
    result = skf_importCertificate(hContainer,FALSE,NULL,0);
    EXPECT_EQ(0,(int)result);
}
Esempio n. 2
0
DWORD WINAPI ThreadFuncSKFImportCerts(LPVOID aThisClass)
{
	CClassCommon * thisClass = (CClassCommon*)aThisClass;

	char szDevNameLists[BUFFER_LEN_1K] = {0};
	char szAppNameLists[BUFFER_LEN_1K] = {0};
	char szConNameLists[BUFFER_LEN_1K];

	ULONG ulDevNameLists = BUFFER_LEN_1K;
	ULONG ulAppNameLists = BUFFER_LEN_1K;
	ULONG ulConNameLists = BUFFER_LEN_1K;

	HANDLE hDevSKF = NULL;
	HANDLE hConSKF = NULL;
	HANDLE hAppSKF = NULL;

	// 枚举设备
	thisClass->ulResult = SKF_EnumDev(TRUE,szDevNameLists,&ulDevNameLists);
	if(thisClass->ulResult)
	{
		goto err;
	}

	if(ulDevNameLists < 2)
	{
		thisClass->ulResult = OPE_ERR_NO_DEV;
		goto err;
	}
	// 打开设备
	thisClass->ulResult = SKF_ConnectDev(szDevNameLists,&hDevSKF);
	if(ulDevNameLists < 2)
	{
		goto err;
	}

	thisClass->ulResult = SKF_EnumApplication(hDevSKF,szAppNameLists, &ulAppNameLists);

	// 设备认证或者打开一个应用
	if (ulAppNameLists < 2)
	{
		thisClass->ulResult = FuncSKF_DevAuth(hDevSKF,&hAppSKF,(thisClass->m_szPIN),8);
	}
	else
	{
		thisClass->ulResult = SKF_OpenApplication(hDevSKF, szAppNameLists,&hAppSKF);
	}

	// 验证密码
	thisClass->ulResult = SKF_VerifyPIN(hAppSKF, 1, (thisClass->m_szPIN),&(thisClass->m_ulRetry));
	if(thisClass->ulResult)
	{
		goto err;
	}

	// 枚举容器
	thisClass->ulResult = SKF_EnumContainer(hAppSKF,szConNameLists,&ulConNameLists);
	if(thisClass->ulResult)
	{
		goto err;
	}
	// 创建或打开容器
	if (ulConNameLists < 2)
	{
		thisClass->ulResult = SKF_CreateContainer(hAppSKF, DEFAULT_CONTAINER, &hConSKF);
	}
	else
	{
		thisClass->ulResult = SKF_OpenContainer(hAppSKF, szConNameLists, &hConSKF);
	}

	if(thisClass->ulResult)
	{
		goto err;
	}
	// 导入证书
	thisClass->ulResult = SKF_ImportCertificate(hConSKF, 1, thisClass->m_szCertSIGN,thisClass->m_iCertSIGNLen);
	if(thisClass->ulResult)
	{
		goto err;
	}
	// 导入证书
	thisClass->ulResult = SKF_ImportCertificate(hConSKF, 0, thisClass->m_szCertEX,thisClass->m_iCertEXLen);
	if(thisClass->ulResult)
	{
		goto err;
	}

	// 拷贝签名公钥
	memcpy(thisClass->m_szPublicKeyEX, 
		thisClass->m_stEnvelopedKeyBlobEX.PubKey.XCoordinate + SM2_BYTES_LEN, 
		SM2_BYTES_LEN);
	memcpy(thisClass->m_szPublicKeyEX+SM2_BYTES_LEN, 
		thisClass->m_stEnvelopedKeyBlobEX.PubKey.YCoordinate + SM2_BYTES_LEN, 
		SM2_BYTES_LEN);

	FILE_LOG_FMT(file_log_name, "%s %d %d", __FUNCTION__, __LINE__, 1);

	FILE_LOG_HEX(file_log_name,thisClass->m_szPublicKeyEX,SM2_BYTES_LEN * 2);

err:
	if (hConSKF)
	{
		SKF_CloseContainer(hConSKF);
	}

	if (hAppSKF)
	{
		SKF_CloseApplication(hAppSKF);
	}

	if (hDevSKF)
	{
		SKF_DisConnectDev(hDevSKF);
	}

	return 0;
}