Pergunta

Estou usando atualmente libxmlsec No meu software C ++ e tento carregar uma chave privada RSA da memória. Para fazer isso, pesquisei na API e encontrei esta função.

São necessários dados binários, tamanho, sequência de formato e vários parâmetros relacionados ao PEM-Callback.

Quando eu chamo a função, ela apenas prende, usa 100% do tempo da CPU e nunca retorna. Muito irritante, porque não tenho como descobrir o que está errado.

Aqui está o meu código:

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

data é um const char* apontando para os bytes crus da minha chave RSA (usando i2d_RSAPrivateKey(), a partir de OpenSSL) e datalen o tamanho de data.

Meu teste A chave privada não tem uma senha, então decidi não usar os retornos de chamada por enquanto.

Alguém já fez algo semelhante? Vocês vêem algo que eu poderia mudar/testar para avançar nesse problema?

Acabei de descobrir a biblioteca de ontem, então posso sentir falta de algo óbvio aqui; Eu simplesmente não consigo ver.

Muito obrigado pela sua ajuda.

Foi útil?

Solução

Eu mudei o formato de data para PEM, usando a função OpenSSL PEM_write_bio_RSAPrivateKey() e mudou o terceiro argumento para a chamada para xmlSecCryptoAppKeyLoadMemory() Por isso, corresponde ao novo formato.

O novo código é:

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 desde então, tudo funciona: a chamada não fica mais presa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top