Да, это возможно с OpenSSL. OpenSSL предоставляет возможность переопределить источник случайных чисел по умолчанию. Для этого используйте функцию RAND_set_rand_method()
, описанную здесь:
https://www.openssl.org/docs/man1.1.0/crypto/RAND_set_rand_method.html
Эта функция принимает в качестве аргумента структуру RAND_METHOD
, которая содержит указатели на функции для реализации случайных возможностей OpenSSL. Замените элемент bytes
собственной реализацией.
Например
RAND_METHOD myrand, *oldrand;
oldrand = RAND_get_rand_method();
myrand = *oldrand;
myrand.bytes = mybytes;
RAND_set_rand_method(myrand);
Где mybytes
определяется так:
static int mybytes(unsigned char *buf, int num)
{
/* Replace with however you want the random function to work */
memset(buf, 0, num);
return 1;
}
Собственный экдестат-код OpenSSL делает именно это. Например, см .:
https://github.com/openssl/openssl/blob/OpenSSL_1_1_0-stable/test/ecdsatest.c#L65