Class: Digest::Base
Overview
This abstract class provides a common interface to message digest implementation classes written in C.
Instance Method Summary collapse
-
#<< ⇒ Object
:nodoc:.
-
#block_length ⇒ Object
:nodoc:.
-
#digest_length ⇒ Object
:nodoc:.
-
#finish ⇒ Object
:nodoc:.
-
#initialize_copy ⇒ Object
:nodoc:.
-
#reset ⇒ Object
:nodoc:.
-
#update ⇒ Object
:nodoc:.
Methods inherited from Class
Methods included from Instance
#==, #digest, #digest!, #file, #hexdigest, #hexdigest!, #inspect, #length, #new, #size, #to_s
Instance Method Details
#<< ⇒ Object
:nodoc:
|
# File 'digest.c'
/* :nodoc: */
static VALUE
rb_digest_base_update(VALUE self, VALUE str)
{
rb_digest_metadata_t *algo;
void *pctx;
algo = get_digest_base_metadata(rb_obj_class(self));
Data_Get_Struct(self, void, pctx);
StringValue(str);
algo->update_func(pctx, (unsigned char *)RSTRING_PTR(str), RSTRING_LEN(str));
return self;
}
|
#block_length ⇒ Object
:nodoc:
|
# File 'digest.c'
/* :nodoc: */
static VALUE
rb_digest_base_block_length(VALUE self)
{
rb_digest_metadata_t *algo;
algo = get_digest_base_metadata(rb_obj_class(self));
return INT2NUM(algo->block_len);
}
|
#digest_length ⇒ Object
:nodoc:
|
# File 'digest.c'
/* :nodoc: */
static VALUE
rb_digest_base_digest_length(VALUE self)
{
rb_digest_metadata_t *algo;
algo = get_digest_base_metadata(rb_obj_class(self));
return INT2NUM(algo->digest_len);
}
|
#finish ⇒ Object
:nodoc:
|
# File 'digest.c'
/* :nodoc: */
static VALUE
rb_digest_base_finish(VALUE self)
{
rb_digest_metadata_t *algo;
void *pctx;
VALUE str;
algo = get_digest_base_metadata(rb_obj_class(self));
Data_Get_Struct(self, void, pctx);
str = rb_str_new(0, algo->digest_len);
algo->finish_func(pctx, (unsigned char *)RSTRING_PTR(str));
/* avoid potential coredump caused by use of a finished context */
algo->init_func(pctx);
return str;
}
|
#initialize_copy ⇒ Object
:nodoc:
|
# File 'digest.c'
/* :nodoc: */
static VALUE
rb_digest_base_copy(VALUE copy, VALUE obj)
{
rb_digest_metadata_t *algo;
void *pctx1, *pctx2;
if (copy == obj) return copy;
rb_check_frozen(copy);
algo = get_digest_base_metadata(rb_obj_class(copy));
Data_Get_Struct(obj, void, pctx1);
Data_Get_Struct(copy, void, pctx2);
memcpy(pctx2, pctx1, algo->ctx_size);
return copy;
}
|
#reset ⇒ Object
:nodoc:
|
# File 'digest.c'
/* :nodoc: */
static VALUE
rb_digest_base_reset(VALUE self)
{
rb_digest_metadata_t *algo;
void *pctx;
algo = get_digest_base_metadata(rb_obj_class(self));
Data_Get_Struct(self, void, pctx);
algo->init_func(pctx);
return self;
}
|
#update ⇒ Object
:nodoc:
|
# File 'digest.c'
/* :nodoc: */
static VALUE
rb_digest_base_update(VALUE self, VALUE str)
{
rb_digest_metadata_t *algo;
void *pctx;
algo = get_digest_base_metadata(rb_obj_class(self));
Data_Get_Struct(self, void, pctx);
StringValue(str);
algo->update_func(pctx, (unsigned char *)RSTRING_PTR(str), RSTRING_LEN(str));
return self;
}
|