[Ошибка] Прошивка ключа с помощью GrdWrite (Java)
Здравствуйте!
Стоит задача записать тестовый образ в ключ (Guardant Sign), делаю это следующим образом, образ формируется штатным редактором из SDK7 -> дамп образа -> запись в файл.
Что пытаюсь сделать:
-Инициализирую ключ как обычно, за исключением указания всех кодов доступа в GrdSetAccessCodes().
-Далее открываю образ и пытаюсь прошить ключ, в образе 4 защищенные ячейки:
Path path = Paths.get("E:/dump.dmp");
byte[] data = Files.readAllBytes(path);
ErrorHandling(Api.GrdInit(grdHandle));
ErrorHandling(Api.GrdWrite(grdHandle, GrdUAM.NProg, data));
ErrorHandling(Api.GrdProtect(grdHandle, data.length-1, data.length-1, 4, 0));
ErrorHandling(Api.GrdCleanup());
Все проходит удачно, ошибок нет. После записи пытаюсь прочитать значение первой защищенной ячейки:
ErrorHandling(Api.GrdPI_Read(grdHandle, 0, 0, data));
И вот тут обнаруживается проблема. При записи образа утилитами из SDK, при чтении PI я получаю данные. Если же образ записан приведенным мной выше методом, я получаю
Guardant error: Не найдено алгоpитма с запрошенным номером
Коды доступа правильные, образы при записи идентичны. В чем может быть дело?
Еще такой момент, если создавать исходный код записи с помощью SDK, то там в GrdProtect() передаются UAM адреса, т.е. (длина всего блока образа UAM - 1), в то время как в документации написано, что должны передаваться SAM (+30 в нашем случае).