- Created by Dyakov Alexey, last modified by Guardant R&D on Nov 26, 2014
Функция(метод) GrdPI_Update позволяет перезаписывать данные защищенной ячейки или определитель алгоритма. При этом определитель алгоритма можно перезаписать только целиком, а в защищенной ячейке можно перезаписывать любой участок данных.
int GRD_API GrdPI_Update( HANDLE hGrd, DWORD dwItemNum, DWORD dwAddr, DWORD dwLng, void *pData, DWORD dwUpdatePsw, DWORD dwMethod, void *pReserved );
hGrd |
хэндл, через который будет выполнено обновление |
||||
dwItemNum |
номер защищенной ячейки/алгоритма для которой будет производиться обновление |
||||
dwAddr |
смещение в определителе защищенной ячейки/алгоритма, начиная с которого будет производиться обновление |
||||
dwLng |
длина блока данных, которые будут обновлены |
||||
pData |
указатель на буфер, содержащий данные для обновления |
||||
dwUpdatePsw |
пароль для обновления. Если пароль не используется, параметр должен быть равен 0 |
||||
dwMethod |
метод обновления данных. Задается одной из констант GrdUM_XXX
|
||||
pReserved |
зарезервировано. Параметр должен быть равен NULL |
Возможные ошибки
неверный пароль обновления, доступ к ячейке запрещен |
|
достигнут лимит количества ошибок, статус ячейки изменить нельзя. Доступ к ячейке на чтение заблокирован |
|
для данного типа ячейки не предусмотрена операция обновления |
|
ячейка в деактивированном состоянии, обновление выполнить невозможно |
|
адрес для обновления выходит за пределы определителя |
|
GrdPI_Update позволяет менять определитель аппаратного алгоритма или данные защищенной ячейки (rs_K[]) после указания пароля обновления. При этом определитель аппаратного алгоритма можно менять только целиком. При попытке изменить часть определителя возвращается код ошибки GrdE_InvalidArg. В защищенной ячейке можно менять любой участок данных.
Обновление данных в дескрипторе ячейки можно производить в том случае, когда она находится в активном состоянии. Для обновления можно потребовать указать пароль dwUpdatePsw, который задается при создании ячейки или алгоритма. При создании ячейки в GRDUTIL пароль требуется по умолчанию.
Если алгоритм или ячейка находятся в активном состоянии (Active) и был задан правильный пароль на обновление, функция возвращает GrdE_OK и производится обновление данных, начиная со смещения в определителе ячейки dwAddr. При этом данные из буфера pData длиной dwLng в зависимости от метода обновления dwMethod либо замещают старые данные, либо складываются со старыми данными по модулю 2. Максимальное значение dwLng - 255 байт.
Функции GrdPI_Read, GrdPI_Update в случае ключей Guardant Sign/Time не имеют ранее существовавшего ограничения в 255 байт на длину считываемого/перезаписываемого определителя алгоритма/защищенной ячейки. Это связано с отсутствием в указанных ключах ограничения на размер определителя.
Если смещение dwAddr задано слишком большим, возвращается ошибка GrdE_Overbound.
Если сумма dwAddr+dwLng выходит за доступные для чтения пределы, данных записывается ровно столько, сколько можно записать. При этом функция возвращает GrdE_OK и никаких других кодов ошибки не генерируется.
Если при попытке обновления активной ячейки был указан неверный пароль dwUpdatePsw, функция GrdPI_Update возвращает ошибку GrdE_AccessDenied. При этом автоматически в ключе уменьшается счетчик ошибок доступа к ячейке, который задается при создании ячейки. Когда значение счетчика ошибок доходит до 0, статус ячейки становится неизменяемым, то есть ячейку больше невозможно активировать/деактивировать/читать/менять ее значение. Однако если алгоритм находился в состоянии Active, функция GrdTransform будет нормально работать.
public static GrdE GrdPI_Update(Handle grdHandle,GrdAlgNum algNum, uint addr, byte[] data, uint updatePsw, GrdUM method) private static unsafe GrdE GrdPI_Update(IntPtr hAddress, int algNum, uint addr, byte[] data, uint updatePsw, int method)
grdHandle [in]
Тип: Handle
Нэндл, с помощью которого будет выполнено обновление.
algNum [in]
Тип: GrdAlgNum
Номер аппаратного алгоритма или защищенной ячейки, для которых будет происходить обновление.
addr [in]
Тип: uint
Смещение в определителе защищенной ячейки или алгоритма, начиная с которого будет происходить обновление.
data [in]
тип: byte [ ]
Указатель на буфер, который содержит данные для обновления.
method [in]
типы: int, GrdUM
Метод обновления данных. Задается одной из констант GrdUM.
updatePsw [in]
Тип: uint
Пароль для обновления.
Возможные ошибки
неверный пароль обновления, доступ к ячейке запрещен |
|
достигнут лимит количества ошибок, статус ячейки изменить нельзя. Доступ к ячейке на чтение заблокирован |
|
для данного типа ячейки не предусмотрена операция обновления |
|
ячейка в деактивированном состоянии, обновление выполнить невозможно |
|
адрес для обновления выходит за пределы определителя |
|
Набор ошибок Guardant API |
GrdPI_Update позволяет менять определитель аппаратного алгоритма или данные защищенной ячейки (rs_K[]) после указания пароля обновления. При этом определитель аппаратного алгоритма можно менять только целиком. При попытке изменить часть определителя возвращается код ошибки GrdE.InvalidArg. В защищенной ячейке можно менять любой участок данных.
Обновление данных в дескрипторе ячейки можно производить в том случае, когда она находится в активном состоянии. Для обновления можно потребовать указать пароль updatePsw, который задается при создании ячейки или алгоритма. При создании ячейки в GRDUTIL пароль требуется по умолчанию.
Если алгоритм или ячейка находятся в активном состоянии (Active) и был задан правильный пароль на обновление, метод возвращает GrdE.OK и производится обновление данных, начиная со смещения в определителе ячейки addr. При этом данные из буфера data в зависимости от метода обновления (method) либо замещают старые данные, либо складываются со старыми данными по модулю 2. Максимальное можно обновить 255 байт данных защищенной ячейки.
Методы GrdPI_Read, GrdPI_Update в случае ключей Guardant Sign/Time не имеют ранее существовавшего ограничения в 255 байт на длину считываемого/перезаписываемого определителя алгоритма/защищенной ячейки. Это связано с отсутствием в указанных ключах ограничения на размер определителя.
Если смещение addr задано слишком большим, возвращается ошибка GrdE.Overbound.
Если количество записываемых данных превышает возможности записи, данных записывается ровно столько, сколько можно записать. При этом метод возвращает GrdE.OK и никаких других кодов ошибки не генерируется.
Если при попытке обновления активной ячейки был указан неверный пароль updatePsw, метод GrdPI_Update возвращает ошибку GrdE.AccessDenied. При этом автоматически в ключе уменьшается счетчик ошибок доступа к ячейке, который задается при создании ячейки. Когда значение счетчика ошибок доходит до 0, статус ячейки становится неизменяемым, то есть ячейку больше невозможно активировать/деактивировать/читать/менять ее значение. Однако если алгоритм находился в состоянии Active, метод GrdTransform будет нормально работать.
public static GrdE GrdPI_Update(Handle grdHandle, int itemNum, int addr, byte[] data, int updatePsw, GrdUM method)
grdHandle [in]
Тип: Handle
Нэндл, с помощью которого будет выполнено обновление.
itemNum [in]
Тип: int
Номер аппаратного алгоритма или защищенной ячейки, для которых будет происходить обновление.
addr [in]
Тип: int
Смещение в определителе защищенной ячейки или алгоритма, начиная с которого будет происходить обновление.
data [in]
тип: byte [ ]
Указатель на буфер, который содержит данные для обновления.
method [in]
тип: GrdUM
Метод обновления данных. Задается одной из констант GrdUM.
updatePsw [in]
Тип: int
Пароль для обновления.
Возможные ошибки
неверный пароль обновления, доступ к ячейке запрещен |
|
достигнут лимит количества ошибок, статус ячейки изменить нельзя. Доступ к ячейке на чтение заблокирован |
|
для данного типа ячейки не предусмотрена операция обновления |
|
ячейка в деактивированном состоянии, обновление выполнить невозможно |
|
адрес для обновления выходит за пределы определителя |
|
GrdPI_Update позволяет менять определитель аппаратного алгоритма или данные защищенной ячейки (rs_K[]) после указания пароля обновления. При этом определитель аппаратного алгоритма можно менять только целиком. При попытке изменить часть определителя возвращается код ошибки GrdE.InvalidArg. В защищенной ячейке можно менять любой участок данных.
Обновление данных в дескрипторе ячейки можно производить в том случае, когда она находится в активном состоянии. Для обновления можно потребовать указать пароль updatePsw, который задается при создании ячейки или алгоритма. При создании ячейки в GRDUTIL пароль требуется по умолчанию.
Если алгоритм или ячейка находятся в активном состоянии (Active) и был задан правильный пароль на обновление, метод возвращает GrdE.OK и производится обновление данных, начиная со смещения в определителе ячейки addr. При этом данные из буфера data в зависимости от метода обновления (method) либо замещают старые данные, либо складываются со старыми данными по модулю 2. Максимальное можно обновить 255 байт данных защищенной ячейки.
Методы GrdPI_Read, GrdPI_Update в случае ключей Guardant Sign/Time не имеют ранее существовавшего ограничения в 255 байт на длину считываемого/перезаписываемого определителя алгоритма/защищенной ячейки. Это связано с отсутствием в указанных ключах ограничения на размер определителя.
Если смещение addr задано слишком большим, возвращается ошибка GrdE.Overbound.
Если количество записываемых данных превышает возможности записи, данных записывается ровно столько, сколько можно записать. При этом метод возвращает GrdE.OK и никаких других кодов ошибки не генерируется.
Если при попытке обновления активной ячейки был указан неверный пароль updatePsw, функция GrdPI_Update возвращает ошибку GrdE.AccessDenied. При этом автоматически в ключе уменьшается счетчик ошибок доступа к ячейке, который задается при создании ячейки. Когда значение счетчика ошибок доходит до 0, статус ячейки становится неизменяемым, то есть ячейку больше невозможно активировать/деактивировать/читать/менять ее значение. Однако если алгоритм находился в состоянии Active, метод GrdTransform будет нормально работать.
- No labels