Я использую библиотеку 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.