2010-04-07 4 views
1

J'utilise actuellement libxmlsec dans mon logiciel C++ et j'essaie de charger une clé privée RSA depuis la mémoire. Pour ce faire, j'ai cherché dans l'API et trouvé this function.Chargement d'une clé privée RSA de la mémoire en utilisant libxmlsec

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

Lorsque j'appelle la fonction, elle bloque, utilise 100% du temps CPU et ne revient jamais. Assez agaçant, parce que je n'ai aucun moyen de savoir ce qui ne va pas.

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* pointant vers les octets bruts de ma clé RSA (en utilisant i2d_RSAPrivateKey(), de OpenSSL) et datalen la taille de data.

Mon test La clé privée n'a pas de phrase secrète, j'ai donc décidé de ne pas utiliser les rappels pour l'instant.

Est-ce que quelqu'un a déjà fait quelque chose de similaire? Est-ce que vous voyez quelque chose que je pourrais changer/tester pour avancer sur ce problème? Je viens de découvrir la bibliothèque hier, donc je pourrais manquer quelque chose d'évident ici; Je ne peux pas le voir.

Merci beaucoup pour votre aide.

Répondre

0

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() afin qu'il corresponde 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.

Questions connexes