КриптоПро CSP  

CPSetHashParam

Функция CPSetHashParam() устанавливает параметры объекта хэширования.

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

Аргументы

hProv
[in] Дескриптор криптопровайдера. Получается при помощи функции CPAcquireContext().
hHash
[in] Дескриптор объекта хэширования, параметры которого устанавливаются.
dwParam
[in] Параметр, принимающий следующие возможные значения:
Значение dwParam Содержимое буфера pbData
HP_HASHVAL Устанавливается для объекта функции хэширования типа CALG_GR3411, CALG_GR3411_2012_256 и CALG_GR3411_2012_512. Величина, 32 байта для объектов типа CALG_GR3411 и CALG_GR3411_2012_256, 64 байта для объектов типа CALG_GR3411_2012_512, в little-endian порядке байт в соответствии с типом GostR3411-94-Digest CPCMS [RFC 4490], должна быть установлена в буфер pbData.
HP_HASHVAL_BLOB Устанавливается для объекта функции хэширования типа CALG_GR3411, CALG_GR3411_2012_256 и CALG_GR3411_2012_512. В буфер pbData передаётся указатель на структуру CRYPT_DATA_BLOB, содержащую хэш-значение.
HP_HASHSIZE Устанавливается для объекта функции хэширования типа CALG_G28147_IMIT, CALG_GR3413_2015_M_IMIT, CALG_GR3413_2015_K_IMIT. В буфер pbData записывается величина DWORD, определяющая число байтов имитовставки в диапазоне от 1 до 4, от 1 до 8, от 1 до 16 соответственно. По умолчанию длина имитовставки для объекта хэша CALG_G28147_IMIT равна 4 байтам, для CALG_GR3413_2015_M_IMIT и CALG_GR3413_2015_K_IMIT составляет 4 и 8 байт соответственно.
KP_HASHOID Идентификатор функции хэширования. Строка, заканчивающаяся нулем. Не допускается задавать для объектов типа CALG_GR3411_HMAC / CALG_GR3411_HMAC34, CALG_GR3411_2012_256_HMAC / CALG_GR3411_2012_512_HMAC и CALG_GR3411_2012_256 / CALG_GR3411_2012_512.
HP_TLS1PRF_SEED Составляющая аргумента функции GOSTR3411_PRF. Принимает различные значения в сообщениях клиента и сервера при реализации TLS Handshake Protocol. Задается в виде структуры CRYPT_DATA_BLOB.
HP_TLS1PRF_LABEL Составляющая аргумента функции GOSTR3411_PRF. Принимает различные значения в сообщениях клиента и сервера при реализации TLS Handshake Protocol. Задается в виде структуры CRYPT_DATA_BLOB.
HP_PBKDF2_SALT Задает синхропосылку размерности от 8 до 32 байт для объекта хэша типа CALG_PBKDF2_94_256, CALG_PBKDF2_2012_256 и CALG_PBKDF2_2012_512. Задается в виде структуры CRYPT_DATA_BLOB.
HP_PBKDF2_PASSWORD Задает пароль для объекта хэша типа CALG_PBKDF2_94_256, CALG_PBKDF2_2012_256 и CALG_PBKDF2_2012_512. Задается в виде структуры CRYPT_DATA_BLOB.
HP_PBKDF2_COUNT Устанавливается для объекта функции хэширования типа CALG_PBKDF2_94_256, CALG_PBKDF2_2012_256 и CALG_PBKDF2_2012_512. В буфер pbData записывается величина DWORD, определяющая число итераций алгоритма. По умолчанию количество итераций равно 2000, минимальное допустимое значение параметра 1000.
HP_PADDING Устанавливается для объектов функции хэширования типа CALG_ANSI_X9_19_MAC и CALG_MAC. В буфер pbData записывается величина DWORD, определяющая тип выравнивания данных. По умолчанию тип паддинга — ZERO_PADDING, возможен также ISO_IEC_7816_4_PADDING.
HP_OPEN Если через параметр pbData передаётся величина FALSE типа DWORD, производит повторную инициализацию объекта хэша типа CALG_GR3411, CALG_GR3411_HMAC, CALG_GR3411_HMAC34, CALG_G28147_IMIT, CALG_GR3413_2015_M_IMIT, CALG_GR3413_2015_K_IMIT, CALG_GR3411_2012_256, CALG_GR3411_2012_512, CALG_GR3411_2012_256_HMAC, CALG_GR3411_2012_512_HMAC в случае, если он закрыт. Если в pbData передаётся величина TRUE типа DWORD, закрытый объект функции хэширования типа CALG_GR3411 или CALG_G28147_IMIT открывается для дальнейшего хэширования данных. Передача в pbData величины TRUE для объектов хэша типа CALG_GR3413_2015_M_IMIT, CALG_GR3413_2015_K_IMIT приводит к завершению функции с ошибкой NTE_BAD_TYPE.
HP_KEYMIXSTART Осуществляет диверсификацию ключа, ассоциированного с объектом хэширования, по алгоритму CALG_PRO_DIVERS. Через параметр pbData передаётся блоб диверсификации ключа в форме CRYPT_DATA_BLOB, см. CPCImportKey(). Допускается многократный вызов с различными параметрами диверсификации.
HP_HASHSTARTVECT Задает стартовый вектор для алгоритмов имитовставки по ГОСТ 28147-89 (8 байт) и хэширования по ГОСТ Р 34.11-94 (32 байта).
HP_OPAQUEBLOB Устанавливает блоб, содержащий внутреннее состояние объекта имитовставки ГОСТ 28147-89.
HP_HASHSTATEBLOB Устанавливает блоб, содержащий внутреннее состояние объектов хэширования CALG_GR3411, CALG_GR3411_2012_256, CALG_GR3411_2012_512.
HP_SHAREDKEYMODE Устанавливает значение числа от 2 до 5 компонент, на которые раскладывается ключ объектом CALG_SHAREDKEY_HASH, либо из которых собирается ключ объектом CALG_FITTINGKEY_HASH.
HP_HMAC_FIXEDKEY Устанавливает значение ключа для объекта хэша типа CALG_GR3411_HMAC_FIXEDKEY, CALG_GR3411_2012_256_HMAC_FIXEDKEY и CALG_GR3411_2012_512_HMAC_FIXEDKEY. Через параметр pbData передаётся ключ в форме CRYPT_DATA_BLOB. Если размер переданных в блобе данных меньше размера соответствующего ключа, то ключ дополняется нулями, иначе - в качестве ключа устанавливается результат хэширования переданных данных.
HP_PRFKEYMAT_SEED Устанавливает значение seed для объекта хэша типа CALG_GR3411_PRFKEYMAT, CALG_GR3411_2012_256_PRFKEYMAT и CALG_GR3411_2012_512_PRFKEYMAT. Через параметр pbData передаётся seed в форме CRYPT_DATA_BLOB. При этом предыдущее значение seed будет удалено.
pbData
[in] Указатель на буфер данных параметра. При вызове функции буфер содержит данные, соответствующие значению параметра в dwParam. Формат данных зависит от типа параметра dwParam.
dwFlags
[in] Значения флагов. Параметр зарезервирован для будущего использования и должен быть нулевым.

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

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

Требования:

AIX: 6/7.
FreeBSD: 11/12, pfSense 2.x.
Linux: LSB 4.x (RHEL 5/6/7/8, SuSE 11SP4/12/15, Oracle Linux 5/6/7/8, CentOS 6/7/8, Ubuntu 14.04/16.04/18.04/19.10, Linux Mint 18/19, Fedora 28/29/30/31, Debian 8/9/10 и др.).
Solaris: 10/11.
Mac OS X: 10.9/10.10/10.11/10.12/10.13/10.14/10.15.
iOS: 8/9/10/11/12/13.
Sailfish: 2/3.
Windows: 7/8/8.1/10, Server 2008/2008R2/2012/2012R2/2016/2019.
Файл описания: Прототип описан в файле wincsp.h.
Ядро ОС: Вместо неё используется аналогичная функция CPCSetHashParam .

См. также

CPCreateHash() ,CPGetHashParam() ,CPSignHash() ,CPSetHashParam в MS CSP World Wide Web link ,CryptSetHashParam в MS CryptoAPI 2.0 World Wide Web link