使用libxmlsec从内存加载RSA私钥

时间:2010-04-07 18:06:59

标签: c++ openssl rsa libxml2 xmlsec

我目前正在使用libxmlsec进入我的C ++软件,并尝试从内存中加载RSA私钥。为此,我通过API搜索并找到了this function

它需要二进制数据,大小,格式字符串和几个与PEM回调相关的参数。

当我调用该函数时,它只是卡住,使用100%的CPU时间而永远不会返回。相当讨厌,因为我无法找出问题所在。

这是我的代码:

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

data 是指向我的RSA密钥的原始字节的const char*(使用 i2d_RSAPrivateKey() ,来自 OpenSSL )和 datalen data 的大小。

我的测试私钥没有密码,所以我决定暂时不使用回调。

有人已经做过类似的事吗?你们有没有看到我可以改变/测试以解决这个问题的任何事情?

我昨天刚刚发现了这个图书馆,所以我可能会错过这里显而易见的东西;我只是看不到它。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我使用OpenSSL函数 data PEM_write_bio_RSAPrivateKey() 的格式更改为PEM,并将第三个参数更改为对 xmlSecCryptoAppKeyLoadMemory() 所以它与新格式匹配。

新代码是:

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

从那以后,一切正常:电话不再卡住。