Codificación de una estructura de CERT_INFO
El proceso de codificación es el inverso del proceso de descodificación descrito en Descodificación de una estructura de CERT_INFO. Por ejemplo, el procedimiento siguiente agregaría un emisor codificado a una estructura de CERT_INFO . Vea también la ilustración que sigue al procedimiento.
Para agregar un emisor codificado a una estructura de CERT_INFO
- Cree una cadena que contenga el nombre del emisor que se va a usar.
- Cree una matriz de estructuras de CERT_RDN_ATTR , que se inicializará para contener la información adecuada sobre la cadena de nombre del emisor recién creada.
- Cree una matriz de estructuras de CERT_RDN , una de las cuales tiene la información sobre la matriz de estructuras de CERT_RDN_ATTR que acaba de inicializar.
- Cree una estructura CERT_NAME_INFO que tenga un puntero a la matriz de estructuras de CERT_RDN que acaba de crear.
- Llame a CryptEncodeObject para obtener el tamaño del BLOB codificado en la salida y pasarla la dirección de la estructura de CERT_NAME_INFO que acaba de crear.
- Asigne memoria para el BLOB codificado en la salida.
- Llame a CryptEncodeObject de nuevo, pasándolo la misma información, pero ahora pasándola la dirección de la memoria que acaba de asignar.
- Establezca el miembro Issuer.cbData de la estructura CERT_INFO en el tamaño devuelto en el paso 5 y el miembro Issuer.pbData en la dirección obtenida en el paso 6. El BLOB emisor codificado ahora reside allí.
Para inicializar y codificar cierta información de extensión de certificado, use el procedimiento siguiente. Vea también la ilustración que sigue al procedimiento.
Para agregar información de extensión codificada a una estructura de CERT_INFO
- Cree e inicialice una estructura de información de extensión; en este ejemplo, es una estructura CERT_BASIC_CONSTRAINTS_INFO .
- Llame a CryptEncodeObject, pasando la dirección de la estructura que acaba de crear para obtener el tamaño del BLOB codificado de salida.
- Asigne memoria para el BLOB codificado en la salida.
- Vuelva a llamar a CryptEncodeObject y pase la misma información, excepto que ahora pase la dirección de la memoria asignada.
- Cree una matriz de estructuras de CERT_EXTENSION .
- Inicialice una de las estructuras de CERT_EXTENSION para que pszObjId sea la cadena adecuada para los datos contenidos en Value y que Value contiene los datos cifrados BLOB que se generaron desde la llamada a CryptEncodeObject.
- Inicialice el miembro rgExtension de la estructura CERT_INFO para que apunte a la matriz de estructuras de CERT_EXTENSION .