我目前使用 libxmlsec 到我的C ++软件,我尝试加载从内存中的RSA私钥。要做到这一点,我搜索低谷API,发现此功能

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

当我调用该函数,它只是stucks,使用的CPU时间和从未返回100%。很烦人的,因为我没有找出什么是错的方式。

下面是我的代码:

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

<强> data const char*指向我的RSA密钥的原始字节(使用的 i2d_RSAPrivateKey() 下,从 OpenSSL的)和 datalen 的大小的 data

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

已经有人已经做了类似的事情?你们是否看到任何东西,我可以改变/测试,以获得向前这个问题?

我刚发现昨天的库,所以我可能会错过一些东西很明显这里;我无法看到它。

非常感谢你的帮助。

有帮助吗?

解决方案

予改变的 data 以PEM,使用OpenSSL的功能的 PEM_write_bio_RSAPrivateKey() 并改变了第三个参数调用的 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
);

从那时起,一切正常:通话并不再卡住

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top