Używam biblioteki c biblioteki OpenSSL do wygenerowania pary kluczy Diffie-Hellman (ECDH) z krzywą eliptyczną, po pierwszym kodzie kodowym here. To pomija rzeczywistej wymiany kluczy publicznych z tej linii:W jaki sposób uzyskuje się dostęp do surowego klucza publicznego ECDH, klucza prywatnego i parametrów wewnątrz struktury EVP_PKEY OpenSSL?
peerkey = get_peerkey(pkey);
pkey
zmienna i wartość zwracana są zarówno typu EVP *
. pkey
zawiera klucz publiczny, klucz prywatny i wygenerowane wcześniej parametry, a wartość zwracana zawiera tylko klucz publiczny peera. Więc to podnosi trzy pytania:
- Jak
get_peerkey()
faktycznie wyodrębnić tylko klucz publiczny zpkey
wysyłania do uczestnika? - W jaki sposób kod wyodrębniłby klucz prywatny i parametry z
pKey
, aby zapisać je do późniejszego wykorzystania po wymianie kluczy? - W jaki sposób
get_peerkey()
wygeneruje nową strukturęEVP_PKEY
z surowego klucza publicznego równorzędnego?
Widziałem funkcje OpenSSL EVP_PKEY_print_public()
, EVP_PKEY_print_private()
i EVP_PKEY_print_params()
ale są do generowania wyjścia postaci czytelnej dla człowieka. I nie znalazłem żadnego odpowiednika do konwersji klucza publicznego czytelnego dla człowieka z powrotem do struktury EVP_PKEY
.
Dziękujemy za udzielenie odpowiedzi! – samoz
Odserializowanie klucza publicznego mogło działać 4 lata i 5 miesięcy temu, ale dziś brzmi to dość skomplikowanie !!! : p EVP_PKEY_get1_EC_KEY ma stworzyć EC_POINT z oktetu, ale dostaje EC_POINT * od wejścia! Próbowałem zrobić to przez EC_POINT_new, ale później nie mogłem stworzyć tajnego klucza przy pomocy EVP_KEY! – madz