首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Crypto++ Ed448未知样条

Crypto++ Ed448未知样条
EN

Stack Overflow用户
提问于 2018-05-18 09:24:26
回答 1查看 316关注 0票数 1

我一直在尝试使用debian实验中的Ed448 7生成一个crypto++ ECDSA密钥。我的代码如下:

代码语言:javascript
复制
AutoSeededRandomPool rng;
ECIES<ECP>::Decryptor d(rng, ASN1::curve448());

我可以编译这段代码而不会出错,但是当它运行时,我会得到以下异常:

代码语言:javascript
复制
terminate called after throwing an instance of 'CryptoPP::UnknownOID'
  what():  BER decode error: unknown object identifier

从互联网上看,curve448似乎是最后一个版本实现的。我怎么才能解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

代码语言:javascript
复制
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> &param = *it;
    m_oid = oid;
    ...
}

这是背景故事..。

根据curve 25519的一种最先进的Diffie-Hellman函数,该曲线的源代码位于超级警察。SUPERCOP是一个用于密码算法的基准测试程序。

测试叉上有curve25519和ed25519。我们从超级警察那里撕毁了执行程序。SUPERCOP具有curve25519、curve448和许多其他东西的优化参考实现。一旦添加了curve25519和ed25519,我们就计划在curve448上运行。

我们在Andrew的实现基础上添加了curve25519。这提供了x25519ed25519。也见第761期 (x25519)和第764期 (ed25519)。

此时,Crypto++的curve448实现被搁置。我认为您的选择是基于超级警察,或者使用像libsodium、Botan或OpenSSL这样的库。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50408019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档