- Created by Dyakov Alexey, last modified by Guardant R&D on Oct 23, 2014
You are viewing an old version of this page. View the current version.
Compare with Current View Page History
« Previous Version 12 Next »
Функция(метод) GrdCryptEx зашифровывает или расшифровывает блок данных при помощи аппаратного или программно-реализованного алгоритма. Расширенная версия функции GrdCrypt.
int GRD_API GrdCrypt( HANDLE hGrd, DWORD dwAlgo, DWORD dwDataLng, void *pData, DWORD dwMethod, DWORD dwIVLng, void *pIV, void *pKeyBuf, void *pContext void *pReserved );
hGrd |
хэндл, через который будет выполнена данная операция |
||||||||||||||||||||||||||||
dwAlgo |
номер аппаратного (GSII64) или программно-реализованного алгоритма (AES), которым будет производиться преобразование. Программно-реализованный алгоритм AES 256 имеет номер GrdSC_AES256. |
||||||||||||||||||||||||||||
dwDataLng |
длина блока данных в байтах |
||||||||||||||||||||||||||||
pData |
буфер данных для преобразования |
||||||||||||||||||||||||||||
dwMethod |
метод преобразования, который задается комбинацией флагов GrdAM_XXX и GrdSC_XXX
|
||||||||||||||||||||||||||||
dwIVLng |
длина вектора инициализации: |
||||||||||||||||||||||||||||
pIV |
вектор инициализации |
||||||||||||||||||||||||||||
pKeyBuf |
буфер для передачи ключа шифрования для программно-реализованного алгоритма (AES). Длина ключа 256 бит (32 байта). Только для программно-реализованных алгоритмов. При использовании аппаратного алгоритма параметр должен быть равен NULL |
||||||||||||||||||||||||||||
pContext |
буфер для контекста при шифровании больших массивов данных, которые разбиваются на несколько блоков. Для контекста должна быть зарезервирована память размером GrdXXXXXX_CONTEXT_SIZE байт в зависимости от алгоритма. Только для программно-реализованных алгоритмов. При использовании аппаратного алгоритма параметр должен быть равен NULL
|
||||||||||||||||||||||||||||
Reserved |
не используется. Параметр должен быть равен NULL |
Функция GrdCryptEx позволяет зашифровывать и расшифровывать данные с использованием аппаратно или программно-реализованных симметричных алгоритмов. GrdCryptEx является расширенной версией функции GrdCrypt и предназначена для работы с алгоритмами шифрования с переменным вектором инициализации. По сравнению с GrdCrypt функция содержит 2 новых параметра: длина вектора инициализации (dwIVLng) и зарезервированное значение.
Преобразование производится алгоритмом с порядковым номером, заданным в параметре dwAlgo. В зависимости от номера алгоритма dwAlgo функция определяет, каким образом реализован алгоритм - аппаратным или программным. Если номер алгоритма соответствует аппаратному алгоритму, вызов переадресуется функции GrdTransform. Аппаратно реализованный алгоритм должен быть типа GSII64. Иначе, если алгоритм реализован программно (dwAlgo>=GrdSA_SoftAlgo), вызывается соответствующая функция программного шифрования.
Программно-реализованные алгоритмы шифрования при шифровании больших массивов данных используют контекст, память для которого размером не менее GrdXXXXXX_CONTEXT_SIZE должна быть зарезервирована до вызова функции. Указатель на буфер для контекста передается через параметр pContext.
Длина шифруемых блоков данных зависит от метода шифрования (см. описание методов в Руководство пользователя, часть 2). Для методов CFB и OFB длина шифруемых блоков может быть произвольной.
Если шифрование на аппаратно-реализованном алгоритме выполнялось блоками произвольной длины (т. е. использовались флаги GrdSC_First, GrdSC_Next, GrdSC_Last), то для корректного расшифрования длина и порядок обработки блоков должны сохраняться. Для программно-реализованных алгоритмов такое ограничение отсутствует.
Если в дескрипторе аппаратного алгоритма установлен флаг nsafl_GP_dec (уменьшение счетчика), вычитание счетчика GP происходит при каждом вызове GrdCrypt.
Новый параметр (dwIVLng) имеет смысл для аппаратных алгоритмов с переменным вектором инициализации, которые появятся в будущем. На существующих алгоритмах (к примеру GSII64) это отразится лишь в том случае, если указывается длина вектора инициализации от 0 до 8 байт (включительно). При указании длины более 8 байт шифрование происходит с использованием первых 8 байт указанного вектора инициализации.
При вызове функций GrdCrypt и GrdCryptEx с нулевым указателем на вектор инициализации возвращается GrdE_OK, шифрование и последующее расшифрование происходит нормально в любых режимах (в т. ч. тех, которые требуют вектор инициализации). Ситуация полность аналогична использованию нулевого вектора инициализации или вектора инициализации нулевой длины.
public static GrdE GrdCryptEx(Handle grdHandle, GrdAlgNum algNum, byte[] data, GrdAM method, byte[] iv) public static GrdE GrdCryptEx(Handle grdHandle, GrdAlgNum algNum, byte[] data, GrdAM method, byte[] iv, byte[] key) public static GrdE GrdCryptEx(Handle grdHandle, GrdAlgNum algNum, byte[] data, GrdAM method, byte[] iv, byte[] key, byte[] context)
grdHandle [in]
Тип: Handle
хэндл, через который будет выполнена данная операция.
algNum [in]
Тип: GrdAlgNum
Номер аппаратного алгоритма, с помощью которого будет происходить преобразование.
data [in]
Тип: byte [ ]
Буфер данных для преобразования.
method [in]
Тип: GrdAM
Метод преобразования. Задается комбинацией флагов GrdAM.
iv [in]
Тип: byte [ ]
Вектор инициализации.
key [in]
Тип: byte [ ]
Буфер для передачи ключа шифрования для программно-реализованного алгоритма AES.
context [in]
Тип: byte [ ]
Буфер для контекста при шифровании больших массивов данных, которые разбиваются на несколько блоков.
Метод GrdCryptEx позволяет зашифровывать и расшифровывать данные с использованием аппаратно или программно-реализованных симметричных алгоритмов. GrdCryptEx является расширенной версией метода GrdCrypt и предназначен для работы с алгоритмами шифрования с переменным вектором инициализации.
Преобразование производится алгоритмом с порядковым номером, заданным в параметре algNum. В зависимости от номера алгоритма algNum метод определяет, каким образом реализован алгоритм - аппаратным или программным. Если номер алгоритма соответствует аппаратному алгоритму, вызов переадресуется методу GrdTransform. Аппаратно реализованный алгоритм должен быть типа GSII64. Иначе, если алгоритм реализован программно (algNum>=GrdSA_SoftAlgo), вызывается соответствующая функция программного шифрования.
Программно-реализованные алгоритмы шифрования при шифровании больших массивов данных используют контекст, память для которого размером не менее GrdXXXXXX_CONTEXT_SIZE должна быть зарезервирована до вызова метода. Указатель на буфер для контекста передается через параметр context.
Длина шифруемых блоков данных зависит от метода шифрования (см. описание методов в Руководство пользователя, часть 2). Для методов CFB и OFB длина шифруемых блоков может быть произвольной.
Если шифрование на аппаратно-реализованном алгоритме выполнялось блоками произвольной длины (т. е. использовались флаги GrdSC_First, GrdSC_Next, GrdSC_Last), то для корректного расшифрования длина и порядок обработки блоков должны сохраняться. Для программно-реализованных алгоритмов такое ограничение отсутствует.
Если в дескрипторе аппаратного алгоритма установлен флаг nsafl_GP_dec (уменьшение счетчика), вычитание счетчика GP происходит при каждом вызове GrdCryptEx.
При вызове методов GrdCrypt и GrdCryptEx с нулевым указателем на вектор инициализации возвращается GrdE.OK, шифрование и последующее расшифрование происходит нормально в любых режимах (в т. ч. тех, которые требуют вектор инициализации). Ситуация полность аналогична использованию нулевого вектора инициализации или вектора инициализации нулевой длины.
public static GrdE GrdCryptEx(Handle grdHandle, int algoNum, byte[] data, int method, byte[] iv) public static GrdE GrdCryptEx(Handle grdHandle, int algoNum, byte[] data, int method, byte[] iv, byte[] key) public static GrdE GrdCryptEx(Handle grdHandle, int algoNum, byte[] data, int method, byte[] iv, byte[] key, byte[] context)
grdHandle [in]
Тип: Handle
хэндл, через который будет выполнена данная операция.
algNum [in]
Тип: int
Номер аппаратного алгоритма, с помощью которого будет происходить преобразование.
data [in]
Тип: byte [ ]
Буфер данных для преобразования.
method [in]
Тип: int
Метод преобразования.
iv [in]
Тип: byte [ ]
Вектор инициализации.
key [in]
Тип: byte [ ]
Буфер для передачи ключа шифрования для программно-реализованного алгоритма AES.
context [in]
Тип: byte [ ]
Буфер для контекста при шифровании больших массивов данных, которые разбиваются на несколько блоков.
Метод GrdCryptEx позволяет зашифровывать и расшифровывать данные с использованием аппаратно или программно-реализованных симметричных алгоритмов. GrdCryptEx является расширенной версией метода GrdCrypt и предназначен для работы с алгоритмами шифрования с переменным вектором инициализации.
Преобразование производится алгоритмом с порядковым номером, заданным в параметре algNum. В зависимости от номера алгоритма algNum метод определяет, каким образом реализован алгоритм - аппаратным или программным. Если номер алгоритма соответствует аппаратному алгоритму, вызов переадресуется методу GrdTransform. Аппаратно реализованный алгоритм должен быть типа GSII64. Иначе, если алгоритм реализован программно (algNum>=GrdSA_SoftAlgo), вызывается соответствующая функция программного шифрования.
Программно-реализованные алгоритмы шифрования при шифровании больших массивов данных используют контекст, память для которого размером не менее GrdXXXXXX_CONTEXT_SIZE должна быть зарезервирована до вызова метода. Указатель на буфер для контекста передается через параметр context.
Длина шифруемых блоков данных зависит от метода шифрования (см. описание методов в Руководство пользователя, часть 2). Для методов CFB и OFB длина шифруемых блоков может быть произвольной.
Если шифрование на аппаратно-реализованном алгоритме выполнялось блоками произвольной длины (т. е. использовались флаги GrdSC_First, GrdSC_Next, GrdSC_Last), то для корректного расшифрования длина и порядок обработки блоков должны сохраняться. Для программно-реализованных алгоритмов такое ограничение отсутствует.
Если в дескрипторе аппаратного алгоритма установлен флаг nsafl_GP_dec (уменьшение счетчика), вычитание счетчика GP происходит при каждом вызове GrdCryptEx.
При вызове методов GrdCrypt и GrdCryptEx с нулевым указателем на вектор инициализации возвращается GrdE.OK, шифрование и последующее расшифрование происходит нормально в любых режимах (в т. ч. тех, которые требуют вектор инициализации). Ситуация полность аналогична использованию нулевого вектора инициализации или вектора инициализации нулевой длины.
- No labels