структура 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
Указатель на структуру, которая зависит от алгоритма шифрования. В следующей таблице перечислены возможные идентификаторы алгоритмов и соответствующее содержимое элемента.
Значение | Значение |
---|---|
|
|
|
Для всех остальных алгоритмов шифрования это значение равно 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 .
Значение | Значение |
---|---|
|
Установите значение , если функция обратного вызова обновляет элемент Parametersструктуры CRYPT_ALGORITHM_IDENTIFIER , на которую ссылается элемент ContentEncryptionAlgorithm . |
|
Установите значение , если функция обратного вызова обновляет элемент pszObjIdструктуры CRYPT_ALGORITHM_IDENTIFIER , на которую ссылается элемент ContentEncryptionAlgorithm . |
|
Устанавливается, если функция обратного вызова получает член 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 |