Создание таблицы лицензий для 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 байта:

http://i57.fastpic.ru/big/2014/0417/d3/8e2b452d832be2bf0f841f255b8813d3.png

Возможно, библиотека writemask.dll не адаптирована для записи LMS в Guardant Sign Net?

Поясните, пожалуйста.

Re: Создание таблицы лицензий для Guardant Sign Net. (Delphi)

Алло. Есть кто живой?

Re: Создание таблицы лицензий для Guardant Sign Net. (Delphi)

Все живы )

Завтра наши специалисты посмотрят и ответят - в пятницу не успели.

Re: Создание таблицы лицензий для Guardant Sign Net. (Delphi)

Здравствуйте, vlad-mal.

Приносим извинения за задержку с ответом.

  • Вопрос 1:

Здесь похоже имеется ошибка в библиотеке writemask.dll которую будем искать и исправлять (скорее всего, к очередному релизу нашего SDK). Для самостоятельного изучения есть исходники этой библиотеки.
Пример для Delphi постараемся сделать в ближайшее время.

  • Вопрос 2:

Тут ошибки нет, таблицы лицензий для ключей Net III и Sign Net несколько разные.

Re: Создание таблицы лицензий для Guardant Sign Net. (Delphi)

  • Вопрос 1:

Спасибо, понял.
Начну копать со своей стороны.

  • Вопрос 2:

...таблицы лицензий для ключей Net III и Sign Net несколько разные.

Подскажите, пожалуйста, где можно прочитать по поводу различий? Работать-то нужно...
В https://www.guardant.ru/download/manual … e_Code.pdf , страницы 32-33 описана структура защищенной ячейки типа Таблица Лицензиций "современных ключей Guardant Sign Net / Time Net". На тех же страницах видно, что размер таблицы, содержащий только "нулевой" модуль LMS - всего 17 или 18 байт. Этот размер довольно близок к 24м байтам, но далек до 94х:

http://i57.fastpic.ru/big/2014/0417/d3/8e2b452d832be2bf0f841f255b8813d3.png

Подскажите, пожалуйста - какие данные являются достоверными, то есть - на что можно опираться в работе при программировании ключей Guardant Sign Net?

И, если можно: что именно показывает Ваша утилита программирования ключей в дампе поля "Таблица лицензий" маски ключа?

Спасибо.

Re: Создание таблицы лицензий для Guardant Sign Net. (Delphi)

Устройство памяти электронных ключей Sign Net и Net III описано в нашей справочной системе по Guardant API. Здесь необходимо смотреть на структуры защищенных ячеек указанных ключей (т.к. таблица лицензий это частный случай защищенной ячейки).