Spec-Zone.ru › Ruby 3.4

модуль Digest::Instance

Этот модуль предоставляет методы экземпляра для объекта реализации дайджеста, чтобы вычислять значения дайджеста сообщений.

Методы экземпляра публичного интерфейса

digest_obj << строка → digest_obj

Обновляет дайджест с помощью заданной строки и возвращает self.

Метод update() и оператор левого сдвига переопределяются каждым подклассом реализации. (Один должен быть алиасом для другого)

Псевдоним для: update
digest_obj == another_digest_obj → boolean
digest_obj == строка → boolean
Исходный код
static VALUE
rb_digest_instance_equal(VALUE self, VALUE other)
{
    VALUE str1, str2;

    if (rb_obj_is_kind_of(other, rb_mDigest_Instance) == Qtrue) {
        str1 = rb_digest_instance_digest(0, 0, self);
        str2 = rb_digest_instance_digest(0, 0, other);
    } else {
        str1 = rb_digest_instance_to_s(self);
        str2 = rb_check_string_type(other);
        if (NIL_P(str2)) return Qfalse;
    }

    /* never blindly assume that subclass methods return strings */
    StringValue(str1);
    StringValue(str2);

    if (RSTRING_LEN(str1) == RSTRING_LEN(str2) &&
        rb_str_cmp(str1, str2) == 0) {
        return Qtrue;
    }
    return Qfalse;
}

Если задана строка, проверяет, равна ли она значению хэш-кода в шестнадцатеричном формате объекта дайджеста. Если задан другой экземпляр дайджеста, проверяет, имеют ли они одинаковое значение хэш-кода. В противном случае возвращает false.

base64digest (str = nil)
Исходный код
# File ext/digest/lib/digest.rb, line 82
def base64digest(str = nil)
  [str ? digest(str) : digest].pack('m0')
end

Если не задано, возвращает результирующее значение хэш-кода дайджеста в кодировке base64, сохраняя состояние дайджеста.

Если задан string, возвращает значение хэш-кода для заданного string в кодировке base64, сбрасывая состояние дайджеста до начального состояния до и после процесса.

В любом случае возвращаемое значение должным образом дополняется ‘=’ и не содержит символов новой строки.

base64digest! ()
Исходный код
# File ext/digest/lib/digest.rb, line 88
def base64digest!
  [digest!].pack('m0')
end

Возвращает результирующее значение хэш-кода и сбрасывает состояние дайджеста до начального состояния.

block_length → целое
Исходный код
static VALUE
rb_digest_instance_block_length(VALUE self)
{
    rb_digest_instance_method_unimpl(self, "block_length");

    UNREACHABLE;
}

Возвращает длину блока дайджеста.

Этот метод переопределяется каждым подклассом реализации.

bubblebabble → строка_хэш
Исходный код
static VALUE
rb_digest_instance_bubblebabble(VALUE self)
{
    return bubblebabble_str_new(rb_funcall(self, id_digest, 0));
}

Возвращает результирующее значение хэш-кода в кодировке Bubblebabble.

digest → строка
digest(строка) → строка
Исходный код
static VALUE
rb_digest_instance_digest(int argc, VALUE *argv, VALUE self)
{
    VALUE str, value;

    if (rb_scan_args(argc, argv, "01", &str) > 0) {
        rb_funcall(self, id_reset, 0);
        rb_funcall(self, id_update, 1, str);
        value = rb_funcall(self, id_finish, 0);
        rb_funcall(self, id_reset, 0);
    } else {
        value = rb_funcall(rb_obj_clone(self), id_finish, 0);
    }

    return value;
}

Если не задано, возвращает результирующее значение хэш-кода дайджеста, сохраняя состояние дайджеста.

Если задана строка, возвращает значение хэш-кода для данной строки, сбрасывая состояние дайджеста до начального состояния до и после процесса.

digest! → строка
Исходный код
static VALUE
rb_digest_instance_digest_bang(VALUE self)
{
    VALUE value = rb_funcall(self, id_finish, 0);
    rb_funcall(self, id_reset, 0);

    return value;
}

Возвращает результирующее значение хэш-кода и сбрасывает состояние дайджеста до начального состояния.

digest_length → целое
Исходный код
static VALUE
rb_digest_instance_digest_length(VALUE self)
{
    /* subclasses really should redefine this method */
    VALUE digest = rb_digest_instance_digest(0, 0, self);

    /* never blindly assume that #digest() returns a string */
    StringValue(digest);
    return LONG2NUM(RSTRING_LEN(digest));
}

Возвращает длину значения хэш-кода дайджеста.

Этот метод должен быть переопределен каждым подклассом реализации. Если нет, возвращается digest_obj.digest().length().

file (имя)
Исходный код
# File ext/digest/lib/digest.rb, line 63
def file(name)
  File.open(name, "rb") {|f|
    buf = ""
    while f.read(16384, buf)
      update buf
    end
  }
  self
end

Обновляет дайджест с содержимым заданного файла имя и возвращает self.

hexdigest → строка
hexdigest(строка) → строка
Исходный код
static VALUE
rb_digest_instance_hexdigest(int argc, VALUE *argv, VALUE self)
{
    VALUE str, value;

    if (rb_scan_args(argc, argv, "01", &str) > 0) {
        rb_funcall(self, id_reset, 0);
        rb_funcall(self, id_update, 1, str);
        value = rb_funcall(self, id_finish, 0);
        rb_funcall(self, id_reset, 0);
    } else {
        value = rb_funcall(rb_obj_clone(self), id_finish, 0);
    }

    return hexencode_str_new(value);
}

Если не задано, возвращает результирующее значение хэш-кода дайджеста в шестнадцатеричном формате, сохраняя состояние дайджеста.

Если задана строка, возвращает значение хэш-кода для данной строки в шестнадцатеричном формате, сбрасывая состояние дайджеста до начального состояния до и после процесса.

hexdigest! → строка
Исходный код
static VALUE
rb_digest_instance_hexdigest_bang(VALUE self)
{
    VALUE value = rb_funcall(self, id_finish, 0);
    rb_funcall(self, id_reset, 0);

    return hexencode_str_new(value);
}

Возвращает результирующее значение хэш-кода в шестнадцатеричном формате и сбрасывает состояние дайджеста до начального состояния.

inspect → строка
Исходный код
static VALUE
rb_digest_instance_inspect(VALUE self)
{
    VALUE str;
    size_t digest_len = 32;     /* about this size at least */
    const char *cname;

    cname = rb_obj_classname(self);

    /* #<Digest::ClassName: xxxxx...xxxx> */
    str = rb_str_buf_new(2 + strlen(cname) + 2 + digest_len * 2 + 1);
    rb_str_buf_cat2(str, "#<");
    rb_str_buf_cat2(str, cname);
    rb_str_buf_cat2(str, ": ");
    rb_str_buf_append(str, rb_digest_instance_hexdigest(0, 0, self));
    rb_str_buf_cat2(str, ">");
    return str;
}

Создаёт печатную версию объекта дайджеста.

length → целое
Исходный код
static VALUE
rb_digest_instance_length(VALUE self)
{
    return rb_funcall(self, id_digest_length, 0);
}

Возвращает digest_obj.digest_length().

Также является алиасом для: size
new → another_digest_obj
Исходный код
static VALUE
rb_digest_instance_new(VALUE self)
{
    VALUE clone = rb_obj_clone(self);
    rb_funcall(clone, id_reset, 0);
    return clone;
}

Возвращает новую, инициализированную копию объекта дайджеста. Эквивалентно digest_obj.clone().reset().

reset → digest_obj
Исходный код
static VALUE
rb_digest_instance_reset(VALUE self)
{
    rb_digest_instance_method_unimpl(self, "reset");

    UNREACHABLE;
}

Сбрасывает дайджест до начального состояния и возвращает self.

Этот метод переопределяется каждым подклассом реализации.

size → целое

Возвращает digest_obj.digest_length().

Псевдоним для: length
to_s → строка
Исходный код
static VALUE
rb_digest_instance_to_s(VALUE self)
{
    return rb_funcall(self, id_hexdigest, 0);
}

Возвращает digest_obj.hexdigest().

update(строка) → digest_obj
Исходный код
static VALUE
rb_digest_instance_update(VALUE self, VALUE str)
{
    rb_digest_instance_method_unimpl(self, "update");

    UNREACHABLE;
}

Обновляет дайджест, используя заданную строку, и возвращает self.

Метод update() и оператор левого сдвига переопределяются каждым подклассом реализации. (Один должен быть алиасом для другого)

Также алиас: <<

Приватные методы экземпляра

instance_eval { finish } → digest_obj
Исходный код
static VALUE
rb_digest_instance_finish(VALUE self)
{
    rb_digest_instance_method_unimpl(self, "finish");

    UNREACHABLE;
}

Завершает дайджест и возвращает полученное значение хеша.

Этот метод переопределяется каждым подклассом реализации и часто делается приватным, потому что некоторые из этих подклассов могут оставлять внутренние данные неинициализированными. Не вызывайте этот метод извне. Используйте digest!() вместо этого, что гарантирует сброс внутренних данных по соображениям безопасности.

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

Spec-Zone.ru

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