18static VALUE rb_mDigest;
19static VALUE rb_mDigest_Instance;
20static VALUE rb_cDigest_Class;
21static VALUE rb_cDigest_Base;
23static ID id_reset, id_update, id_finish, id_digest, id_hexdigest, id_digest_length;
98hexencode_str_new(
VALUE str_digest)
105 static const char hex[] = {
106 '0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
107 'a',
'b',
'c',
'd',
'e',
'f'
121 unsigned char byte = digest[
i];
123 p[
i +
i] = hex[
byte >> 4];
124 p[
i +
i + 1] = hex[
byte & 0x0f];
141 return hexencode_str_new(
str);
144NORETURN(
static void rb_digest_instance_method_unimpl(
VALUE self,
const char *method));
154rb_digest_instance_method_unimpl(
VALUE self,
const char *method)
174 rb_digest_instance_method_unimpl(
self,
"update");
192rb_digest_instance_finish(
VALUE self)
194 rb_digest_instance_method_unimpl(
self,
"finish");
208rb_digest_instance_reset(
VALUE self)
210 rb_digest_instance_method_unimpl(
self,
"reset");
223rb_digest_instance_new(
VALUE self)
267rb_digest_instance_digest_bang(
VALUE self)
301 return hexencode_str_new(value);
312rb_digest_instance_hexdigest_bang(
VALUE self)
317 return hexencode_str_new(value);
327rb_digest_instance_to_s(
VALUE self)
339rb_digest_instance_inspect(
VALUE self)
342 size_t digest_len = 32;
368rb_digest_instance_equal(
VALUE self,
VALUE other)
373 str1 = rb_digest_instance_digest(0, 0,
self);
374 str2 = rb_digest_instance_digest(0, 0, other);
376 str1 = rb_digest_instance_to_s(
self);
402rb_digest_instance_digest_length(
VALUE self)
405 VALUE digest = rb_digest_instance_digest(0, 0,
self);
420rb_digest_instance_length(
VALUE self)
434rb_digest_instance_block_length(
VALUE self)
436 rb_digest_instance_method_unimpl(
self,
"block_length");
494rb_digest_class_init(
VALUE self)
567#undef RUBY_UNTYPED_DATA_WARNING
568#define RUBY_UNTYPED_DATA_WARNING 0
571 if (!algo)
goto wrong;
616 if (
klass == rb_cDigest_Base) {
620 algo = get_digest_base_metadata(
klass);
624 algo_init(algo, pctx);
636 if (copy ==
obj)
return copy;
640 algo = get_digest_obj_metadata(copy);
641 if (algo != get_digest_obj_metadata(
obj))
657rb_digest_base_reset(
VALUE self)
662 algo = get_digest_obj_metadata(
self);
666 algo_init(algo, pctx);
684 algo = get_digest_obj_metadata(
self);
697rb_digest_base_finish(
VALUE self)
703 algo = get_digest_obj_metadata(
self);
711 algo_init(algo, pctx);
722rb_digest_base_digest_length(
VALUE self)
726 algo = get_digest_obj_metadata(
self);
737rb_digest_base_block_length(
VALUE self)
741 algo = get_digest_obj_metadata(
self);
755 id_digest_length =
rb_intern(
"digest_length");
756 id_metadata = rb_id_metadata();
777 rb_define_method(rb_mDigest_Instance,
"update", rb_digest_instance_update, 1);
780 rb_define_method(rb_mDigest_Instance,
"reset", rb_digest_instance_reset, 0);
781 rb_define_method(rb_mDigest_Instance,
"digest_length", rb_digest_instance_digest_length, 0);
782 rb_define_method(rb_mDigest_Instance,
"block_length", rb_digest_instance_block_length, 0);
786 rb_define_method(rb_mDigest_Instance,
"inspect", rb_digest_instance_inspect, 0);
790 rb_define_method(rb_mDigest_Instance,
"digest", rb_digest_instance_digest, -1);
791 rb_define_method(rb_mDigest_Instance,
"digest!", rb_digest_instance_digest_bang, 0);
792 rb_define_method(rb_mDigest_Instance,
"hexdigest", rb_digest_instance_hexdigest, -1);
793 rb_define_method(rb_mDigest_Instance,
"hexdigest!", rb_digest_instance_hexdigest_bang, 0);
795 rb_define_method(rb_mDigest_Instance,
"length", rb_digest_instance_length, 0);
796 rb_define_method(rb_mDigest_Instance,
"size", rb_digest_instance_length, 0);
814 rb_define_method(rb_cDigest_Base,
"initialize_copy", rb_digest_base_copy, 1);
819 rb_define_method(rb_cDigest_Base,
"digest_length", rb_digest_base_digest_length, 0);
820 rb_define_method(rb_cDigest_Base,
"block_length", rb_digest_base_block_length, 0);
RUBY_EXTERN void Init_digest_base(void)
NORETURN(static void rb_digest_instance_method_unimpl(VALUE self, const char *method))
char str[HTML_ESCAPE_MAX_LEN+1]
void rb_include_module(VALUE, VALUE)
VALUE rb_define_class_under(VALUE, const char *, VALUE)
Defines a class under the namespace of outer.
VALUE rb_define_module(const char *)
VALUE rb_define_module_under(VALUE, const char *)
VALUE rb_cObject
Object class.
void rb_raise(VALUE exc, const char *fmt,...)
VALUE rb_class_superclass(VALUE)
Returns the superclass of klass.
void rb_obj_call_init(VALUE, int, const VALUE *)
Calls #initialize method of obj with the given arguments.
VALUE rb_obj_alloc(VALUE)
Allocates an instance of klass.
VALUE rb_obj_class(VALUE)
Equivalent to Object#class in Ruby.
VALUE rb_obj_clone(VALUE)
Almost same as Object::clone.
VALUE rb_obj_is_kind_of(VALUE, VALUE)
Determines if obj is a kind of c.
VALUE rb_data_typed_object_zalloc(VALUE klass, size_t size, const rb_data_type_t *type)