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

    int GRD_API GrdCrypt(	
      HANDLE hGrd,
      DWORD dwAlgo,
      DWORD dwDataLng,
      void *pData,
      DWORD dwMethod,
      void *pIV,
      void *pKeyBuf,
      void *pContext
    );	

    hGrd

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

    dwAlgo

    номер аппаратного (GSII64) или программно-реализованного алгоритма (AES), которым будет производиться преобразование. Программно-реализованный алгоритм AES 256 имеет номер GrdSC_AES256.

    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

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

    pIV

    вектор инициализации:
    для GSII64 - 8 байтов, для AES - 16 байтов.
    Если в качестве указателя на вектор инициализации задан NULL, то преобразование пройдет корректно, при этом будет использован нулевой вектор

    pKeyBuf

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

    pContext

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

    GrdAES256_KEY_SIZE

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

    GrdAES256_BLOCK_SIZE

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

    GrdAES_CONTEXT_SIZE

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

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

    Преобразование производится алгоритмом с порядковым номером, заданным в параметре 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.

    public static GrdE GrdCrypt(Handle grdHandle,GrdAlgNum algNum, byte[] data, GrdAM method, ref long iv)
    public static GrdE GrdCrypt(Handle grdHandle,GrdAlgNum algNum, byte[] data, GrdAM method, byte[] iv)
    public static GrdE GrdCrypt(Handle grdHandle,GrdAlgNum algNum, byte[] data, GrdAM method, byte[] iv, byte[] key)
    public static GrdE GrdCrypt(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 [ ], long [ ]

    Вектор инициализации.

    key [in]

    Тип: byte [ ]

    Буфер для передачи ключа шифрования для программно-реализованного алгоритма AES.

    context [in]

    Тип: byte [ ]

    Буфер для контекста при шифровании больших массивов данных. В этом случае они разбиваются на несколько блоков.

    Метод 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 происходит при каждом вызове GrdCrypt.

    public static GrdE GrdCrypt(Handle grdHandle, int algoNum, byte[] data, int method, byte[] iv)
    public static GrdE GrdCrypt(Handle grdHandle, int algoNum, byte[] data, int method, byte[] iv, byte[] key)
    public static GrdE GrdCrypt(Handle grdHandle, int algoNum, byte[] data, int method, byte[] iv, byte[] key, byte[] context)
    public static GrdE GrdCrypt( Handle grdHandle, int algoNum, byte[] data, int method, long iv)

    grdHandle [in] 

    Тип: Handle

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

    algNum [in]

    Тип: int

    Номер аппаратного алгоритма, с помощью которого будет происходить преобразование.

    data [in]

    Тип: byte [ ]

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

    method [in]

    Тип: int

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

    iv [in]

    Типы: byte [ ], long [ ]

    Вектор инициализации.

    key [in]

    Тип: byte [ ]

    Буфер для передачи ключа шифрования для программно-реализованного алгоритма AES.

    context [in]

    Тип: byte [ ]

    Буфер для контекста при шифровании больших массивов данных. В этом случае они разбиваются на несколько блоков.

    Метод 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 происходит при каждом вызове GrdCrypt.

    • No labels