Функция GccaCryptEx зашифровывает или расшифровывает блок данных при помощи аппаратного или программно-реализованного алгоритма.

int GccaCryptEx(
  HANDLE hGrd,
  DWORD dwAlgo,
  DWORD dwDataLng,
  void *pData,
  DWORD dwMethod,
  DWORD dwIVLng,
  void *pIV,
  void *pKeyBuf,
  void *pContext,
  void *pReserved
);	

hGrd

не используется

dwAlgo

1) номер аппаратного алгоритма AES128, если алгоритм вызывается через дескриптор.
Или:
2) если ключ шифрования задается напрямую, а не считывается из дескриптора, номер алгоритма должен быть GrdSC_AES128.

dwDataLng

длина блока данных в байтах

pData

буфер данных для преобразования

dwMethod

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

Биты 0-5 - режим работы алгоритма

GrdAM_ECB

Режим электронной кодовой книги

GrdAM_CBC

Режим сцепления кодированных блоков

GrdAM_CFB

Режим с кодированной обратной связью

GrdAM_OFB

Режим с обратной связью по выходу

Бит 6 - резерв

Бит 7 - тип операции

GrdAM_Encrypt

Кодировать блок

GrdAM_Decrypt

Декодировать блок

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

GrdSC_First

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

GrdSC_Next

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

GrdSC_Last

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

GrdSC_All

Единственный блок данных

dwIVLng

длина вектора инициализации:
16 байтов

pIV

вектор инициализации

pKeyBuf

буфер для передачи ключа шифрования для алгоритма (AES). Длина ключа 128 бит (16 байт).

pContext

буфер для контекста при шифровании больших массивов данных, которые разбиваются на несколько блоков. Для контекста должна быть зарезервирована память размером GrdXXXXXX_CONTEXT_SIZE байт в зависимости от алгоритма. Только для программно-реализованных алгоритмов. При использовании аппаратного алгоритма параметр должен быть равен NULL

GrdAES128_KEY_SIZE

Длина ключа AES - 128 бит

GrdAES128_BLOCK_SIZE

Длина блока данных AES - 128 бит

GrdAES_CONTEXT_SIZE

Значение должно быть больше или равно sizeof(AES_CONTEXT)

Reserved

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

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

Функция GccaCryptEx позволяет зашифровывать и расшифровывать данные с помощью алгоритма AES128. GccaCryptEx предназначена для работы с алгоритмами шифрования с переменным вектором инициализации.

Преобразование производится алгоритмом с порядковым номером, заданным в параметре dwAlgo. В зависимости от номера алгоритма dwAlgo функция определяет, каким образом реализован алгоритм - аппаратным или программным.

Программно-реализованные алгоритмы шифрования при шифровании больших массивов данных используют контекст, память для которого размером не менее GrdXXXXXX_CONTEXT_SIZE должна быть зарезервирована до вызова функции. Указатель на буфер для контекста передается через параметр pContext.

Длина шифруемых блоков данных зависит от метода шифрования (см. описание методов в Руководство пользователя, часть 3). Для методов CFB и OFB длина шифруемых блоков может быть произвольной.

Если в дескрипторе аппаратного алгоритма установлен флаг nsafl_GP_dec (уменьшение счетчика), вычитание счетчика GP происходит при каждом вызове GccaCryptEx.

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

При вызове GccaCryptEx с нулевым указателем на вектор инициализации возвращается GrdE_OK, шифрование и последующее расшифрование происходит нормально в любых режимах (в т. ч. тех, которые требуют вектор инициализации). Ситуация полностью аналогична использованию нулевого вектора инициализации или вектора инициализации нулевой длины. Может работать как через защищенные ячейки типа алгоритм, так и напрямую обращаться к алгоритму AES128 (GrdSC_AES128 в параметре dwAlgo).