Процедура подписывания данных
Одна функция 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 и значения для других параметров соответствующим образом.