首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenSSL DER ECDSA编码错误

OpenSSL DER ECDSA编码错误
EN

Stack Overflow用户
提问于 2018-05-15 10:04:48
回答 1查看 403关注 0票数 0

我正试图将ECDSA Curve448密钥编码到一个可移植的小字节数组中。我正试图使用DER来实现这一点,因为低级别的API不适用于Curve448。但是,当我使用以下代码时:

代码语言:javascript
复制
std::vector<std::vector<uint8_t>> vecs;
uint8_t* buf = nullptr;

EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_ED448, NULL);
EVP_PKEY_keygen_init(pctx);
EVP_PKEY* pkey;
EVP_PKEY_keygen(pctx, &pkey);
EVP_PKEY_CTX_free(pctx);

size_t n = i2d_PublicKey(pkey, &buf);

ERR_print_errors_fp(stderr);

vecs.emplace_back(buf, buf + n);

n设置为-1,因此vecs.emplace_back失败。ERR_print_errors_fp打印:

代码语言:javascript
复制
140691149055104:error:0D0A40A7:asn1 encoding routines:i2d_PublicKey:unsupported public key type:../crypto/asn1/i2d_pu.c:35

我该如何解决这个问题,或者是否有更好的方法来解决这个问题?

我正在使用debian实验版的OpenSSLV1.1.1。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-15 11:22:44

你是想写私钥还是公钥?我之所以这样问是因为您上面的代码有size_t n = i2d_PrivateKey(pkey, &buf);,即试图对私钥进行编码,但是错误消息是i2d_PublicKey:unsupported public key type

无论如何,i2d_PublicKey是用来用旧的“传统”格式写公钥的。由于ED448是一种新的算法,因此没有为其定义这样的格式。相反,您必须使用SubjectPublicKeyInfo格式。它的OpenSSL函数是(令人困惑的相似的) i2d_PUBKEY()。手册页在这里:

PUBKEY.html

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

https://stackoverflow.com/questions/50347455

复制
相关文章

相似问题

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