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

  1. Crie uma cadeia de caracteres que contenha o nome do emissor a ser usado.
  2. 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.
  3. 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.
  4. Crie uma estrutura CERT_NAME_INFO que tenha um ponteiro para a matriz de estruturas de CERT_RDN que acabou de criar.
  5. 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.
  6. Alocar memória para o BLOB codificado em saída.
  7. Chame CryptEncodeObject novamente, passando-lhe as mesmas informações, mas agora passando-lhe o endereço da memória apenas alocada.
  8. 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á.

adicionando um emissor codificado a uma estrutura de informações de certificado

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

  1. Criar e inicializar uma estrutura de informações de extensão— para este exemplo, é uma estrutura CERT_BASIC_CONSTRAINTS_INFO .
  2. Chame CryptEncodeObject, passando-lhe o endereço da estrutura que acabou de ser criada, para obter o tamanho do BLOB codificado em saída.
  3. Alocar memória para o BLOB codificado em saída.
  4. Chame CryptEncodeObject novamente, passando as mesmas informações, exceto que agora passe o endereço da memória alocada.
  5. Crie uma matriz de estruturas de CERT_EXTENSION .
  6. 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.
  7. Inicialize o membro rgExtension da estrutura CERT_INFO para apontar para a matriz de estruturas de CERT_EXTENSION .

adicionando informações de extensão codificadas a uma estrutura de informações de certificado