Я хотел бы отобразить пару publi c и секретный ключ, содержащуюся в параметре "pkey" функции EVP_PKEY_keygen, в удобочитаемой форме, то есть отобразить ключ кодировщика, например, такой: 1GERarDJyXsANQqWGGdC3C26GA8K9yMQ7n. Вот фрагмент кода: генерация параметров и ключей:
EVP_PKEY_CTX *ctx;
EVP_PKEY *pkey = NULL;
ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_EC, NULL);
if(ctx == NULL)
{
std::cout << "error 1" << std::endl;
}
if(EVP_PKEY_keygen_init(ctx) <= 0)
{
std::cout << "error 2" << std::endl;
}
if(EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, NID_X9_62_prime256v1) <= 0)
{
std::cout << "error 3" << std::endl;
}
if(EVP_PKEY_keygen(ctx, &pkey) <= 0)
{
std::cout << "error 4" << std::endl;
}
EVP_PKEY_CTX_free(ctx);
Моя попытка 1 отобразить закрытый ключ, содержащийся в «ppkey»
EC_KEY *key;
if(!(key = EVP_PKEY_get1_EC_KEY(pkey)))
{
std::cout << "error 5" << std::endl;
}
const BIGNUM *prvkey;
if(!(prvkey = EC_KEY_get0_private_key(key)))
{
std::cout << "error 6" << std::endl;
}
unsigned char *to = NULL;
if(!BN_bn2mpi(prvkey, to))
{
std::cout << "error 7" << std::endl;
}
std::cout << *prvkey <<std::endl;
, это отображение ошибки:
error: no match for 'operator<<' (operand types are 'std::ostream' {aka 'std::basic_ostream<char>'} and 'const BIGNUM' {aka 'const bignum_st'})|
как отобразить "* ppkey" в std :: cout и исправить эту ошибку?
Моя попытка 2 отобразить закрытый ключ, содержащийся в «ppkey»:
BIO *bp = NULL;
if(!EVP_PKEY_print_private(bp, pkey, 1, NULL))
{
std::cout << "error 5" << std::endl;
}
std::cout << bp <<std::endl;
, там возникает ошибка из-за того, что условие должно соблюдаться. Как правильно определить параметр 3 функции, потому что я думаю, что проблема в этом?
Есть ли какая-либо другая функция, другой метод для отображения и записи ключей?
Помогите мне, пожалуйста