Функция GrdTRU_EncryptAnswer предназначена для подготовки данных (ответа) при использовании технологии Trusted Remote Update. Эта функция не подходит для ключей Guardant Code, при работе с которыми нужно использовать функцию GrdTRU_EncryptAnswerEx.
Wiki Markup |
---|
{dojo-tabs:theme=tundra|id=1} {dojo-tab:title=C|selected=true} *C*int GRD_API GrdTRU_EncryptAnswer( HANDLE hGrd, DWORD dwAddr, DWORD dwLng, void *pData, void *pQuestion, DWORD dwAlgoNum_GSII64, DWORD dwAlgoNum_Hash64, void *pAnswer, DWORD *pdwAnswerSize ); {dojo-tab} {dojo-tab:title=C#|selected=true} *C#* {dojo-tab} {dojo-tab:title=Visual Basic (Declaration)} *Visual Basic* {dojo-tab} {dojo-tab:title=Visual C++} *Visual C++* {dojo-tab} {dojo-tabs} |
Expand | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||
|
Expand | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||
Возможные ошибки
|
Expand | ||
---|---|---|
| ||
Функция GrdTRU_EncryptAnswer предназначена для подготовки данных (ответа) при использовании технологии Trusted Remote Update. При подготовке ответа функция GrdTRU_EncryptAnswer генерирует зашифрованный ответ. Этот ответ представляет собой последовательность команд и набор данных. Расшифрование ответа, проверка его подлинности, последующее выполнение команд и запись данных pData по адресу dwAddr производится непосредственно микропрограммой внутри удаленного электронного ключа. Поскольку кроме данных pData, которые должны быть записаны в память удаленного ключа, ответ содержит команды и другую служебную информацию, длина ответа pdwAnswerSize получается больше, чем длина данных dwLng. Соответственно для размещения ответа pAnswer необходимо зарезервировать памяти больше, чем dwLng. Функция проверяет, достаточно ли памяти выделено для ответа, и если размер буфера недостаточен, возвращается код ошибки GrdE_InvalidArg. При этом в переменную pdwAnswerSize записывается минимальный размер буфера для генерации ответа. Это значение необходимо учитывать при повторном выделении памяти для буфера. Зашифрование ответа производится аппаратным алгоритмом типа GSII64 с номером dwAlgoNum_GSII64. На момент зашифрования этот алгоритм должен быть создан в ключе, находящемся у разработчика. В качестве определителя должен использоваться секретный 128-битовый ключ, который был сгенерирован и прошит в ключ удаленного пользователя при предпродажной подготовке функцией GrdTRU_SetKey для ключа с ID, равным dwID. При использовании GRDUTIL этот ключ берется из базы данных или из соответствующей маски электронного ключа. Для последующей проверки подлинности ответа производится вычисление хеш-функции аппаратным алгоритмом типа Hash64 с номером задаваемым через параметр dwAlgoNum_Hash64. На момент вычисления этот алгоритм должен быть создан в ключе, находящемся у разработчика. В качестве определителя должен использоваться секретный 128-битовый ключ, который был сгенерирован и прошит в ключ удаленного пользователя при предпродажной подготовке функцией GrdTRU_SetKey для ключа с ID равным dwID. При использовании GRDUTIL этот ключ берется из базы данных. Рабочий ключ, находящийся у разработчика, не обязательно должен быть инициализирован также функцией GrdTRU_SetKey с секретным ключом, таким же как у удаленного пользователя. Все преобразования делаются на заранее запрограммированных алгоритмах, номера которых указываются в параметрах указываемых в параметрах dwAlgoNum_GSII64 и dwAlgoNum_Hash64. |
Expand | ||
---|---|---|
| ||
Пример для используемого средства разработки см. в директории: "\%Program Files%\Guardant\Guardant 6\%PublicCode%\Samples\x86\Win32\General Guardant API\" |