Поделиться через


Декодирование подписанных данных

Следующий общий процесс декодирует подписанный тип данных .

Декодирование подписанного сообщения

  1. Получение указателя на закодированный BLOB-объект.
  2. Вызовите CryptMsgOpenToDecode, передав необходимые аргументы.
  3. Вызовите CryptMsgUpdate один раз, передав дескриптор, полученный на шаге 2, и указатель на данные, которые необходимо декодировать. Это приводит к выполнению соответствующих действий с сообщением в зависимости от типа сообщения.
  4. Вызовите CryptMsgGetParam, передав дескриптор, полученный на шаге 2, и соответствующие типы параметров для доступа к декодируемым данным. Например, передайте CMSG_CONTENT_PARAM, чтобы получить указатель на декодированное содержимое.

Следующий общий процесс проверяет подпись декодированного подписанного сообщения.

Проверка подписи декодированного подписанного сообщения

  1. Вызовите CryptMsgGetParam, передав дескриптор сообщения и CMSG_SIGNER_CERT_INFO_PARAM, чтобы получить CERT_INFO подписывающего из сообщения.
  2. Вызовите CertOpenStore , чтобы открыть временное хранилище, инициализированное с помощью сертификатов из сообщения.
  3. Вызовите CertGetSubjectCertificateFromStore , чтобы получить CERT_INFO подписывающего из сертификатов, включенных в сообщение.
  4. Вызовите CryptMsgControl, передав CMSG_CTRL_VERIFY_SIGNATURE для проверки подписей.
  5. Вызовите CryptMsgClose , чтобы закрыть сообщение.

Результатом этих процедур является проверка подписи и получение указателя на декодированное содержимое сообщения, полученное на шаге 4 процедуры декодирования подписанного сообщения.

Сведения о кодировании на языке C см. в разделе Пример программы C: подписывание, кодирование, декодирование и проверка сообщения.