Forums : XPCom

Aller à la discussion :  Plus récente Plus ancienne

# nsIX509Cert .getRawDER(?, ?)

Envoyé par : hhf

Date : 19/11/2008 20:55

Toujours en galère avec la creation et l'utilisation de certain XPCom, je viens réclamer un peu d'aide.

Attention, partez pas a la lecture des premières lignes, inutile d'être un pro de la secu pour pouvoir me répondre... LOL

Voila, dans mon XPCom, j'ai besoin d'un certificat, celui ci au format binaire X509, pas base64, après quelque recherches, j'en deduit que si c'est pas base64, c'est au format DER. OK

mon XPI qui s'inscrit comme un adds on de Tbird, récupère les certificats présents sur le client via :

 nsIX509CertDB.findCertByEmailAddress(email);

qui me retourne un nsIX509Cert.

sur celui ci il y a une méthode getRawDER... formidable. voici sa signature :

 void getRawDER ( out PRUint32 length , out arrayof PRUint8 data ) 

bon, c'est la que ça ce complique...

que dois je mettre en arguments... j'ai essaye de mettre des object

 var lenght = new Object(); 
 var data = new Object();
 cert.getRawDER(length, data);

mais je ne comprends pas trop comment exploiter le résultat. pour length, pas de soucis, un simple :

dump(length.value);

m'affiche la longueur de mon certificat.

mais par contre pour data, je sais pas quoi en faire, pas d'attribut, pas de méthode rien...

Est ce que c'est normal, car c'est un binaire Quelque chose m'échappe.

De plus, si je récupère cette object "binaire", que dois je mettre dans l'idl de mon composant pour passer ce type d'arguments. Il y a t'il d'ailleurs une doc référençant tous les type déclarable dans les idl ?

J'avais pensé a une autre solution, dirrectement passer a mon composant le certificat, donc en mettant dans l'idl quelque chose comme ça :

 boolean addCertificate(in nsIX509Cert cert);

solution séduisante, mais dés que je fais appelle a une méthode de mon nsIX509Cert dans le code C++ de mon composant, tbird crashe.

et surtout j'ai beaucoup de mal a caster le arrayof PRUint8 en char*, enfin, la je sais plus trop, j'ai tellement fait d'essais, que je sais plus.

Enfin, dans mon code C++ dois je m'en tenir a utiliser des types du SDK gecko préfixer par PR... ou c'est juste important pour les type des variables qui sont commune entre le C++ et le javascript ? Je sais pas si je suis clair...

Si vous pensez que vous pouvez me répondre, mais pensez que j'ai pas été assez clair, n'hésiter pas, je suis un peu désespérer... LOL J'ai perdu une grosse apres midi la dessus sans trouver de solution.

franchement, je vous jure c'est plus simple java... LOL

Merci d'avance.

# Re: nsIX509Cert .getRawDER(?, ?)

Envoyé par : hhf

Date : 21/11/2008 00:45

bon finalement la nuit porte conseil, j'ai retenté aujourd'hui la seconde solution et ca marche... a savoir passer le certificat nsIX509Cert directement a mon composant via la signature IDL suivante :

boolean addCertificate(in nsIX509Cert cert);

puis en appelant

cert->GetRawDER(length, data);

directement dans mon Composant

maintenant, c'est une autre méthode qui me pose problème, et qui d'ailleurs fait lamentablement planté mon XPCom....

nsAString& aEmailAddress
cert->GetEmailAddress(aEmailAddress);

qui a comme signature :

GetEmailAddress(nsAString & aEmailAddress) 

j'ai include <nsStringAPI>, mais systématiquement ca fait planter mon composant et Tbird en même temps.

Que faire. Merci d'avance... petit a petit ce devient plus clair, mais j'avoue que les types c'est chaud...

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.