|
|
@@ -10,7 +10,7 @@
|
|
|
|
|
|
#define PUKFILENAME_RSA "RVCPubKey.ini"
|
|
|
#define PUKFILENAME_SM2 "RVCSM2PubKey.ini"
|
|
|
-
|
|
|
+#include "MyBase64.h"
|
|
|
CInitializerConn::CInitializerConn(CEntityBase *pEntity)
|
|
|
:SpSecureClient(pEntity)
|
|
|
{
|
|
|
@@ -20,8 +20,9 @@ CInitializerConn::~CInitializerConn()
|
|
|
{
|
|
|
}
|
|
|
|
|
|
-ErrorCodeEnum CInitializerConn::SendLoginPackage(const char *pUserID, const char *pPwd)
|
|
|
+DWORD CInitializerConn::SendLoginPackage(const char *pUserID, const char *pPwd)
|
|
|
{
|
|
|
+ LOG_FUNCTION();
|
|
|
assert(IsConnectionOK());
|
|
|
|
|
|
UserLoginReq req;
|
|
|
@@ -29,12 +30,11 @@ ErrorCodeEnum CInitializerConn::SendLoginPackage(const char *pUserID, const char
|
|
|
|
|
|
CSystemStaticInfo si;
|
|
|
m_pEntity->GetFunction()->GetSystemStaticInfo(si);
|
|
|
-
|
|
|
Dbg("UserID[%s],PWD[%s], TerminalID[%s]",pUserID, pPwd, si.strTerminalID);
|
|
|
|
|
|
// 设备号
|
|
|
strncpy(&req.szTerminalNo[0], (const char*)si.strTerminalID, sizeof(req.szTerminalNo)-1);
|
|
|
-
|
|
|
+
|
|
|
int nLen = strlen(pUserID);
|
|
|
strncpy(req.szUser, pUserID, nLen > 16 ? 16 : nLen);
|
|
|
|
|
|
@@ -44,11 +44,10 @@ ErrorCodeEnum CInitializerConn::SendLoginPackage(const char *pUserID, const char
|
|
|
CSmartPointer<IPackage> package = CreateNewPackage("Login");
|
|
|
package->AddStruct("LOGINREQ", false, false, (BYTE*)&req, sizeof(req));
|
|
|
|
|
|
- //Dbg("send user login request now");
|
|
|
return SendPackage(package) != "" ? Error_Succeed : Error_Unexpect;
|
|
|
}
|
|
|
|
|
|
-ErrorCodeEnum CInitializerConn::SendInitMKPackage()
|
|
|
+DWORD CInitializerConn::SendInitMKPackage()
|
|
|
{
|
|
|
assert(IsConnectionOK());
|
|
|
|
|
|
@@ -61,12 +60,12 @@ ErrorCodeEnum CInitializerConn::SendInitMKPackage()
|
|
|
if (pEntity->HasPinPad())
|
|
|
{
|
|
|
CSmartPointer<IConfigInfo> pConfig;
|
|
|
- ErrorCodeEnum rc = pFunc->OpenConfig(Config_CenterSetting, pConfig);
|
|
|
+ DWORD rc = pFunc->OpenConfig(Config_CenterSetting, pConfig);
|
|
|
if (rc != Error_Succeed)
|
|
|
{
|
|
|
- LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_READ_WRITE_FILE,
|
|
|
+ LogWarn(Severity_Middle,(ErrorCodeEnum) rc, ERR_INITIALIZER_READ_WRITE_FILE,
|
|
|
GetOutPutStr("%s%08X%s%s", "OpenConfig", rc,"File","Config_CenterSetting").c_str());
|
|
|
- //LogError(Severity_Low, Error_Unexpect, ERROR_INITIALIZER_OPENCENTERSETTING, (const char*)CSimpleStringA::Format("open centersetting fail"));
|
|
|
+ rc = ERR_INITIALIZER_READ_WRITE_FILE;
|
|
|
pEntity->m_strLastErrMsg = CSimpleStringA::Format("打开集中配置失败,请先下载集中配置!");
|
|
|
return rc;
|
|
|
}
|
|
|
@@ -78,77 +77,74 @@ ErrorCodeEnum CInitializerConn::SendInitMKPackage()
|
|
|
|
|
|
if (rc != Error_Succeed)
|
|
|
{
|
|
|
- LogWarn(Severity_Low, Error_Unexpect, ERR_INITIALIZER_READ_WRITE_FILE,
|
|
|
+ LogWarn(Severity_Low,(ErrorCodeEnum) rc, ERR_INITIALIZER_READ_WRITE_FILE,
|
|
|
GetOutPutStr("%s%08X%s%s", "ReadConfigValue", rc, "File", "SubBankNo & BranchNo").c_str());
|
|
|
- //LogError(Severity_Low, Error_Unexpect, ERROR_INITIALIZER_READCENTERSETTING,
|
|
|
- // (const char*)CSimpleStringA::Format("read entity config [SubBankNo] & [BranchNo] fail"));
|
|
|
|
|
|
pEntity->m_strLastErrMsg = CSimpleStringA::Format("集中配置Initializer节点下没有找到SubBankNo和BranchNo配置项,请联系分行技术部!");
|
|
|
+ rc = ERR_INITIALIZER_READ_WRITE_FILE;
|
|
|
return rc;
|
|
|
}
|
|
|
-
|
|
|
- // 1:3des only; 2: sm4 only; 3: both 3des and sm4
|
|
|
- int nCapability = pEntity->GetPinPadCapability();
|
|
|
- Dbg("pinpad capability: %d", nCapability);
|
|
|
- if (nCapability == 1 || nCapability == 3)
|
|
|
+ //国产化之后不再使用原方法获取KMC密钥
|
|
|
+ /*
|
|
|
{
|
|
|
- // support des key
|
|
|
- char buf[632];
|
|
|
- memset(buf, 0, 632);
|
|
|
- MKDownloadReq2 *pReq2 = (MKDownloadReq2*)buf;
|
|
|
- strncpy(pReq2->szSubBankNo, (const char*)strSubBankNo, sizeof(pReq2->szSubBankNo) - 1);
|
|
|
- strncpy(pReq2->szBranchNo, (const char*)strBranchNo, sizeof(pReq2->szBranchNo) - 1);
|
|
|
-
|
|
|
- CBlob blob;
|
|
|
- blob.Refer(pReq2->kmcData, 600);
|
|
|
-
|
|
|
- rc = pEntity->CreateInitMKData(blob, false);
|
|
|
- if (rc != Error_Succeed)
|
|
|
+ // 1:3des only; 2: sm4 only; 3: both 3des and sm4
|
|
|
+ int nCapability = pEntity->GetPinPadCapability();
|
|
|
+ Dbg("pinpad capability: %d", nCapability);
|
|
|
+ if (nCapability == 1 || nCapability == 3)
|
|
|
{
|
|
|
- LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_CREATE_INIT_MK,
|
|
|
- GetOutPutStr("%s%d", "CreateInitTMK", rc).c_str());
|
|
|
- //LogError(Severity_Low, Error_Unexpect, ERROR_INITIALIZER_CREATEINITMKDATA,
|
|
|
- // (const char*)CSimpleStringA::Format("CreateInitTMKReq(0) fail, GetKMCLastErrMsg[%s], return[%d]",
|
|
|
- // (const char*)pEntity->GetKMCLastErrMsg(), rc));
|
|
|
-
|
|
|
- pEntity->m_strLastErrMsg = CSimpleStringA::Format("调用KMC接口CreateInitTMKReq(0)失败,错误信息[%s],返回值[%d],请联系维护人员!",
|
|
|
- (const char*)pEntity->GetKMCLastErrMsg(), rc);
|
|
|
- return rc;
|
|
|
- }
|
|
|
+ // support des key
|
|
|
+ char buf[632];
|
|
|
+ memset(buf, 0, 632);
|
|
|
+ MKDownloadReq2* pReq2 = (MKDownloadReq2*)buf;
|
|
|
+ strncpy(pReq2->szSubBankNo, (const char*)strSubBankNo, sizeof(pReq2->szSubBankNo) - 1);
|
|
|
+ strncpy(pReq2->szBranchNo, (const char*)strBranchNo, sizeof(pReq2->szBranchNo) - 1);
|
|
|
|
|
|
- // 添加KMC信息
|
|
|
- package->AddStruct("MKD_REQ2", false, false, (BYTE*)buf, sizeof(MKDownloadReq2)+blob.m_iLength);
|
|
|
- }
|
|
|
+ CBlob blob;
|
|
|
+ blob.Refer(pReq2->kmcData, 600);
|
|
|
|
|
|
- if (nCapability == 2 || nCapability == 3)
|
|
|
- {
|
|
|
- // support sm key
|
|
|
- char buf[632];
|
|
|
- memset(buf, 0, 632);
|
|
|
- SMMKDownloadReq2 *pReq2 = (SMMKDownloadReq2*)buf;
|
|
|
- strncpy(pReq2->szSubBankNo, (const char*)strSubBankNo, sizeof(pReq2->szSubBankNo) - 1);
|
|
|
- strncpy(pReq2->szBranchNo, (const char*)strBranchNo, sizeof(pReq2->szBranchNo) - 1);
|
|
|
-
|
|
|
- CBlob blob;
|
|
|
- blob.Refer(pReq2->kmcData, 600);
|
|
|
-
|
|
|
- rc = pEntity->CreateInitMKData(blob, true);
|
|
|
- if (rc != Error_Succeed)
|
|
|
- {
|
|
|
- LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_CREATE_INIT_MK,
|
|
|
- GetOutPutStr("%s%d", "CreateInitTMK", rc).c_str());
|
|
|
- //LogError(Severity_Low, Error_Unexpect, ERROR_INITIALIZER_CREATEINITMKDATA,
|
|
|
- // (const char*)CSimpleStringA::Format("CreateInitTMKReq(1) fail, GetKMCLastErrMsg[%s], return[%d]",
|
|
|
- // (const char*)((CInitializerEntity*)m_pEntity)->GetKMCLastErrMsg(), rc));
|
|
|
-
|
|
|
- pEntity->m_strLastErrMsg = CSimpleStringA::Format("调用KMC接口CreateInitTMKReq(0)失败,错误信息[%s],返回值[%d],请联系维护人员",
|
|
|
- (const char*)pEntity->GetKMCLastErrMsg(), rc);
|
|
|
- return rc;
|
|
|
+ rc = pEntity->CreateInitMKData(blob, false);
|
|
|
+ if (rc != Error_Succeed)
|
|
|
+ {
|
|
|
+ LogWarn(Severity_Middle, (ErrorCodeEnum)rc, ERR_INITIALIZER_CREATE_INIT_MK,
|
|
|
+ GetOutPutStr("%s%d", "CreateInitTMK", rc).c_str());
|
|
|
+ rc = ERR_INITIALIZER_CREATE_INIT_MK;
|
|
|
+ pEntity->m_strLastErrMsg = CSimpleStringA::Format("调用KMC接口CreateInitTMKReq(0)失败,错误信息[%s],返回值[%d],请联系维护人员!",
|
|
|
+ (const char*)pEntity->GetKMCLastErrMsg(), rc);
|
|
|
+ return rc;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加KMC信息
|
|
|
+ package->AddStruct("MKD_REQ2", false, false, (BYTE*)buf, sizeof(MKDownloadReq2) + blob.m_iLength);
|
|
|
}
|
|
|
|
|
|
- // 添加KMC信息
|
|
|
- package->AddStruct("MKD_SMR2", false, false, (BYTE*)buf, sizeof(SMMKDownloadReq2)+blob.m_iLength);
|
|
|
+ if (nCapability == 2 || nCapability == 3)
|
|
|
+ {
|
|
|
+ // support sm key
|
|
|
+ char buf[632];
|
|
|
+ memset(buf, 0, 632);
|
|
|
+ SMMKDownloadReq2* pReq2 = (SMMKDownloadReq2*)buf;
|
|
|
+ strncpy(pReq2->szSubBankNo, (const char*)strSubBankNo, sizeof(pReq2->szSubBankNo) - 1);
|
|
|
+ strncpy(pReq2->szBranchNo, (const char*)strBranchNo, sizeof(pReq2->szBranchNo) - 1);
|
|
|
+
|
|
|
+ CBlob blob;
|
|
|
+ blob.Refer(pReq2->kmcData, 600);
|
|
|
+
|
|
|
+ rc = pEntity->CreateInitMKData(blob, true);
|
|
|
+ if (rc != Error_Succeed)
|
|
|
+ {
|
|
|
+ LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_CREATE_INIT_MK,
|
|
|
+ GetOutPutStr("%s%d", "CreateInitTMK", rc).c_str());
|
|
|
+ rc = ERR_INITIALIZER_CREATE_INIT_MK;
|
|
|
+ pEntity->m_strLastErrMsg = CSimpleStringA::Format("调用KMC接口CreateInitTMKReq(0)失败,错误信息[%s],返回值[%d],请联系维护人员",
|
|
|
+ (const char*)pEntity->GetKMCLastErrMsg(), rc);
|
|
|
+ return rc;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加KMC信息
|
|
|
+ package->AddStruct("MKD_SMR2", false, false, (BYTE*)buf, sizeof(SMMKDownloadReq2) + blob.m_iLength);
|
|
|
+ }
|
|
|
}
|
|
|
+ */
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -204,7 +200,7 @@ ErrorCodeEnum CInitializerConn::SendInitMKPackage()
|
|
|
|
|
|
si.EnrolGPS.GetBinaryLongitude(&pReq1->enrolGPS[0]);
|
|
|
si.EnrolGPS.GetBinaryLatitude(&pReq1->enrolGPS[4]);
|
|
|
-
|
|
|
+ Dbg("GPS=%s",(char*)&pReq1->enrolGPS);
|
|
|
strcpy(pReq1->szEnrolAddr, (const char*)si.strEnrolAddr);
|
|
|
|
|
|
int nStructLen = sizeof(MKDownloadNew1)+strlen(pReq1->szEnrolAddr); // 变长结构长度计算
|
|
|
@@ -212,12 +208,12 @@ ErrorCodeEnum CInitializerConn::SendInitMKPackage()
|
|
|
|
|
|
// 获取硬件信息
|
|
|
CAutoArray<CSimpleStringA> devNames;
|
|
|
- auto rc = SpGetAllDevices(m_pEntity, devNames);
|
|
|
+ DWORD rc = SpGetAllDevices(m_pEntity, devNames);
|
|
|
if (rc != Error_Succeed)
|
|
|
{
|
|
|
LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_READ_WRITE_FILE,
|
|
|
- GetOutPutStr("%s%08X", "SpGetAllDevices", rc).c_str());
|
|
|
- //LogError(Severity_Low, Error_Unexpect, ERROR_INITIALIZER_GETDEVICES, (const char*)CSimpleStringA::Format("get all device info fail, %d", rc));
|
|
|
+ GetOutPutStr("%s%08X", "SpGetAllDevices", rc).c_str());
|
|
|
+ rc = ERR_INITIALIZER_READ_WRITE_FILE;
|
|
|
pEntity->m_strLastErrMsg = CSimpleStringA::Format("从root.ini读取硬件信息失败,错误码[0x%08X],请联系分行技术部", rc);
|
|
|
return rc;
|
|
|
}
|
|
|
@@ -237,7 +233,6 @@ ErrorCodeEnum CInitializerConn::SendInitMKPackage()
|
|
|
rc = SpGetDeviceInfo(m_pEntity, devNames[i], strModel, strVendor, strVersion);
|
|
|
if (rc == Error_Succeed)
|
|
|
{
|
|
|
- //Dbg("device: type=%s, model=%s, factory=%s", (const char*)devNames[i], (const char*)strModel, (const char*)strVendor);
|
|
|
|
|
|
strncpy(pDevInfo->szType, (const char*)devNames[i], sizeof(pDevInfo->szType)-1);
|
|
|
strncpy(pDevInfo->szModal, (const char*)strModel, sizeof(pDevInfo->szModal)-1);
|
|
|
@@ -264,22 +259,26 @@ ErrorCodeEnum CInitializerConn::SendInitMKPackage()
|
|
|
|
|
|
// 获取硬件指纹和公钥信息
|
|
|
MKDownloadReq4 req4 = {};
|
|
|
- int nBufLen = sizeof(req4.FingerPrint);
|
|
|
- if (!pEntity->GetTerminalFingerPrint(req4.FingerPrint, nBufLen))
|
|
|
+ BYTE fingerPrint[32] = { 0 };
|
|
|
+ int nBufLen = sizeof(fingerPrint);
|
|
|
+ if (!pEntity->GetTerminalFingerPrint(fingerPrint, nBufLen))
|
|
|
{
|
|
|
LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_GET_TERMINAL_FINGERPRINT,
|
|
|
GetOutPutStr("%s%s", "GetTerminalFingerPrint", "False").c_str());
|
|
|
- //LogError(Severity_Low, Error_Unexpect, ERROR_INITIALIZER_FINGERPINT, (const char*)CSimpleStringA::Format("get fingerpint fail"));
|
|
|
- return Error_Unexpect;
|
|
|
+ return ERR_INITIALIZER_GET_TERMINAL_FINGERPRINT;
|
|
|
}
|
|
|
+ memcpy(req4.FingerPrint,fingerPrint,16);
|
|
|
+ memcpy(req4.FingerPrintSM, fingerPrint + 16, 16);
|
|
|
|
|
|
nBufLen = sizeof(req4.PublicKey);
|
|
|
+ Dbg("开始获取公钥。。。");
|
|
|
+ memset(req4.PublicKey,0, nBufLen);
|
|
|
+ Dbg("nBufLen=%d",nBufLen);
|
|
|
if (!pEntity->GetTerminalPublicKey(req4.PublicKey, nBufLen))
|
|
|
{
|
|
|
LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_GET_TERMINAL_PUBKEY,
|
|
|
GetOutPutStr("%s%s", "GetTerminalPublicKey", "False").c_str());
|
|
|
- //LogError(Severity_Low, Error_Unexpect, ERROR_INITIALIZER_GETPUBKEY, (const char*)CSimpleStringA::Format("get public key fail"));
|
|
|
- return Error_Unexpect;
|
|
|
+ return ERR_INITIALIZER_GET_TERMINAL_PUBKEY;
|
|
|
}
|
|
|
|
|
|
if (nRet == 1 || nRet == 3)
|
|
|
@@ -287,22 +286,44 @@ ErrorCodeEnum CInitializerConn::SendInitMKPackage()
|
|
|
|
|
|
package->AddStruct("MKD_REQ4", false, false, (BYTE*)&req4, sizeof(req4));
|
|
|
|
|
|
- //Dbg("send MK init request now");
|
|
|
- return SendPackage(package) != "" ? Error_Succeed : Error_Unexpect;
|
|
|
+ //国密改造
|
|
|
+ MKDownloadReq5 req5 = {};
|
|
|
+ req5.isFirst = pEntity->GetOrSetIsFirstSM(0);
|
|
|
+ req5.isSM = 1;
|
|
|
+ package->AddStruct("MKD_REQ5", false, false, (BYTE*)& req5, sizeof(req5));
|
|
|
+ Dbg("req5.isFirst=%d,req5.isSM=%d",req5.isFirst,req5.isSM);
|
|
|
+ Dbg("send MK init request now");
|
|
|
+ return SendPackage(package) != "" ? Error_Succeed : ERR_INITIALIZER_INIT_MK_SEND_PKG;
|
|
|
}
|
|
|
|
|
|
-ErrorCodeEnum CInitializerConn::SendSyncPubKeyPackage()
|
|
|
+DWORD CInitializerConn::SendSyncPubKeyPackage()
|
|
|
{
|
|
|
assert(IsConnectionOK());
|
|
|
-
|
|
|
+ PubKeySyncReq0 req;
|
|
|
+ req.isSM = 1;
|
|
|
CSmartPointer<IEntityFunction> pFunc = m_pEntity->GetFunction();
|
|
|
CSmartPointer<IPackage> package = CreateNewPackage("SyncPK");
|
|
|
+ package->AddStruct("PKSY_R0", false, false, (BYTE*)& req, sizeof(req));
|
|
|
+ return SendPackage(package) != "" ? Error_Succeed : Error_Unexpect;
|
|
|
+}
|
|
|
|
|
|
+DWORD CInitializerConn::SendGetKMCKey(string TerminalNo)
|
|
|
+{
|
|
|
+ LOG_FUNCTION();
|
|
|
+ assert(IsConnectionOK());
|
|
|
+ KMCKeyReq req;
|
|
|
+ memset(req.TerminalNo,0,sizeof(req.TerminalNo));
|
|
|
+ strcpy(req.TerminalNo,TerminalNo.c_str());
|
|
|
+ //req.TerminalNo = TerminalNo;
|
|
|
+ CSmartPointer<IEntityFunction> pFunc = m_pEntity->GetFunction();
|
|
|
+ CSmartPointer<IPackage> package = CreateNewPackage("KMCKey");
|
|
|
+ package->AddStruct("KMCKeyReq", false, false, (BYTE*)& req, sizeof(req));
|
|
|
return SendPackage(package) != "" ? Error_Succeed : Error_Unexpect;
|
|
|
}
|
|
|
|
|
|
-ErrorCodeEnum CInitializerConn::SendCloseTaskPackage(const char *pUserID)
|
|
|
+DWORD CInitializerConn::SendCloseTaskPackage(const char *pUserID)
|
|
|
{
|
|
|
+ LOG_FUNCTION();
|
|
|
assert(IsConnectionOK());
|
|
|
CloseTaskReq req;
|
|
|
memset(&req, 0, sizeof(req));
|
|
|
@@ -459,7 +480,9 @@ void CInitializerConn::OnDisconnect()
|
|
|
|
|
|
void CInitializerConn::OnPkgAnswer(const CSmartPointer<IPackage> &pRecvPkg)
|
|
|
{
|
|
|
+ LOG_FUNCTION();
|
|
|
string serviceCode = pRecvPkg->GetServiceCode();
|
|
|
+ Dbg("serviceCode=%s",serviceCode.c_str());
|
|
|
if (serviceCode == "Login")
|
|
|
{
|
|
|
HandleLoginRet(pRecvPkg);
|
|
|
@@ -480,44 +503,47 @@ void CInitializerConn::OnPkgAnswer(const CSmartPointer<IPackage> &pRecvPkg)
|
|
|
{
|
|
|
HandleCloseTaskRet(pRecvPkg);
|
|
|
}
|
|
|
+ else if (serviceCode == "KMCKey") {
|
|
|
+ HandleGetKMCKey(pRecvPkg);
|
|
|
+ }
|
|
|
else
|
|
|
{
|
|
|
- //LogError(Severity_Middle, Error_Unexpect, 0, CSimpleStringA::Format("unknown service code: %s", serviceCode.c_str()));
|
|
|
LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_UNKOWN,
|
|
|
- GetOutPutStr("%s%s", "UnKown", serviceCode.c_str()).c_str());
|
|
|
+ GetOutPutStr("%s%s", "UnKown", serviceCode.c_str()).c_str());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-ErrorCodeEnum CInitializerConn::HandleLoginRet(const CSmartPointer<IPackage> &pRecvPkg)
|
|
|
+DWORD CInitializerConn::HandleLoginRet(const CSmartPointer<IPackage> &pRecvPkg)
|
|
|
{
|
|
|
- ErrorCodeEnum rc = Error_Succeed;
|
|
|
+ LOG_FUNCTION();
|
|
|
+ DWORD rc = Error_Succeed;
|
|
|
DWORD dwSysCode, dwUserCode;
|
|
|
string strErrMsg;
|
|
|
|
|
|
if (pRecvPkg->GetErrMsg(dwSysCode, dwUserCode, strErrMsg))
|
|
|
{
|
|
|
- rc = (ErrorCodeEnum)dwSysCode;
|
|
|
- //LogError(Severity_Middle, rc, dwUserCode, CSimpleStringA::Format("登陆失败,服务端返回错误:%s", strErrMsg.c_str()));
|
|
|
- LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_LOGIN,
|
|
|
- GetOutPutStr("%s%08X%s%s", "GetErrMsg", rc,"strErrMsg", strErrMsg.c_str()).c_str());
|
|
|
+ //在分行服务定义的错误码,值与EventCode.h中的对应
|
|
|
+ LogWarn(Severity_Middle,(ErrorCodeEnum) dwSysCode, dwUserCode,
|
|
|
+ GetOutPutStr("%s%08X%s%s", "GetErrMsg", dwSysCode,"strErrMsg", strErrMsg.c_str()).c_str());
|
|
|
+ rc = dwUserCode;
|
|
|
}
|
|
|
|
|
|
((CInitializerEntity*)m_pEntity)->EndLogin(rc, strErrMsg.c_str());
|
|
|
return rc;
|
|
|
}
|
|
|
|
|
|
-ErrorCodeEnum CInitializerConn::HandleCloseTaskRet(const CSmartPointer<IPackage> &pRecvPkg)
|
|
|
+DWORD CInitializerConn::HandleCloseTaskRet(const CSmartPointer<IPackage> &pRecvPkg)
|
|
|
{
|
|
|
- ErrorCodeEnum rc = Error_Succeed;
|
|
|
+ DWORD rc = Error_Succeed;
|
|
|
DWORD dwSysCode, dwUserCode;
|
|
|
string strErrMsg;
|
|
|
|
|
|
if (pRecvPkg->GetErrMsg(dwSysCode, dwUserCode, strErrMsg))
|
|
|
{
|
|
|
- rc = (ErrorCodeEnum)dwSysCode;
|
|
|
- //LogError(Severity_Middle, rc, dwUserCode, CSimpleStringA::Format("关闭初始化任务失败,服务端返回错误:%s", strErrMsg.c_str()));
|
|
|
- LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_EXIT,
|
|
|
- GetOutPutStr("%s%08X%s%s", "GetErrMsg", dwSysCode, "strErrMsg", strErrMsg.c_str()).c_str());
|
|
|
+ rc = dwUserCode;
|
|
|
+
|
|
|
+ LogWarn(Severity_Middle, Error_Unexpect, rc,
|
|
|
+ GetOutPutStr("%s%08X%s%s", "GetErrMsg", rc, "strErrMsg", strErrMsg.c_str()).c_str());
|
|
|
}
|
|
|
|
|
|
((CInitializerEntity*)m_pEntity)->SecureClientRelease();
|
|
|
@@ -525,9 +551,9 @@ ErrorCodeEnum CInitializerConn::HandleCloseTaskRet(const CSmartPointer<IPackage>
|
|
|
return rc;
|
|
|
}
|
|
|
|
|
|
-ErrorCodeEnum CInitializerConn::HandleInitMKRet(const CSmartPointer<IPackage> &pRecvPkg)
|
|
|
+DWORD CInitializerConn::HandleInitMKRet(const CSmartPointer<IPackage> &pRecvPkg)
|
|
|
{
|
|
|
- ErrorCodeEnum rc = Error_Succeed;
|
|
|
+ DWORD rc = Error_Succeed;
|
|
|
DWORD dwSysCode, dwUserCode;
|
|
|
string strErrMsg;
|
|
|
|
|
|
@@ -536,92 +562,114 @@ ErrorCodeEnum CInitializerConn::HandleInitMKRet(const CSmartPointer<IPackage> &p
|
|
|
|
|
|
if (pRecvPkg->GetErrMsg(dwSysCode, dwUserCode, strErrMsg))
|
|
|
{
|
|
|
- rc = (ErrorCodeEnum)dwSysCode;
|
|
|
- LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_INIT_MK,
|
|
|
+ rc = dwUserCode;
|
|
|
+ LogWarn(Severity_Middle, (ErrorCodeEnum) rc, dwUserCode,
|
|
|
GetOutPutStr("%s%08X%s%s", "dwSysCode", rc, "strErrMsg", strErrMsg).c_str());
|
|
|
- //LogError(Severity_Middle, rc, dwUserCode, CSimpleStringA::Format("初始化主密钥失败,服务端返回错误:%s", strErrMsg.c_str()));
|
|
|
+
|
|
|
strRetErrMsg = strErrMsg.c_str();
|
|
|
}
|
|
|
else if (pEntity->HasPinPad()) // 有PinPad
|
|
|
{
|
|
|
- // 主密钥初始返回
|
|
|
- int nRetLen = pRecvPkg->GetStructLen("MKD_RET");
|
|
|
- if (nRetLen > 0)
|
|
|
+ //国产化不再使用原方法生成KMC密钥
|
|
|
+ /*
|
|
|
{
|
|
|
- // support des key
|
|
|
- BYTE *pBuf = new BYTE[nRetLen];
|
|
|
- memset(pBuf, 0, nRetLen);
|
|
|
+ // 主密钥初始返回
|
|
|
+ int nRetLen = pRecvPkg->GetStructLen("MKD_RET");
|
|
|
+ if (nRetLen > 0)
|
|
|
+ {
|
|
|
+ // support des key
|
|
|
+ BYTE* pBuf = new BYTE[nRetLen];
|
|
|
+ memset(pBuf, 0, nRetLen);
|
|
|
|
|
|
- int nArrayNum(0);
|
|
|
- pRecvPkg->GetStructData("MKD_RET", pBuf, &nRetLen, &nArrayNum);
|
|
|
+ int nArrayNum(0);
|
|
|
+ pRecvPkg->GetStructData("MKD_RET", pBuf, &nRetLen, &nArrayNum);
|
|
|
|
|
|
- // 调用KMC解析返回
|
|
|
- CBlob blob;
|
|
|
- blob.Refer(pBuf, nRetLen);
|
|
|
- rc = pEntity->ParseInitMKResult(blob, false);
|
|
|
- delete pBuf;
|
|
|
+ // 调用KMC解析返回
|
|
|
+ CBlob blob;
|
|
|
+ blob.Refer(pBuf, nRetLen);
|
|
|
+ rc = pEntity->ParseInitMKResult(blob, false);
|
|
|
+ delete pBuf;
|
|
|
|
|
|
- if (rc == Error_Succeed)
|
|
|
- {
|
|
|
- Dbg("parse des tmk succ");
|
|
|
- rc = pEntity->LoadKeysToPinPad(false);
|
|
|
- if (rc != Error_Succeed)
|
|
|
+ if (rc == Error_Succeed)
|
|
|
{
|
|
|
- strRetErrMsg = "加载DES主密钥到密码键盘失败";
|
|
|
- LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_LOAD_KEYS_TO_PINPAD,
|
|
|
- GetOutPutStr("%s%08X%s%s", "LoadKeysToPinPad", rc,"strRetErrMsg", strRetErrMsg).c_str());
|
|
|
+ Dbg("parse des tmk succ");
|
|
|
+ rc = pEntity->LoadKeysToPinPad(false);
|
|
|
+ if (rc != Error_Succeed)
|
|
|
+ {
|
|
|
+ strRetErrMsg = "加载DES主密钥到密码键盘失败";
|
|
|
+ LogWarn(Severity_Middle, (ErrorCodeEnum)rc, ERR_INITIALIZER_LOAD_KEYS_TO_PINPAD,
|
|
|
+ GetOutPutStr("%s%08X%s%s", "LoadKeysToPinPad", rc, "strRetErrMsg", strRetErrMsg).c_str());
|
|
|
+ //rc = ERR_INITIALIZER_LOAD_KEYS_TO_PINPAD;
|
|
|
+ }
|
|
|
+
|
|
|
+ else
|
|
|
+ strRetErrMsg = "加载DES主密钥成功。";
|
|
|
}
|
|
|
-
|
|
|
else
|
|
|
- strRetErrMsg = "加载DES主密钥成功。";
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- strRetErrMsg = "解析DES主密钥返回数据失败";
|
|
|
- LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_PARSE_INIT_MK,
|
|
|
- GetOutPutStr("%s%08X%s%s", "ParseInitMKResult", rc,"strRetErrMsg", strRetErrMsg).c_str());
|
|
|
+ {
|
|
|
+ strRetErrMsg = "解析DES主密钥返回数据失败";
|
|
|
+ LogWarn(Severity_Middle, (ErrorCodeEnum)rc, ERR_INITIALIZER_PARSE_INIT_MK,
|
|
|
+ GetOutPutStr("%s%08X%s%s", "ParseInitMKResult", rc, "strRetErrMsg", strRetErrMsg).c_str());
|
|
|
+ rc = ERR_INITIALIZER_PARSE_INIT_MK;
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- nRetLen = pRecvPkg->GetStructLen("MKD_SMT");
|
|
|
- if (nRetLen > 0)
|
|
|
- {
|
|
|
- // support sm key
|
|
|
- BYTE *pBuf = new BYTE[nRetLen];
|
|
|
- memset(pBuf, 0, nRetLen);
|
|
|
|
|
|
- int nArrayNum(0);
|
|
|
- pRecvPkg->GetStructData("MKD_SMT", pBuf, &nRetLen, &nArrayNum);
|
|
|
+ nRetLen = pRecvPkg->GetStructLen("MKD_SMT");
|
|
|
+ if (nRetLen > 0)
|
|
|
+ {
|
|
|
+ Dbg("正在加载国密密钥至pinpad");
|
|
|
+ // support sm key
|
|
|
+ BYTE* pBuf = new BYTE[nRetLen];
|
|
|
+ memset(pBuf, 0, nRetLen);
|
|
|
|
|
|
- // 调用KMC解析返回
|
|
|
- CBlob blob;
|
|
|
- blob.Refer(pBuf, nRetLen);
|
|
|
- rc = pEntity->ParseInitMKResult(blob, true);
|
|
|
- delete pBuf;
|
|
|
+ int nArrayNum(0);
|
|
|
+ pRecvPkg->GetStructData("MKD_SMT", pBuf, &nRetLen, &nArrayNum);
|
|
|
|
|
|
- if (rc == Error_Succeed)
|
|
|
- {
|
|
|
- Dbg("parse sm4 tmk succ");
|
|
|
+ // 调用KMC解析返回
|
|
|
+ CBlob blob;
|
|
|
+ blob.Refer(pBuf, nRetLen);
|
|
|
+ rc = pEntity->ParseInitMKResult(blob, true);
|
|
|
+ delete pBuf;
|
|
|
|
|
|
- rc = pEntity->LoadKeysToPinPad(true);
|
|
|
- if (rc != Error_Succeed)
|
|
|
+ if (rc == Error_Succeed)
|
|
|
{
|
|
|
- strRetErrMsg = "加载SM主密钥到密码键盘失败";
|
|
|
- LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_LOAD_KEYS_TO_PINPAD,
|
|
|
- GetOutPutStr("%s%08X%s%s", "LoadKeysToPinPad", rc, "strRetErrMsg", strRetErrMsg).c_str());
|
|
|
+ Dbg("parse sm4 tmk succ");
|
|
|
+
|
|
|
+ rc = pEntity->LoadKeysToPinPad(true);
|
|
|
+ if (rc != Error_Succeed)
|
|
|
+ {
|
|
|
+ strRetErrMsg = "加载SM主密钥到密码键盘失败";
|
|
|
+ LogWarn(Severity_Middle, (ErrorCodeEnum)rc, ERR_INITIALIZER_LOAD_KEYS_TO_PINPAD,
|
|
|
+ GetOutPutStr("%s%08X%s%s", "LoadKeysToPinPad", rc, "strRetErrMsg", strRetErrMsg).c_str());
|
|
|
+ rc = ERR_INITIALIZER_LOAD_KEYS_TO_PINPAD;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ strRetErrMsg += "加载SM主密钥成功。";
|
|
|
}
|
|
|
else
|
|
|
- strRetErrMsg += "加载SM主密钥成功。";
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- strRetErrMsg = "解析SM主密钥返回数据失败";
|
|
|
- LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_PARSE_INIT_MK,
|
|
|
- GetOutPutStr("%s%08X%s%s", "ParseInitMKResult", rc, "strRetErrMsg", strRetErrMsg).c_str());
|
|
|
+ {
|
|
|
+ strRetErrMsg = "解析SM主密钥返回数据失败";
|
|
|
+ LogWarn(Severity_Middle, (ErrorCodeEnum)rc, ERR_INITIALIZER_PARSE_INIT_MK,
|
|
|
+ GetOutPutStr("%s%08X%s%s", "ParseInitMKResult", rc, "strRetErrMsg", strRetErrMsg).c_str());
|
|
|
+ rc = ERR_INITIALIZER_PARSE_INIT_MK;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+ */
|
|
|
+ //只支持国密
|
|
|
+ rc = pEntity->LoadKeysToPinPad(true);
|
|
|
+ if (rc != Error_Succeed)
|
|
|
+ {
|
|
|
+ strRetErrMsg = "加载SM密钥到密码键盘失败";
|
|
|
+ LogWarn(Severity_Middle, (ErrorCodeEnum)rc, ERR_INITIALIZER_LOAD_KEYS_TO_PINPAD,
|
|
|
+ GetOutPutStr("%s%08X%s%s", "LoadKeysToPinPad", rc, "strRetErrMsg", strRetErrMsg).c_str());
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+ if (!pEntity->GetOrSetIsFirstSM(1)) {
|
|
|
+ rc = Error_Unexpect;
|
|
|
+ strRetErrMsg = "设置IsFirstSM失败。。。";
|
|
|
+ }
|
|
|
pEntity->EndInitMK(rc, strRetErrMsg);
|
|
|
|
|
|
return rc;
|
|
|
@@ -665,9 +713,56 @@ ErrorCodeEnum GetPukeyValue(BYTE* pPukeyContent, int nPuKeyContentLen, int nKeyT
|
|
|
return rc;
|
|
|
}
|
|
|
|
|
|
-ErrorCodeEnum CInitializerConn::HandleSyncPubKeyRet(const CSmartPointer<IPackage> &pRecvPkg)
|
|
|
+DWORD CInitializerConn::HandleGetKMCKey(const CSmartPointer<IPackage>& pRecvPkg) {
|
|
|
+ LOG_FUNCTION();
|
|
|
+ DWORD rc = Error_Succeed;
|
|
|
+ DWORD dwSysCode, dwUserCode;
|
|
|
+ string strErrMsg;
|
|
|
+ auto pEntity = (CInitializerEntity*)m_pEntity;
|
|
|
+ if (pRecvPkg->GetErrMsg(dwSysCode, dwUserCode, strErrMsg))
|
|
|
+ {
|
|
|
+ rc = dwUserCode;
|
|
|
+ rc = dwUserCode;
|
|
|
+ LogWarn(Severity_Middle, (ErrorCodeEnum)dwSysCode, dwUserCode,
|
|
|
+ GetOutPutStr("%s%08X%s%s", "GetErrMsg", rc, "strErrMsg", strErrMsg).c_str());
|
|
|
+ pEntity->m_bGetKMCKey = false;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ int nLen = pRecvPkg->GetStructLen("KMCKeyRet");
|
|
|
+ if (nLen <= 0)
|
|
|
+ {
|
|
|
+ strErrMsg = "KMCKeyRet返回数据为空。";
|
|
|
+ Dbg("KMCKeyRet返回数据为空。");
|
|
|
+ pEntity->m_bGetKMCKey = false;
|
|
|
+ rc = ERR_INITIALIZER_GET_KMC_KEY_NULL;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ pEntity->m_bGetKMCKey = true;
|
|
|
+ BYTE* pBuf = new BYTE[nLen];
|
|
|
+ memset(pBuf, 0, nLen);
|
|
|
+ int nArrayNum = 0;
|
|
|
+ bool bSuc = pRecvPkg->GetStructData("KMCKeyRet", (BYTE*)pBuf, &nLen, &nArrayNum);
|
|
|
+ assert(bSuc);
|
|
|
+ assert(nLen % sizeof(KMCKeyRet) == 0);
|
|
|
+ KMCKeyRet* ret = (KMCKeyRet*)pBuf;
|
|
|
+ pEntity->m_TMK = ret->TMK;
|
|
|
+ pEntity->m_TPK = ret->TPK;
|
|
|
+ pEntity->m_EDK = ret->EDK;
|
|
|
+ Dbg("TMK=%s", pEntity->m_TMK.c_str());
|
|
|
+ Dbg("TPK=%s", pEntity->m_TPK.c_str());
|
|
|
+ Dbg("EDK=%s", pEntity->m_EDK.c_str());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ pEntity->EndGetKMCKey(rc, strErrMsg.c_str());
|
|
|
+ return rc;
|
|
|
+}
|
|
|
+
|
|
|
+DWORD CInitializerConn::HandleSyncPubKeyRet(const CSmartPointer<IPackage> &pRecvPkg)
|
|
|
{
|
|
|
- ErrorCodeEnum rc = Error_Succeed;
|
|
|
+ DWORD rc = Error_Succeed;
|
|
|
DWORD dwSysCode, dwUserCode;
|
|
|
string strErrMsg;
|
|
|
BOOL bSyncPK = FALSE;
|
|
|
@@ -678,10 +773,9 @@ ErrorCodeEnum CInitializerConn::HandleSyncPubKeyRet(const CSmartPointer<IPackage
|
|
|
|
|
|
if (pRecvPkg->GetErrMsg(dwSysCode, dwUserCode, strErrMsg))
|
|
|
{
|
|
|
- rc = (ErrorCodeEnum)dwSysCode;
|
|
|
- LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_SYNC_PUBKEY,
|
|
|
- GetOutPutStr("%s%08X", "GetErrMsg", rc).c_str());
|
|
|
- //LogError(Severity_Low, rc, ERROR_INITIALIZER_SYNCPUBKEY, CSimpleStringA::Format("同步公钥文件失败,服务端返回错误:%s", strErrMsg.c_str()));
|
|
|
+ rc = dwUserCode;
|
|
|
+ LogWarn(Severity_Middle,(ErrorCodeEnum) dwSysCode, dwUserCode,
|
|
|
+ GetOutPutStr("%s%08X", "GetErrMsg", rc).c_str());
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -691,7 +785,8 @@ ErrorCodeEnum CInitializerConn::HandleSyncPubKeyRet(const CSmartPointer<IPackage
|
|
|
Dbg("key file all same");
|
|
|
}
|
|
|
else
|
|
|
- {
|
|
|
+ {
|
|
|
+ Dbg("写入缓存。。。");
|
|
|
assert(nLen % sizeof(PubKeySyncRet) == 0);
|
|
|
|
|
|
BYTE *pBuf = new BYTE[nLen];
|
|
|
@@ -702,36 +797,36 @@ ErrorCodeEnum CInitializerConn::HandleSyncPubKeyRet(const CSmartPointer<IPackage
|
|
|
assert(nLen % sizeof(PubKeySyncRet) == 0);
|
|
|
|
|
|
PubKeySyncRet *pRet = (PubKeySyncRet*)pBuf;
|
|
|
-
|
|
|
+ //计算密钥校验码
|
|
|
if (pEntity->HasCkCodeFlg())
|
|
|
{
|
|
|
- BYTE hash[16] = {};
|
|
|
+ Dbg("缓存公钥。。。");
|
|
|
+ BYTE hash[32] = { 0 };
|
|
|
|
|
|
//缓存存储公钥
|
|
|
for (int i = 0; i < nArrayNum; i++)
|
|
|
- {
|
|
|
+ {
|
|
|
Dbg("file %s not same, sync...", pRet[i].FileName);
|
|
|
if (0 == strcmp(pRet[i].FileName, PUKFILENAME_RSA))
|
|
|
- {
|
|
|
- if (GetFileHash(pRet[i].Content, pRet[i].FileLen, hash) != Error_Succeed)
|
|
|
+ {
|
|
|
+ //if (GetFileHash(pRet[i].Content, pRet[i].FileLen, hash) != Error_Succeed)
|
|
|
+ if(!SM3Hash(pRet[i].Content,pRet[i].FileLen,hash))
|
|
|
{
|
|
|
LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_GET_FILE_HASH,
|
|
|
GetOutPutStr("%s%08X%s%s", "GetFileHash", Error_Unexpect,"File", pRet[i].FileName).c_str());
|
|
|
- //LogError(Severity_Low, Error_Unexpect, ERROR_ACCESSAUTH_GETFILEHASH, CSimpleStringA::Format("compute file %s hash fail", pRet[i].FileName));
|
|
|
- strErrMsg = "公钥文件摘要失败";
|
|
|
- rc = Error_Unexpect;
|
|
|
+ strErrMsg = "RSA公钥文件摘要失败";
|
|
|
+ rc = ERR_INITIALIZER_GET_FILE_HASH;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
memset(pEntity->m_cTDESPukey, 0, 2048);
|
|
|
GetPukeyValue(pRet[i].Content, pRet[i].FileLen, DES, pEntity->m_cTDESPukey, &(pEntity->m_iTDESPukeyLen));
|
|
|
|
|
|
- if (memcmp(hash, pRet[i].FileHash, 16) != 0)
|
|
|
+ if (memcmp(hash, pRet[i].FileHash, 16) != 0 || memcmp(hash+16,pRet->FileHashSM,16) != 0)
|
|
|
{
|
|
|
LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_CHECK_HASH,GetOutPutStr("%s%s", "File", pRet[i].FileName).c_str());
|
|
|
- //LogError(Severity_Low, Error_Unexpect, ERROR_INITIALIZER_SYNCPUBKEY, CSimpleStringA::Format("file %s hash not equal", pRet[i].FileName));
|
|
|
- strErrMsg = "公钥文件校验不通过";
|
|
|
- rc = Error_Unexpect;
|
|
|
+ strErrMsg = "RSA公钥文件校验不通过";
|
|
|
+ rc = ERR_INITIALIZER_CHECK_HASH;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
@@ -739,25 +834,24 @@ ErrorCodeEnum CInitializerConn::HandleSyncPubKeyRet(const CSmartPointer<IPackage
|
|
|
}
|
|
|
else if (0 == strcmp(pRet[i].FileName, PUKFILENAME_SM2))
|
|
|
{
|
|
|
- if (GetFileHash(pRet[i].Content, pRet[i].FileLen, hash) != Error_Succeed)
|
|
|
+ //if (GetFileHash(pRet[i].Content, pRet[i].FileLen, hash) != Error_Succeed)
|
|
|
+ if(!SM3Hash(pRet[i].Content,pRet[i].FileLen,hash))
|
|
|
{
|
|
|
LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_GET_FILE_HASH,
|
|
|
GetOutPutStr("%s%08X%s%s", "GetFileHash", Error_Unexpect, "File", pRet[i].FileName).c_str());
|
|
|
- //LogError(Severity_Low, Error_Unexpect, ERROR_ACCESSAUTH_GETFILEHASH, CSimpleStringA::Format("compute file %s hash fail", pRet[i].FileName));
|
|
|
- strErrMsg = "公钥文件摘要失败";
|
|
|
- rc = Error_Unexpect;
|
|
|
+ strErrMsg = "SM2公钥文件摘要失败";
|
|
|
+ rc = ERR_INITIALIZER_GET_FILE_HASH;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
memset(pEntity->m_cSM2Pukey, 0, 2048);
|
|
|
GetPukeyValue(pRet[i].Content, pRet[i].FileLen, SM4, pEntity->m_cSM2Pukey, &(pEntity->m_iSM2Pukeylen));
|
|
|
|
|
|
- if (memcmp(hash, pRet[i].FileHash, 16) != 0)
|
|
|
+ if (memcmp(hash, pRet[i].FileHash, 16) != 0 || memcmp(hash + 16, pRet[i].FileHashSM, 16) != 0)
|
|
|
{
|
|
|
LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_CHECK_HASH, GetOutPutStr("%s%s", "File", pRet[i].FileName).c_str());
|
|
|
- //LogError(Severity_Low, Error_Unexpect, ERROR_INITIALIZER_SYNCPUBKEY, CSimpleStringA::Format("file %s hash not equal", pRet[i].FileName));
|
|
|
- strErrMsg = "公钥文件校验不通过";
|
|
|
- rc = Error_Unexpect;
|
|
|
+ strErrMsg = "SM2公钥文件校验不通过";
|
|
|
+ rc = ERR_INITIALIZER_CHECK_HASH;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
@@ -766,26 +860,24 @@ ErrorCodeEnum CInitializerConn::HandleSyncPubKeyRet(const CSmartPointer<IPackage
|
|
|
else
|
|
|
{
|
|
|
//从分行服务下载下来的其它密钥文件,直接忽略,不报错
|
|
|
- Dbg("downlaod pukey file same is err...", pRet[i].FileName);
|
|
|
- //strErrMsg = "从准入服务下载的公钥名称不正确";
|
|
|
- //rc = Error_Unexpect;
|
|
|
- //break;
|
|
|
- }
|
|
|
+ Dbg("其它密钥文件:%s", pRet[i].FileName);
|
|
|
+ }
|
|
|
|
|
|
- Dbg("file %s sync succ", pRet[i].FileName);
|
|
|
+ Dbg("file %s sm2 check succ,save as buf", pRet[i].FileName);
|
|
|
}
|
|
|
|
|
|
if (!bSyncPK)
|
|
|
{
|
|
|
LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_PUBKEY_FILE,
|
|
|
- GetOutPutStr("%s%s", "bSyncPK", "False").c_str());
|
|
|
+ GetOutPutStr("%s%s", "bSyncPK", "False").c_str());
|
|
|
Dbg("分行服务KMC目录不存在正确的公钥文件");
|
|
|
strErrMsg = "分行服务不存在正确的公钥文件";
|
|
|
- rc = Error_Unexpect;
|
|
|
+ rc = ERR_INITIALIZER_PUBKEY_FILE;
|
|
|
}
|
|
|
- }
|
|
|
+ }
|
|
|
else
|
|
|
- {
|
|
|
+ {
|
|
|
+ Dbg("保存公钥。。。");
|
|
|
CSimpleStringA strPath;
|
|
|
m_pEntity->GetFunction()->GetPath("RunInfo", strPath);
|
|
|
strPath += "\\kmc\\";
|
|
|
@@ -798,56 +890,58 @@ ErrorCodeEnum CInitializerConn::HandleSyncPubKeyRet(const CSmartPointer<IPackage
|
|
|
Dbg("file %s not same, sync...", pRet[i].FileName);
|
|
|
|
|
|
CSimpleStringA strFilePath = strPath + pRet[i].FileName;
|
|
|
- FILE *pFile = fopen(strFilePath, "w");
|
|
|
+ FILE* pFile = fopen(strFilePath, "wb");
|
|
|
if (pFile == NULL)
|
|
|
{
|
|
|
LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_READ_WRITE_FILE,
|
|
|
GetOutPutStr("%s%s%s%s", "fopen", "w","strFilePath", strFilePath.GetData()).c_str());
|
|
|
- //LogError(Severity_Low, Error_Unexpect, ERROR_INITIALIZER_SYNCPUBKEY, CSimpleStringA::Format("open file %s fail", pRet[i].FileName));
|
|
|
strErrMsg = "打开公钥文件失败";
|
|
|
- rc = Error_Unexpect;
|
|
|
+ rc = ERR_INITIALIZER_READ_WRITE_FILE;
|
|
|
break;
|
|
|
}
|
|
|
-
|
|
|
+ Dbg("pRet[i].Content=%s,%d",(char*) pRet[i].Content,pRet[i].FileLen);
|
|
|
auto nWriteLen = fwrite(pRet[i].Content, 1, pRet[i].FileLen, pFile);
|
|
|
- if (nWriteLen < pRet[i].FileLen)
|
|
|
+ if (nWriteLen != pRet[i].FileLen)
|
|
|
{
|
|
|
LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_READ_WRITE_FILE,
|
|
|
GetOutPutStr("%s%d%s%s", "fwrite", nWriteLen, "FileName", pRet[i].FileName).c_str());
|
|
|
//LogError(Severity_Low, Error_Unexpect, ERROR_INITIALIZER_SYNCPUBKEY, CSimpleStringA::Format("write file %s fail", pRet[i].FileName));
|
|
|
fclose(pFile);
|
|
|
strErrMsg = "写入公钥文件失败";
|
|
|
- rc = Error_Unexpect;
|
|
|
+ rc = ERR_INITIALIZER_READ_WRITE_FILE;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
fclose(pFile);
|
|
|
|
|
|
|
|
|
- BYTE hash[16] = {};
|
|
|
- if (GetFileHashOld(strFilePath, hash) != Error_Succeed)
|
|
|
+ BYTE hash[32] = { 0 };
|
|
|
+ //if (GetFileHashOld(strFilePath, hash) != Error_Succeed)
|
|
|
+ if(!SM3File((char*)strFilePath.GetData(), hash))
|
|
|
{
|
|
|
LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_GET_FILE_HASH,
|
|
|
GetOutPutStr("%s%08X%s%s", "GetFileHashOld", Error_Unexpect, "File", strFilePath).c_str());
|
|
|
- //LogError(Severity_Low, Error_Unexpect, ERROR_INITIALIZER_SYNCPUBKEY, CSimpleStringA::Format("compute file %s hash fail", pRet[i].FileName));
|
|
|
+
|
|
|
strErrMsg = "公钥文件摘要失败";
|
|
|
- rc = Error_Unexpect;
|
|
|
+ rc = ERR_INITIALIZER_GET_FILE_HASH;
|
|
|
break;
|
|
|
}
|
|
|
-
|
|
|
- if (memcmp(hash, pRet[i].FileHash, 16) != 0)
|
|
|
+ Dbg("strFilePath=%s", strFilePath.GetData());
|
|
|
+ Dbg("file hash=%s", MyBase64::Str2Hex((char*)hash, 32));
|
|
|
+ Dbg("hash=%s", MyBase64::Str2Hex((char*)pRet[i].FileHash, 16));
|
|
|
+ Dbg("hashsm=%s", MyBase64::Str2Hex((char*)pRet[i].FileHashSM, 16));
|
|
|
+ if (memcmp(hash, pRet[i].FileHash, 16) != 0 || memcmp(hash + 16, pRet[i].FileHashSM, 16) != 0)
|
|
|
{
|
|
|
LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_CHECK_HASH, GetOutPutStr("%s%s", "File", pRet[i].FileName).c_str());
|
|
|
- //LogError(Severity_Low, Error_Unexpect, ERROR_INITIALIZER_SYNCPUBKEY, CSimpleStringA::Format("file %s hash not equal", pRet[i].FileName));
|
|
|
strErrMsg = "公钥文件校验不通过";
|
|
|
- rc = Error_Unexpect;
|
|
|
+ rc = ERR_INITIALIZER_CHECK_HASH;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
Dbg("file %s sync succ", pRet[i].FileName);
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
+ }
|
|
|
+
|
|
|
delete[] pBuf;
|
|
|
}
|
|
|
}
|
|
|
@@ -857,7 +951,7 @@ ErrorCodeEnum CInitializerConn::HandleSyncPubKeyRet(const CSmartPointer<IPackage
|
|
|
return rc;
|
|
|
}
|
|
|
|
|
|
-ErrorCodeEnum CInitializerConn::SendReportStatePackage(const char*pszEventType, const char *pszUserID, DWORD dwErrCode, const char *pszErrMsg)
|
|
|
+DWORD CInitializerConn::SendReportStatePackage(const char*pszEventType, const char *pszUserID, DWORD dwErrCode, const char *pszErrMsg)
|
|
|
{
|
|
|
auto pFunc = m_pEntity->GetFunction();
|
|
|
|
|
|
@@ -867,9 +961,12 @@ ErrorCodeEnum CInitializerConn::SendReportStatePackage(const char*pszEventType,
|
|
|
ReportStateReq req = {};
|
|
|
strncpy(req.TerminalNo, ssInfo.strTerminalID, sizeof(req.TerminalNo) - 1);
|
|
|
strncpy(req.EventType, pszEventType, sizeof(req.EventType) - 1);
|
|
|
+
|
|
|
if (pszUserID != NULL)
|
|
|
strncpy(req.UserID, pszUserID, sizeof(req.UserID) - 1);
|
|
|
+
|
|
|
req.ErrorCode = dwErrCode;
|
|
|
+
|
|
|
if (pszErrMsg != NULL)
|
|
|
strncpy(req.ErrorMsg, pszErrMsg, sizeof(req.ErrorMsg) - 1);
|
|
|
|
|
|
@@ -879,17 +976,16 @@ ErrorCodeEnum CInitializerConn::SendReportStatePackage(const char*pszEventType,
|
|
|
return SendPackage(package) != "" ? Error_Succeed : Error_Unexpect;
|
|
|
}
|
|
|
|
|
|
-ErrorCodeEnum CInitializerConn::HandleReportStateRet(const CSmartPointer<IPackage> &pRecvPkg)
|
|
|
+DWORD CInitializerConn::HandleReportStateRet(const CSmartPointer<IPackage> &pRecvPkg)
|
|
|
{
|
|
|
- ErrorCodeEnum rc = Error_Succeed;
|
|
|
+ DWORD rc = Error_Succeed;
|
|
|
DWORD dwSysCode, dwUserCode;
|
|
|
string strErrMsg;
|
|
|
|
|
|
if (pRecvPkg->GetErrMsg(dwSysCode, dwUserCode, strErrMsg))
|
|
|
{
|
|
|
- rc = (ErrorCodeEnum)dwSysCode;
|
|
|
- //LogError(Severity_Middle, rc, ERROR_ACCESSAUTH_SERVERRETURN, CSimpleStringA::Format("HandleReportStateRet,report state fail, %s", strErrMsg.c_str()));
|
|
|
- LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_REPORT_STATE,
|
|
|
+ rc = dwUserCode;
|
|
|
+ LogWarn(Severity_Middle, Error_Unexpect, rc,
|
|
|
GetOutPutStr("%s%08X", "GetErrMsg", rc).c_str());
|
|
|
}
|
|
|
|