Я использую библиотеку OpenSSL c для генерации пары ключей эллиптической кривой Diffie-Hellman (ECDH), следуя примеру первого кода здесь. Он замалчивает фактический обмен открытыми ключами с этой строкой:
peerkey = get_peerkey(pkey);
Переменная pkey
и возвращаемое значение имеют тип EVP *
. pkey
содержит открытый ключ, закрытый ключ и параметры, сгенерированные ранее, а возвращаемое значение содержит только открытый открытый ключ. Поэтому возникает три вопроса:
- Как бы
get_peerkey()
извлечь только открытый ключ изpkey
для отправки в peer? - Как бы код извлекал закрытый ключ и параметры из
pkey
для их сохранения для последующего использования после обмена ключами? - Как
get_peerkey()
сгенерировать новую структуруEVP_PKEY
из открытого открытого ключа peer?
Я видел функции OpenSSL EVP_PKEY_print_public()
, EVP_PKEY_print_private()
и EVP_PKEY_print_params()
, но они предназначены для генерации удобочитаемого вывода. И я не нашел эквивалента для преобразования открытого для человека открытого ключа в структуру EVP_PKEY
.