module Digest::Instance
Dieses Modul stellt Instanzmethoden für ein Digest-Implementierungsobjekt zur Berechnung von Nachrichtendigestwerten bereit.
Öffentliche Instanzmethoden
Aktualisiert das Digest mit einem gegebenen string und gibt self zurück.
Die Methode update() und der Linksverschiebeoperator werden von jeder Implementierungsunterklasse überschrieben. (Eine sollte ein Alias für die andere sein)
Source
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;
}
Wenn ein String übergeben wird, wird geprüft, ob er gleich dem hex-codierten Hash-Wert des Digest-Objekts ist. Wenn eine andere Digest-Instanz übergeben wird, wird geprüft, ob sie denselben Hash-Wert haben. Andernfalls wird false zurückgegeben.
Source
# File ext/digest/lib/digest.rb, line 82 def base64digest(str = nil) [str ? digest(str) : digest].pack('m0') end
Wenn keiner übergeben wird, wird der resultierende Hash-Wert des Digests in base64-codierter Form zurückgegeben, wobei der Zustand des Digests erhalten bleibt.
Wenn ein string übergeben wird, wird der Hash-Wert für den gegebenen string in base64-codierter Form zurückgegeben, wobei das Digest vor und nach dem Prozess in den Anfangszustand zurückgesetzt wird.
In beiden Fällen ist der Rückgabewert ordnungsgemäß mit '=' aufgefüllt und enthält keine Zeilenumbrüche.
Source
# File ext/digest/lib/digest.rb, line 88 def base64digest! [digest!].pack('m0') end
Gibt den resultierenden Hash-Wert zurück und setzt das Digest in den Anfangszustand zurück.
Source
static VALUE
rb_digest_instance_block_length(VALUE self)
{
rb_digest_instance_method_unimpl(self, "block_length");
UNREACHABLE;
}
Gibt die Blocklänge des Digests zurück.
Diese Methode wird von jeder Implementierungsunterklasse überschrieben.
Source
static VALUE
rb_digest_instance_bubblebabble(VALUE self)
{
return bubblebabble_str_new(rb_funcall(self, id_digest, 0));
}
Gibt den resultierenden Hash-Wert in einer Bubblebabble-codierten Form zurück.
Source
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;
}
Wenn keiner übergeben wird, wird der resultierende Hash-Wert des Digests zurückgegeben, wobei der Zustand des Digests erhalten bleibt.
Wenn ein string übergeben wird, wird der Hash-Wert für den gegebenen string zurückgegeben, wobei das Digest vor und nach dem Prozess in den Anfangszustand zurückgesetzt wird.
Source
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;
}
Gibt den resultierenden Hash-Wert zurück und setzt das Digest in den Anfangszustand zurück.
Source
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));
}
Gibt die Länge des Hash-Werts des Digests zurück.
Diese Methode sollte von jeder Implementierungsunterklasse überschrieben werden. Wenn nicht, wird digest_obj.digest().length() zurückgegeben.
Source
# 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
Aktualisiert das Digest mit dem Inhalt einer gegebenen Datei name und gibt self zurück.
Source
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);
}
Wenn keiner übergeben wird, wird der resultierende Hash-Wert des Digests in hex-codierter Form zurückgegeben, wobei der Zustand des Digests erhalten bleibt.
Wenn ein string übergeben wird, wird der Hash-Wert für den gegebenen string in hex-codierter Form zurückgegeben, wobei das Digest vor und nach dem Prozess in den Anfangszustand zurückgesetzt wird.
Source
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);
}
Gibt den resultierenden Hash-Wert in hex-codierter Form zurück und setzt das Digest in den Anfangszustand zurück.
Source
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;
}
Erstellt eine druckbare Version des Digest-Objekts.
Source
static VALUE
rb_digest_instance_length(VALUE self)
{
return rb_funcall(self, id_digest_length, 0);
}
Gibt digest_obj.digest_length() zurück.
Source
static VALUE
rb_digest_instance_new(VALUE self)
{
VALUE clone = rb_obj_clone(self);
rb_funcall(clone, id_reset, 0);
return clone;
}
Gibt eine neue, initialisierte Kopie des Digest-Objekts zurück. Entspricht digest_obj.clone().reset().
Source
static VALUE
rb_digest_instance_reset(VALUE self)
{
rb_digest_instance_method_unimpl(self, "reset");
UNREACHABLE;
}
Setzt das Digest in den Anfangszustand zurück und gibt self zurück.
Diese Methode wird von jeder Implementierungsunterklasse überschrieben.
Source
static VALUE
rb_digest_instance_to_s(VALUE self)
{
return rb_funcall(self, id_hexdigest, 0);
}
Gibt digest_obj.hexdigest() zurück.
Source
static VALUE
rb_digest_instance_update(VALUE self, VALUE str)
{
rb_digest_instance_method_unimpl(self, "update");
UNREACHABLE;
}
Aktualisiert das Digest mit einem gegebenen string und gibt self zurück.
Die Methode update() und der Linksverschiebeoperator werden von jeder Implementierungsunterklasse überschrieben. (Eine sollte ein Alias für die andere sein)
Private Instanzmethoden
Source
static VALUE
rb_digest_instance_finish(VALUE self)
{
rb_digest_instance_method_unimpl(self, "finish");
UNREACHABLE;
}
Schließt das Digest ab und gibt den resultierenden Hash-Wert zurück.
Diese Methode wird von jeder Implementierungsunterklasse überschrieben und oft als privat gekennzeichnet, da einige dieser Unterklassen interne Daten uninitialisiert lassen können. Rufen Sie diese Methode nicht von außerhalb auf. Verwenden Sie stattdessen digest!(), um sicherzustellen, dass interne Daten aus Sicherheitsgründen zurückgesetzt werden.