структура CRYPT_SIGN_MESSAGE_PARA (wincrypt.h)

Структура CRYPT_SIGN_MESSAGE_PARA содержит сведения для подписывания сообщений с помощью указанного контекста сертификата подписи.

Синтаксис

typedef struct _CRYPT_SIGN_MESSAGE_PARA {
  DWORD                      cbSize;
  DWORD                      dwMsgEncodingType;
  PCCERT_CONTEXT             pSigningCert;
  CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
  void                       *pvHashAuxInfo;
  DWORD                      cMsgCert;
  PCCERT_CONTEXT             *rgpMsgCert;
  DWORD                      cMsgCrl;
  PCCRL_CONTEXT              *rgpMsgCrl;
  DWORD                      cAuthAttr;
  PCRYPT_ATTRIBUTE           rgAuthAttr;
  DWORD                      cUnauthAttr;
  PCRYPT_ATTRIBUTE           rgUnauthAttr;
  DWORD                      dwFlags;
  DWORD                      dwInnerContentType;
  CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
  void                       *pvHashEncryptionAuxInfo;
} CRYPT_SIGN_MESSAGE_PARA, *PCRYPT_SIGN_MESSAGE_PARA;

Члены

cbSize

Размер этой структуры в байтах.

dwMsgEncodingType

Тип используемой кодировки. Всегда допустимо указывать типы кодирования сертификатов и сообщений, объединяя их с побитовой операцией ИЛИ , как показано в следующем примере:

X509_ASN_ENCODING | PKCS_7_ASN_ENCODING

В настоящее время определены следующие типы кодирования:

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

pSigningCert

Указатель на CERT_CONTEXT , который будет использоваться при подписи.

Для контекста необходимо задать свойство CERT_KEY_PROV_INFO_PROP_ID или CERT_KEY_CONTEXT_PROP_ID, чтобы предоставить доступ к закрытому ключу подписи.

HashAlgorithm

CRYPT_ALGORITHM_IDENTIFIER, содержащий алгоритм хэширования, используемый для хэширования подписываемого данных.

pvHashAuxInfo

В настоящее время не используется и должен иметь значение NULL.

cMsgCert

Число элементов в массиве rgpMsgCertCERT_CONTEXT структур. Если задано значение "Ноль", в подписанное сообщение не включаются сертификаты.

rgpMsgCert

Массив указателей на CERT_CONTEXT структуры, которые будут включены в подписанное сообщение. Если необходимо включить pSigningCert , указатель на него должен находиться в массиве rgpMsgCert .

cMsgCrl

Число элементов в массиве rgpMsgCrl указателей на структуры CRL_CONTEXT . Если задано нулевое значение, то в подписанное сообщение не включаются CRL_CONTEXT структуры.

rgpMsgCrl

Массив указателей на CRL_CONTEXT структуры, которые будут включены в подписанное сообщение.

cAuthAttr

Количество элементов в массиве rgAuthAttr . Если в rgAuthAttr нет атрибутов, прошедших проверку подлинности, этот элемент имеет значение 0.

rgAuthAttr

Массив указателей на CRYPT_ATTRIBUTE структуры, каждая из которых содержит сведения об атрибутах, прошедших проверку подлинности. При наличии атрибутов, прошедших проверку подлинности, стандарт PKCS 9 предписывает наличие по крайней мере двух атрибутов: идентификатор объекта типа контента (OID) и хэш самого сообщения. Эти атрибуты автоматически добавляются системой.

cUnauthAttr

Количество элементов в массиве rgUnauthAttr . Если в rgUnauthAttr нет атрибутов, не прошли проверку подлинности, этот элемент равен нулю.

rgUnauthAttr

Массив указателей на CRYPT_ATTRIBUTE структуры, каждая из которых содержит сведения об атрибутах, не прошли проверку подлинности. Атрибуты без проверки подлинности можно использовать для хранения подстановок, среди прочего.

dwFlags

Обычно ноль. Если закодированные выходные данные должны быть CMSG_SIGNED внутренним содержимым внешнего криптографического сообщения, например CMSG_ENVELOPED сообщения, необходимо задать CRYPT_MESSAGE_BARE_CONTENT_OUT_FLAG. Если он не задан, сообщение будет закодировано как внутренний тип контента CMSG_DATA.

CRYPT_MESSAGE_ENCAPSULATED_CONTENT_OUT_FLAG можно настроить так, чтобы инкапсулировать внутреннее содержимое , отличное от данных, в строку OCTET. CRYPT_MESSAGE_KEYID_SIGNER_FLAG можно настроить для идентификации подписывателей по идентификатору ключа, а не по издателю и серийному номеру.

CRYPT_MESSAGE_SILENT_KEYSET_FLAG можно настроить так, чтобы поставщик служб CSP подавлял любой пользовательский интерфейс. Дополнительные сведения о флаге CRYPT_SILENT см. в разделе CryptAcquireContext.

dwInnerContentType

Обычно ноль. Задайте для параметра тип кодирования входного сообщения, если входные данные для подписи являются закодированными выходными данными другого криптографического сообщения.

HashEncryptionAlgorithm

CRYPT_ALGORITHM_IDENTIFIER. Если он присутствует, а не null, он используется вместо элемента PublicKeyInfo.Algorithm сертификата подписывщего. Обратите внимание, что для RSA алгоритм хэш-шифрования обычно совпадает с алгоритмом открытого ключа. Для DSA алгоритм хэш-шифрования обычно является алгоритмом подписи DSS. Этот элемент можно использовать, только если определен CRYPT_SIGN_MESSAGE_PARA_HAS_CMS_FIELDS.

pvHashEncryptionAuxInfo

В настоящее время не используется и должен иметь значение NULL. Этот элемент можно использовать, только если определен CRYPT_SIGN_MESSAGE_PARA_HAS_CMS_FIELDS.

Комментарии

Члены HashEncryptionAlgorithm и pvHashEncryptionAuxInfo можно использовать, только если определен CRYPT_SIGN_MESSAGE_PARA_HAS_CMS_FIELDS.

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Верхняя часть wincrypt.h

См. также раздел

CERT_CONTEXT

CRL_CONTEXT

CRYPT_ALGORITHM_IDENTIFIER

CRYPT_ATTRIBUTE

CryptSignAndEncryptMessage

CryptSignMessage