Крипто-Про CSP

CSP_FAST_CODE_

Структура получения функций захвата и освобождения SSE2.

typedef struct CSP_FAST_CODE_ {
DWORD UsesFunctions;
int(* kernel_fpu_begin)(char *buf, size_t sz, unsigned int bl_len);
int(* kernel_fpu_end)(char *, size_t); } CSP_FAST_CODE;

Члены

UsesFunctions
Обязательный параметр, может быть равен CSP_FAST_CODE_DEFAULT , CSP_FAST_CODE_NO , CSP_FAST_CODE_USER при вызове функции CPSetProvParam . В первых двух случаях считывание указателей не производится, в последнем считываются новые указатели на функции переключения. CSP_FAST_CODE_USER применяется только в режиме ядра ОС! При использовании в функции CPGetProvParam , в параметре возвращаются флаги, определяющие набор провереных на включенный код функций. Указание, какие функции проверять на включенный код, передается во флагах dwFlags . Если в режиме ядра пользовательские функции захвата были установлены, не забудьте снять их перед завершением работы Вашего драйвера! В противном случае драйвер провайдера будет по-прежнему пытаться обращаться по старым адресам при выполнении криптографических операций. При остановке Вашего драйвера следует вызвать CPSetProvParam с параметром PP_FAST_CODE, установив в структуре UsesFunctions=CSP_FAST_CODE_DEFAULT . Если применен флаг CRYPT_FAST_CODE_GET_SETFN, при выходе CSP_FAST_CODE_GET_SETFN будет установлен в 1, если провайдер может использовать быстрый код, и 0 - иначе. Если установлен флаг CRYPT_FAST_CODE_ALL_FUNCTIONS , будут проверяться все функции, и на выходе будут установлены все флаги CSP_FAST_CODE_E_ECB , CSP_FAST_CODE_E_CBC , CSP_FAST_CODE_E_OFB , CSP_FAST_CODE_E_CFB , CSP_FAST_CODE_D_ECB , CSP_FAST_CODE_D_CBC , CSP_FAST_CODE_D_OFB , CSP_FAST_CODE_D_CFB , CSP_FAST_CODE_MD_ECB , CSP_FAST_CODE_GR3411SP , CSP_FAST_CODE_GR3411H , CSP_FAST_CODE_GR3411HV , CSP_FAST_CODE_HASH , CSP_FAST_CODE_IMIT , CSP_FAST_CODE_MULT , в 1, если соответствующая функция использует быстрый код, и 0 - иначе. В режиме пользователя следует вместо флага CRYPT_FAST_CODE_ALL_FUNCTIONS использовать CRYPT_FAST_CODE_ALL_USER_FUNCTIONS, а в режиме ядра ОС - CRYPT_FAST_CODE_ALL_KERNEL_FUNCTIONS. На выходе флаг CSP_FAST_CODE_ALL_FUNCTIONS равен 1, если быстрый код работает во всех выбранных функциях, и 0 если хотя бы одна из выбранных функций не сработала. Поведение невыбранных флагов неопределено.
kernel_fpu_begin
Указатель на функцию захвата SSE2. Используется только в режиме ядра ОС! Функция должна возвращать 1, если захват удался, 0, если захват не удался. На вход функции будет подаваться указатель на буфер, необходимый для сохранения значений регистров, управляющих флагов, и другой информации. Размер буфера передается во втором параметре. Стандартно он не превышает 512 байт. Третий параметр - условное значение, равное числу байт, передаваемых для быстрого шифрования. Третий параметр нужен для вычисления, выгодно ли захватывать SSE2.
kernel_fpu_end
Указатель на функцию освобождения SSE2. Используется только в режиме ядра ОС! Первые два параметра как у kernel_fpu_begin. Функция возвращает 1, если удалось освободить SSE2, и 0 в противном случае. Если функция kernel_fpu_begin вернула 0, то kernel_fpu_end вызываться не будет!

Требования:

Windows 2000/XP/2003: Необходимо Windows 2000 SP4 или старше с Internet Explorer 6.0 или старше.
Windows NT/95/98/ME: CSP 3.0 не поддерживает (см. КриптоПро CSP 2.0 World Wide Web link ).
Solaris: 9 Update 4 или выше.
FreeBSD: FreeBSD 5.2 или выше
Linux: RedHat 7.3, RedHad 9.0.
Файл описания: Прототип описан в файле WinCryptEx.h.
Ядро Windows NT: IRQL < DISPATCH_LEVEL

См. также:

CPSetProvParam ,CPGetProvParam

Крипто-Про CSP Версия: 3.0 Сборка 3293
Что Вы думаете по поводу данной статьи?
Закажите CD c Крипто-Про CSP