Как рассчитать открытый ключ для обмена ключами TLS с использованием функций OpenSSL?
Я изучаю схему TLS 1.3 и пытаюсь реализовать основные шаги рукопожатия на C++ без использования готовых оболочек из OpenSSL, таких как SSL_accept
или SSL_do_handshake
. В проекте уже используется OpenSSL для обычных криптографических операций, поэтому я бы не хотел связывать его с любыми другими крипто-библиотеками, где расчет x25519 более очевиден, чем в OpenSSL. Так...
есть два буфера:
unsigned char private_key[32];
RAND_bytes(private_key, 32);
unsigned char public_key[32];
memset(public_key, 0, 32);
Какие методы OpenSSL мне следует использовать для заполнения public_key
буфер с байтами, вычисленными из private_key
используя алгоритм x25519 (копирование и выделение как можно меньше)?
1 ответ
Создать EVP_PKEY
объект с помощью функции EVP_PKEY_new_raw_private_key
как описано здесь:
https://www.openssl.org/docs/man1.1.1/man3/EVP_PKEY_new_raw_private_key.html
EVP_PKEY key = EVP_PKEY_new_raw_private_key(EVP_PKEY_X25519, NULL, private_key, sizeof(private_key));
if (key == NULL)
/* Error */;
Затем вы можете получить байты открытого ключа с помощью функции EVP_PKEY_get_raw_public_key
как описано на той же странице, что и выше:
size_t publen = sizeof(public_key);
if (!EVP_PKEY_get_raw_public_key(key, public_key, &publen))
/* Error */;