Crypto ++ Ed448未知的

时间:2018-05-18 09:24:26

标签: crypto++ ecdsa

我一直在尝试使用来自debian实验的crypto ++ 7生成Ed448 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

透过互联网看来,曲线448是最后一个版本。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

  

我一直在尝试生成Ed448 ECDSA密钥......看起来曲线448是在最后一个版本中实现的。

我们前段时间为25519和448曲线添加了OID。添加它们是为了便于测试curve25519和ed25519。您可以在oids.h找到OID。

他们的OID于2016年4月11日在Commit 7ca5f7d3b53f添加,然后在同一天Commit 29e9bd2b27a9修复。 2016年4月11日将它们提供给Crypto ++ 5.6.4。

  

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

您收到异常,因为eccrypto.cpp中的curve448没有域参数。您正在点击下面的例外,因为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> &param = *it;
    m_oid = oid;
    ...
}

这是背景故事......

根据curve25519的A state-of-the-art Diffie-Hellman function,曲线的源代码位于SUPERCOP。 SUPERCOP是加密算法的基准程序。

我们在测试分支上有curve25519和ed25519。我们从SUPERCOP中删除了实现。 SUPERCOP具有curve25519,curve448和许多其他内容的优化参考实现。一旦添加了curve25519和ed25519,我们就计划在curve448上。

我们根据Andrew Moon的实施添加了curve25519。这提供了x25519ed25519。另请参阅Issue 761(x25519)和Issue 764(ed25519)。

此时,curve448的Crypto ++实现停滞不前。我认为你的选择是基于SUPERCOP推出自己的选项,或使用像libsodium,Botan或OpenSSL这样的库。