Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Deck of Cards
id001
Card
defaulttrue
labelC
Code Block
languagecpp
int GRD_API GrdHashEx(	
  HANDLE hGrd, 
  DWORD dwHash, 
  DWORD dwDataLng, 
  void *pData, 
  DWORD dwMethod, 
  DWORD dwDigestLng, 
  void *pDigest, 
  DWORD dwKeyBufLng, 
  void *pKeyBuf, 
  DWORD dwContextLng, 
  void *pContext, 
  void *pReserved); 
);	
Expand
titleПараметры функции

hGrd [in]

хэндл, через который будет выполнена данная операция

dwHash [in]

номер дескриптора аппаратного алгоритма (SHA256, HASH64) или номер программно-реализованного алгоритма (SHA256 или CRC32), с помощью которого будет выполняться хеширование. Программно-реализованным алгоритмам SHA256 и CRC32 присвоены номера GrdSH_SHA256 и GrdSH_CRC32 соответственно

dwDataLng [in]

длина буфера данных в байтах. Для алгоритмов HASH64 минимальная длина блока составляет GrdARS_HASH64

pData [in]

указатель на буфер данных для хеширования

dwMethod [in]

cледующие флаги позволяют вычислить хеш-функцию прерывных данных, путём многократного вызова функции:

Биты 8-9: номер блока данных  

GrdSC_First

Первый блок данных

GrdSC_Next

Следующий блок данных

GrdSC_Last

Последний блок данных

GrdSC_All

Один блок данных

dwDigestLng [in]

длина выходного буфера для значения хеш-суммы в байтах. Длина зависит от используемого алгоритма и должна быть не менее предопределённого значения:

  • для алгоритма HASH64 - GrdHASH64_DIGEST_SIZE
  • для алгоритма SHA256 - GrdSHA256_DIGEST_SIZE
  • для алгоритма CRC32 - GrdCRC32_DIGEST_SIZE

pDigest [in,out] 

указатель на выходной буфер, в который будет сохранена хеш-сумма

dwKeyBufLng      

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

pKeyBuf

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

dwContextLng[in]

длина контекста хеш-функции в байтах. Если предполагается хешифрование вычисление хеш-суммы от нескольких блоков данных (используются флаги GrdSC_First / GrdSC_Next / GrdSC_Last), то для контекста должна быть зарезервирована память размером не менее предопределённого значения:

  • для алгоритма HASH64 - GrdHASH_CONTEXT_SIZE
  • для алгоритма SHA256 - GrdSHA256_CONTEXT_SIZE
  • для алгоритма CRC32 - GrdCRC32_CONTEXT_SIZE

pContext [in,out]

указатель на буфер контекста хеш-функции

pReserved

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

Expand
titleВозвращаемое значение функции

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

Expand
titleОписание

Функция GrdHashEx вычисляет хэш-функцию блока данных pData длиной dwDataLng.

В Guardant API реализовано вычисление программно-реализованных функций CRC32 и SHA256, а также аппаратных алгоритмов HASH64. Выбор алгоритма осуществляется параметром dwHash, который может принимать значения констант GrdSH_CRC32 и GrdSH_SHA256 для программно-реализованных алгоритмов, либо номера используемого аппаратного алгоритма HASH64.

Все хэш-функции могут вычисляться от больших блоков данных, поэтому предусмотрена возможность разбиения данных на меньшие блоки и вычисления значения хэша последовательно для нескольких буферов. Для этого параметром dwMethod задается порядок блока GrdSC_XXX (первый, следующий, последний).

Для передачи состояния алгоритма SHA256 используется специальный контекст pContext, память для которого должна быть зарезервирована и проинициализирована заранее. Для алгоритмов HASH64 и CRC32 контекст не используется. Функция GrdHashEx самостоятельно разбивает буфер на блоки необходимой длины и выполняет все операции по согласованию.

Если операция выполняется за один прием, то параметром dwMethod должен быть задан метод GrdSC_All.

При работе с аппаратным алгоритмом HASH64 рекомендуется использовать блок данных pData, длина которого dwDataLng кратна 16 байтам (GrdARS_HASH64). Если длина блока данных не будет кратной 16, то буфер дополнится нулями до ближайшего значения, кратного 16. Поэтому для воспроизведения итогового значения хеша при "некратных" значениях размера буфера, важны не только последовательности их обработки, но и размеры dwDataLng.

На время вычисления HASH64 блокируется выполнение любых алгоритмов на данном ключе. Поэтому передача буфера большого размера может надолго заблокировать электронный ключ.

Результат вычислений помещается в буфер pDigest, память для которого размером, соответствующим конкретному алгоритму, должна быть зарезервирована заранее.

Примечание

Результат вычислений возвращается в память по адресу pDigest только в момент вызова с флагом GrdSC_Last (или GrdSC_All). До этого промежуточный результат хранится во внутреннем буфере ключа, вследствие чего (с целью его сохранности) при вычислении hash от длинных блоков данных в несколько подходов рекомендуется блокировать обращение к этой функции путем вызова GrdLock с соответствующими параметрами. 

Card
labelC#
Code Block
languagec#
public static GrdE GrdHashEx(Handle grdHandle,GrdAlgNum hashNum, byte[] data, GrdSC method, byte[] digest)
public static GrdE GrdHashEx(Handle grdHandle,GrdAlgNum hashNum, byte[] data, GrdSC method, byte[] digest, byte[]context)

Expand
titleПараметры метода

grdHandle [in] 

Тип: Handle

хэндл, через который будет выполнена данная операция.

hashNum [in]

Тип: GrdAlgNum

Номер аппаратно-  или программно-реализованного алгоритма, с помощью которого будет вычисляться хэш-функция.

data [in] 

Тип: byte [ ]

Указатель на буфер данных, хэш которых будет вычисляться.

method [in]

Тип: GrdSC

Метод преобразования, который задается комбинацией флагов GrdSC.

digest [in] 

Тип: byte [ ]

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

context [in] 

Тип: byte [ ]

Буфер для хранения контекста (состояния алгоритма) при последовательном вычислении хэш-функции SHA256 от нескольких блоков данных.

Expand
titleВозвращаемое значение метода

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

Expand
titleОписание

Метод GrdHashEx вычисляет хэш-функцию блока данных data.

В Guardant API реализовано вычисление программно-реализованных функций CRC32 и SHA256, а также аппаратных алгоритмов HASH64. Выбор алгоритма осуществляется параметром hashNum, который может принимать значения констант GrdSA.CRC32 и GrdSA.SHA256  для программно-реализованных алгоритмов, либо номера используемого аппаратного алгоритма HASH64.

Все хэш-функции могут вычисляться от больших блоков данных, поэтому предусмотрена возможность разбиения данных на меньшие блоки и вычисления значения хэша последовательно для нескольких буферов. Для этого параметром method задается порядок блока GrdSC.XXX (первый, следующий, последний).

Для передачи состояния алгоритма SHA256 используется специальный контекст context, память для которого должна быть зарезервирована и проинициализирована заранее. Для алгоритмов HASH64 и CRC32 контекст не используется. Метод GrdHashEx самостоятельно разбивает буфер на блоки необходимой длины и выполняет все операции по согласованию.

Если операция выполняется за один прием, то параметром method должен быть задан метод GrdSC.All.

При работе с аппаратным алгоритмом HASH64 рекомендуется использовать блок данных data, длина которого кратна 16 байтам (GrdARS.HASH64). Если длина блока данных не будет кратной 16, то буфер дополнится нулями до ближайшего значения, кратного 16. Поэтому для воспроизведения итогового значения хеша при "некратных" значениях размера буфера, важны не только последовательности их обработки, но и их размеры.

На время вычисления HASH64 блокируется выполнение любых алгоритмов на данном ключе. Поэтому передача буфера большого размера может надолго заблокировать электронный ключ.

Результат вычислений помещается в буфер digest, память для которого размером, соответствующим конкретному алгоритму, должна быть зарезервирована заранее. 


Примечание

Результат вычислений возвращается в память по адресу digest только в момент вызова с флагом GrdSC.Last (или GrdSC.All). До этого промежуточный результат хранится во внутреннем буфере ключа, вследствие чего (с целью его сохранности) при вычислении hash от длинных блоков данных в несколько подходов рекомендуется блокировать обращение к этому методу путем вызова GrdLock с соответствующими параметрами.

Card
labelJava
Code Block
languagejava
public static GrdE GrdHashEx(Handle grdHandle, int hash, byte[] data, GrdSC method, byte[] digest)
public static GrdE GrdHashEx(Handle grdHandle, int hash, byte[] data, GrdSC method, byte[] digest, byte[] context)
Expand
titleПараметры метода

grdHandle [in] 

Тип: Handle

хэндл, через который будет выполнена данная операция.

hash [in]

Тип: int

Номер аппаратно-  или программно-реализованного алгоритма, с помощью которого будет вычисляться хэш-функция.

data [in] 

Тип: byte [ ]

Указатель на буфер данных, хэш которых будет вычисляться.

method [in]

Тип: GrdSC

Метод преобразования, который задается комбинацией флагов GrdSC.

digest [in] 

Тип: byte [ ]

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

context [in]

Тип: byte [ ]

Буфер для хранения контекста (состояния алгоритма) при последовательном вычислении хэш-функции SHA256 от нескольких блоков данных.

Expand
titleВозвращаемое значение метода

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

Expand
titleОписание

Метод GrdHashEx вычисляет хэш-функцию блока данных data.

В Guardant API реализовано вычисление программно-реализованных функций CRC32 и SHA256, а также аппаратных алгоритмов HASH64. Выбор алгоритма осуществляется параметром hashNum, который может принимать значения констант GrdSA.CRC32 и GrdSA.SHA256  для программно-реализованных алгоритмов, либо номера используемого аппаратного алгоритма HASH64.

Все хэш-функции могут вычисляться от больших блоков данных, поэтому предусмотрена возможность разбиения данных на меньшие блоки и вычисления значения хэша последовательно для нескольких буферов. Для этого параметром method задается порядок блока GrdSC.XXX (первый, следующий, последний).

Для передачи состояния алгоритма SHA256 используется специальный контекст context, память для которого должна быть зарезервирована и проинициализирована заранее. Для алгоритмов HASH64 и CRC32 контекст не используется. Метод GrdHashEx самостоятельно разбивает буфер на блоки необходимой длины и выполняет все операции по согласованию.

Если операция выполняется за один прием, то параметром method должен быть задан метод GrdSC.All.

При работе с аппаратным алгоритмом HASH64 рекомендуется использовать блок данных data, длина которого кратна 16 байтам (GrdARS.HASH64). Если длина блока данных не будет кратной 16, то буфер дополнится нулями до ближайшего значения, кратного 16. Поэтому для воспроизведения итогового значения хеша при "некратных" значениях размера буфера, важны не только последовательности их обработки, но и их размеры.

На время вычисления HASH64 блокируется выполнение любых алгоритмов на данном ключе. Поэтому передача буфера большого размера может надолго заблокировать электронный ключ.

Результат вычислений помещается в буфер digest, память для которого размером, соответствующим конкретному алгоритму, должна быть зарезервирована заранее. 


Примечание

Результат вычислений возвращается в память по адресу digest только в момент вызова с флагом GrdSC.Last (или GrdSC.All). До этого промежуточный результат хранится во внутреннем буфере ключа, вследствие чего (с целью его сохранности) при вычислении hash от длинных блоков данных в несколько подходов рекомендуется блокировать обращение к этому методу путем вызова GrdLock с соответствующими параметрами.

...