Files
sd_gen/include/common/licenceELC3.h
2024-05-14 14:51:30 +02:00

89 lines
2.3 KiB
C++

#ifndef EZ_APPLICATION_LICENCE_DISABLE
#ifndef PLC_LICENCE3_COMMON_H
#define PLC_LICENCE3_COMMON_H
#define UID_LENGTH 32
#include <vector>
#include "licenceCommon.h"
/// @brief společná třída pro pro reader i generator licence typu ELC2
class LicenceELC3
{
public:
LicenceELC3();
LicenceELC3(LicenceIdentification &licIdentification);
~LicenceELC3();
string licenceFilePath = "";
string licFileName = "";
string uid = "";
BYTE uidb[UID_LENGTH] = {};
string uid_path = ""; ///etc/machine-id
Mapping mapping;
ErrorMessage errorMessage;
struct LicenceId
{
char licIdent[5] = {'E', 'L', 'C', '0', '_'};
};
// struct __attribute__((__packed__)) LicencePublicHeader
struct LicenceIdentDataHeader
{
BYTE licenceType{}; // EOSEOV, DRT ...
BYTE licenceTypeVersion = 1; // verze licence, urcuje nuance sifrování a pojmenování souborů
BYTE licenceIndex{}; // puvodní post fix, identifikátor pro více licencí
BYTE compatibilityVersion = 1; // udava verzi komplet PrivateContent
BYTE licItemCount{}; // počet protokolů v linenci
WORD publicHeaderLength{}; // délka veřejné hlavičy
// WORD cardSize{}; // velikost SD karty
// DWORD serialNumber = {}; // seriove cislo karty
};
struct licDataItem
{
DWORD protoId{}; // id protokolu pro ktery je licence
DWORD licCount{}; // pocet datovych bodu licence
};
struct PublicHeader
{
string version = "";
string projectDescription = "";
string date = "";
string licenceType = "";
};
struct PrivateContent // privátní šifrovaná část
{
LicenceIdentDataHeader licenceIdentHeader{};
vector<licDataItem> dataItems{};
WORD crc{};
};
struct LicenceBody
{
LicenceId licId{};
LicenceIdentDataHeader licenceIdentHeader{};
string publicHeader = ""; // JSON
PrivateContent privateContent{};
};
protected:
vector<unsigned char> cryptPrivateContent(const std::vector<unsigned char> &content);
vector<unsigned char> decryptPrivateContent(const std::vector<unsigned char> &content);
void initVector(BYTE *iVector, BYTE *key);
string getLicenceName();
LicenceBody licBody{};
LicenceIdentification lIdentification{};
private:
};
#endif
#endif