Question

J'utilise actuellement libxmlsec dans mon C ++ logiciel et je tente de charger une clé privée RSA de la mémoire. Pour ce faire, je rigole l'API et cherchai trouvé cette fonction .

Il faut des données binaires, une taille, une chaîne de format et plusieurs paramètres liés PEM-rappel.

Quand j'appelle la fonction, il seulement stucks, utilise 100% du temps CPU et ne retourne jamais. Assez ennuyeux, parce que je n'ai aucun moyen de savoir ce qui est faux.

Voici mon code:

d_xmlsec_dsig_context->signKey =
    xmlSecCryptoAppKeyLoadMemory(
        reinterpret_cast<const xmlSecByte*>(data),
        static_cast<xmlSecSize>(datalen), 
        xmlSecKeyDataFormatBinary,
        NULL,
        NULL,
        NULL
    );

data est un const char* montrant les octets bruts de ma clé RSA (en utilisant i2d_RSAPrivateKey() , de OpenSSL ) et datalen la taille de data .

Mon test clé privée ne dispose pas d'un mot de passe, donc je décidé de ne pas utiliser les callbacks pour le moment.

Quelqu'un at-il déjà fait quelque chose de semblable? Est-ce que vous voyez les gars tout ce que je pouvais changer / test pour obtenir en avant sur ce problème?

Je viens de découvrir la bibliothèque hier, donc je pourrais manquer ici quelque chose d'évident; Je ne peux pas le voir.

Merci pour votre aide.

Était-ce utile?

La solution

J'ai changé le format de data à PEM, en utilisant la fonction OpenSSL PEM_write_bio_RSAPrivateKey() et a changé le troisième argument à l'appel à xmlSecCryptoAppKeyLoadMemory() il correspond au nouveau format.

Le nouveau code est:

d_xmlsec_dsig_context->signKey =
xmlSecCryptoAppKeyLoadMemory(
    reinterpret_cast<const xmlSecByte*>(data), // data is now in PEM format
    static_cast<xmlSecSize>(datalen), 
    xmlSecKeyDataFormatPem, // Updated
    NULL,
    NULL,
    NULL
);

Et depuis, tout fonctionne:. L'appel ne plus se coincer

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top