Создание таблицы лицензий для Guardant Sign Net. (Delphi)
Добрый день!
Два вопроса.
Вопрос 1.
С помощью writemask.dll из комплекта разработчика (...\Samples\x86\Win32\Miscellaneous\WriteMask\Lib) пытаюсь создать LMS для Guardant Sign Net.
Дескрипторы алгоритмов AES128 и ECC160 добавляются без проблем, все работает как нужно.
Однако, после добавления операции создания таблицы лицензий, повторное обращение GrdGetInfo() к ключу возвращает значение wRealNetRes совершенно не то, которое я пытаюсь записать: записываю 10, читаю ноль.
FStatus := GrdGetInfo(
fGrdHandle, // handle to Guardant protected container
GrdGIL_Model, // model of dongle
@fbyModel, // pointer to a buffer for return data
sizeof(BYTE)); // number of bytes for returning
...
fwType := fGrdFindInfo.wType;
fwLANRes := fGrdFindInfo.wRealNetRes; // Возвращает 0, вместо 10 (byMaxNetRes)
fwLANRes := fGrdFindInfo.byMaxNetRes; // Корректировка, если нужно
...
{- Prepare the mask to write to the Master dongle }
abyDongleHeader[1] := 0; { byProg }
abyDongleHeader[2] := 0; { byVer }
abyDongleHeader[3] := 0;
abyDongleHeader[4] := 0; { wSN (2 bytes) }
abyDongleHeader[5] := 0;
abyDongleHeader[6] := 0; { wMask (2 bytes) }
FillChar(abyMask, 4096 * sizeof(BYTE), 0);
FillChar(abyMaskHeader, 4096 * sizeof(BYTE), 0);
{- Initialize writemask component }
WriteMaskInit(
fwType, { type bitmask of Master dongle }
fbyModel); { model of Master dongle }
fwMaskSize := 0;
fwAST_Size := 0;
fwNumberOfItems := 0;
if (fwType and GrdDT_LAN) <> 0 then // End User dongle supports LAN (e.g. Stealth II/III Net)
begin
// You may add number of LMS modules here
fwModules[0] := fwLANRes;
fwModules[1] := fwLANRes;
fwLMSDetSize := 110;
LMS_DET_Prepare(
@fbuf_mask_LMS_det[1], // Reserved memory
0 {LMS_FLAG_LICENCE_SIZE_2BYTES}, //LMS_FLAG_LSIZE_2BYTES,
1, // Number of records in LMS (2 modules)
fwLANRes, // LAN Resource
@fwModules[0], // WORD array of module sizes
@fwLMSDetSize);
end;
AddAlgorithm(
@abyMask[1], { pointer to a buffer to return generated mask }
@abyMaskHeader[1], { pointer to a buffer to return generated mask header }
fwNumberOfItems,
{ numeric name (algorithm number) of added algorithm/protected item (PI) }
nsafl_ST_III { + nsafl_ActivationSrv + nsafl_DeactivationSrv {+ nsafl_UpdateSrv},
{ services flags }
nsafh_ReadSrv {+ nsafh_ReadPwd}, { services flags }
rs_algo_PI, { protected item }
fwLMSDetSize, { key length }
0, { block length }
0, { activation service password }
0, { deactivation service password }
0, { read service password }
0, { update service password }
nil, { pointer to structure, contains birth time of algorithm/PI (only for Time dongles) }
nil, { pointer to structure, contains dead time of algorithm/PI (only for Time dongles) }
nil, { pointer to structure, contains life time of algorithm/PI (only for Time dongles) }
nil, { pointer to structure, contains flip time of algorithm/PI (only for Time dongles) }
$0, { GP counter of algorithm/PI }
$0A, { error counter of algorithm/PI }
@fbuf_mask_LMS_det[1], { algorithm determinant }
@fwMaskSize, { pointer to variables, contains mask size }
@fwAST_Size, { pointer to variables, contains AST size }
@fwNumberOfItems); { pointer to variables, contains number of items in mask }
Все, дальше добавляются алгоритмы, которые нормально работают.
Подскажите, пожалуйста, в чем может быть проблема?
...нет ли у Вас работающего примера на Delphi для прошивки LMS в Guardant Sign Net?
Спасибо.
~~~~~~~~~~~~~~~~~~~~~~~~~
Вопрос 2: в Вашей утилите "Редактор памяти ключей Guardant", при добавлении таблицы лицензий в образ ключа таблицы, заметил, что размер таблицы лицензий для случая, когда LMS содержит только общий ресурс ключа, имеет длину 94 байта. Это в случае, если создается таблица для Guardant Sign Net.
Если же таблица LMS создается для ключа Guardant Stealth III Net, то размер поля получается в 24 байта:
Возможно, библиотека writemask.dll не адаптирована для записи LMS в Guardant Sign Net?
Поясните, пожалуйста.