Я программирую клиента, который участвует в рукопожатии TLS 1.2, отправляя сообщения через TCP-сокет, подключенный к серверу Google. Я использую метод обмена ключами ECDH.
Я сгенерировал пару ключей клиента, используя этот код, и теперь я хочу отправить ClientKeyExchange на сервер, содержащий открытый ключ. Для этого мне сначала нужно перенести ключ, содержащийся в EVP_PKEY, в буфер. Я уже сделал обратное преобразование для серверного peerkey, но я не понял, что делать сейчас.
Мой код:
void get_buffer(EVP_PKEY * pkey, unsigned char * client_pub_key, int pkeyLen) {
EC_KEY *tempEcKey = NULL;
tempEcKey = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
if(0 == (EVP_PKEY_set1_EC_KEY(pkey, tempEcKey))){
handleErrors();
}
const EC_GROUP * group = EC_KEY_get0_group(tempEcKey);
point_conversion_form_t form = EC_GROUP_get_point_conversion_form(group);
//write in the buffer
pkeyLen = EC_KEY_key2buf(tempEcKey, form, *client_pub_key, NULL);
if(pkeyLen == 0){
handleErrors();
}
}
Код вызывает ошибку сегментации при вызове EVP_PKEY_set1_EC_KEY(pkey, tempEcKey)
.
Что я делаю не так?
Я также посмотрел на функцию EVP_PKEY_get_raw_public_key()
, но она тоже не работает. документы