使用 libxmlsec 从内存加载 RSA 私钥

发布于 2024-08-28 17:45:40 字数 1089 浏览 6 评论 0原文

我目前正在我的 C++ 软件中使用 libxmlsec ,并尝试加载 RSA 私有记忆中的钥匙。为此,我搜索了 API 并找到了 此函数< /a>.

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

当我调用该函数时,它只是卡住了,使用了 100% 的 CPU 时间并且永远不会返回。很烦人,因为我无法找出问题所在。

这是我的代码:

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

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

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

我昨天才发现这个图书馆,所以我可能会错过一些明显的东西;我就是看不到。

非常感谢您的帮助。

I'm currently using libxmlsec into my C++ software and I try to load a RSA private key from memory. To do this, I searched trough the API and found this function.

It takes binary data, a size, a format string and several PEM-callback related parameters.

When I call the function, it just stucks, uses 100% of the CPU time and never returns. Quite annoying, because I have no way of finding out what is wrong.

Here is my code:

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

data is a const char* pointing to the raw bytes of my RSA key (using i2d_RSAPrivateKey(), from OpenSSL) and datalen the size of data.

My test private key doesn't have a passphrase so I decided not to use the callbacks for the time being.

Has someone already done something similar ? Do you guys see anything that I could change/test to get forward on this problem ?

I just discovered the library on yesterday, so I might miss something obvious here; I just can't see it.

Thank you very much for your help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

寂寞花火° 2024-09-04 17:45:40

我使用 OpenSSL 函数 PEM_write_bio_RSAPrivateKey()data 的格式更改为 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
);

从那时起,一切正常:呼叫不再卡住。

I changed the format of data to PEM, using the OpenSSL function PEM_write_bio_RSAPrivateKey() and changed the third argument to the call to xmlSecCryptoAppKeyLoadMemory() so it matches the new format.

The new code is:

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

And since then, everything works: the call does no longer get stuck.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文