Функция(метод) 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

GrdUM_MOV

Данные из буфера pData заменяют старые данные

GrdUM_XOR

Данные из буфера pData складываются со старыми данными по модулю 2

pReserved

зарезервировано. Параметр должен быть равен NULL

Возможные ошибки

GrdE_AccessDenied

неверный пароль обновления, доступ к ячейке запрещен

GrdE_StatusUnchangeable

достигнут лимит количества ошибок, статус ячейки изменить нельзя. Доступ к ячейке на чтение заблокирован

GrdE_NoService

для данного типа ячейки не предусмотрена операция обновления

GrdE_InactiveItem

ячейка в деактивированном состоянии, обновление выполнить невозможно

GrdE_Overbound

адрес для обновления выходит за пределы определителя

 

Набор ошибок Guardant API

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

Пароль для обновления.

Возможные ошибки

GrdE.AccessDenied

неверный пароль обновления, доступ к ячейке запрещен

GrdE.StatusUnchangeable

достигнут лимит количества ошибок, статус ячейки изменить нельзя. Доступ к ячейке на чтение заблокирован

GrdE.NoService

для данного типа ячейки не предусмотрена операция обновления

GrdE.InactiveItem

ячейка в деактивированном состоянии, обновление выполнить невозможно

GrdE.Overbound

адрес для обновления выходит за пределы определителя

 Набор ошибок 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

Пароль для обновления.

Возможные ошибки

GrdE.AccessDenied

неверный пароль обновления, доступ к ячейке запрещен

GrdE.StatusUnchangeable

достигнут лимит количества ошибок, статус ячейки изменить нельзя. Доступ к ячейке на чтение заблокирован

GrdE.NoService

для данного типа ячейки не предусмотрена операция обновления

GrdE.InactiveItem

ячейка в деактивированном состоянии, обновление выполнить невозможно

GrdE.Overbound

адрес для обновления выходит за пределы определителя

 

Набор функций 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 будет нормально работать.