Есть ли способ установить члены непрозрачных структур в openssl v1.1.0 или выше?

Я реструктуризирую устаревший код, чтобы он был совместим с OpenSSL 1.1.1. Во время обновления OpenSSL с 1.0.2 до 1.1.1 серверные структуры стали непрозрачными, и прямой доступ к участникам больше невозможен.

У меня есть требование установить для buf_len EVP_CIPHER_CTX значение 0. Есть ли способ добиться этого?

EVP_CIPHER_CTX* p_ctx;
p_ctx = EVP_CIPHER_CTX_new();
...

p_ctx->buf_len = 0;

person Kethiri Sundar    schedule 16.04.2021    source источник


Ответы (1)


Я сделал это с помощью самого грязного взлома на С++.

int buf_len = 0;

//Offset of buf_len in EVP_CIPHER_CTX is 20
int* buf_len_pointer = (int*)((char*)p_ctx + 20); 

memcpy(buf_len_pointer,&buf_len ,sizeof(buf_len));
person Kethiri Sundar    schedule 16.04.2021