Frage

Ich bin derzeit mit libxmlsec in meine C ++ Software und ich versuche zu laden ein privater RSA-Schlüssel aus dem Speicher. Dazu suchte ich die API-Trog und gefunden dieser Funktion .

Es dauert Binärdaten, eine Größe, einen Format-String und mehrere PEM-Rückruf bezogenen Parameter.

Wenn ich die Funktion aufrufen, ist es nur stucks, verwendet 100% der CPU-Zeit und nie zurückkehrt. Sehr ärgerlich, weil ich habe keine Möglichkeit, herauszufinden, was falsch ist.

Hier ist mein Code:

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

data ist ein const char* zeigt auf den rohen Bytes meiner RSA-Schlüssel (mit i2d_RSAPrivateKey() , von OpenSSL ) und datalen die Größe von data .

Sie Test private Schlüssel kein Passwort hat, so habe ich beschlossen, nicht die Rückrufe für den Augenblick zu nutzen.

Hat jemand schon etwas ähnliches getan? Habt ihr etwas sehen, dass ich ändern / Test könnte nach vorn auf dieses Problem zu umgehen?

Ich habe gerade entdeckt, die Bibliothek auf gestern, so dass ich hier offensichtlich etwas verpassen könnte; Ich kann es nicht sehen.

Vielen Dank für Ihre Hilfe.

War es hilfreich?

Lösung

änderte es das Format von data zu PEM, mit der OpenSSL-Funktion PEM_write_bio_RSAPrivateKey() und das dritte Argument zu dem Aufruf von geändert xmlSecCryptoAppKeyLoadMemory() , so dass es passt das neue Format.

Der neue Code ist:

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
);

Und seither alles funktioniert. Der Anruf länger ist kein stecken

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top