Files
sd_gen/include/common/licenceELC2.h
2024-04-10 08:03:43 +02:00

85 lines
2.2 KiB
C++

#ifndef PLC_LICENCE2_COMMON_H
#define PLC_LICENCE2_COMMON_H
#include <vector>
#include "licenceCommon.h"
#include "SDCard.h"
/// @brief společná třída pro pro reader i generator licence typu ELC2
class LicenceELC2
{
public:
LicenceELC2();
LicenceELC2(LicenceIdentification &licIdentification);
~LicenceELC2();
string cid_cdsPath = "";
string licenceFilePath = "";
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 {};
};
LicenceBody licBody {};
SDCard sdCard {};
LicenceIdentification lIdentification {};
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();
private:
};
#endif