Carga de una clave privada RSA de la memoria utilizando libxmlsec
Pregunta
Actualmente estoy usando libxmlsec en el software de mi C ++ y trato de carga clave privada RSA una de la memoria. Para ello, he buscado a través de la API y encontré esta función .
Se necesitan datos binarios, un tamaño, una cadena de formato y varios parámetros relacionados con el PEM-devolución de llamada.
Cuando llamo a la función, sólo stucks, utiliza el 100% del tiempo de CPU y nunca regresa. Bastante molesto, porque no tengo manera de saber lo que está mal.
Aquí está mi código:
d_xmlsec_dsig_context->signKey =
xmlSecCryptoAppKeyLoadMemory(
reinterpret_cast<const xmlSecByte*>(data),
static_cast<xmlSecSize>(datalen),
xmlSecKeyDataFormatBinary,
NULL,
NULL,
NULL
);
data
es un puntero que const char*
a los bytes primas de mi clave RSA (usando i2d_RSAPrivateKey()
, de OpenSSL ) y datalen
el tamaño de data
.
Mi test clave privada no tiene una contraseña, así que decidí no utilizar los servicios repetidos por el momento.
Alguien ya ha hecho algo similar? ¿Ustedes ven algo que podría cambiar / prueba para obtener adelante en este problema?
Me acaba de descubrir la biblioteca de ayer, por lo que podría perder algo obvio aquí; No puedo verlo.
Muchas gracias por su ayuda.
Solución
Me cambió el formato de data
a PEM, utilizando la función OpenSSL PEM_write_bio_RSAPrivateKey()
y cambió el tercer argumento de la llamada a xmlSecCryptoAppKeyLoadMemory()
por lo que coincide con el nuevo formato.
El nuevo código es:
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
);
Y desde entonces, todo funciona:. La llamada no ya no se atascan