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


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

Структура CMSG_ENVELOPED_ENCODE_INFO содержит сведения, необходимые для кодирования сообщения в конверте. Он передается в CryptMsgOpenToEncode , если параметр dwMsgType CMSG_ENVELOPED.

Синтаксис

typedef struct _CMSG_ENVELOPED_ENCODE_INFO {
  DWORD                       cbSize;
  HCRYPTPROV_LEGACY           hCryptProv;
  CRYPT_ALGORITHM_IDENTIFIER  ContentEncryptionAlgorithm;
  void                        *pvEncryptionAuxInfo;
  DWORD                       cRecipients;
  PCERT_INFO                  *rgpRecipients;
  PCMSG_RECIPIENT_ENCODE_INFO rgCmsRecipients;
  DWORD                       cCertEncoded;
  PCERT_BLOB                  rgCertEncoded;
  DWORD                       cCrlEncoded;
  PCRL_BLOB                   rgCrlEncoded;
  DWORD                       cAttrCertEncoded;
  PCERT_BLOB                  rgAttrCertEncoded;
  DWORD                       cUnprotectedAttr;
  PCRYPT_ATTRIBUTE            rgUnprotectedAttr;
} CMSG_ENVELOPED_ENCODE_INFO, *PCMSG_ENVELOPED_ENCODE_INFO;

Члены

cbSize

Размер данной структуры (в байтах).

hCryptProv

Этот элемент не используется и должен иметь значение NULL.

Windows Server 2003 и Windows XP: Указывает дескриптор для поставщика служб шифрования (CSP), используемого для шифрования содержимого, шифрования ключа получателя и экспорта. Закрытые ключи hCryptProv не используются.

Тип данных этого элемента — HCRYPTPROV.

Если нет веской причины для передачи определенного поставщика шифрования в hCryptProv, передайте ноль для использования поставщика RSA или DSS по умолчанию.

ContentEncryptionAlgorithm

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

Элемент pszObjId структуры указывает алгоритм, используемый для шифрования содержимого сообщения.

Для следующих алгоритмов шифрования требуется закодированный восьмибайтовый вектор инициализации (IV) в элементе Parameters структуры. Дополнительные сведения см. в разделе CryptSetKeyParam.

Значение Значение
CALG_DES
szOID_OIWSEC_desCBC
CALG_3DES
szOID_RSA_DES_EDE3_CBC
 

Если элемент cbData элемента Parameters равен нулю, то с помощью CryptGenRandom создается абстрактная синтаксическая нотация 1 (ASN.1) в кодировке OCTET STRING, содержащая iv.

Алгоритм szOID_RSA_RC2CBC (CALG_RC2) требует, чтобы элемент pbDataэлемента Parameters был закодированной CRYPT_RC2_CBC_PARAMETERS структуре. Если элемент cbData элемента Parameters равен нулю, создается CRYPT_RC2_CBC_PARAMETERS в кодировке ASN.1 со значением по умолчанию 40 для элемента dwVersion . При этом длина ключа по умолчанию равна 40 битам. Эту длину ключа по умолчанию можно переопределить с помощью параметра pvEncryptionAuxInfo , указывающего на структуру CMSG_RC2_AUX_INFO , содержащую нужную длину ключа.

Примечание При расшифровке, если iv существует, CryptSetKeyParam вызывается с iv перед началом расшифровки.
 

pvEncryptionAuxInfo

Указатель на структуру в зависимости от алгоритма шифрования.

Значение Значение
RC2

CMSG_RC2_AUX_INFO

RC4;

CMSG_RC4_AUX_INFO

с пакетом обновления 3 (SP3) или совместимость

CMSG_SP3_COMPATIBLE_AUX_INFO

Все остальные алгоритмы шифрования
NULL

cRecipients

Число элементов в массиве rgpRecipients или rgCmsRecipients .

rgpRecipients

Массив указателей на структуры CERT_INFO , каждая из которых содержит издателя сертификата получателя, SerialNumber и SubjectPublicKeyInfo. Этот массив можно использовать только для получателей, определенных по издателю и серийному номеру. Если rgpRecipients не имеет значение NULL, rgCmsRecipients должен иметь значение NULL.

rgCmsRecipients

Необязательный элемент. Массив указателей на CMSG_RECIPIENT_ENCODE_INFO структуры, содержащие сведения о получателях. Если rgCmsRecipients не имеет значение NULL, rgpRecipients должно иметь значение NULL. для ссылки на это поле необходимо определить CMSG_ENVELOPED_ENCODE_INFO_HAS_CMS_FIELDS.

cCertEncoded

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

rgCertEncoded

Необязательный элемент. Массив структур CERT_BLOB . для ссылки на это поле необходимо определить CMSG_ENVELOPED_ENCODE_INFO_HAS_CMS_FIELDS.

cCrlEncoded

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

rgCrlEncoded

Необязательный элемент. Массив структур CRL_BLOB . для ссылки на это поле необходимо определить CMSG_ENVELOPED_ENCODE_INFO_HAS_CMS_FIELDS.

cAttrCertEncoded

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

rgAttrCertEncoded

Необязательный элемент. Массив структур CRYPT_ATTRIBUTE . для ссылки на этот элемент необходимо определить CMSG_ENVELOPED_ENCODE_INFO_HAS_CMS_FIELDS.

cUnprotectedAttr

Необязательный элемент. Значение DWORD , указывающее количество незащищенных атрибутов в массиве rgUnprotectedAttr . для ссылки на это поле необходимо определить CMSG_ENVELOPED_ENCODE_INFO_HAS_CMS_FIELDS.

rgUnprotectedAttr

Необязательный элемент. Массив структур CRYPT_ATTRIBUTE . для ссылки на это поле необходимо определить CMSG_ENVELOPED_ENCODE_INFO_HAS_CMS_FIELDS.

Требования

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

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

CERT_INFO

CRYPT_ALGORITHM_IDENTIFIER