sha1.so000075500000035070147207446220005763 0ustar00ELF>@1@8@"! ( ( ( 08  00$$PtdH H H $$QtdRtd( ( ( GNU5m';yE;ݘ @)|CEDVqX a  8 R"u_` LX  bSX    __gmon_start___init_fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_Jv_RegisterClassesSHA1_FinalInit_sha1rb_requirerb_path2classrb_define_class_underrb_data_object_wraprb_iv_setSHA1_InitSHA1_Updatelibruby.so.2.4libcrypto.so.1.0.0libpthread.so.0libdl.so.2libcrypt.so.1libm.so.6libc.so.6_edata__bss_start_end/opt/cpanel/ea-openssl/lib64:/opt/cpanel/ea-ruby24/root/usr/lib64GLIBC_2.2.5B ui PF( ` 0  @ @            ( 0 8  @  H  P  HH HtCH5 % @% h% h% h% h% h% h% h% hpH H= UH)HHw]H Ht]@Hq H=j UH)HHHH?HHu]H Ht]H@=1 u'H= UHt H= -h] @f.H= t&H_ HtUH= H]WKf.HHHfSH=eH=`H=[HH5YHHvH5o H1111HH54H[.HHdigestDigestDigest::BaseSHA1metadata;$@XhhzRx $FJ w?;*3$"D\bA\` @ @` *8Bd   ( 0 o0   80 oooo 6FVfvGCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-44), r E r>8jlintZiui5sb ( 0  8 x@ H sP X ; U` 7 [h  bp bt px F T a q &{ / 0 1 2 3- 5b 7w wUaU[!b$ q    bUU8x]D7c   )  FR9"!>L+D^j*&  LT* j xES /g,;JY hwx   rqYs7 b =NTii-?zbi8b --- 2 C(o0^ R`dnh0eMh1eMh2eMh3eM h4eMNlfMNhfMgnnumhM\ M~ /i!b ctxptriL sUTTU}4 b6G66 NU   mU $  U +  UsT 8  U0T ` Q0R0  T = x `  [ [ ^ e g 9m x e{!{bi~"F" ""k &&#=% : ; I$ > $ >   I : ;  : ; I8 : ;I8 : ; I !I/ &I'II : ;(  : ;': ;I : ;  : ; I8 .: ; 'I@B: ; IB1B.?: ; '@B4: ; I14: ; I4: ; I?< 4: ;I?<!.?: ; 'I<".?: ;'I<#.?: ;'I<C /usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/usr/include/bits/usr/include../../.././include/ruby../opt/cpanel/ea-openssl/include/opensslsha1ossl.hsha1init.cstddef.htypes.hlibio.hruby.hdigest.hsha.hstdio.hintern.h  ##s=Z$p@v__off_tupdate_func_IO_read_ptrrb_digest_SHA1_finish_chainsize_t/home/abuild/rpmbuild/BUILD/ruby-2.4.10/ext/digest/sha1Init_sha1_shortbufrb_path2classRUBY_T_RATIONALROBJECT_EMBEDRSTRING_FSTRrb_cFloatruby_value_typeRUBY_T_NONElong long unsigned intRUBY_FL_PROMOTED0RUBY_FL_FINALIZERUBY_FL_EXIVARrb_cNilClassRUBY_T_COMPLEXlong long intRUBY_T_STRINGROBJECT_EMBED_LEN_MAX_filenorb_cFalseClassRUBY_FL_UNTRUSTED_IO_read_end_flagsrb_cIntegerRUBY_FL_USER18_cur_columnshort intRUBY_FL_FREEZEdouble_old_offsetblock_lenRUBY_T_SYMBOLSHA_CTXRARRAY_EMBED_LEN_MAXRUBY_T_UNDEFROBJECT_ENUM_ENDruby_fl_type_IO_markerstdinrb_digest_hash_finish_func_trb_cSymbolrb_define_class_under_IO_write_ptrRUBY_T_FILE_sbufdatarb_digest_hash_init_func_t_IO_FILE_IO_save_baseRUBY_FL_USER10RUBY_FL_USER11RUBY_FL_USER12RUBY_FL_USER13RUBY_FL_USER14RUBY_FL_USER15RUBY_FL_USER16RUBY_FL_USER17mDigestRUBY_FL_USER19RUBY_T_ARRAY_lockrb_digest_hash_update_func_t_flags2_modeapi_versionstdoutRARRAY_EMBED_LEN_MASKsha1init.cSHA1_FinalRUBY_T_DATAsizetypeRUBY_T_FIXNUMRUBY_FL_PROMOTED1rb_digest_metadata_tRSTRING_EMBED_LEN_MAX_IO_write_endRUBY_FL_USHIFT_IO_lock_tRUBY_T_STRUCTrb_requireRUBY_T_REGEXPfinish_funcRSTRING_EMBED_LEN_SHIFTRUBY_T_BIGNUMRUBY_ELTS_SHAREDfloat_posRUBY_FL_WB_PROTECTED_markersRUBY_T_ZOMBIESHAstate_stRUBY_T_MASKunsigned char_IO_buf_endRSTRING_EMBED_LEN_MASKRSTRING_NOEMBEDRUBY_FL_SINGLETONRUBY_DATA_FUNC_vtable_offsetrb_data_object_wrapctx_sizeRSTRING_ENUM_ENDinit_funcRUBY_T_MATCHdigest_lenRUBY_T_NODERUBY_T_FLOATRUBY_T_MODULERUBY_T_NILRUBY_T_CLASSRUBY_FL_USER0RUBY_FL_USER1RUBY_FL_USER2RUBY_FL_USER3GNU C 4.8.5 20150623 (Red Hat 4.8.5-44) -mtune=generic -m64 -march=x86-64 -g -O2 -fexceptions -fstack-protector-strong -fPIC --param ssp-buffer-size=4RUBY_T_TRUERUBY_FL_USER6RUBY_FL_USER7_nextRUBY_FL_USER9__off64_tRARRAY_EMBED_FLAG_IO_read_base_IO_save_endRUBY_T_ICLASSshort unsigned int__pad1__pad2__pad3__pad4__pad5cDigest_SHA1RUBY_FL_USER4_unused2RUBY_FL_USER5RUBY_T_FALSERUBY_FL_USER8rb_iv_setcDigest_BaseRUBY_FL_PROMOTEDrb_cTrueClass_IO_backup_baseRUBY_FL_DUPPEDRARRAY_EMBED_LEN_SHIFTVALUERUBY_T_OBJECTRUBY_T_IMEMORUBY_T_HASHRARRAY_ENUM_ENDRUBY_FL_TAINT_IO_write_base_IO_buf_baseU P U T U T37P7TS8IPT^P^mSmqU008       H p ( 0 8 @    X  8   . DX S0 z ` (  ` 8 8 H  X @ " +K_i x      b"#ALX X` ]X dr crtstuff.c__JCR_LIST__deregister_tm_clones__do_global_dtors_auxcompleted.6355__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entrysha1init.crb_digest_SHA1_finish__FRAME_END____JCR_END____GNU_EH_FRAME_HDR_GLOBAL_OFFSET_TABLE___TMC_END____dso_handle_DYNAMICSHA1_Update@@libcrypto.so.1.0.0rb_data_object_wraprb_iv_set__gmon_start___Jv_RegisterClassesrb_define_class_under_fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTableInit_sha1__cxa_finalize@@GLIBC_2.2.5SHA1_Final@@libcrypto.so.1.0.0SHA1_Init@@libcrypto.so.1.0.0rb_require__bss_start_end_edatarb_path2class_init.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.jcr.data.rel.ro.dynamic.got.got.plt.bss.comment.debug_aranges.debug_info.debug_abbrev.debug_line.debug_str.debug_loc$.o<8 00@Ho(Uo@d00nB88xs  ~b  2  )H H $p p |( ( 0 0 8 8 @ @ X  0 ( XX X0X-0! "G.0 9&:P' 4 -xp0Dsha2.so000075500000051040147207446220005757 0ustar00ELF> @I@8@"!      00$$Ptd 44QtdRtd  XXGNUiّVE;er~^B @)|CEqXGV a  8 R" '3up h h    __gmon_start___init_fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_Jv_RegisterClassesSHA512_FinalSHA256_FinalInit_sha2rb_requirerb_intern2rb_path2classrb_define_class_underrb_data_object_wraprb_ivar_setSHA512_InitSHA512_UpdateSHA384_InitSHA384_UpdateSHA256_InitSHA256_Updatelibruby.so.2.4libcrypto.so.1.0.0libpthread.so.0libdl.so.2libcrypt.so.1libm.so.6libc.so.6_edata__bss_start_end/opt/cpanel/ea-openssl/lib64:/opt/cpanel/ea-ruby24/root/usr/lib64GLIBC_2.2.5 ui PPFP 0      p P      @  H            ( 0 8  @  H  P X ` HH HtCH52 %4 @%2 h%* h%" h% h% h%  h% h% hp% h`% h PH H= UH)HHw]H4 Ht]@H H= UH)HHHH?HHu]H Ht]H@=q u'H= UHt H= h]H @f.H= t&H HtUH=j H]WKf.HHHfHHHfHHHfAUH=ATUSHH=yH=HH=HH5HHIH5_ 1I11HLHH5LHH5 1I11HLHH5vLHH5u 111HwHHH[]A\A]HOHHdigestmetadataDigestDigest::BaseSHA256SHA384SHA512;4PxzRx $FJ w?;*3$"D\t4BIA A(D0(G ABB0  @p 0  @p APcs~   o0     oooo   & 6 F V f v GCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-44),p !  Kp !=8intqii"b  ( 0 8 @ +H P X  U` ! [h  bp bt "px F T (a q &&{ +/ 20 91 @2 G3- 5b d7w yUU[nb$ q    blh U8IDV8& zH  I  a F ]{8G4  l*s  S~ 2    m 9HWfu xW  r[1 F1 n *b*GX^ss-?bs8be-.--1< M(%y0  M pghgNlM NhM$-(numMhDMl Mw ;dp   ? T  h Nl@NhHuPnumMDM  c pbp ctxptrsL~ * UTTUmb ctxptrs * UTTUb ;ctx0ptrs| J UTTU#  %%&&4N+}N++ j U  U  T8  U  3 U  ^ UvT  Q|  U0T ` Q0R0  U}Ts / UvT  Q| D  U0T   Q0R0 R ! U}Ts d L UvT  Q| y z U0T  Q0R0! "] ` "A    "  # [#* [$^$e$g$Am$x${%TbD sD %bd sd w&F &2 i&  & &k 00' % : ; I$ > $ >   I : ;  : ; I8 : ;I8 : ; I !I/ &I'II: ; I : ;(  : ;': ;I : ;  : ; I8  : ;  : ; I.: ; 'I@B: ; IB1B.?: ; '@B4: ; I 1!B1"4: ; I#4: ; I?<$4: ;I?<%.?: ; 'I<&.?: ;'I<'.?: ;'I<[ /usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/usr/include/bits/usr/include../../.././include/ruby../opt/cpanel/ea-openssl/include/opensslsha2ossl.hsha2init.cstddef.htypes.hlibio.hruby.hdigest.hsha.hstdio.hintern.h p   .wt Zr>Ys= Xv <Ige__off_tupdate_func_IO_read_ptr_chain_shortbufrb_intern2size_tmd_len/home/abuild/rpmbuild/BUILD/ruby-2.4.10/ext/digest/sha2Init_sha2rb_path2classRUBY_T_RATIONALROBJECT_EMBEDRSTRING_FSTRrb_cFloatruby_value_typeRUBY_T_NONElong long unsigned intRUBY_FL_PROMOTED0RUBY_FL_FINALIZEid_metadataRUBY_FL_EXIVARrb_cNilClasscDigest_SHA256RUBY_T_COMPLEXlong long intRUBY_T_STRINGROBJECT_EMBED_LEN_MAX_filenorb_cFalseClassRUBY_FL_UNTRUSTED_IO_read_end_flagsrb_cIntegerRUBY_FL_USER18_cur_columnshort intRUBY_FL_FREEZEdouble_old_offsetblock_lenRUBY_T_SYMBOLRARRAY_EMBED_LEN_MAXROBJECT_ENUM_ENDruby_fl_type_IO_markerstdinrb_digest_hash_finish_func_trb_cSymbolrb_define_class_under_IO_write_ptrRUBY_T_FILE_sbufshort unsigned intRUBY_T_MASKrb_digest_hash_init_func_t_IO_FILE_IO_save_baseRUBY_FL_USER10RUBY_FL_USER11RUBY_FL_USER12RUBY_FL_USER13RUBY_FL_USER14RUBY_FL_USER15RUBY_FL_USER16RUBY_FL_USER17mDigestRUBY_FL_USER19RUBY_T_ARRAY_lockrb_digest_SHA256_finishrb_digest_hash_update_func_t_flags2_modeapi_versionstdoutRARRAY_EMBED_LEN_MASKRUBY_T_UNDEFSHA512_FinalRUBY_T_DATArb_digest_SHA384_finishsizetypeRUBY_T_FIXNUM_IO_write_endrb_digest_metadata_tRSTRING_EMBED_LEN_MAXRUBY_FL_USHIFT_IO_lock_tRUBY_T_STRUCTrb_requireRUBY_T_REGEXPcDigest_SHA512finish_funcRSTRING_EMBED_LEN_SHIFTRUBY_T_BIGNUMRUBY_ELTS_SHAREDfloat_posRUBY_FL_WB_PROTECTED_markersRUBY_T_ZOMBIEsha512unsigned char_IO_buf_endRSTRING_EMBED_LEN_MASKRSTRING_NOEMBEDRUBY_FL_SINGLETONRUBY_DATA_FUNC_vtable_offsetctx_sizeRSTRING_ENUM_ENDinit_funcSHA256_CTXRUBY_T_MATCHRUBY_FL_PROMOTED1digest_lenrb_digest_SHA512_finishRUBY_T_NODERUBY_T_FLOATRUBY_T_MODULERUBY_T_NILRUBY_T_CLASSRUBY_FL_USER0RUBY_FL_USER1RUBY_FL_USER2RUBY_FL_USER3GNU C 4.8.5 20150623 (Red Hat 4.8.5-44) -mtune=generic -m64 -march=x86-64 -g -O2 -fexceptions -fstack-protector-strong -fPIC --param ssp-buffer-size=4RUBY_T_TRUERUBY_FL_USER6RUBY_FL_USER7_nextRUBY_FL_USER9__off64_tRARRAY_EMBED_FLAG_IO_read_base_IO_save_endRUBY_T_ICLASSrb_data_object_wrap__pad1__pad2__pad3__pad4__pad5cDigest_SHA384sha256_unused2RUBY_FL_USER5RUBY_T_FALSERUBY_FL_USER8rb_cTrueClasscDigest_BaseRUBY_FL_PROMOTEDSHA256_Final_IO_backup_baserb_ivar_setRUBY_FL_DUPPEDSHA256state_stRARRAY_EMBED_LEN_SHIFTVALUERUBY_T_OBJECTRUBY_T_IMEMOsha384RUBY_T_HASHSHA512state_stSHA512_CTXRARRAY_ENUM_ENDRUBY_FL_TAINT_IO_write_baseRUBY_FL_USER4_IO_buf_basesha2init.cU P U T U TUPUTUT &U&-P-.U )T)-U-.TptPtVP\aePeS TP]P]PV U0               h     . Dh S z 0   p   ` 8  8 8   ' : Ph \ i r~    / Ij" h p :h AOq crtstuff.c__JCR_LIST__deregister_tm_clones__do_global_dtors_auxcompleted.6355__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entrysha2init.crb_digest_SHA512_finishrb_digest_SHA384_finishrb_digest_SHA256_finishsha256sha384sha512__FRAME_END____JCR_END____GNU_EH_FRAME_HDR_GLOBAL_OFFSET_TABLE___TMC_END____dso_handle_DYNAMICrb_ivar_setrb_data_object_wrap__gmon_start___Jv_RegisterClassesrb_define_class_under_finiSHA384_Update@@libcrypto.so.1.0.0_ITM_deregisterTMCloneTableSHA512_Init@@libcrypto.so.1.0.0_ITM_registerTMCloneTableSHA256_Final@@libcrypto.so.1.0.0__cxa_finalize@@GLIBC_2.2.5rb_intern2SHA384_Init@@libcrypto.so.1.0.0SHA256_Init@@libcrypto.so.1.0.0rb_requireInit_sha2__bss_startSHA256_Update@@libcrypto.so.1.0.0_endSHA512_Final@@libcrypto.so.1.0.0_edatarb_path2classSHA512_Update@@libcrypto.so.1.0.0_init.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.jcr.data.rel.ro.dynamic.got.got.plt.bss.comment.debug_aranges.debug_info.debug_abbrev.debug_line.debug_str.debug_loc$.o<8 00p@Ho4Uo@d  nBx s ~  2 9 4        0 ( hh h 0h - 0  ,"._.0T0 9:2H= 8 DwWHDbubblebabble.so000075500000053070147207446220007512 0ustar00ELF> @xM@8@#"TT       $$Ptd<<QtdRtd  ppGNU QvB1? @ BE\1A|qX u !a 8 R"2      |__gmon_start___init_fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_Jv_RegisterClassesrb_string_valuerb_str_newrb_eRuntimeErrorrb_raiserb_funcallrb_funcallvInit_bubblebabblerb_requirerb_path2classrb_define_module_functionrb_define_singleton_methodrb_define_methodrb_intern2libruby.so.2.4libpthread.so.0libdl.so.2libcrypt.so.1libm.so.6libc.so.6_edata__bss_start_end/opt/cpanel/ea-openssl/lib64:/opt/cpanel/ea-ruby24/root/usr/lib64GLIBC_2.2.5ui  p  0             ( 0 8 @ H P  X  `  h p x HH  HtkH5" %$ @%" h% h% h%  h% h% h% h% hp% h`% h P% h @% h 0% h H H= UH)HHw]H Ht]@H H= UH)HHHH?HHu]H Ht]H@=I u'H= UHt H=Z Mh]  @f.H=( t&H_ HtUH= H]WKf.AWAVAUATUSH(H|$H|$SHD$L(A IL`ALH*HH9=Ht@1|HD$H H$HD$HHD$HD$MxHD$AE1H-L=IHpLHH@HDH$}@IIHCTF-FHЃFHH @Ǎ)H88HcH<HHHHHH)M9HC<HMqAAEILIHHRHI)BDIAAFHIHILIHHRHI)L; $BDFHD$B0xHD$H([]A\A]A^A_@H@HD$yfL`Lh!HHIqHMqHHHRHH)HIITDH\$B 3x o1AAH-H H5=H81HH5% 11HH0H(HHH5 H׉HHf.ATH=US0H=tH=HeH=HVHH5HIhHqH5L=H&H51HH6 HuH=IHH []H A\HHdigest string too longdigestDigestDigest::InstanceDigest::Classbubblebabblebcdfghklmnprstvzxaeiouy;<XXxzRx $xFJ w?;*3$"LD BBB B(A0A8D` 8A0A(B BBBE  DT&DZ,BHA AIp 0  =L\gu  |  op0   8 ooo`o   & 6 F V f v GCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-44),  . 58L1intii|be  ( 0 8 @ H 4P X  U`  [h  bp <bt Qpx %F =T Ga 6q U&{ // 60 =1 D2 K3- D5b n7w UU&[\b$ q    {VJU8IDV8s)* R 7   d `_'g !_*a  #F D;  `t w   xE  Y V W X ro  S9T ijleniptraux9ary  ( 1asjlQ6  H eLq-strpSi-j-=-LX m o2?u2? !U  ,!U0!T }1!}1!1$"#"]  !T  X  H m  ],s` ]s t - !UU!Q0# }Y #Y9$strYr% !UTvf &% fb` ffC N !UQ!QU!RT# &} Z <t'K$;   "hs !U !T6 Z !U  y !U  !U  !U   !Uv!T !Q  !R1 3 & !U|!T !Q  !R "K !Us!T !Q ` !R0b  ([(J[)^)e) g)Sm)x){)k*5 +  ,*& ++i-| - ++*N +++b*s +++b+* ++i*F +*Q +- ++++b. ++++b/++++b% : ; I$ > $ >   I : ;  : ; I8 : ;I8 : ; I !I/ &I: ; I : ;(  : ; : ; : ; : ;I : ; : ;I8  : ;II.: ; 'I@B: ; I4: ; I4: ; I4: ; I U 1!B"1#B1$: ; I%B1&.?: ; '@B' (4: ; I?<)4: ;I?<*.?: ;'I<+I,5I-.?: ;'<..?: ; '</.?: ;'< /usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/usr/include/bits/usr/include../../.././include/rubybubblebabble.cstddef.htypes.hlibio.hruby.hstdio.hintern.h  XKIKLJ]7AfXe'MhIk;<k]]]ilPlPooqPq0xYXYxPXo01^^Y^y^PYPcTcgRgo^o11RSR1IRIPUo18U^U%QUUUUTTUPUTRTQUQ6:P:VEIPIScgPg\40p`    | H            . 0 D S z p      `   ( &G _Pm y       |  .: IW \m   " crtstuff.c__JCR_LIST__deregister_tm_clones__do_global_dtors_auxcompleted.6355__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entrybubblebabble.cbubblebabble_str_newvowels.9023consonants.9024rb_digest_instance_bubblebabbleid_digestrb_digest_s_bubblebabblerb_digest_class_s_bubblebabblerb_intern_id_cache.9047__FRAME_END____JCR_END____dso_handle_DYNAMIC__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE_rb_raise_ITM_deregisterTMCloneTablerb_require_edata_finirb_funcallrb_string_valueInit_bubblebabblerb_funcallv__gmon_start__rb_path2class_endrb_define_methodrb_define_singleton_method__bss_startrb_define_module_function_Jv_RegisterClassesrb_eRuntimeErrorrb_str_new_ITM_registerTMCloneTable__cxa_finalize@@GLIBC_2.2.5_initrb_intern2.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.jcr.data.rel.ro.dynamic.got.got.plt.bss.comment.debug_aranges.debug_info.debug_abbrev.debug_line.debug_str.debug_loc.debug_ranges$.o<8 00@@ppHo``0Uo dnB8xs~ || w<HH        0  0 - 0  ,y"o/.0/1 9:1D@PPA!; I%%LRmd5.so000075500000035030147207446220005610 0ustar00ELF>@1@8@"! ( ( ( 08  00$$Ptd8 8 8 $$QtdRtd( ( ( GNU#m9 W/: A@ ^U|CEqX a u 8 R" b[` HX OX    __gmon_start___init_fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_Jv_RegisterClassesMD5_FinalInit_md5rb_requirerb_path2classrb_define_class_underrb_data_object_wraprb_iv_setMD5_InitMD5_Updatelibruby.so.2.4libcrypto.so.1.0.0libpthread.so.0libdl.so.2libcrypt.so.1libm.so.6libc.so.6_edata__bss_start_end/opt/cpanel/ea-openssl/lib64:/opt/cpanel/ea-ruby24/root/usr/lib64GLIBC_2.2.5> ui PF( P 0  @ @             ( 0 8 @  H  P  HH Ht;H5 % @% h% h% h% h% h% h% h% hpH H= UH)HHw]H Ht]@H H=z UH)HHHH?HHu]H Ht]H@=A u'H= UHt H= =h] @f.H= t&Ho HtUH= H]WKf.HHHfSH=eH=`H=[HH5YHHvH5 H1111HH53H[.HHdigestDigestDigest::BaseMD5metadata;$@XhhzRx $FJ w?;*3$"D\bA\P  @ @\  &4>`   ( 0 o0   0( oooo &6FVfvGCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-44), r o r(8>@intipiG}bX q( J0 8 L@ H rP X  U` ! [h / bp bt px F T /a q &{ / 0 1 2 3- 5b 7w o"U\U[b$ q    bU8|xZX?2 vz     GM4 &0*   IFX e s@N b# 2APgx  rWXe4ez b =NTii-?3zbi8b ---2 C(o0 \d_AeMBeMCeMDeM NlfMNhfMg_numhMX Mo gi b ctx ptr iL dUTTU2 b_4<4y4 ?U   ^U   }U   UsT (  U0T ` Q0R0 T , md5 ` - [ [ 7^ re g m Px .{!hpb~i~o"F"9 "["k&&#$% : ; I$ > $ >   I : ;  : ; I8 : ;I8 : ; I !I/ &I'II : ;(  : ;': ;I : ;  : ; I8 .: ; 'I@B: ; IB1B.?: ; '@B4: ; I14: ; I4: ; I?< 4: ;I?<!.?: ; 'I<".?: ;'I<#.?: ;'I<A /usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/usr/include/bits/usr/include../../.././include/ruby../opt/cpanel/ea-openssl/include/opensslmd5ossl.hmd5init.cstddef.htypes.hlibio.hruby.hdigest.hmd5.hstdio.hintern.h   (#s=Z$p@v__off_tupdate_func_IO_read_ptr_chainsize_t_shortbufrb_path2classRUBY_T_RATIONALROBJECT_EMBEDRSTRING_FSTRrb_cFloatruby_value_typeRUBY_T_NONElong long unsigned intRUBY_FL_PROMOTED0RUBY_FL_FINALIZERUBY_FL_EXIVARrb_cNilClassRUBY_T_COMPLEXlong long intRUBY_T_STRINGROBJECT_EMBED_LEN_MAX_filenorb_cFalseClassRUBY_FL_UNTRUSTED_IO_read_endRSTRING_EMBED_LEN_SHIFT_flagsrb_cIntegerRUBY_FL_USER18_cur_columnshort intRUBY_FL_FREEZEdouble_old_offsetblock_lenRUBY_T_SYMBOLRARRAY_EMBED_LEN_MAXROBJECT_ENUM_ENDruby_fl_type_IO_markerstdinrb_digest_hash_finish_func_trb_cSymbolrb_define_class_under_IO_write_ptrRUBY_T_FILE_sbufdatashort unsigned intRUBY_T_MASKrb_digest_hash_init_func_t_IO_FILE_IO_save_baseRUBY_FL_USER10RUBY_FL_USER11RUBY_FL_USER12RUBY_FL_USER13RUBY_FL_USER14RUBY_FL_USER15RUBY_FL_USER16RUBY_FL_USER17mDigestRUBY_FL_USER19RUBY_T_ARRAY_lockrb_digest_hash_update_func_t_flags2_modeapi_versionstdoutRARRAY_EMBED_LEN_MASKRUBY_T_UNDEFRUBY_T_DATAsizetypeRUBY_T_FIXNUMRUBY_FL_PROMOTED1rb_digest_metadata_tRSTRING_EMBED_LEN_MAX_IO_write_endRUBY_FL_USHIFTMD5_CTX_IO_lock_tRUBY_T_STRUCTrb_requireRUBY_T_REGEXPfinish_func/home/abuild/rpmbuild/BUILD/ruby-2.4.10/ext/digest/md5RUBY_T_BIGNUMfloat_posRUBY_FL_WB_PROTECTED_markersrb_digest_MD5_finishRUBY_T_ZOMBIEunsigned char_IO_buf_endRSTRING_EMBED_LEN_MASKmd5init.ccDigest_MD5RSTRING_NOEMBEDRUBY_FL_SINGLETONRUBY_DATA_FUNC_vtable_offsetrb_data_object_wrapctx_sizeRSTRING_ENUM_ENDinit_funcRUBY_T_MATCHdigest_lenRUBY_ELTS_SHAREDRUBY_T_NODERUBY_T_FLOATRUBY_T_MODULERUBY_T_NILRUBY_T_CLASSRUBY_FL_USER0RUBY_FL_USER1RUBY_FL_USER2RUBY_FL_USER3GNU C 4.8.5 20150623 (Red Hat 4.8.5-44) -mtune=generic -m64 -march=x86-64 -g -O2 -fexceptions -fstack-protector-strong -fPIC --param ssp-buffer-size=4RUBY_T_TRUERUBY_FL_USER6RUBY_FL_USER7_nextRUBY_FL_USER9__off64_tRARRAY_EMBED_FLAG_IO_read_base_IO_save_endRUBY_T_ICLASSMD5state_st__pad1__pad2__pad3__pad4__pad5RUBY_FL_USER4_unused2RUBY_FL_USER5RUBY_T_FALSERUBY_FL_USER8rb_iv_setrb_cTrueClasscDigest_BaseRUBY_FL_PROMOTEDRUBY_T_OBJECTMD5_Final_IO_backup_baseRUBY_FL_DUPPEDRARRAY_EMBED_LEN_SHIFTVALUEInit_md5RUBY_T_IMEMORUBY_T_HASHRARRAY_ENUM_ENDRUBY_FL_TAINT_IO_write_base_IO_buf_baseU P U T U T37P7TS8IPT^P^mSmqU0(0      8 ` ( 0 8 @    X  8   .  DX S0 z P (  ` 8 8 8  X @  )=G V j    " b'X 3R` WX ^l crtstuff.c__JCR_LIST__deregister_tm_clones__do_global_dtors_auxcompleted.6355__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entrymd5init.crb_digest_MD5_finish__FRAME_END____JCR_END____GNU_EH_FRAME_HDR_GLOBAL_OFFSET_TABLE___TMC_END____dso_handle_DYNAMICrb_data_object_wraprb_iv_set__gmon_start___Jv_RegisterClassesrb_define_class_under_finiMD5_Final@@libcrypto.so.1.0.0_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize@@GLIBC_2.2.5Init_md5MD5_Init@@libcrypto.so.1.0.0rb_require__bss_startMD5_Update@@libcrypto.so.1.0.0_end_edatarb_path2class_init.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.jcr.data.rel.ro.dynamic.got.got.plt.bss.comment.debug_aranges.debug_info.debug_abbrev.debug_line.debug_str.debug_loc$.o<8 00@Ho(Uo@d((nB00xs~b  2 (8 8 $` ` |( ( 0 0 8 8 @ @ X  0 ( XX X0X-0 "E.0 9%:8' 4 -rR0Drmd160.so000075500000035160147207446220006140 0ustar00ELF>@1@8@"! ( ( ( 08  00$$PtdX X X $$QtdRtd( ( ( GNU$.OX 08$7 A D b&|CEqXu a  8 R" bp` ]X dX   $ __gmon_start___init_fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_Jv_RegisterClassesRIPEMD160_FinalInit_rmd160rb_requirerb_path2classrb_define_class_underrb_data_object_wraprb_iv_setRIPEMD160_InitRIPEMD160_Updatelibruby.so.2.4libcrypto.so.1.0.0libpthread.so.0libdl.so.2libcrypt.so.1libm.so.6libc.so.6_edata__bss_start_end/opt/cpanel/ea-openssl/lib64:/opt/cpanel/ea-ruby24/root/usr/lib64GLIBC_2.2.5S ui  PF ( p 0 0 @ @             ( 0 8 @  H  P  HH HtSH5 % @% h% h% h% h% h% h% h% hpH H= UH)HHw]H Ht]@Ha H=Z UH)HHHH?HHu]H Ht]H@=! u'H= UHt H= =h] @f.H= t&HO HtUH= H]WKf.HHHfSH=eH=`H=[HH5YHHH5_ H111AHH56H[>HHdigestDigestDigest::BaseRMD160metadata;$@XhhzRx $FJ w?;*3$"D\bA\p 0 @ @`   0;ISu  $ ( 0 o0   H@ oooo FVfvGCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-44), r ? r(8VXintii9_ebX  x( 0 ! 8 d@ H P X ? U` ! [h / bp bt px F T /a q &{ / 0 1 2 3- 5b 7w  UU[%b$ q    bU8|x~eX    -  Gs[$BLH**  PV F u gu 1(7FU dsxx  rWpwe  b =NTii-?zbi8b"---2 C(o0b -`ViAWMBWMCWMDWM EWMNlXMNhXMYinumZM\ My [b ctxptriL nUTTU!0 b2I2C2 IU -  hU 4  U ;  UsT H  U0T ` Q0R0" T O !  `  [ [ 7^ re lg m 8x g{!hbbiy"F"9 "R"k&&#?% : ; I$ > $ >   I : ;  : ; I8 : ;I8 : ; I !I/ &I'II : ;(  : ;': ;I : ;  : ; I8 .: ; 'I@B: ; IB1B.?: ; '@B4: ; I14: ; I4: ; I?< 4: ;I?<!.?: ; 'I<".?: ;'I<#.?: ;'I<J /usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/usr/include/bits/usr/include../../.././include/ruby../opt/cpanel/ea-openssl/include/opensslrmd160ossl.hrmd160init.cstddef.htypes.hlibio.hruby.hdigest.hripemd.hstdio.hintern.h   #s=Z$p@v__off_tupdate_func_IO_read_ptr_chainsize_t_shortbufrb_path2classRUBY_T_RATIONALROBJECT_EMBEDRSTRING_FSTRrb_cFloatruby_value_typeRUBY_T_NONElong long unsigned intRUBY_FL_PROMOTED0RUBY_FL_FINALIZERUBY_FL_EXIVARrb_cNilClassRUBY_T_COMPLEXlong long intRUBY_T_STRINGROBJECT_EMBED_LEN_MAX_filenorb_cFalseClassRUBY_FL_UNTRUSTED_IO_read_end_flagsrb_cIntegerRUBY_FL_USER18_cur_columnshort intRUBY_FL_FREEZEdouble_old_offsetblock_lenRUBY_T_SYMBOLRARRAY_EMBED_LEN_MAXROBJECT_ENUM_ENDruby_fl_type_IO_markerstdinrb_digest_hash_finish_func_trb_cSymbolcDigest_RMD160rb_define_class_underRIPEMD160_Final_IO_write_ptrRUBY_T_FILE_sbufdatashort unsigned intRUBY_T_MASKrb_digest_hash_init_func_t_IO_FILE_IO_save_base/home/abuild/rpmbuild/BUILD/ruby-2.4.10/ext/digest/rmd160RUBY_FL_USER11RUBY_FL_USER12RUBY_FL_USER13RUBY_FL_USER14RUBY_FL_USER15RUBY_FL_USER16RUBY_FL_USER17mDigestRUBY_FL_USER19RUBY_T_ARRAY_lockrb_digest_hash_update_func_t_flags2_modeapi_versionstdoutrb_digest_RIPEMD160_finishRUBY_T_UNDEFInit_rmd160RUBY_T_DATAsizetypeRUBY_T_FIXNUMRUBY_FL_PROMOTED1rb_digest_metadata_tRSTRING_EMBED_LEN_MAX_IO_write_endRUBY_FL_USHIFT_IO_lock_tRUBY_T_STRUCTrb_requireRUBY_T_REGEXPfinish_funcRSTRING_EMBED_LEN_SHIFTRUBY_T_BIGNUMRUBY_ELTS_SHAREDfloat_posRUBY_FL_WB_PROTECTED_markersRUBY_T_ZOMBIEunsigned char_IO_buf_endRSTRING_EMBED_LEN_MASKRSTRING_NOEMBEDRUBY_FL_SINGLETONRUBY_DATA_FUNC_vtable_offsetrb_data_object_wrapctx_sizeRSTRING_ENUM_ENDinit_funcRUBY_T_MATCHRARRAY_EMBED_LEN_MASKdigest_lenRIPEMD160state_strmd160init.cRUBY_T_NODERUBY_T_FLOATRUBY_T_MODULERUBY_T_NILRUBY_T_CLASSRUBY_FL_USER10RUBY_FL_USER1RUBY_FL_USER2RUBY_FL_USER3GNU C 4.8.5 20150623 (Red Hat 4.8.5-44) -mtune=generic -m64 -march=x86-64 -g -O2 -fexceptions -fstack-protector-strong -fPIC --param ssp-buffer-size=4RUBY_T_TRUERUBY_FL_USER6RUBY_FL_USER7_nextRUBY_FL_USER9__off64_tRARRAY_EMBED_FLAG_IO_read_base_IO_save_endRUBY_T_ICLASS__pad1__pad2__pad3__pad4__pad5RUBY_FL_USER4_unused2RUBY_FL_USER5RUBY_T_FALSERUBY_FL_USER8rb_iv_setcDigest_BaseRUBY_FL_PROMOTEDrb_cTrueClassRUBY_FL_USER0_IO_backup_baseRUBY_FL_DUPPEDRARRAY_EMBED_LEN_SHIFTVALUERUBY_T_OBJECTRUBY_T_IMEMORIPEMD160_CTXRUBY_T_HASHRARRAY_ENUM_ENDRUBY_FL_TAINT_IO_write_base_IO_buf_baseU P U T U T37P7TS8IPT^P^mSmqU0@H  0  $  - X  ( 0 8 @    X  8   . 0 DX S0 z p (  /` 8 8 X  X @ ) 2Vjt   $   "* b6AdX p` uX | crtstuff.c__JCR_LIST__deregister_tm_clones__do_global_dtors_auxcompleted.6355__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entryrmd160init.crb_digest_RIPEMD160_finish__FRAME_END____JCR_END____GNU_EH_FRAME_HDR_GLOBAL_OFFSET_TABLE___TMC_END____dso_handle_DYNAMICRIPEMD160_Final@@libcrypto.so.1.0.0rb_data_object_wraprb_iv_setRIPEMD160_Update@@libcrypto.so.1.0.0__gmon_start___Jv_RegisterClassesrb_define_class_under_fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize@@GLIBC_2.2.5Init_rmd160rb_requireRIPEMD160_Init@@libcrypto.so.1.0.0__bss_start_end_edatarb_path2class_init.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.jcr.data.rel.ro.dynamic.got.got.plt.bss.comment.debug_aranges.debug_info.debug_abbrev.debug_line.debug_str.debug_loc$.o<8 00@Ho(Uo@d@@nBHHxs00~b$ $ 2- - +X X $ |( ( 0 0 8 8 @ @ X  0 ( XX X0X-0 "N.0. 95&:p' 4 .0Dhmac.rb000064400000017211147556174210006017 0ustar00# == License # # Copyright (c) 2006 Akinori MUSHA # # Documentation by Akinori MUSHA # # All rights reserved. You can redistribute and/or modify it under # the same terms as Ruby. # # $Id: hmac.rb 31594 2011-05-16 20:52:55Z drbrain $ # warn "use of the experimetal library 'digest/hmac' is discouraged; require 'openssl' and use OpenSSL::HMAC instead." if $VERBOSE require 'digest' module Digest # = digest/hmac.rb # # An experimental implementation of HMAC keyed-hashing algorithm # # == Overview # # CAUTION: Use of this library is discouraged, because this # implementation was meant to be experimental but somehow got into the # 1.9 series without being noticed. Please use OpenSSL::HMAC in the # "openssl" library instead. # # == Examples # # require 'digest/hmac' # # # one-liner example # puts Digest::HMAC.hexdigest("data", "hash key", Digest::SHA1) # # # rather longer one # hmac = Digest::HMAC.new("foo", Digest::RMD160) # # buf = "" # while stream.read(16384, buf) # hmac.update(buf) # end # # puts hmac.bubblebabble # class HMAC < Digest::Class # Creates a Digest::HMAC instance. def initialize(key, digester) @md = digester.new block_len = @md.block_length if key.bytesize > block_len key = @md.digest(key) end ipad = Array.new(block_len, 0x36) opad = Array.new(block_len, 0x5c) key.bytes.each_with_index { |c, i| ipad[i] ^= c opad[i] ^= c } @key = key.freeze @ipad = ipad.pack('C*').freeze @opad = opad.pack('C*').freeze @md.update(@ipad) end def initialize_copy(other) # :nodoc: @md = other.instance_eval { @md.clone } end # call-seq: # hmac.update(string) -> hmac # hmac << string -> hmac # # Updates the hmac using a given +string+ and returns self. def update(text) @md.update(text) self end alias << update # call-seq: # hmac.reset -> hmac # # Resets the hmac to the initial state and returns self. def reset @md.reset @md.update(@ipad) self end def finish # :nodoc: d = @md.digest! @md.update(@opad) @md.update(d) @md.digest! end private :finish # call-seq: # hmac.digest_length -> Integer # # Returns the length in bytes of the hash value of the digest. def digest_length @md.digest_length end # call-seq: # hmac.block_length -> Integer # # Returns the block length in bytes of the hmac. def block_length @md.block_length end # call-seq: # hmac.inspect -> string # # Creates a printable version of the hmac object. def inspect sprintf('#<%s: key=%s, digest=%s>', self.class.name, @key.inspect, @md.inspect.sub(/^\#<(.*)>$/) { $1 }); end end end if $0 == __FILE__ eval DATA.gets(nil), nil, $0, DATA.lineno end __END__ require 'test/unit' module TM_HMAC def test_s_hexdigest cases.each { |h| digesters.each { |d| assert_equal(h[:hexdigest], Digest::HMAC.hexdigest(h[:data], h[:key], d)) } } end def test_hexdigest cases.each { |h| digesters.each { |d| hmac = Digest::HMAC.new(h[:key], d) hmac.update(h[:data]) assert_equal(h[:hexdigest], hmac.hexdigest) } } end def test_reset cases.each { |h| digesters.each { |d| hmac = Digest::HMAC.new(h[:key], d) hmac.update("test") hmac.reset hmac.update(h[:data]) assert_equal(h[:hexdigest], hmac.hexdigest) } } end end class TC_HMAC_MD5 < Test::Unit::TestCase include TM_HMAC def digesters [Digest::MD5, Digest::MD5.new] end # Taken from RFC 2202: Test Cases for HMAC-MD5 and HMAC-SHA-1 def cases [ { :key => "\x0b" * 16, :data => "Hi There", :hexdigest => "9294727a3638bb1c13f48ef8158bfc9d", }, { :key => "Jefe", :data => "what do ya want for nothing?", :hexdigest => "750c783e6ab0b503eaa86e310a5db738", }, { :key => "\xaa" * 16, :data => "\xdd" * 50, :hexdigest => "56be34521d144c88dbb8c733f0e8b3f6", }, { :key => "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19", :data => "\xcd" * 50, :hexdigest => "697eaf0aca3a3aea3a75164746ffaa79", }, { :key => "\x0c" * 16, :data => "Test With Truncation", :hexdigest => "56461ef2342edc00f9bab995690efd4c", }, { :key => "\xaa" * 80, :data => "Test Using Larger Than Block-Size Key - Hash Key First", :hexdigest => "6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd", }, { :key => "\xaa" * 80, :data => "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data", :hexdigest => "6f630fad67cda0ee1fb1f562db3aa53e", } ] end end class TC_HMAC_SHA1 < Test::Unit::TestCase include TM_HMAC def digesters [Digest::SHA1, Digest::SHA1.new] end # Taken from RFC 2202: Test Cases for HMAC-MD5 and HMAC-SHA-1 def cases [ { :key => "\x0b" * 20, :data => "Hi There", :hexdigest => "b617318655057264e28bc0b6fb378c8ef146be00", }, { :key => "Jefe", :data => "what do ya want for nothing?", :hexdigest => "effcdf6ae5eb2fa2d27416d5f184df9c259a7c79", }, { :key => "\xaa" * 20, :data => "\xdd" * 50, :hexdigest => "125d7342b9ac11cd91a39af48aa17b4f63f175d3", }, { :key => "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19", :data => "\xcd" * 50, :hexdigest => "4c9007f4026250c6bc8414f9bf50c86c2d7235da", }, { :key => "\x0c" * 20, :data => "Test With Truncation", :hexdigest => "4c1a03424b55e07fe7f27be1d58bb9324a9a5a04", }, { :key => "\xaa" * 80, :data => "Test Using Larger Than Block-Size Key - Hash Key First", :hexdigest => "aa4ae5e15272d00e95705637ce8a3b55ed402112", }, { :key => "\xaa" * 80, :data => "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data", :hexdigest => "e8e99d0f45237d786d6bbaa7965c7808bbff1a91", } ] end end class TC_HMAC_RMD160 < Test::Unit::TestCase include TM_HMAC def digesters [Digest::RMD160, Digest::RMD160.new] end # Taken from RFC 2286: Test Cases for HMAC-RIPEMD160 and HMAC-RIPEMD128 def cases [ { :key => "\x0b" * 20, :data => "Hi There", :hexdigest => "24cb4bd67d20fc1a5d2ed7732dcc39377f0a5668", }, { :key => "Jefe", :data => "what do ya want for nothing?", :hexdigest => "dda6c0213a485a9e24f4742064a7f033b43c4069", }, { :key => "\xaa" * 20, :data => "\xdd" * 50, :hexdigest => "b0b105360de759960ab4f35298e116e295d8e7c1", }, { :key => "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19", :data => "\xcd" * 50, :hexdigest => "d5ca862f4d21d5e610e18b4cf1beb97a4365ecf4", }, { :key => "\x0c" * 20, :data => "Test With Truncation", :hexdigest => "7619693978f91d90539ae786500ff3d8e0518e39", }, { :key => "\xaa" * 80, :data => "Test Using Larger Than Block-Size Key - Hash Key First", :hexdigest => "6466ca07ac5eac29e1bd523e5ada7605b791fd8b", }, { :key => "\xaa" * 80, :data => "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data", :hexdigest => "69ea60798d71616cce5fd0871e23754cd75d5a0a", } ] end end sha2.rb000064400000007472147556174210005754 0ustar00# frozen_string_literal: false #-- # sha2.rb - defines Digest::SHA2 class which wraps up the SHA256, # SHA384, and SHA512 classes. #++ # Copyright (c) 2006 Akinori MUSHA # # All rights reserved. You can redistribute and/or modify it under the same # terms as Ruby. # # $Id: sha2.rb 56456 2016-10-20 07:57:31Z svn $ require 'digest' require 'digest/sha2.so' module Digest # # A meta digest provider class for SHA256, SHA384 and SHA512. # # FIPS 180-2 describes SHA2 family of digest algorithms. It defines # three algorithms: # * one which works on chunks of 512 bits and returns a 256-bit # digest (SHA256), # * one which works on chunks of 1024 bits and returns a 384-bit # digest (SHA384), # * and one which works on chunks of 1024 bits and returns a 512-bit # digest (SHA512). # # ==Examples # require 'digest' # # # Compute a complete digest # Digest::SHA2.hexdigest 'abc' # => "ba7816bf8..." # Digest::SHA2.new(256).hexdigest 'abc' # => "ba7816bf8..." # Digest::SHA256.hexdigest 'abc' # => "ba7816bf8..." # # Digest::SHA2.new(384).hexdigest 'abc' # => "cb00753f4..." # Digest::SHA384.hexdigest 'abc' # => "cb00753f4..." # # Digest::SHA2.new(512).hexdigest 'abc' # => "ddaf35a19..." # Digest::SHA512.hexdigest 'abc' # => "ddaf35a19..." # # # Compute digest by chunks # sha2 = Digest::SHA2.new # =># # sha2.update "ab" # sha2 << "c" # alias for #update # sha2.hexdigest # => "ba7816bf8..." # # # Use the same object to compute another digest # sha2.reset # sha2 << "message" # sha2.hexdigest # => "ab530a13e..." # class SHA2 < Digest::Class # call-seq: # Digest::SHA2.new(bitlen = 256) -> digest_obj # # Create a new SHA2 hash object with a given bit length. # # Valid bit lengths are 256, 384 and 512. def initialize(bitlen = 256) case bitlen when 256 @sha2 = Digest::SHA256.new when 384 @sha2 = Digest::SHA384.new when 512 @sha2 = Digest::SHA512.new else raise ArgumentError, "unsupported bit length: %s" % bitlen.inspect end @bitlen = bitlen end # call-seq: # digest_obj.reset -> digest_obj # # Reset the digest to the initial state and return self. def reset @sha2.reset self end # call-seq: # digest_obj.update(string) -> digest_obj # digest_obj << string -> digest_obj # # Update the digest using a given _string_ and return self. def update(str) @sha2.update(str) self end alias << update def finish # :nodoc: @sha2.digest! end private :finish # call-seq: # digest_obj.block_length -> Integer # # Return the block length of the digest in bytes. # # Digest::SHA256.new.block_length * 8 # # => 512 # Digest::SHA384.new.block_length * 8 # # => 1024 # Digest::SHA512.new.block_length * 8 # # => 1024 def block_length @sha2.block_length end # call-seq: # digest_obj.digest_length -> Integer # # Return the length of the hash value (the digest) in bytes. # # Digest::SHA256.new.digest_length * 8 # # => 256 # Digest::SHA384.new.digest_length * 8 # # => 384 # Digest::SHA512.new.digest_length * 8 # # => 512 # # For example, digests produced by Digest::SHA256 will always be 32 bytes # (256 bits) in size. def digest_length @sha2.digest_length end def initialize_copy(other) # :nodoc: @sha2 = other.instance_eval { @sha2.clone } end def inspect # :nodoc: "#<%s:%d %s>" % [self.class.name, @bitlen, hexdigest] end end end