我目前正在使用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
的大小。
我的测试私钥没有密码,所以我决定暂时不使用回调。
有人已经做过类似的事吗?你们有没有看到我可以改变/测试以解决这个问题的任何事情?
我昨天刚刚发现了这个图书馆,所以我可能会错过这里显而易见的东西;我只是看不到它。
非常感谢你的帮助。
答案 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
);
从那以后,一切正常:电话不再卡住。