TODO: ¨
// original jsou testy na velikost přečteného file, zatím TODO 549-LicenceELC11
-0
-255
-255
-21
-17
-97
-225
-0
-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-231-0-
10-0-0-0-79-58-0-0-2-0-10-0-128-92-114-101-115-116-97-114-116-46-99-122-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-116-101-99-111-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-1-0-0-0-0-0-0-0-0-0-0-0-1-0-231-3-21-17-97-225-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-37-59-
WAGO
EOV_OSV
Licence pro EOV_OSV
ceskatrebova
RO1
map getArguments(int argc, char *argv[])
{
const char splitChar='=';
map result;
if (argc <= 1) return result;
for (int i = 1; i < argc; ++i)
{
bool isArgName = true;
int argLength = strlen(argv[i]);
string argName;
string argValue;
char* argValueChar;
for (int j=0;j hlavicka: 1.0, data: 1.0 *)
(* pomocne promenne *)
dataWiteToFile: ARRAY [0..cEzLic_p78ou3_maxDataToFile] OF BYTE; (* data zapisovana do souboru *)
retDataCount: DWORD; (* pocty zapisovanych a ctenych dat - navratova hodnota jednotlivych funkci *)
licencePostfix: STRING; (* pomocna promenna pro kontrolu postfixu *)
mainLicDescription: STRING(79); (* globalni pojmenovani licence v nesifrovane casti licence *)
freeDataSize: UINT; (* velikost volne citelnych dat v souboru licenci *)
cryptDataSize: UINT; (* velikost volne cryptovanych dat v souboru licenci *)
fullDataSize: UINT; (* celkova velikost souboru licenci *)
generation: USINT; (* verze SW pro licence *)
(* testCrypt: ARRAY [0..3] OF BYTE := 116,101,115,116; (* test *) *)
testCrypt: ARRAY [0..4] OF BYTE := 107,117,114,118,97;
encTest: ARRAY [0..100] OF BYTE; (* data zapisovana do souboru *)
testByte: BYTE;
END_VAR
(*
funkce:
- nacte SD kartu a dekoduje informace CID, CSD
- vygeneruje jmena a hesla
- vytvori soubor licence
*)
fEz_CreateLicenceFile.isDone := FALSE;
(* nacteni CID a CSD informaci SD karty - pro vsechny verze licencnich souboru STEJNE *)
fEz_CreateLicenceFile := fEz_ReadSD( cEzLic_p78ou3_sdinfofilepath );
IF fEz_CreateLicenceFile.retCode > 0 THEN
RETURN;
END_IF;
(* nastaveni dat licence *)
EZlic_LicenceIdent.licPrefixType := SHR( EZlic_sourceLicenceData.licType, 12 );
EZlic_LicenceIdent.licHeaderType := ( SHR( EZlic_sourceLicenceData.licType, 8 ) AND 16#000F );
EZlic_LicenceIdent.licDataType := ( SHR( EZlic_sourceLicenceData.licType, 4 ) AND 16#000F );
EZlic_LicenceIdent.licSubType := SHL(EZlic_LicenceIdent.licHeaderType, 8) OR EZlic_LicenceIdent.licDataType;
EZlic_LicenceIdent.licIDType := EZlic_sourceLicenceData.licType AND 16#000F;
(* kontrola a nastaveni postfixu *)
IF EZlic_sourceLicenceData.licPostfix > 9 THEN
EZlic_sourceLicenceData.licPostfix := 0;
END_IF;
licencePostfix := BYTE_TO_STRING( EZlic_sourceLicenceData.licPostfix );
EZlic_sourceLicenceData.licPostfixIdent := RIGHT( licencePostfix, 1 );
(* vygenerovani jmena licencniho souboru *)
fEz_CreateLicenceFile := fEz_GetLicenceFileName( EZlic_LicenceIdent.licIDType, EZlic_sourceLicenceData.licPostfix, EZlic_licenceFilePath, generation);
IF fEz_CreateLicenceFile.retCode > 0 THEN
RETURN;
END_IF;
(* nastaveni dat licence *)
CASE EZlic_LicenceIdent.licHeaderType OF
cEzLic_p78ou3_HeaderType_10: (* hlavicka licence verze 1.0 *)
CASE EZlic_LicenceIdent.licDataType OF
cEzLic_p78ou3_DataType_10: (* verze licencnich dat 1.0 *)
(* hlavicka licence *)
dataToFile_10_10.id.version := 10;
dataToFile_10_10.id.cardSize := EzLic_p78ou3_SD_Data.cardSize;
CASE EZlic_LicenceIdent.licIDType OF
cEzLic_p78ou3_IDType_DDTS: (* ddts *)
mainLicDescription := 'ddts ';
cEzLic_p78ou3_IDType_EOVOSV: (* eov, osv *)
mainLicDescription := 'eov, osv ';
ELSE
mainLicDescription := 'neznama app ';
END_CASE;
mainLicDescription := CONCAT( mainLicDescription, EZlic_sourceLicenceData.licPostfixIdent );
mainLicDescription := CONCAT( mainLicDescription, ' => ' );
(* data licence *)
dataToFile_10_10.header.licVersion := 10;
dataToFile_10_10.header.licType := WORD_TO_BYTE( EZlic_LicenceIdent.licIDType );
dataToFile_10_10.header.licDate := DT_TO_DATE( SysRtcGetTime(TRUE) );
dataToFile_10_10.header.licDescription1 := EZlic_sourceLicenceData.licDescription1;
dataToFile_10_10.header.licDescription2 := EZlic_sourceLicenceData.licDescription2;
mainLicDescription := CONCAT( mainLicDescription, dataToFile_10_10.header.licDescription1 );
mainLicDescription := CONCAT( mainLicDescription, ' [' );
mainLicDescription := CONCAT( mainLicDescription, dataToFile_10_10.header.licDescription2 );
mainLicDescription := CONCAT( mainLicDescription, ']' );
CASE EZlic_LicenceIdent.licIDType OF
cEzLic_p78ou3_IDType_EOVOSV: (* eov, osv *)
IF generation = 1 THEN
dataToFile_10_10.header.licCount := 1;
dataToFile_10_10.items[0].licCount := 65535;
dataToFile_10_10.items[0].protoId := cEzLic_p78ou3_CheckLicNumberId_EOV1;
dataToFile_10_10.items[0].data1 := cEzLic_p78ou3_CheckLicNumber_EOV1;
ELSE
dataToFile_10_10.header.licCount := 1;
dataToFile_10_10.items[1].licCount := 65535;
dataToFile_10_10.items[1].protoId := cEzLic_p78ou3_CheckLicNumberId_EOV1;
dataToFile_10_10.items[1].data1 := cEzLic_p78ou3_CheckLicNumber_EOV1;
END_IF;
END_CASE;
(* parametry pro sifrovani a zapis do souboru *)
(* - dekoment
EzLic_p78ou3_CryptoData.cryptDataAddress := ADR( dataToFile_10_10 );
EzLic_p78ou3_CryptoData.cryptDataSize := SIZEOF( dataToFile_10_10 );
*)
EzLic_p78ou3_CryptoData.cryptDataAddress := ADR( testCrypt );
EzLic_p78ou3_CryptoData.cryptDataSize := SIZEOF( testCrypt );
(*nastaveni id souboru a vypocet CRC pro hlavicky a licencnich dat *)
dataToFile_10_10.id.version := 10;
dataToFile_10_10.crc := fEz_crc16( ADR( dataToFile_10_10 ), SIZEOF( dataToFile_10_10 ) - SIZEOF( dataToFile_10_10.crc ) );
dataToFile_10_10.crc := 1000;
ELSE
(* neznama verze licencnich dat *)
fEz_CreateLicenceFile := fEz_SetRetData(cEzLic_p78ou3_error_data, 1);
RETURN;
END_CASE;
ELSE
(* neznama verze hlavicky kriptovanych dat *)
fEz_CreateLicenceFile := fEz_SetRetData(cEzLic_p78ou3_error_header, 1);
RETURN;
END_CASE;
(* inicializace Ckryptovacich algoritmu, Vektoru a klice *)
fEz_CreateLicenceFile := fEz_InitCrypto(EZlic_LicenceIdent.licIDType);
IF fEz_CreateLicenceFile.retCode > 0 THEN
RETURN;
END_IF;
(* zpracovani dat licencniho souboru [sifrovani, podpis, komprese, ...] *)
CASE EZlic_LicenceIdent.licPrefixType OF
cEzLic_p78ou3_LicPrefixType_ELC1: (* typ1 = pouze zasifrovani dat *)
freeDataSize := SIZEOF( dataMainToFileELC1 );
EzLic_p78ou3_CryptoData.aesRetVal := WCRYPTO_fAesEncrypt(
pabPlain := EzLic_p78ou3_CryptoData.cryptDataAddress,
diPlainLen := EzLic_p78ou3_CryptoData.cryptDataSize,
sCipher := cEzLic_p78ou3_CipherAES,
pIv := ADR(EzLic_p78ou3_CryptoData.aesInitVector),
diIvLen := SIZEOF(EzLic_p78ou3_CryptoData.aesInitVector),
pKey := ADR(EzLic_p78ou3_CryptoData.aesKey),
diKeyLen := SIZEOF(EzLic_p78ou3_CryptoData.aesKey),
(*
pabCiphered := ADR(encTest),
diCipheredLen := SIZEOF(encTest)
*)
pabCiphered := ADR( dataWiteToFile ) + freeDataSize,
diCipheredLen := SIZEOF( dataWiteToFile ) - freeDataSize
);
(* EzLic_p78ou3_CryptoData.aesRetVal := SIZEOF(dataToFile_10_10); *)
IF EzLic_p78ou3_CryptoData.aesRetVal > 0 THEN
SysMemSet( ADR( dataMainToFileELC1.licHeader.description ), 0, SIZEOF( dataMainToFileELC1.licHeader.description ) );
dataMainToFileELC1.prefix := 16#31434C45;
SysMemCpy( ADR( dataMainToFileELC1.licHeader.description ), ADR( mainLicDescription ), LEN( mainLicDescription ) );
dataMainToFileELC1.licHeader.sizeData := EzLic_p78ou3_CryptoData.aesRetVal;
dataMainToFileELC1.licHeader.licType := WORD_TO_BYTE( EZlic_LicenceIdent.licIDType );
dataMainToFileELC1.licHeader.licSubType := SHL( EZlic_LicenceIdent.licHeaderType, 8 ) OR EZlic_LicenceIdent.licDataType;
SysMemCpy(ADR( dataWiteToFile ), ADR( dataMainToFileELC1 ), freeDataSize );
(* SysMemCpy(ADR(dataWiteToFile) + freeDataSize, ADR(encTest), SIZEOF(encTest)); *)
SysMemCpy(ADR(dataWiteToFile) + freeDataSize, ADR( dataToFile_10_10), SIZEOF( dataToFile_10_10));
cryptDataSize := DINT_TO_UINT( EzLic_p78ou3_CryptoData.aesRetVal );
ELSE
(* chyba pri sifrovani *)
fEz_CreateLicenceFile := fEz_SetRetData(cEzLic_p78ou3_error_crypto, EzLic_p78ou3_CryptoData.aesRetVal);
RETURN;
END_IF;
ELSE
(* neznamy prefix licencniho souboru *)
fEz_CreateLicenceFile := fEz_SetRetData(cEzLic_p78ou3_error_prefix, 1);
RETURN;
END_CASE;
IF EZlic_sourceLicenceData.enInit THEN
(* smazani vsech souboru v adresari licenci - pro vsechny verze licencnich souboru STEJNE *)
sdDirHandle := SysDirOpen( EzLic_p78ou3_licencfilepath );
WHILE SysDirRead(sdDirHandle, dirFileName, ADR( dirInfo ) ) > 0 DO
IF NOT dirInfo.bDirectory THEN
dirFilePath := CONCAT( EzLic_p78ou3_licencfilepath, dirFileName );
SysFileDelete( dirFilePath );
END_IF;
END_WHILE;
ELSE
(* smazani pouze aktualini licence *)
SysFileDelete( EZlic_licenceFilePath );
END_IF;
(* zapsani souboru licence na SD kartu - pro vsechny verze licencnich souboru STEJNE *)
fullDataSize := freeDataSize + cryptDataSize;
sdFileHandle := SysFileOpen( EZlic_licenceFilePath, 'w');
IF sdFileHandle > 0 THEN
retDataCount := SysFileWrite( sdfileHandle, ADR( dataWiteToFile ), fullDataSize );
SysFileClose( sdFileHandle );
IF retDataCount <> fullDataSize THEN
(* chyba pri zapisu licence *)
fEz_CreateLicenceFile := fEz_SetRetData(cEzLic_p78ou3_error_write, 0);
RETURN;
END_IF;
END_IF;
(* korektne vygenerovany soubor licenci *)
fEz_CreateLicenceFile := fEz_SetRetData(cEzLic_p78ou3_error_no, 0);
fEz_CreateLicenceFile.isDone := TRUE;
---------------------------------------------- funkcni --------------------------------------
(*
funkce:
- nacte SD kartu a dekoduje informace CID, CSD
- vygeneruje jmena a hesla
- vytvori soubor licence
*)
fEz_CreateLicenceFile.isDone := FALSE;
(* nacteni CID a CSD informaci SD karty - pro vsechny verze licencnich souboru STEJNE *)
fEz_CreateLicenceFile := fEz_ReadSD( cEzLic_p78ou3_sdinfofilepath );
IF fEz_CreateLicenceFile.retCode > 0 THEN
RETURN;
END_IF;
(* nastaveni dat licence *)
EZlic_LicenceIdent.licPrefixType := SHR( EZlic_sourceLicenceData.licType, 12 );
EZlic_LicenceIdent.licHeaderType := ( SHR( EZlic_sourceLicenceData.licType, 8 ) AND 16#000F );
EZlic_LicenceIdent.licDataType := ( SHR( EZlic_sourceLicenceData.licType, 4 ) AND 16#000F );
EZlic_LicenceIdent.licSubType := SHL(EZlic_LicenceIdent.licHeaderType, 8) OR EZlic_LicenceIdent.licDataType;
EZlic_LicenceIdent.licIDType := EZlic_sourceLicenceData.licType AND 16#000F;
(* kontrola a nastaveni postfixu *)
IF EZlic_sourceLicenceData.licPostfix > 9 THEN
EZlic_sourceLicenceData.licPostfix := 0;
END_IF;
licencePostfix := BYTE_TO_STRING( EZlic_sourceLicenceData.licPostfix );
EZlic_sourceLicenceData.licPostfixIdent := RIGHT( licencePostfix, 1 );
(* vygenerovani jmena licencniho souboru *)
fEz_CreateLicenceFile := fEz_GetLicenceFileName( EZlic_LicenceIdent.licIDType, EZlic_sourceLicenceData.licPostfix, EZlic_licenceFilePath, generation);
IF fEz_CreateLicenceFile.retCode > 0 THEN
RETURN;
END_IF;
(* nastaveni dat licence *)
CASE EZlic_LicenceIdent.licHeaderType OF
cEzLic_p78ou3_HeaderType_10: (* hlavicka licence verze 1.0 *)
CASE EZlic_LicenceIdent.licDataType OF
cEzLic_p78ou3_DataType_10: (* verze licencnich dat 1.0 *)
(* hlavicka licence *)
dataToFile_10_10.id.version := 10;
dataToFile_10_10.id.cardSize := EzLic_p78ou3_SD_Data.cardSize;
CASE EZlic_LicenceIdent.licIDType OF
cEzLic_p78ou3_IDType_DDTS: (* ddts *)
mainLicDescription := 'ddts ';
cEzLic_p78ou3_IDType_EOVOSV: (* eov, osv *)
mainLicDescription := 'eov, osv ';
ELSE
mainLicDescription := 'neznama app ';
END_CASE;
mainLicDescription := CONCAT( mainLicDescription, EZlic_sourceLicenceData.licPostfixIdent );
mainLicDescription := CONCAT( mainLicDescription, ' => ' );
(* data licence *)
dataToFile_10_10.header.licVersion := 10;
dataToFile_10_10.header.licType := WORD_TO_BYTE( EZlic_LicenceIdent.licIDType );
dataToFile_10_10.header.licDate := DT_TO_DATE( SysRtcGetTime(TRUE) );
dataToFile_10_10.header.licDescription1 := EZlic_sourceLicenceData.licDescription1;
dataToFile_10_10.header.licDescription2 := EZlic_sourceLicenceData.licDescription2;
mainLicDescription := CONCAT( mainLicDescription, dataToFile_10_10.header.licDescription1 );
mainLicDescription := CONCAT( mainLicDescription, ' [' );
mainLicDescription := CONCAT( mainLicDescription, dataToFile_10_10.header.licDescription2 );
mainLicDescription := CONCAT( mainLicDescription, ']' );
CASE EZlic_LicenceIdent.licIDType OF
cEzLic_p78ou3_IDType_EOVOSV: (* eov, osv *)
IF generation = 1 THEN
dataToFile_10_10.header.licCount := 1;
dataToFile_10_10.items[0].licCount := 65535;
dataToFile_10_10.items[0].protoId := cEzLic_p78ou3_CheckLicNumberId_EOV1;
dataToFile_10_10.items[0].data1 := cEzLic_p78ou3_CheckLicNumber_EOV1;
ELSE
dataToFile_10_10.header.licCount := 1;
dataToFile_10_10.items[1].licCount := 65535;
dataToFile_10_10.items[1].protoId := cEzLic_p78ou3_CheckLicNumberId_EOV1;
dataToFile_10_10.items[1].data1 := cEzLic_p78ou3_CheckLicNumber_EOV1;
END_IF;
END_CASE;
(* parametry pro sifrovani a zapis do souboru *)
EzLic_p78ou3_CryptoData.cryptDataAddress := ADR( dataToFile_10_10 );
EzLic_p78ou3_CryptoData.cryptDataSize := SIZEOF( dataToFile_10_10 );
(*nastaveni id souboru a vypocet CRC pro hlavicky a licencnich dat *)
dataToFile_10_10.id.version := 10;
dataToFile_10_10.crc := fEz_crc16( ADR( dataToFile_10_10 ), SIZEOF( dataToFile_10_10 ) - SIZEOF( dataToFile_10_10.crc ) );
ELSE
(* neznama verze licencnich dat *)
fEz_CreateLicenceFile := fEz_SetRetData(cEzLic_p78ou3_error_data, 1);
RETURN;
END_CASE;
ELSE
(* neznama verze hlavicky kriptovanych dat *)
fEz_CreateLicenceFile := fEz_SetRetData(cEzLic_p78ou3_error_header, 1);
RETURN;
END_CASE;
(* inicializace Ckryptovacich algoritmu, Vektoru a klice *)
fEz_CreateLicenceFile := fEz_InitCrypto(EZlic_LicenceIdent.licIDType);
IF fEz_CreateLicenceFile.retCode > 0 THEN
RETURN;
END_IF;
(* zpracovani dat licencniho souboru [sifrovani, podpis, komprese, ...] *)
CASE EZlic_LicenceIdent.licPrefixType OF
cEzLic_p78ou3_LicPrefixType_ELC1: (* typ1 = pouze zasifrovani dat *)
freeDataSize := SIZEOF( dataMainToFileELC1 );
EzLic_p78ou3_CryptoData.aesRetVal := WCRYPTO_fAesEncrypt(
pabPlain := EzLic_p78ou3_CryptoData.cryptDataAddress,
diPlainLen := EzLic_p78ou3_CryptoData.cryptDataSize,
sCipher := cEzLic_p78ou3_CipherAES,
pIv := ADR(EzLic_p78ou3_CryptoData.aesInitVector),
diIvLen := SIZEOF(EzLic_p78ou3_CryptoData.aesInitVector),
pKey := ADR(EzLic_p78ou3_CryptoData.aesKey),
diKeyLen := SIZEOF(EzLic_p78ou3_CryptoData.aesKey),
pabCiphered := ADR( dataWiteToFile ) + freeDataSize,
diCipheredLen := SIZEOF( dataWiteToFile ) - freeDataSize );
IF EzLic_p78ou3_CryptoData.aesRetVal > 0 THEN
SysMemSet( ADR( dataMainToFileELC1.licHeader.description ), 0, SIZEOF( dataMainToFileELC1.licHeader.description ) );
dataMainToFileELC1.prefix := 16#31434C45;
SysMemCpy( ADR( dataMainToFileELC1.licHeader.description ), ADR( mainLicDescription ), LEN( mainLicDescription ) );
dataMainToFileELC1.licHeader.sizeData := EzLic_p78ou3_CryptoData.aesRetVal;
dataMainToFileELC1.licHeader.licType := WORD_TO_BYTE( EZlic_LicenceIdent.licIDType );
dataMainToFileELC1.licHeader.licSubType := SHL( EZlic_LicenceIdent.licHeaderType, 8 ) OR EZlic_LicenceIdent.licDataType;
SysMemCpy(ADR( dataWiteToFile ), ADR( dataMainToFileELC1 ), freeDataSize );
cryptDataSize := DINT_TO_UINT( EzLic_p78ou3_CryptoData.aesRetVal );
ELSE
(* chyba pri sifrovani *)
fEz_CreateLicenceFile := fEz_SetRetData(cEzLic_p78ou3_error_crypto, EzLic_p78ou3_CryptoData.aesRetVal);
RETURN;
END_IF;
ELSE
(* neznamy prefix licencniho souboru *)
fEz_CreateLicenceFile := fEz_SetRetData(cEzLic_p78ou3_error_prefix, 1);
RETURN;
END_CASE;
IF EZlic_sourceLicenceData.enInit THEN
(* smazani vsech souboru v adresari licenci - pro vsechny verze licencnich souboru STEJNE *)
sdDirHandle := SysDirOpen( EzLic_p78ou3_licencfilepath );
WHILE SysDirRead(sdDirHandle, dirFileName, ADR( dirInfo ) ) > 0 DO
IF NOT dirInfo.bDirectory THEN
dirFilePath := CONCAT( EzLic_p78ou3_licencfilepath, dirFileName );
SysFileDelete( dirFilePath );
END_IF;
END_WHILE;
ELSE
(* smazani pouze aktualini licence *)
SysFileDelete( EZlic_licenceFilePath );
END_IF;
(* zapsani souboru licence na SD kartu - pro vsechny verze licencnich souboru STEJNE *)
fullDataSize := freeDataSize + cryptDataSize;
sdFileHandle := SysFileOpen( EZlic_licenceFilePath, 'w');
IF sdFileHandle > 0 THEN
retDataCount := SysFileWrite( sdfileHandle, ADR( dataWiteToFile ), fullDataSize );
SysFileClose( sdFileHandle );
IF retDataCount <> fullDataSize THEN
(* chyba pri zapisu licence *)
fEz_CreateLicenceFile := fEz_SetRetData(cEzLic_p78ou3_error_write, 0);
RETURN;
END_IF;
END_IF;
(* korektne vygenerovany soubor licenci *)
fEz_CreateLicenceFile := fEz_SetRetData(cEzLic_p78ou3_error_no, 0);
fEz_CreateLicenceFile.isDone := TRUE;
----------------------------------------------------