269 lines
4.6 KiB
C++
269 lines
4.6 KiB
C++
#pragma once
|
|
#include "tchar.h"
|
|
#include "bitanswercpp.h"
|
|
#include "singleton.h"
|
|
|
|
#ifndef NDEBUG
|
|
//#define WF2020
|
|
//#define WF2021
|
|
//#define LOCAL
|
|
//#define REMOTE
|
|
#endif
|
|
|
|
// 预编译宏说明
|
|
/*
|
|
|
|
WF2020/WF2021 代表了包含版本的产品类型,由此来决定了feature id的类型和数量
|
|
1.WF2020 - 污水处理 2020
|
|
feature id : 1, 3, 4, 5, 6, 7
|
|
|
|
2.WF2021 - 污水处理 2021
|
|
feature id : 2, 8, 9, 10, 11, 12
|
|
|
|
3.WF2023 - 污水处理 2023 V5.0
|
|
feature id : 3, 4, 5, 17
|
|
|
|
4.RUP2023 - 速建 2023 V1.0
|
|
feature id : 6, 7, 18
|
|
|
|
|
|
LOCAL/REMOTE 代表了验证类型
|
|
1.LOCAL - 本地加密锁 (单机浮动)
|
|
2.REMOTE - 远程加密锁 (集团授权)
|
|
|
|
*/
|
|
|
|
class Ask
|
|
{
|
|
public:
|
|
Ask() {}
|
|
virtual ~Ask() {}
|
|
public:
|
|
virtual bool get(const int &idx, BIT_UINT32 &a1, BIT_UINT32 &a2, BIT_UINT32 &a3, BIT_UINT32 &a4) = 0;
|
|
};
|
|
|
|
class Answer
|
|
{
|
|
public:
|
|
Answer() {}
|
|
virtual ~Answer() {}
|
|
public:
|
|
virtual bool get(const int &idx, BIT_UINT32 &result) = 0;
|
|
};
|
|
|
|
#pragma region encrypt data
|
|
|
|
class Ask3: public Ask
|
|
{
|
|
public:
|
|
Ask3() {}
|
|
~Ask3() {}
|
|
virtual bool get(const int &idx, BIT_UINT32 &a1, BIT_UINT32 &a2, BIT_UINT32 &a3, BIT_UINT32 &a4);
|
|
};
|
|
|
|
class Ask4: public Ask
|
|
{
|
|
public:
|
|
Ask4() {}
|
|
~Ask4() {}
|
|
virtual bool get(const int &idx, BIT_UINT32 &a1, BIT_UINT32 &a2, BIT_UINT32 &a3, BIT_UINT32 &a4);
|
|
};
|
|
|
|
class Ask5: public Ask
|
|
{
|
|
public:
|
|
Ask5() {}
|
|
~Ask5() {}
|
|
virtual bool get(const int &idx, BIT_UINT32 &a1, BIT_UINT32 &a2, BIT_UINT32 &a3, BIT_UINT32 &a4);
|
|
};
|
|
|
|
class Ask6: public Ask
|
|
{
|
|
public:
|
|
Ask6() {}
|
|
~Ask6() {}
|
|
virtual bool get(const int &idx, BIT_UINT32 &a1, BIT_UINT32 &a2, BIT_UINT32 &a3, BIT_UINT32 &a4);
|
|
};
|
|
|
|
class Ask7: public Ask
|
|
{
|
|
public:
|
|
Ask7() {}
|
|
~Ask7() {}
|
|
virtual bool get(const int &idx, BIT_UINT32 &a1, BIT_UINT32 &a2, BIT_UINT32 &a3, BIT_UINT32 &a4);
|
|
};
|
|
|
|
class Ask8: public Ask
|
|
{
|
|
public:
|
|
Ask8() {}
|
|
~Ask8() {}
|
|
virtual bool get(const int &idx, BIT_UINT32 &a1, BIT_UINT32 &a2, BIT_UINT32 &a3, BIT_UINT32 &a4);
|
|
};
|
|
|
|
class Ask9: public Ask
|
|
{
|
|
public:
|
|
Ask9() {}
|
|
~Ask9() {}
|
|
virtual bool get(const int &idx, BIT_UINT32 &a1, BIT_UINT32 &a2, BIT_UINT32 &a3, BIT_UINT32 &a4);
|
|
};
|
|
|
|
class Ask10: public Ask
|
|
{
|
|
public:
|
|
Ask10() {}
|
|
~Ask10() {}
|
|
virtual bool get(const int &idx, BIT_UINT32 &a1, BIT_UINT32 &a2, BIT_UINT32 &a3, BIT_UINT32 &a4);
|
|
};
|
|
|
|
class Ask11: public Ask
|
|
{
|
|
public:
|
|
Ask11() {}
|
|
~Ask11() {}
|
|
virtual bool get(const int &idx, BIT_UINT32 &a1, BIT_UINT32 &a2, BIT_UINT32 &a3, BIT_UINT32 &a4);
|
|
};
|
|
|
|
class Ask12: public Ask
|
|
{
|
|
public:
|
|
Ask12() {}
|
|
~Ask12() {}
|
|
virtual bool get(const int &idx, BIT_UINT32 &a1, BIT_UINT32 &a2, BIT_UINT32 &a3, BIT_UINT32 &a4);
|
|
};
|
|
|
|
class Answer3: public Answer
|
|
{
|
|
public:
|
|
Answer3() {}
|
|
~Answer3() {}
|
|
virtual bool get(const int &idx, BIT_UINT32 &result);
|
|
};
|
|
|
|
class Answer4: public Answer
|
|
{
|
|
public:
|
|
Answer4() {}
|
|
~Answer4() {}
|
|
virtual bool get(const int &idx, BIT_UINT32 &result);
|
|
};
|
|
|
|
class Answer5: public Answer
|
|
{
|
|
public:
|
|
Answer5() {}
|
|
~Answer5() {}
|
|
virtual bool get(const int &idx, BIT_UINT32 &result);
|
|
};
|
|
|
|
class Answer6: public Answer
|
|
{
|
|
public:
|
|
Answer6() {}
|
|
~Answer6() {}
|
|
virtual bool get(const int &idx, BIT_UINT32 &result);
|
|
};
|
|
|
|
class Answer7: public Answer
|
|
{
|
|
public:
|
|
Answer7() {}
|
|
~Answer7() {}
|
|
virtual bool get(const int &idx, BIT_UINT32 &result);
|
|
};
|
|
|
|
class Answer8: public Answer
|
|
{
|
|
public:
|
|
Answer8() {}
|
|
~Answer8() {}
|
|
virtual bool get(const int &idx, BIT_UINT32 &result);
|
|
};
|
|
|
|
class Answer9: public Answer
|
|
{
|
|
public:
|
|
Answer9() {}
|
|
~Answer9() {}
|
|
virtual bool get(const int &idx, BIT_UINT32 &result);
|
|
};
|
|
|
|
class Answer10: public Answer
|
|
{
|
|
public:
|
|
Answer10() {}
|
|
~Answer10() {}
|
|
virtual bool get(const int &idx, BIT_UINT32 &result);
|
|
};
|
|
|
|
class Answer11: public Answer
|
|
{
|
|
public:
|
|
Answer11() {}
|
|
~Answer11() {}
|
|
virtual bool get(const int &idx, BIT_UINT32 &result);
|
|
};
|
|
|
|
class Answer12: public Answer
|
|
{
|
|
public:
|
|
Answer12() {}
|
|
~Answer12() {}
|
|
virtual bool get(const int &idx, BIT_UINT32 &result);
|
|
};
|
|
#pragma endregion encrypt data
|
|
|
|
class CDrawEntity
|
|
{
|
|
public:
|
|
CDrawEntity();
|
|
|
|
~CDrawEntity();
|
|
|
|
// login
|
|
BIT_STATUS DrawBegin();
|
|
|
|
//logout
|
|
void DrawEnd(bool recordTime);
|
|
|
|
// check
|
|
BIT_STATUS Draw();
|
|
|
|
// 借出
|
|
void checkoutSn(int nDay);
|
|
|
|
// 还回
|
|
void checkinSn();
|
|
|
|
// 得到当前已经连接上的加密方式
|
|
_LOGIN_MODE getRealLockMode();
|
|
|
|
private:
|
|
void generateIdx();
|
|
LONGLONG getCurrentCounter();
|
|
bool IsBitAnswerLock();
|
|
_LOGIN_MODE getBitAnswerLockMode();
|
|
|
|
private:
|
|
// 随机特征项的索引
|
|
int m_idxFeature;
|
|
// 随机计算因子索引
|
|
int m_idxFactor;
|
|
CBitAnswer m_BitLock;
|
|
std::vector<Ask *> m_asks;
|
|
std::vector<Answer *> m_answers;
|
|
std::vector<int> m_checkFeatures, m_allFeatures;
|
|
// 计录状态
|
|
BIT_STATUS m_loginStatus;
|
|
|
|
// 上次验证时间
|
|
LONGLONG m_Counters;
|
|
// CPU频率
|
|
LONGLONG m_Frequency;
|
|
|
|
// 上次登录时间
|
|
time_t m_loginTime;
|
|
};
|
|
typedef Singleton<CDrawEntity> g_BALock;
|