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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top