Spec-Zone.ru › Ruby 2.3

модуль OpenSSL::Random

Публичные методы класса

egd(filename) → true Показать исходный код
static VALUE
ossl_rand_egd(VALUE self, VALUE filename)
{
    SafeStringValue(filename);

    if(!RAND_egd(RSTRING_PTR(filename))) {
        ossl_raise(eRandomError, NULL);
    }
    return Qtrue;
}

То же самое, что и ::egd_bytes, но по умолчанию запрашивает 255 байт.

egd_bytes(filename, length) → true Показать исходный код
static VALUE
ossl_rand_egd_bytes(VALUE self, VALUE filename, VALUE len)
{
    int n = NUM2INT(len);

    SafeStringValue(filename);

    if (!RAND_egd_bytes(RSTRING_PTR(filename), n)) {
        ossl_raise(eRandomError, NULL);
    }
    return Qtrue;
}

Обращается к демону сбора энтропии EGD по пути к сокету, указанному в filename.

Извлекает length байтов и использует ::add для инициализации встроенного генератора псевдослучайных чисел OpenSSL.

load_random_file(filename) → true Показать исходный код
static VALUE
ossl_rand_load_file(VALUE self, VALUE filename)
{
    SafeStringValue(filename);

    if(!RAND_load_file(RSTRING_PTR(filename), -1)) {
        ossl_raise(eRandomError, NULL);
    }
    return Qtrue;
}

Считывает байты из filename и добавляет их в генератор псевдослучайных чисел.

pseudo_bytes(length) → строка Показать исходный код
static VALUE
ossl_rand_pseudo_bytes(VALUE self, VALUE len)
{
    VALUE str;
    int n = NUM2INT(len);

    str = rb_str_new(0, n);
    if (!RAND_pseudo_bytes((unsigned char *)RSTRING_PTR(str), n)) {
        ossl_raise(eRandomError, NULL);
    }

    return str;
}

Генерирует string с length количеством псевдослучайных байтов.

Последовательности псевдослучайных байтов, сгенерированные методом ::pseudo_bytes, будут уникальными, если они достаточно длинные, но не обязательно непредсказуемыми.

Example:

  OpenSSL::Random.pseudo_bytes(12)
  => "..."
add(str, entropy) → self Показать исходный код
static VALUE
ossl_rand_add(VALUE self, VALUE str, VALUE entropy)
{
    StringValue(str);
    RAND_add(RSTRING_PTR(str), RSTRING_LENINT(str), NUM2DBL(entropy));

    return self;
}

Смешивает байты из str в состояние генератора псевдослучайных чисел (ГПСЧ).

Таким образом, если данные из str непредсказуемы для злоумышленника, это увеличивает неопределенность состояния и делает выходные данные ГПСЧ менее предсказуемыми.

Аргумент entropy — (нижняя граница) оценка того, сколько случайности содержится в str, измеряемая в байтах.

Example:

  pid = $$
  now = Time.now
  ary = [now.to_i, now.nsec, 1000, pid]
  OpenSSL::Random.add(ary.join("").to_s, 0.0)
  OpenSSL::Random.seed(ary.join("").to_s)
random_bytes(length) → строка Показать исходный код
static VALUE
ossl_rand_bytes(VALUE self, VALUE len)
{
    VALUE str;
    int n = NUM2INT(len);
    int ret;

    str = rb_str_new(0, n);
    ret = RAND_bytes((unsigned char *)RSTRING_PTR(str), n);
    if (ret == 0){
        char buf[256];
        ERR_error_string_n(ERR_get_error(), buf, 256);
        ossl_raise(eRandomError, "RAND_bytes error: %s", buf);
    } else if (ret == -1) {
        ossl_raise(eRandomError, "RAND_bytes is not supported");
    }

    return str;
}

Генерирует string с length количеством криптографически стойких псевдослучайных байтов.

Example:

  OpenSSL::Random.random_bytes(12)
  => "..."
seed(str) → str Показать исходный код
static VALUE
ossl_rand_seed(VALUE self, VALUE str)
{
    StringValue(str);
    RAND_seed(RSTRING_PTR(str), RSTRING_LENINT(str));

    return str;
}

::seed эквивалентно ::add, где entropy — длина str.

status? → true | false Показать исходный код
static VALUE
ossl_rand_status(VALUE self)
{
    return RAND_status() ? Qtrue : Qfalse;
}

Возвращает true, если ГПСЧ был инициализирован достаточным количеством данных, иначе false.

write_random_file(filename) → true Показать исходный код
static VALUE
ossl_rand_write_file(VALUE self, VALUE filename)
{
    SafeStringValue(filename);
    if (RAND_write_file(RSTRING_PTR(filename)) == -1) {
        ossl_raise(eRandomError, NULL);
    }
    return Qtrue;
}

Записывает количество сгенерированных случайных байтов (в настоящее время 1024) в filename, что можно использовать для инициализации ГПСЧ, вызвав ::load_random_file в последующей сессии.

Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API