Decodificação de uma estrutura de CERT_INFO

Dado um certificado, a primeira etapa na decodificação do BLOB de certificado é chamar CertCreateCertificateContext, passando-o um ponteiro para o certificado codificado (BLOB). Quando essa função é chamada, ela cria uma duplicata do certificado codificado, cria uma estrutura do tipo CERT_CONTEXT e cria uma estrutura do tipo CERT_INFO. Conforme mostrado na ilustração a seguir, um contexto de certificado inclui o BLOB de certificado original, uma estrutura C do tipo CERT_CONTEXT e uma estrutura C do tipo CERT_INFO. Um dos membros da estrutura CERT_CONTEXT aponta para a estrutura CERT_INFO e outro para o BLOB de certificado codificado.

contexto do certificado

O objeto codificado (membro de dados) sempre é fornecido como a entrada para a função CryptDecodeObject e a saída é uma estrutura C que pode ou não ter membros codificados, dependendo de quão longe você está no processo.

Há um outro membro que requer alguma decodificação e esse é o membro extension . Embora não seja codificado no nível CERT_INFO , ele contém algumas informações codificadas. Para decodificar essas informações, prossiga conforme mostrado na ilustração a seguir.

informações de decodificação

Na estrutura CERT_INFO , rgExtension membro é um ponteiro para uma matriz de estruturas CERT_EXTENSION . Cada estrutura CERT_EXTENSION tem um membro Value que está no formato codificado e precisa ser decodificado. O membro Value é passado para a função CryptDecodeObject e, em seguida, a saída da função depende do valor do membro pszObjId . Observe que, na ilustração, duas estruturas diferentes são produzidas, uma do tipo CERT_BASIC_CONSTRAINTS_INFO e uma do tipo CERT_AUTHORITY_KEY_ID_INFO, dependendo do valor de pszObjId.