Le chargement d'une clé privée RSA de la mémoire à l'aide libxmlsec
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.
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