convertir une structure X509 en format DER. - C++ - Programmation
MarshPosté le 11-03-2011 à 12:13:10
Bonjour. Je dois convertir une structure pointée par X509* cert (qui est en fait une structure contenant les informations sur un certificat X509 ) vers un format sérialisé : DER.
J'utilise OpensSSL, et je suis sur Linux. La doc me dit :
Code :
int i2d_X509(X509 *x, unsignedchar **out);
i2d_X509() encodes the structure pointed to by x into DER format. If out is not NULL is writes the DER encoded data to the buffer at *out, and increments it to point after the data just written. If the return value is negative an error occurred, otherwise it returns the length of the encoded data.
Une fois que j'obtiens le format DER, j'ajoute le certificat dans un map ( partagé par plusieurs processus ).La fonction écrite par la personne qui était sur le projet avant moi est :
Code :
int addCertIntoMap(constchar* uri, constchar* certificate, unsignedint clen, time_t duration);
uri est la clef de la map : on doit pouvoir récuperer un certificat à partir de son uri const char* certificate est le certificat à ajouter. Là est le problème.
Le certificat que je récupère après l'appel à i2d_X509( ) est un unsigned char** out alors que le certificat à passer en paramètre dans la fonction du gars est : const char* certificate ...
En gros ce que j'aimerais écrire c'est quelques chose du genre :
Code :
X509* peerCert = SSL_get_peer_certificate(ssl);
unsignedchar **DERcert;
i2d_X509(peerCert, DERcert);
addCertIntoMap(uri, DERcert, len, time); // mais ici DERcert est char** et non pas char* ...
Est ce que quelqu'un aurait une idée de comment je dois faire ?
Marsh Posté le 11-03-2011 à 12:13:10
Bonjour.
Je dois convertir une structure pointée par X509* cert (qui est en fait une structure contenant les informations sur un certificat X509 ) vers un format sérialisé : DER.
J'utilise OpensSSL, et je suis sur Linux. La doc me dit :
i2d_X509() encodes the structure pointed to by x into DER format. If out is not NULL is writes the DER encoded data to the buffer at *out, and increments it to point after the data just written. If the return value is negative an error occurred, otherwise it returns the length of the encoded data.
Une fois que j'obtiens le format DER, j'ajoute le certificat dans un map ( partagé par plusieurs processus ).La fonction écrite par la personne qui était sur le projet avant moi est :
uri est la clef de la map : on doit pouvoir récuperer un certificat à partir de son uri
const char* certificate est le certificat à ajouter.
Là est le problème.
Le certificat que je récupère après l'appel à i2d_X509( ) est un unsigned char** out
alors que le certificat à passer en paramètre dans la fonction du gars est : const char* certificate ...
En gros ce que j'aimerais écrire c'est quelques chose du genre :
Est ce que quelqu'un aurait une idée de comment je dois faire ?
Merci d'avance.