Codificando uma estrutura de CERT_INFO
O processo de codificação é o inverso do processo de decodificação descrito em Decodificação de uma estrutura de CERT_INFO. Por exemplo, o procedimento a seguir adicionaria um Emissor codificado a uma estrutura CERT_INFO . Consulte também a ilustração que segue o procedimento.
Para adicionar um emissor codificado a uma estrutura de CERT_INFO
- Crie uma cadeia de caracteres que contenha o nome do emissor a ser usado.
- Crie uma matriz de estruturas de CERT_RDN_ATTR , que serão inicializadas para conter as informações adequadas sobre a cadeia de caracteres de nome do emissor que acabou de ser criada.
- Crie uma matriz de estruturas de CERT_RDN , uma das quais tem as informações sobre a matriz de estruturas de CERT_RDN_ATTR apenas inicializadas.
- Crie uma estrutura CERT_NAME_INFO que tenha um ponteiro para a matriz de estruturas de CERT_RDN que acabou de criar.
- Chame CryptEncodeObject para obter o tamanho do BLOB codificado em saída, passando-o o endereço da estrutura CERT_NAME_INFO que você acabou de criar.
- Alocar memória para o BLOB codificado em saída.
- Chame CryptEncodeObject novamente, passando-lhe as mesmas informações, mas agora passando-lhe o endereço da memória apenas alocada.
- Defina o membro Issuer.cbData da estrutura CERT_INFO como o tamanho retornado na etapa 5 e o membro Issuer.pbData para o endereço obtido na etapa 6. O BLOB do Emissor codificado agora reside lá.
Para inicializar e codificar algumas informações de extensão de certificado, use o procedimento a seguir. Consulte também a ilustração que segue o procedimento.
Para adicionar informações de extensão codificadas a uma estrutura de CERT_INFO
- Criar e inicializar uma estrutura de informações de extensão— para este exemplo, é uma estrutura CERT_BASIC_CONSTRAINTS_INFO .
- Chame CryptEncodeObject, passando-lhe o endereço da estrutura que acabou de ser criada, para obter o tamanho do BLOB codificado em saída.
- Alocar memória para o BLOB codificado em saída.
- Chame CryptEncodeObject novamente, passando as mesmas informações, exceto que agora passe o endereço da memória alocada.
- Crie uma matriz de estruturas de CERT_EXTENSION .
- Inicialize uma das estruturas CERT_EXTENSION para que o pszObjId seja a cadeia de caracteres adequada para os dados contidos em Value e que Value contenha o BLOB de dados criptografado que foi gerado da chamada para CryptEncodeObject.
- Inicialize o membro rgExtension da estrutura CERT_INFO para apontar para a matriz de estruturas de CERT_EXTENSION .