Module: Digest::Instance (Ruby 2.2.3)
Description: Module : Digest::Instance - Ruby 2.2.3

- Home
- Core 2.2.3
- Std-lib 2.2.3
- Downloads

Support for the Ruby 2.2 series has ended. See here for reference.

### Home Classes Methods

### In Files

- digest/bubblebabble/bubblebabble.c
- digest/lib/digest.rb

### Methods

- #<<
- #==
- #base64digest
- #base64digest!
- #block_length
- #bubblebabble
- #digest
- #digest!
- #digest_length
- #file
- #hexdigest
- #hexdigest!
- #inspect
- #length
- #new
- #reset
- #size
- #to_s
- #update

### Class/Module Index

Quicksearch

- Digest
- Digest::Base
- Digest::Class
- Digest::Instance
- Digest::MD5
- Digest::RMD160
- Digest::SHA1
- Digest::SHA2
- Object

No matching classes.

# Digest::Instance

This module provides instance methods for a digest implementation object to calculate message digest values.

### Public Instance Methods

digest_obj << string → digest_obj click to toggle source

Updates the digest using a given string and returns self.

The update() method and the left-shift operator are overridden by each implementation subclass. (One should be an alias for the other)

                   static VALUE
    rb_digest_instance_update(VALUE self, VALUE str)
    {
        rb_digest_instance_method_unimpl(self, "update");

        UNREACHABLE;
    }

digest_obj == another_digest_obj → boolean click to toggle source
digest_obj == string → boolean

If a string is given, checks whether it is equal to the hex-encoded hash value of the digest object. If another digest instance is given, checks whether they have the same hash value. Otherwise returns false.

                   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;
    }

base64digest(str = nil) click to toggle source

If none is given, returns the resulting hash value of the digest in a base64 encoded form, keeping the digest's state.

If a `string` is given, returns the hash value for the given `string` in a base64 encoded form, resetting the digest to the initial state before and after the process.

In either case, the return value is properly padded with '=' and contains no line feeds.

                   # File digest/lib/digest.rb, line 67
    def base64digest(str = nil)
      [str ? digest(str) : digest].pack('m0')
    end

base64digest!() click to toggle source

Returns the resulting hash value and resets the digest to the initial state.

                   # File digest/lib/digest.rb, line 73
    def base64digest!
      [digest!].pack('m0')
    end

block_length → integer click to toggle source

Returns the block length of the digest.

This method is overridden by each implementation subclass.

                   static VALUE
    rb_digest_instance_block_length(VALUE self)
    {
        rb_digest_instance_method_unimpl(self, "block_length");

        UNREACHABLE;
    }

bubblebabble → hash_string click to toggle source

Returns the resulting hash value in a Bubblebabble encoded form.

                   static VALUE
    rb_digest_instance_bubblebabble(VALUE self)
    {
        return bubblebabble_str_new(rb_funcall(self, id_digest, 0));
    }

digest → string click to toggle source
digest(string) → string

If none is given, returns the resulting hash value of the digest, keeping the digest's state.

If a string is given, returns the hash value for the given string, resetting the digest to the initial state before and after the process.

                   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 click to toggle source

Returns the resulting hash value and resets the digest to the initial state.

                   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 click to toggle source

Returns the length of the hash value of the digest.

This method should be overridden by each implementation subclass. If not, digest_obj.digest().length() is returned.

                   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 INT2NUM(RSTRING_LEN(digest));
    }

file(name) click to toggle source

Updates the digest with the contents of a given file name and returns self.

                   # File digest/lib/digest.rb, line 48
    def file(name)
      File.open(name, "rb") {|f|
        buf = ""
        while f.read(16384, buf)
          update buf
        end
      }
      self
    end

hexdigest → string click to toggle source
hexdigest(string) → string

If none is given, returns the resulting hash value of the digest in a hex-encoded form, keeping the digest's state.

If a string is given, returns the hash value for the given string in a hex-encoded form, resetting the digest to the initial state before and after the process.

                   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 click to toggle source

Returns the resulting hash value in a hex-encoded form and resets the digest to the initial state.

                   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 click to toggle source

Creates a printable version of the digest object.

                   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 click to toggle source

Returns digest_obj.digest_length().

                   static VALUE
    rb_digest_instance_length(VALUE self)
    {
        return rb_funcall(self, id_digest_length, 0);
    }

new → another_digest_obj click to toggle source

Returns a new, initialized copy of the digest object. Equivalent to digest_obj.clone().reset().

                   static VALUE
    rb_digest_instance_new(VALUE self)
    {
        VALUE clone = rb_obj_clone(self);
        rb_funcall(clone, id_reset, 0);
        return clone;
    }

reset → digest_obj click to toggle source

Resets the digest to the initial state and returns self.

This method is overridden by each implementation subclass.

                   static VALUE
    rb_digest_instance_reset(VALUE self)
    {
        rb_digest_instance_method_unimpl(self, "reset");

        UNREACHABLE;
    }

size → integer click to toggle source

Returns digest_obj.digest_length().

                   static VALUE
    rb_digest_instance_length(VALUE self)
    {
        return rb_funcall(self, id_digest_length, 0);
    }

to_s → string click to toggle source

Returns digest_obj.hexdigest().

                   static VALUE
    rb_digest_instance_to_s(VALUE self)
    {
        return rb_funcall(self, id_hexdigest, 0);
    }

update(string) → digest_obj click to toggle source

Updates the digest using a given string and returns self.

The update() method and the left-shift operator are overridden by each implementation subclass. (One should be an alias for the other)

                   static VALUE
    rb_digest_instance_update(VALUE self, VALUE str)
    {
        rb_digest_instance_method_unimpl(self, "update");

        UNREACHABLE;
    }