Domanda

Attualmente sto usando libxmlsec nel mio C ++ software e provo a caricare una RSA chiave privata dalla memoria. Per fare questo, ho cercato attraverso l'API e l'ho trovato questa funzione .

Si impiegano dati binari, una dimensione, una stringa di formato e diversi parametri relativi PEM-callback.

Quando chiamo la funzione, semplicemente stucks, utilizza il 100% del tempo di CPU e non ritorna mai. Abbastanza fastidioso, perché non ho modo di scoprire ciò che è sbagliato.

Ecco il mio codice:

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

data è una punta const char* ai byte prime di mia chiave RSA (con i2d_RSAPrivateKey() , dal OpenSSL ) e datalen la dimensione del data .

Il mio test chiave privata non ha una passphrase così ho deciso di non utilizzare i callback per il momento.

Qualcuno ha già fatto qualcosa di simile? Do you guys vede nulla che io possa cambiare / test per ottenere avanti su questo problema?

Ho appena scoperto la biblioteca ieri, quindi potrei mancare qualcosa di ovvio qui; Non riesco proprio a vederlo.

La ringrazio molto per il vostro aiuto.

È stato utile?

Soluzione

ho cambiato il formato di data per PEM, utilizzando la funzione OpenSSL PEM_write_bio_RSAPrivateKey() e cambiato il terzo argomento alla chiamata a xmlSecCryptoAppKeyLoadMemory() così corrisponde al nuovo formato.

Il nuovo codice è:

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

E da allora, tutto funziona:. La chiamata non è più non si blocca

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top