Encodage d’une structure CERT_INFO
Le processus d’encodage est l’inverse du processus de décodage décrit dans Décodage d’une structure CERT_INFO. Par exemple, la procédure suivante ajoute un émetteur encodé à une structure CERT_INFO . Consultez également l’illustration qui suit la procédure.
Pour ajouter un émetteur encodé à une structure CERT_INFO
- Créez une chaîne contenant le nom de l’émetteur à utiliser.
- Créez un tableau de structures CERT_RDN_ATTR , qui sera initialisé pour contenir les informations appropriées sur la chaîne de nom de l’émetteur que vous venez de créer.
- Créez un tableau de structures CERT_RDN , dont l’une contient les informations sur le tableau de structures CERT_RDN_ATTR simplement initialisées.
- Créez une structure CERT_NAME_INFO qui a un pointeur vers le tableau de structures CERT_RDN qui vient de créer.
- Appelez CryptEncodeObject pour obtenir la taille de l’objet blob encodé en sortie, en lui transmettant l’adresse de la structure CERT_NAME_INFO que vous venez de créer.
- Allouez de la mémoire pour le BLOB encodé en sortie.
- Appelez à nouveau CryptEncodeObject , en lui transmettant les mêmes informations, mais en lui transmettant maintenant l’adresse de la mémoire juste allouée.
- Définissez le membre Issuer.cbData de la structure CERT_INFO sur la taille retournée à l’étape 5 et le membre Issuer.pbData sur l’adresse obtenue à l’étape 6. L’objet BLOB émetteur encodé réside désormais ici.
Pour initialiser et encoder certaines informations d’extension de certificat, utilisez la procédure suivante. Consultez également l’illustration qui suit la procédure.
Pour ajouter des informations d’extension encodées à une structure CERT_INFO
- Créez et initialisez une structure d’informations d’extension, par exemple, il s’agit d’une structure CERT_BASIC_CONSTRAINTS_INFO .
- Appelez CryptEncodeObject, en lui transmettant l’adresse de la structure créée, pour obtenir la taille de l’objet BLOB encodé en sortie.
- Allouez de la mémoire pour le BLOB encodé en sortie.
- Appelez à nouveau CryptEncodeObject , en transmettant les mêmes informations, sauf que maintenant transmettez l’adresse de la mémoire allouée.
- Créez un tableau de structures CERT_EXTENSION .
- Initialisez l’une des structures CERT_EXTENSION afin que le pszObjId soit la chaîne appropriée pour les données contenues dans Value, et que Value contient le blob de données chiffré qui a été généré à partir de l’appel à CryptEncodeObject.
- Initialisez le membre rgExtension de la structure CERT_INFO pour pointer vers le tableau de structures CERT_EXTENSION .