КриптоПро CSP  

CPGetHashParam

Функция CPGetHashParam() возвращает параметры объекта функции хэширования и значение функции хэширования.

BOOL WINAPI CPGetHashParam(
  HCRYPTPROV hProv,
  HCRYPTHASH hHash,
  DWORD dwParam,
  BYTE * pbData,
  DWORD * pdwDataLen,
  DWORD dwFlags
);

Аргументы

hProv
[in] Дескриптор криптопровайдера. Получается при помощи функции CPAcquireContext().
hHash
[in] Дескриптор объекта функции хэширования, параметры которого определяются.
dwParam
[in] Параметр, принимающий следующие возможные значения:
Значение dwParam Содержимое буфера pbData
HP_ALGID Алгоритм функции хэширования. Идентификатор алгоритма (ALG_ID), соответствующий данному объекту функции хэширования. Возвращается через буфер pbData. В pdwDataLen будет возвращена величина 4.
HP_HASHSIZE Размер значения функции хэширования. Величина DWORD, определяющая число байтов в значении функции хэширования, будет возвращена через буфер pbData. В pdwDataLen будет возвращена величина 4.
HP_HASHVAL Значение функции хэширования в little-endian порядке байт в соответствии с типом GostR3411-94-Digest CPCMS [RFC 4490]. Вычисленное значение функции хэширования будет возвращено через буфер pbData. Длина значения функции хэширования будет возвращена в pdwDataLen.
Во время вызова функции объект хэша "закрывается".
Для ГОСТ Р 34.11-94 и ГОСТ Р 34.11-2012 (и HMAC-ов на их основе) проводится дополнение до размера блока (если требуется), исполняются шаговые функции для последнего блока (если требуется), для длины и для контрольной суммы.
Для ГОСТ 28147-89 в режиме имитовставки проводится дополнение до размера блока (если требуется), и исполняется шаговая функции для последнего блока (если требуется).
Расчёт хэш-функции может быть продолжен с помощью:
  • последующего вызова *SetHashParam(HP_OPEN, TRUE) для CSP 3.6 и выше;
  • предварительного вызова *DuplicateHash() - стандартный для Microsoft способ;
HP_R2_SIGN Возвращает значение R2 в алгоритме распределённой подписи, вырабатываемой с использованием функционального ключевого носителя. Через параметр pbData возвращается значение данных - точка эллиптической кривой в аффинных координатах (X,Y), длина данных – 64 бита.
Закрывает объект функции хэшироваия. Специфика протокола ООО "КРИПТО-ПРО" взаимодействия с функциональным ключевым носителем.
HP_R_SIGN Возвращает значение R в алгоритме распределённой подписи, вырабатываемой с использованием функционального ключевого носителя. Через параметр pbData возвращается значение данных - точка эллиптической кривой в аффинных координатах (X,Y), длина данных – 64 бита.
Специфика протокола ООО "КРИПТО-ПРО" взаимодействия с функциональным ключевым носителем.
HP_SHAREDMODE Возвращает значение числа от 2 до 5 компонент, на которые раскладывается ключ объектом CALG_SHAREDKEY_HASH, либо собирается ключ объектом CALG_FITTINGKEY_HASH.
HP_IKE_SPI_COOKIE Возвращает 32-35 байты значения хэша (при нумерации 0..63) для объектов типа CALG_GR3411_2012_512 и CALG_GR3411_2012_512_HMAC.
*pbData
[out] Указатель на буфер данных параметра. Функция копирует соответствующие параметру данные в буфер. Формат этих данных зависит от значения dwParam. Если параметр - NULL, то данные не копируются. Требуемый размер буфера в байтах возвращается в pdwDataLen. Подробнее см. Возвращение данных неопределённой длины.
*pdwDataLen
[in/out] Указатель на буфер, содержащий длину данных параметра. При вызове функции указанный параметр содержит число байтов в буфере pbData. После её исполнения параметр будет установлен числом байтов данных параметра, скопированных в буфер pbData. Если буфер, соответствующий pbData, недостаточно большой, чтобы в него копировать запрошенные данные, будет возвращён код ошибки ERROR_MORE_DATA через функцию SetLastError(). В этом случае требуемый размер буфера возвращается в pdwDataLen. Если функция завершается с кодом ошибки, отличным от ERROR_MORE_DATA, в этом параметре возвращается ноль.
dwFlags
[in] Значения флагов. Параметр зарезервирован для будущего использования и должен быть нулевым.

Возвращаемые значения

При успешном завершении функция возвращает TRUE, в противном случае возвращается FALSE. Если возвращается FALSE, соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError().
Коды возвратаОписание
ERROR_INVALID_PARAMETERОдин из параметров содержит некорректное значение. Чаще всего это некорректный указатель.
NTE_BAD_HASHДескриптор хэша ошибочен.
ERROR_MORE_DATAРазмер буфера pbData недостаточен для копирования затребованных данных.
NTE_BAD_FLAGSПараметр dwFlags имеет ненулевое значение.
NTE_BAD_TYPEПараметр dwParam передаёт неизвестное значение параметра.

Требования:

AIX: 5/6/7 или выше.
FreeBSD: 7/8/9 или выше.
Linux: LSB 3.1 (RHEL 4, SuSE 10) или выше.
Solaris: 10 или выше.
Mac OSX: 10.7/8 или выше.
iOS: 6/7 или выше.
Windows 2000 или выше: Необходимо Windows 2000 SP4 или старше с Internet Explorer 6.0 или старше.
Файл описания: Прототип описан в файле wincsp.h.
Ядро ОС: Вместо неё используется аналогичная функция CPCGetHashParam .

См. также

CPCreateHash() ,CPGetKeyParam() ,CPSetHashParam() ,CPGetHashParam в MS CSP World Wide Web link ,CryptGetHashParam в MS CryptoAPI 2.0 World Wide Web link