Процедура подписывания данных
Одна функция, CryptSignMessage, выполняет все задачи, перечисленные в разделе Создание Подписанного Сообщения. Однако инициализация структур и других данных по-прежнему необходима. На следующем рисунке показана связь между этими параметрами функции, указывающими на структуры или массивы и их инициализированные данные. На рисунке показаны только параметры функции и элементы структуры, производные от других структур или функций. Остальные параметры являются простыми инициализациями.
инициализация карты
Подписывать данные с помощью CryptSignMessage
- Получите указатель на данные, которые должны быть подписаны.
- Назначьте указатель на данные, чтобы индексировать ноль массива "данные для подписи".
- Получите дескриптор к криптографическому провайдеру.
- Откройте хранилище сертификатов, содержащее сертификат подписывающего.
- Получите адрес к сертификату подписанта.
- Назначьте адрес сертификата нулевому индексу массива MsgCert.
- Назначьте адреса любых других сертификатов, которые будут включены в сообщение массиву MsgCert.
- Инициализируйте структуру CRYPT_ALGORITHM_IDENTIFIER, инициализируя член pszObjId на нужный хэш-алгоритм и другие члены соответствующим образом.
- Инициализировать структуру CRYPT_SIGN_MESSAGE_PARA, инициализировав элемент pSigningCert адрес сертификата подписи , член массива msgCert адресом сертификатов подписи и других пользователей, hashAlgorithm в адрес структуры CRYPT_ALGORITHM_IDENTIFIER, и другие члены в соответствии с соответствующими параметрами.
- Вызовите функциюCryptSignMessage, передав структуру CRYPT_SIGN_MESSAGE_PARA в параметр pSignPara, адрес массива "данные для подписи" в параметр rgpbToBeSigned, адрес для выходного параметра pbSignedBlob, а также значения для других параметров по мере необходимости.