Я не знаю для 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);
}