Spec-Zone.ru › Ruby 4.0
  1. Digest::
  2. Instance

module Digest::Instance

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

Открытые методы экземпляра

digest_obj << string → digest_obj

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

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

Псевдоним для: update
digest_obj == another_digest_obj → boolean Показать исходный код
digest_obj == string → 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 → integer Показать исходный код
static VALUE
rb_digest_instance_block_length(VALUE self)
{
    rb_digest_instance_method_unimpl(self, "block_length");

    UNREACHABLE;
}

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

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

bubblebabble → hash_string Показать исходный код
static VALUE
rb_digest_instance_bubblebabble(VALUE self)
{
    return bubblebabble_str_new(rb_funcall(self, id_digest, 0));
}

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

digest → string Показать исходный код
digest(string) → string
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! → string Показать исходный код
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 → integer Показать исходный код
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 (name) Показать исходный код
# 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

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

hexdigest → string Показать исходный код
hexdigest(string) → string
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! → string Показать исходный код
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 → string Показать исходный код
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 → integer Показать исходный код
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 → integer

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

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

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

update(string) → 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–2025 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

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