Partager via


Décodage d’une structure de CERT_INFO

Avec un certificat, la première étape du décodage de l’objet BLOB de certificat consiste à appeler CertCreateCertificateContext, en lui passant un pointeur vers le certificat encodé (BLOB). Lorsque cette fonction est appelée, elle crée un doublon du certificat encodé, crée une structure de type CERT_CONTEXT et crée une structure de type CERT_INFO. Comme le montre l’illustration suivante, un contexte de certificat inclut l’objet BLOB de certificat d’origine, une structure C de type CERT_CONTEXT et une structure C de type CERT_INFO. L’un des membres de la structure CERT_CONTEXT pointe vers la structure CERT_INFO et un autre vers l’objet BLOB de certificat encodé.

contexte de certificat

L’objet encodé (membre de données) est toujours fourni en tant qu’entrée de la fonction CryptDecodeObject , et la sortie est une structure C qui peut ou non avoir des membres encodés, selon la distance dans le processus.

Il existe un autre membre qui nécessite un décodage, c’est-à-dire le membre Extension . Bien qu’il ne soit pas encodé au niveau CERT_INFO , il contient des informations encodées. Pour décoder ces informations, procédez comme indiqué dans l’illustration suivante.

informations de décodage

Dans la structure CERT_INFO , le membre rgExtension est un pointeur vers un tableau de structures CERT_EXTENSION . Chaque structure CERT_EXTENSION a un membre Value qui est encodé et qui doit être décodé. Le membre Value est passé à la fonction CryptDecodeObject , puis la sortie de la fonction dépend de la valeur du membre pszObjId . Notez que dans l’illustration, deux structures différentes sont produites, l’une de type CERT_BASIC_CONSTRAINTS_INFO et l’autre de type CERT_AUTHORITY_KEY_ID_INFO, selon la valeur de pszObjId.