Я пытаюсь закодировать ключ ECDSA Curve448 в небольшой и переносимый байтовый массив.Я пытаюсь использовать DER для достижения этой цели, так как низкоуровневые API не работают с Curve448.Тем не менее, когда я использую следующий код:
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 печатает:
140691149055104:error:0D0A40A7:asn1 encoding routines:i2d_PublicKey:unsupported public key type:../crypto/asn1/i2d_pu.c:35
Как мне решить эту проблему, или есть лучший способ решить эту проблему?
Я использую openssl v1.1.1 из экспериментального Debian.