estructura de CMSG_CONTENT_ENCRYPT_INFO (wincrypt.h)

La estructura de CMSG_CONTENT_ENCRYPT_INFO contiene información compartida entre las funciones de PFN_CMSG_GEN_CONTENT_ENCRYPT_KEY, PFN_CMSG_EXPORT_KEY_TRANS, PFN_CMSG_EXPORT_KEY_AGREE y PFN_CMSG_EXPORT_MAIL_LIST usadas para el cifrado y exportación de una clave de cifrado de contenido, que se puede instalar mediante una API de criptografía: identificador de objeto de próxima generación (CNG).

Sintaxis

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;

Miembros

cbSize

Tamaño, en bytes, de esta estructura.

hCryptProv

Identificador de un proveedor de servicios criptográficos (CSP). Si el miembro fCNG es FALSE y el miembro hCryptProv es NULL tras la entrada, la función de devolución de llamada debe actualizar hCryptProv . Si se adquiere un proveedor que debe liberarse, el CMSG_CONTENT_ENCRYPT_RELEASE_CONTEXT_FLAG debe establecerse en el miembro dwFlags .

ContentEncryptionAlgorithm

Estructura de CRYPT_ALGORITHM_IDENTIFIER que especifica el algoritmo utilizado para cifrar la clave. Si la función de devolución de llamada actualiza el miembro pszObjId o el miembro Parameters de la estructura CRYPT_ALGORITHM_IDENTIFIER , establezca el valor adecuado en el miembro dwFlags . Debe asignar y liberar memoria para estos valores mediante los miembros pfnAlloc y pfnFree .

pvEncryptionAuxInfo

Puntero a una estructura que depende del algoritmo de cifrado. En la tabla siguiente se enumeran los posibles identificadores de algoritmo y el contenido del miembro correspondiente.

Valor Significado
RC2

CMSG_RC2_AUX_INFO

RC4

CMSG_RC4_AUX_INFO

 

Para todos los demás algoritmos de cifrado, este valor es NULL.

cRecipients

Valor que especifica el número de destinatarios de un mensaje.

rgCmsRecipients

Puntero a una matriz de estructuras de CMSG_RECIPIENT_ENCODE_INFO que contienen la información del destinatario del mensaje.

pfnAlloc

Puntero a una función instalable que se usa para asignar memoria para un miembro actualizado.

pfnFree

Puntero a una función instalable usada para liberar memoria asignada por pfnAlloc.

dwEncryptFlags

Valor que indica si la salida codificada debe rellenarse con ceros para obtener una longitud máxima coherente necesaria para el streaming de longitud definitiva en las funciones CryptMsgCalculateEncodedLength o CryptMsgOpenToEncode .

CMSG_CONTENT_ENCRYPT_PAD_ENCODED_LEN_FLAG (0x00000001)

DUMMYUNIONNAME

DUMMYUNIONNAME.hContentEncryptKey

Identificador de la clave de cifrado de contenido cuando el miembro fCNG es FALSE.

DUMMYUNIONNAME.hCNGContentEncryptKey

Identificador de la clave de cifrado de contenido cuando el miembro fCNG es TRUE.

dwFlags

Valor que indica si la memoria debe liberarse para los miembros hCryptProv o ContentEncryptionAlgorithm .

Valor Significado
CMSG_CONTENT_ENCRYPT_FREE_PARA_FLAG
0x00000001
Establezca si la función de devolución de llamada actualiza el miembro Parameters de la estructura CRYPT_ALGORITHM_IDENTIFIER a la que hace referencia el miembro ContentEncryptionAlgorithm .
CMSG_CONTENT_ENCRYPT_FREE_OBJID_FLAG
0x00000002
Establezca si la función de devolución de llamada actualiza el miembro pszObjId de la estructura de CRYPT_ALGORITHM_IDENTIFIER a la que hace referencia el miembro ContentEncryptionAlgorithm .
CMSG_CONTENT_ENCRYPT_RELEASE_CONTEXT_FLAG
0x00008000
Establezca si la función de devolución de llamada adquiere un miembro hCryptProv que se debe liberar.

fCNG

Valor que indica si se va a usar un proveedor cryptography API: Next Generation (CNG) para generar la clave de cifrado de contenido.

Si el miembro fCNG es FALSE, se llama a la función CMSG_OID_GEN_CONTENT_ENCRYPT_KEY_FUNC para actualizar el miembro hContentEncryptKey .

Si el miembro fCNG es TRUE, se llama a la función CMSG_OID_CNG_GEN_CONTENT_ENCRYPT_KEY_FUNC para actualizar los miembros hCNGContentEncryptKey y cbContentEncryptKey , y los miembros pbCNGContentEncryptKeyObject y pbContentEncryptKey deben estar asignados por el miembro pfnAlloc . Libere y libere la clave de cifrado de contenido mediante una llamada a la función CryptMsgClose .

pbCNGContentEncryptKeyObject

Puntero al búfer que contiene la clave de cifrado de contenido CNG.

pbContentEncryptKey

Puntero al búfer que contiene una clave de cifrado de contenido CAPI1.

cbContentEncryptKey

Tamaño, en bytes, del miembro pbCNGContentEncryptKeyObject o pbContentEncryptKey según el valor del miembro fCNG .

Comentarios

Cuando se llama con el parámetro dwMsgType establecido en CMSG_ENVELOPED, la función CryptMsgOpenToEncode inicializa la estructura CMSG_CONTENT_ENCRYPT_INFO de la estructura CMSG_ENVELOPED_ENCODE_INFO .

Si la estructura de CMSG_ENVELOPED_ENCODE_INFO usa el miembro rgpRecipients en lugar del miembro rgCmsRecipients , la función CryptMsgOpenToEncode convierte las estructuras miembro rgpRecipients en estructuras CMSG_RECIPIENT_ENCODE_INFO para el miembro rgCmsRecipients de la estructura CMSG_CONTENT_ENCRYPT_INFO .

Cuando el miembro fCNG es FALSE, los siguientes miembros se pueden cambiar en la estructura CMSG_CONTENT_ENCRYPT_INFO :

hContentEncryptKey
hCryptProv
Miembro pszObjId de la estructura CRYPT_ALGORITHM_IDENTIFIER a la que hace referencia el miembro ContentEncryptionAlgorithm
Miembro Parameters de la estructura CRYPT_ALGORITHM_IDENTIFIER a la que hace referencia el miembro ContentEncryptionAlgorithm
dwFlags

Cuando el miembro fCNG es TRUE, los siguientes miembros se pueden cambiar en la estructura de CMSG_CONTENT_ENCRYPT_INFO :

hCNGContentEncryptKey
pbCNGContentEncryptKeyObject
pbContentEncryptKey
cbContentEncryptKey
Miembro pszObjId de la estructura CRYPT_ALGORITHM_IDENTIFIER a la que hace referencia el miembro ContentEncryptionAlgorithm
Miembro Parameters de la estructura CRYPT_ALGORITHM_IDENTIFIER a la que hace referencia el miembro ContentEncryptionAlgorithm
dwFlags

Los miembros siguientes son de solo lectura:

cbSize
pvEncryptionAuxInfo
cRecipients
rgCmsRecipients
pfnAlloc
pfnFree
dwEncryptFlags

Requisitos

   
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Encabezado wincrypt.h

Consulte también

PFN_CMSG_EXPORT_KEY_AGREE

PFN_CMSG_EXPORT_KEY_TRANS

PFN_CMSG_EXPORT_MAIL_LIST

PFN_CMSG_GEN_CONTENT_ENCRYPT_KEY