U:RDoc::NormalClass[iI" Base:ETI"Digest::Base;TI"Digest::Class;To:RDoc::Markup::Document: @parts[o;;[ o:RDoc::Markup::Paragraph;[I"GThis abstract class provides a common interface to message digest ;TI")implementation classes written in C.;To:RDoc::Markup::BlankLineS:RDoc::Markup::Heading: leveli: textI"!Write a Digest subclass in C;To; ;[I"@Digest::Base provides a common interface to message digest ;TI"?classes written in C. These classes must provide a struct ;TI""of type rb_digest_metadata_t:;To:RDoc::Markup::Verbatim;[I"8typedef int (*rb_digest_hash_init_func_t)(void *); ;TI"Ttypedef void (*rb_digest_hash_update_func_t)(void *, unsigned char *, size_t); ;TI"Ktypedef int (*rb_digest_hash_finish_func_t)(void *, unsigned char *); ;TI" ;TI"typedef struct { ;TI" int api_version; ;TI" size_t digest_len; ;TI" size_t block_len; ;TI" size_t ctx_size; ;TI"- rb_digest_hash_init_func_t init_func; ;TI"1 rb_digest_hash_update_func_t update_func; ;TI"1 rb_digest_hash_finish_func_t finish_func; ;TI"} rb_digest_metadata_t; ;T: @format0o; ;[I"IThis structure must be set as an instance variable named +metadata+ ;TI"8(without the +@+ in front of the name). By example:;To;;[I"1 static const rb_digest_metadata_t sha1 = { ;TI"" RUBY_DIGEST_API_VERSION, ;TI" SHA1_DIGEST_LENGTH, ;TI" SHA1_BLOCK_LENGTH, ;TI" sizeof(SHA1_CTX), ;TI"0 (rb_digest_hash_init_func_t)SHA1_Init, ;TI"4 (rb_digest_hash_update_func_t)SHA1_Update, ;TI"4 (rb_digest_hash_finish_func_t)SHA1_Finish, ;TI"}; ;TI" ;TI"6rb_ivar_set(cDigest_SHA1, rb_intern("metadata"), ;TI"; Data_Wrap_Struct(0, 0, 0, (void *)&sha1));;T;0: @fileI"ext/digest/digest.c;T:0@omit_headings_from_table_of_contents_below0;0;0[[[[[I" class;T[[: public[[:protected[[: private[[I" instance;T[[;[ [I"<<;TI"ext/digest/digest.c;T[I"block_length;T@P[I"digest_length;T@P[I" reset;T@P[I" update;T@P[;[[;[[[U:RDoc::Context::Section[i0o;;[;0;0[I"+ext/digest/bubblebabble/bubblebabble.c;TI" Digest;TcRDoc::NormalModule