【问题标题】:Botan 1.10.9 SecureVector to std::vector bad_allocBotan 1.10.9 SecureVector 到 std::vector bad_alloc
【发布时间】:2015-03-31 20:52:26
【问题描述】:

我在 botan 1.10.9 中有这个奇怪的错误。 当我想存储私钥字节向量和公钥字节向量时,我得到一个 std::bad_alloc 错误。难道不可能从植物的 SecureVector 初始化 std::vector 吗?

Botan::LibraryInitializer init;

Botan::AutoSeeded_RNG rng;
rng.reseed(10096);

Botan::RSA_PrivateKey rsaPrivate(rng, 1024);

std::vector<unsigned char> privateArray(rsaPrivate.pkcs8_private_key().begin(), rsaPrivate.pkcs8_private_key().end());
std::vector<unsigned char> publicArray(rsaPrivate.x509_subject_public_key().begin(), rsaPrivate.x509_subject_public_key().end());

如果我对密钥进行编码,那么操作就可以正常工作:

Botan::SecureVector<Botan::byte> publicBytes  = std::move(Botan::X509::BER_encode(rsaPrivate));
Botan::SecureVector<Botan::byte> privateBytes = std::move(Botan::PKCS8::BER_encode(rsaPrivate, rng, info.passphrase()));

std::vector<unsigned char> publicArray(publicBytes.begin(), publicBytes.end());
std::vector<unsigned char> privateArray(privateBytes.begin(), privateBytes.end());

任何想法为什么会发生这种情况?奇怪的是,如果我删除了其中一个向量初始化,那么它有时会起作用,但大多数时候我都会崩溃。

【问题讨论】:

  • 在阅读此问题之前,我什至从未听说过 Botan,但我强烈怀疑 rsaPrivate.pkcs8_private_key()(分别为 rsaPrivate.x509_subject_public_key())返回一个临时容器,因此您正在传递 begin 迭代器从一个临时和 end 迭代器从另一个到 std::vector 构造函数。
  • uhggg 现在我休息了,阅读您的评论很有意义。我会检查botan的来源,但可能就是这样。感谢您抽出宝贵时间!

标签: c++11 vector botan


【解决方案1】:

回复有点老了,但对于 Botan,unlock 函数将 Botan::secure_vector&lt;T&gt; 转换为 std::vector&lt;T&gt;

【讨论】:

    猜你喜欢
    • 2019-12-21
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多