Как рассчитать ключ publi c для обмена ключами TLS с использованием функций OpenSSL? - PullRequest
0 голосов
/ 12 апреля 2020

Я изучаю схему 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 al go (копирование и выделение как можно меньше)?

1 Ответ

1 голос
/ 13 апреля 2020

Создайте объект 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 */;

Затем вы можете получить публикацию c байт ключа с использованием функции EVP_PKEY_get_raw_public_key, как описано на той же странице, что и выше:

    size_t publen = sizeof(public_key);
    if (!EVP_PKEY_get_raw_public_key(key, public_key, &publen))
        /* Error */;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...