我想将 Crypto++ 密钥保存到std::vector<uint8_t>
。不幸的是只有CryptoPP::StringSink
,这需要std::string
参考但没有CryptoPP::VectorSink
这需要参考std::vector
.
以下代码工作正常
std::string spki;
CryptoPP::StringSink ss(spki);
CryptoPP::RSA::PublicKey publicKey(...);
publicKey.Save(ss);
但我想要这个
std::vector<uint8_t> spki;
CryptoPP::VectorSink vs(spki);
CryptoPP::RSA::PublicKey publicKey(...);
publicKey.Save(vs);
问题
VectorSink
不能仅使用 typedef 创建,因为traits_type::char_type
inside StringSinkTemplate
:
using CryptoPP::StringSinkTemplate;
typedef StringSinkTemplate< std::vector<byte> > VectorSink;
In file included from cryptopp-test.cpp:65:
In file included from /usr/local/include/cryptopp/files.h:5:
/usr/local/include/cryptopp/filters.h:590:22: error: no member named
'traits_type' in 'std::vector<unsigned char, std::allocator<unsigned char>
>'
typedef typename T::traits_type::char_type char_type;
~~~^
cryptopp-test.cpp:243:20: note: in instantiation of template class
'CryptoPP::StringSinkTemplate<std::vector<unsigned char,
std::allocator<unsigned char> > >' requested here
VectorSink vs(spki);
我怎样才能创建一个VectorSink
?
VectorSink 的工作实现
// Written and placed in the public domain by rrmmnn
// Copyright assigned to the Crypto++ project.
namespace CryptoPP {
class VectorSink : public Bufferless<Sink> {
public:
VectorSink(std::vector<uint8_t>& out)
: _out(&out) {
}
size_t Put2(const byte *inString, size_t length, int /*messageEnd*/, bool /*blocking*/) {
_out->insert(_out->end(), inString, inString + length);
return 0;
}
private:
std::vector<uint8_t>* _out;
};
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)