Caricamento di una chiave privata RSA dalla memoria utilizzando libxmlsec
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.
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