- Created by Dyakov Alexey, last modified by Guardant on Nov 01, 2014
You are viewing an old version of this page. View the current version.
Compare with Current View Page History
« Previous Version 13 Next »
Функция(метод) GrdCryptEx зашифровывает или расшифровывает блок данных при помощи аппаратного или программно-реализованного алгоритма. Расширенная версия функции GrdCrypt.
int GRD_API GrdCryptEx( 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