我一直在尝试使用debian实验中的Ed448 7生成一个crypto++ ECDSA密钥。我的代码如下:
AutoSeededRandomPool rng;
ECIES<ECP>::Decryptor d(rng, ASN1::curve448());我可以编译这段代码而不会出错,但是当它运行时,我会得到以下异常:
terminate called after throwing an instance of 'CryptoPP::UnknownOID'
what(): BER decode error: unknown object identifier从互联网上看,curve448似乎是最后一个版本实现的。我怎么才能解决这个问题?
发布于 2018-05-19 20:06:47
我一直在尝试生成一个Ed448 ECDSA密钥.看来curve448是最后一个版本实现的。
我们在一段时间前为25519和448曲线添加了OID。增加它们是为了简化curve25519和ed25519的测试。您可以在oids.h上看到OID。
2016年4月11日,他们在提交7ca5f7d3b53f添加了OID,随后又在同一天被安排在提交29e9bd2b27a9。2016年4月11日将其提供给Crypto++ 5.6.4。
我可以编译这段代码,没有错误,但是当它运行时,我会得到以下异常
您将得到异常,因为curve448在eccrypto.cpp中没有域参数。您之所以遇到下面的异常,是因为it == end。
template <class EC> void DL_GroupParameters_EC<EC>::Initialize(const OID &oid)
{
const EcRecommendedParameters<EllipticCurve> *begin, *end;
GetRecommendedParameters(begin, end);
const EcRecommendedParameters<EllipticCurve> *it = std::lower_bound(begin, end, oid, OIDLessThan());
if (it == end || it->oid != oid)
throw UnknownOID();
const EcRecommendedParameters<EllipticCurve> ¶m = *it;
m_oid = oid;
...
}这是背景故事..。
根据curve 25519的一种最先进的Diffie-Hellman函数,该曲线的源代码位于超级警察。SUPERCOP是一个用于密码算法的基准测试程序。
测试叉上有curve25519和ed25519。我们从超级警察那里撕毁了执行程序。SUPERCOP具有curve25519、curve448和许多其他东西的优化参考实现。一旦添加了curve25519和ed25519,我们就计划在curve448上运行。
我们在Andrew的实现基础上添加了curve25519。这提供了x25519和ed25519。也见第761期 (x25519)和第764期 (ed25519)。
此时,Crypto++的curve448实现被搁置。我认为您的选择是基于超级警察,或者使用像libsodium、Botan或OpenSSL这样的库。
https://stackoverflow.com/questions/50408019
复制相似问题