Files
sd_gen/include/common/licenceELC2.h

107 lines
3.0 KiB
C++

#ifndef PLC_LICENCE2_COMMON_H
#define PLC_LICENCE2_COMMON_H
#include <stdint.h>
#include <unordered_map>
#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;
// enum class Error
// {
// SDCardReadError = 50,
// LicenceReadError = 51,
// LicenceSizeMismatch = 52,
// LicenceSizeCardMismatch = 53,
// LicenceMismatch = 54,
// ItemsCountMismatch = 61
// };
// unordered_map<Error, string> mapErrors = {
// {Error::SDCardReadError, "Nepodařilo se načíst SD kartu."},
// {Error::ItemsCountMismatch, "Nesouhlasí počet položek licence."},
// {Error::LicenceSizeMismatch, "Nesouhlasí velikost souboru licence."},
// {Error::LicenceSizeCardMismatch, "Nesouhlasí velikost SD karty."},
// {Error::LicenceMismatch, "Nesouhlasí licence."},
// {Error::ItemsCountMismatch, "Nesouhlasí počet položek licence."},
// };
struct LicenceId
{
char licIdent[5] = {'E', 'L', 'C', '0', '_'};
};
// struct __attribute__((__packed__)) LicencePublicHeader
struct LicenceIdentDataHeader
{
BYTE licenceType = 0; // EOSEOV, DRT ...
BYTE licenceTypeVersion = 1; // verze licence, urcuje nuance sifrování a pojmenování souborů
BYTE licenceIndex = 0; // puvodní post fix, identifikátor pro více licencí
BYTE compatibilityVersion = 1; // udava verzi komplet PrivateContent
BYTE licItemCount = 0; // počet licenčních bodů
WORD publicHeaderLength = 0; // délka veřejné hlavičy
WORD cardSize = 0; // velikost SD karty
DWORD serialNumber = 0; // seriove cislo karty
};
///
struct licDataItem
{
WORD protoId = 0; // id protokolu pro ktery je licence
WORD licCount = 0; // pocet datovych bodu licence
char dummy[64] = {}; // dummy pro větší velikost licence v případě méně licenčních bodů
};
struct PublicHeader
{
string version = "";
string projectDescription = "";
string date = "";
string licenceType = "";
int crc = 0;
};
struct PrivateContent // privátní šifrovaná část
{
LicenceIdentDataHeader licenceIdentHeader;
vector<licDataItem> dataItems;
WORD crc = 0;
};
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