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


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

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

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

  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: подписывание, кодировка, декодирование и проверкасообщения.