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


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

Структура CMSG_CONTENT_ENCRYPT_INFO содержит сведения, совместно используемые между PFN_CMSG_GEN_CONTENT_ENCRYPT_KEY, PFN_CMSG_EXPORT_KEY_TRANS, PFN_CMSG_EXPORT_KEY_AGREE и PFN_CMSG_EXPORT_MAIL_LIST функциями, используемыми для шифрования и экспорта ключа шифрования содержимого, который можно установить с помощью API шифрования: идентификатор объекта (OID) следующего поколения (CNG).

Синтаксис

typedef struct _CMSG_CONTENT_ENCRYPT_INFO {
  DWORD                       cbSize;
  HCRYPTPROV_LEGACY           hCryptProv;
  CRYPT_ALGORITHM_IDENTIFIER  ContentEncryptionAlgorithm;
  void                        *pvEncryptionAuxInfo;
  DWORD                       cRecipients;
  PCMSG_RECIPIENT_ENCODE_INFO rgCmsRecipients;
  PFN_CMSG_ALLOC              pfnAlloc;
  PFN_CMSG_FREE               pfnFree;
  DWORD                       dwEncryptFlags;
  union {
    HCRYPTKEY         hContentEncryptKey;
    BCRYPT_KEY_HANDLE hCNGContentEncryptKey;
  } DUMMYUNIONNAME;
  DWORD                       dwFlags;
  BOOL                        fCNG;
  BYTE                        *pbCNGContentEncryptKeyObject;
  BYTE                        *pbContentEncryptKey;
  DWORD                       cbContentEncryptKey;
} CMSG_CONTENT_ENCRYPT_INFO, *PCMSG_CONTENT_ENCRYPT_INFO;

Члены

cbSize

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

hCryptProv

Дескриптор поставщика служб шифрования (CSP). Если элемент fCNG имеет значение FALSE , а член hCryptProv имеет значение NULL при входе, функция обратного вызова должна обновить hCryptProv . При получении поставщика, который должен быть освобожден, CMSG_CONTENT_ENCRYPT_RELEASE_CONTEXT_FLAG необходимо задать в элементе dwFlags .

ContentEncryptionAlgorithm

Структура CRYPT_ALGORITHM_IDENTIFIER , указывающая алгоритм, используемый для шифрования ключа. Если функция обратного вызова обновляет либо элемент pszObjId , либо элемент Parametersструктуры CRYPT_ALGORITHM_IDENTIFIER , задайте соответствующее значение в элементе dwFlags . Для этих значений необходимо выделить и освободить память с помощью элементов pfnAlloc и pfnFree .

pvEncryptionAuxInfo

Указатель на структуру, которая зависит от алгоритма шифрования. В следующей таблице перечислены возможные идентификаторы алгоритмов и соответствующее содержимое элемента.

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

CMSG_RC2_AUX_INFO

RC4;

CMSG_RC4_AUX_INFO

 

Для всех остальных алгоритмов шифрования это значение равно NULL.

cRecipients

Значение типа , указывающее количество получателей сообщения.

rgCmsRecipients

Указатель на массив CMSG_RECIPIENT_ENCODE_INFO структур, содержащих сведения о получателе сообщения.

pfnAlloc

Указатель на устанавливаемую функцию, используемую для выделения памяти для обновленного элемента.

pfnFree

Указатель на устанавливаемую функцию, используемую для освобождения памяти, выделенной pfnAlloc.

dwEncryptFlags

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

CMSG_CONTENT_ENCRYPT_PAD_ENCODED_LEN_FLAG (0x00000001)

DUMMYUNIONNAME

DUMMYUNIONNAME.hContentEncryptKey

Дескриптор ключа шифрования содержимого, если элемент fCNG имеет значение FALSE.

DUMMYUNIONNAME.hCNGContentEncryptKey

Дескриптор ключа шифрования содержимого, если элемент fCNG имеет значение TRUE.

dwFlags

Значение типа , указывающее, должна ли быть освобождена память для членов hCryptProv или ContentEncryptionAlgorithm .

Значение Значение
CMSG_CONTENT_ENCRYPT_FREE_PARA_FLAG
0x00000001
Установите значение , если функция обратного вызова обновляет элемент Parametersструктуры CRYPT_ALGORITHM_IDENTIFIER , на которую ссылается элемент ContentEncryptionAlgorithm .
CMSG_CONTENT_ENCRYPT_FREE_OBJID_FLAG
0x00000002
Установите значение , если функция обратного вызова обновляет элемент pszObjIdструктуры CRYPT_ALGORITHM_IDENTIFIER , на которую ссылается элемент ContentEncryptionAlgorithm .
CMSG_CONTENT_ENCRYPT_RELEASE_CONTEXT_FLAG
0x00008000
Устанавливается, если функция обратного вызова получает член hCryptProv , который должен быть освобожден.

fCNG

Значение типа , указывающее, следует ли использовать поставщик API шифрования следующего поколения (CNG) для создания ключа шифрования содержимого.

Если элемент fCNG имеет значение FALSE, вызывается функция CMSG_OID_GEN_CONTENT_ENCRYPT_KEY_FUNC для обновления элемента hContentEncryptKey .

Если элемент fCNG имеет значение TRUE, вызывается функция CMSG_OID_CNG_GEN_CONTENT_ENCRYPT_KEY_FUNC для обновления элементов hCNGContentEncryptKey и cbContentEncryptKey , а элементы pbCNGContentEncryptKeyObject и pbContentEncryptKey должны быть выделены элементом pfnAlloc . Освободите и освободите ключ шифрования содержимого, вызвав функцию CryptMsgClose .

pbCNGContentEncryptKeyObject

Указатель на буфер, содержащий ключ шифрования содержимого CNG.

pbContentEncryptKey

Указатель на буфер, содержащий ключ шифрования содержимого CAPI1.

cbContentEncryptKey

Размер элемента pbCNGContentEncryptKeyObject или pbContentEncryptKey в байтах в зависимости от значения элемента fCNG .

Комментарии

При вызове с параметром dwMsgType , равным CMSG_ENVELOPED, функция CryptMsgOpenToEncode инициализирует структуру CMSG_CONTENT_ENCRYPT_INFO из структуры CMSG_ENVELOPED_ENCODE_INFO .

Если структура CMSG_ENVELOPED_ENCODE_INFO использует элемент rgpRecipients вместо элемента rgCmsRecipients , функция CryptMsgOpenToEncode преобразует структуры элементов rgpRecipients в CMSG_RECIPIENT_ENCODE_INFO структуры для элемента rgCmsRecipientsструктуры CMSG_CONTENT_ENCRYPT_INFO .

Если элемент fCNG имеет значение FALSE, в структуре CMSG_CONTENT_ENCRYPT_INFO можно изменить следующие элементы:

hContentEncryptKey
hCryptProv
Элемент pszObjIdструктуры CRYPT_ALGORITHM_IDENTIFIER, на который ссылается элемент ContentEncryptionAlgorithm
Элемент Parameters структуры CRYPT_ALGORITHM_IDENTIFIER, на которую ссылается элемент ContentEncryptionAlgorithm
dwFlags

Если элемент fCNG имеет значение TRUE, в структуре CMSG_CONTENT_ENCRYPT_INFO можно изменить следующие элементы:

hCNGContentEncryptKey
pbCNGContentEncryptKeyObject
pbContentEncryptKey
cbContentEncryptKey
Элемент pszObjIdструктуры CRYPT_ALGORITHM_IDENTIFIER, на который ссылается элемент ContentEncryptionAlgorithm
Элемент Parameters структуры CRYPT_ALGORITHM_IDENTIFIER, на которую ссылается элемент ContentEncryptionAlgorithm
dwFlags

Следующие элементы доступны только для чтения:

cbSize
pvEncryptionAuxInfo
cRecipients
rgCmsRecipients
pfnAlloc
pfnFree
dwEncryptFlags

Требования

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

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

PFN_CMSG_EXPORT_KEY_AGREE

PFN_CMSG_EXPORT_KEY_TRANS

PFN_CMSG_EXPORT_MAIL_LIST

PFN_CMSG_GEN_CONTENT_ENCRYPT_KEY