OpenSSL обнуляет существующий выделенный массив - PullRequest
0 голосов
/ 27 января 2019

У меня есть существующий динамически распределенный массив, например:

unsigned char *c =NULL
for(int i=0; i<10;i++){
  //receiveKeySizeFromNetwork receives a key size from the network
  int key_size = receiveKeySizeFromNetwork(); 
  unsigned char *c = OPENSSL_realloc(c, key_zise*sizeof(unsigned char));
  receiveKeyFromTheNetwork(c, key_size);
  //Further logic
}

И я использую c в качестве временного массива для получения от нескольких хостов их ключей.Как я уже видел в OPENSSL v1.1.0, есть функция OPENSSL_clear_realloc, которая безопасно обрабатывает перераспределение памяти, которого в моей установленной системе OPENSSL не существует.

Таким образом, я решил использовать существующие функции OPENSSL и выполнить собственное безопасное перераспределение памяти.Поэтому я хочу спросить:

  1. Хорошая идея сделать это?
  2. Как обнулить существующий буфер unsigned char, используя поставляемые OPENSSL v1.0.2 библиотеки.

1 Ответ

0 голосов
/ 27 января 2019

Я не знаю для 1., но для 2. вы можете использовать функцию OPENSSL_cleanse, определенную как:

 void OPENSSL_cleanse(void *ptr, size_t len);

И то же самое в v1.0.2 и в v1.1.0 OPENSSL.В моем случае, используя OPENSSL v1.0.2, я делаю свою собственную функцию безопасного выделения, приспособленную для обработки массивов размером в байты:

unsigned char* safeRealloc(unsigned char *value, int oldsize, int newsize){
  if(oldsize < 0 || newsize <= 0) {
    safeFree(value);
    return NULL;
  }

  if(oldsize > 0 ) OPENSSL_cleanse(value,oldsize);
  return OPENSSL_realloc((void *)value,newsize);
}
...