PK!'f%XXsha1.sonuȯELF>0 @@8@    Xh x x x @@$$Ptd   $$QtdRtd   GNU ~, C_3 D)sS|CEDVqX a  8 R" p ` u `  h __gmon_start___init_fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_Jv_RegisterClassesInit_sha1rb_requirerb_path2classrb_define_class_underrb_cObjectrb_data_object_allocrb_intern2rb_ivar_setSHA1_InitSHA1_UpdateSHA1_FinishSHA1_Finallibruby.so.2.0libcrypto.so.10libssl.so.10libpthread.so.0librt.so.1libdl.so.2libcrypt.so.1libm.so.6libc.so.6_edata__bss_start_endGLIBC_2.2.5| ui ! t !     ` h  p          ( 0 8  @  H  P  X HHE Ht3H5r %t @%r h%j h%b h%Z h%R h%J h%B h%: hp%2 h`H0 H=" UH)HHw]Ht Ht]@H H= UH)HHHH?HHu]H? Ht]H@= u'H=' UHt H=b h] @f.H=0 t&H HtUH= H]WKf.UH=SHH=H=HH5HHaHHw H5 11H8H5 HHuH=g@FH HHHH[]f.HHHRHHdigestDigestDigest::BaseSHA1metadata; <dzRx $HFJ w?;*3$"$DAHD {GAl( @`!1>NYdr| h   oX0   p  o0ooox   & sha1.so.debuguZ7zXZִF!t/ ]?Eh=ڊ2NdR3%8RMMNlAbFeu7GX x4W?1| mG-Nd Ydeݖ;>nMO{b@EB] !O;Rth1@h3*H6cNbA1Ѕv)63hU FvC5r1)IQ,5ž3+WjR1wC!-]tvi>WF3kʸeL!ޗ@_!=!! ]ԗܹ31o0%׆dWpuvn Xna { TiuF.:GWL=XPDZ mgu-L\<`x-7V/w8C͊b+;/Fjz,]fq* 613dQΡE ٹ19l]Pߐ*uyKwj O!WDK MgFi4Wpf(0^yeS'oSYRHO/r3~W&uD|GtLoxj"qZ5FkI%ؐ{v(wZL3dhסutm)'|ސ Fþ6jηZc+FkXm'tTǑ*vt(^\YI cETRC9"gYZ.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.gnu_debuglink.gnu_debugdata $o@( 00(0XX8o.Eo00@Tpp ^Bhhhcn0 0 t z2 )  $( (        X x x @ 0 `` ``t PK!Fx+x+sha2.sonuȯELF> @$@8@    xx x @@$$Ptd 44QtdRtd  xxGNUVZ+ g~! <@S @i`fJL|+NCEqXtLGV a  j 8 5R"]A' x O  h h  8  0  @ u __gmon_start___init_fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_Jv_RegisterClassesInit_sha2rb_requirerb_intern2rb_path2classrb_define_class_underrb_cObjectrb_data_object_allocrb_ivar_setSHA512_InitSHA512_UpdateSHA512_FinishSHA384_InitSHA384_UpdateSHA384_FinishSHA256_InitSHA256_UpdateSHA256_FinishSHA256_FinalSHA512_Finallibruby.so.2.0libcrypto.so.10libssl.so.10libpthread.so.0librt.so.1libdl.so.2libcrypt.so.1libm.so.6libc.so.6_edata__bss_start_endGLIBC_2.2.5 ui  t            ( 0 `  h p            ( 0 8  @  H P X ` HHu Ht3H5 % @% h% h% h% h% h%z h%r h%j hp%b h`%Z h PHX H=J UH)HHw]H Ht]@H! H= UH)HHHH?HHu]H_ Ht]H@= u'H=G UHt H= h] @f.H= t&H HtUH= H]WKf.AVH=@AUATUSHU HuH=)H8 HH=H=IH5LHI%H-n H5 1I1H}gHLHH5LLH}H5L 1I10HLHH5LLH}H5 11IHLH[]A\A]A^cHHHfHHHrfHHHbHHdigestmetadataDigestDigest::BaseSHA256SHA384SHA512;0L|tzRx $FJ w?;*3$"<D BIB A(A0(A BBB  @0 @pw 8 @   o8   H  oXooox v  sha2.so.debugg7zXZִF!t/ G]?Eh=ڊ2N )1ۅFZ6'#%ZXMă 2O g]KϬ}*i _+WD@M"ꆜC?Џ:nn`mG cD/stW:U(Zvdɝ^,Re3ʴ;%s'nQ;:_Bkr#xGFZic˂~'% .n-!ʳ[mгӑ6(z,vw8/MS}!hW @0OX,;=#w1$75x8X%<߃0^Ȳ,SvJON6Cԙ)l[rS}d/c]ץ9"jb_Mk׉}AHben;//ovpW6@F/bw<^ b1fm]&(4vuĹ=oJ8^!0Z{yY3d@QLLQA Jy6/WP4whn<=,019L Ŏ@g\lZo!xjc @Nc;dhQhd:t+c[<Ml4b%gYZ.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.gnu_debuglink.gnu_debugdata $oH( 8808o<EoXX@T^BH H h8 8 c` ` n  .t@ @ z2I I 9 4      x x@ 0 hh h h | <#PK!lzw++bubblebabble.sonuȯELF> @$@8@$$       $$Ptd<<QtdRtd  ppGNULS^1TUU;[ @ BE\1A|qX u !a 8 R"2      L__gmon_start___init_fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_Jv_RegisterClassesrb_string_valuerb_str_newrb_eRuntimeErrorrb_raiserb_funcallrb_funcall2Init_bubblebabblerb_requirerb_path2classrb_define_module_functionrb_define_singleton_methodrb_define_methodrb_intern2libruby.so.2.0libpthread.so.0librt.so.1libdl.so.2libcrypt.so.1libm.so.6libc.so.6_edata__bss_start_endGLIBC_2.2.5ui  @               ( 0 8 @ H P  X  `  h p x HHE HtsH5R %T @%R h%J h%B h%: h%2 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@=y u'H= UHt H= Mh]P @f.H=X t&H HtUH=B 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=H81HH5U 11HH0H(HHH5" H׉HHf.ATH=US0H=tH=HeH=HVHH5HIhHqH5L=H&H51HHf HuH=IHHI []HH A\HHdigest string too longdigestDigestDigest::InstanceDigest::Classbubblebabblebcdfghklmnprstvzxaeiouy;<XXxzRx $xFJ w?;*3$"LD BBB B(A0A8D` 8A0A(B BBBE  DT&DZ,BHA AI@  =L\gr  L  op0   8Px oXoo(o   & 6 F V f v bubblebabble.so.debug.7zXZִF!t/ ]?Eh=ڊ2N> zW'GTв>Z5L؟L &~a^cBբqywwCfmѓe.n?,tn^u"{[#/Fh p&Jݫ64JJ|p9x2D6ƏcNFI$+HC_X5~}Qt.THƤSgƺDF9g'0k}yi8~^Tūyc) 5cOq+C ĞD-3rsǵemU3s7J]AVA?a C^k[5аꦮ,u9VMbK V)19`F [XybS /D׋$"uk_si :;HR; z>Q2jcӴG2J&/ASbgYZ.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.gnu_debuglink.gnu_debugdata $o<( 00@0pp8o((0EoXX Txx^BPP8hcn tLL z``w<        0    T#PK!TXXmd5.sonuȯELF>0 @@8@    Xh x x x @@$$Ptd   $$QtdRtd   GNUTYD H:=m  A @ ^U|CEqX*qZ a  8 R"~u p ` `  h  __gmon_start___init_fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_Jv_RegisterClassesInit_md5rb_requirerb_path2classrb_define_class_underrb_cObjectrb_data_object_allocrb_intern2rb_ivar_setMD5_InitMD5_UpdateMD5_FinishMD5_Finallibruby.so.2.0libcrypto.so.10libssl.so.10libpthread.so.0librt.so.1libdl.so.2libcrypt.so.1libm.so.6libc.so.6_edata__bss_start_endGLIBC_2.2.5 t wui      `  h  p          ( 0 8 @  H  P  X HHE Ht3H5r %t @%r h%j h%b h%Z h%R h%J h%B h%: hp%2 h`H0 H=" UH)HHw]Ht Ht]@H H= UH)HHHH?HHu]H? Ht]H@= u'H=' UHt H=b h] @f.H=0 t&H HtUH= H]WKf.UH=SHH=H=HH5HHaHHw H5 11H8H5 HHuH=f@FH HHHH[]f.HHHBHHdigestDigestDigest::BaseMD5metadata; <dzRx $HFJ w?;*3$"$DAHD {GAl( @\ ,9IT_mw h   oX0   p  o0ooox   & md5.so.debug6?m7zXZִF!t/ ]?Eh=ڊ2Nd$*Q 9ԾZCS(_KM"I+iMYS'k+#Wf<΍ik:jq&z̥~^3,-]r*pD0,B |0=Qˉ݌uqWk#|P*-1WAC3B暱35bcG vr%Ct*^AdFV|ͪ'8tCG0c,p վ/ C-ojֹ 'AEBJgʈ.lR`* FN0ʫk d@+vgϬg/;s?˗ԂCT~Zb-ß?~G&L;A^AH rμb޳B{~EFЁS^Z ̷RG9'qxHfś?֏?kU 9Aݱ'v%[h6))Fy;߰s/$ : %k&U2G)H[M1瘪;@nfuDBtvșC/KS;rFRA_)#[)rş5uQ&DK)»U/qTeαMַĴL9rT\g>DIkik`UE5WgYZ.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.gnu_debuglink.gnu_debugdata $o@( 00(0XX8o.Eo00@Tpp ^Bhhhcn0 0 t z2 (  $( (        X x x @ 0 `` ``t$PK!8T_p;p; rmd160.sonuȯELF>p @4@8@)) -- - p x-x- x- @@$$Ptd(((<<QtdRtd-- - GNUp,av1&"*  b&|CEqX픹] ` a  8 R"OH- @ r 8u ` 0 x0 x0  x  &2 $ '__gmon_start___init_fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_Jv_RegisterClassesInit_rmd160rb_requirerb_path2classrb_define_class_underrb_cObjectrb_data_object_allocrb_intern2rb_ivar_setrb_Digest_RMD160_Initrb_Digest_RMD160_Updaterb_Digest_RMD160_Finishrb_Digest_RMD160_Transformmemcpy__stack_chk_failmemsetlibruby.so.2.0libcrypto.so.10libssl.so.10libpthread.so.0librt.so.1libdl.so.2libcrypt.so.1libm.so.6libc.so.6_edata__bss_start_endGLIBC_2.14GLIBC_2.4GLIBC_2.2.5ii ui -  -  -  - `- h- p- / / / / / / 0  0 (0 00 80 @0 H0  P0  X0  `0  h0  p0 HH5& HtCH5b& %d& @%b& h%Z& h%R& h%J& h%B& h%:& h%2& h%*& hp%"& h`%& h P%& h @% & h 0H& H=% UH)HHw]H4% Ht]@H% H=% UH)HHHH?HHu]H$ Ht]H@=% u'H=$ UHt H="" h]h% @f.H=! t&H$ HtUH=! H]WKf.UH=SHH={H=vHH5tHHAHH7$ H5! 11H8H5$ HHuH==@6H$ HHHH[]f.#EgGGܺG vT2GGGG\AWAVAUATUSW3WODDWD$ËG Dvo A1AȋO1ЋVDD$DD_AAD~ DL$Dt$Df11G8AADW D1DEAA1D1AˋNAEE, AE1EEE1EDFAADA1DD$EADNE1EADE1EEDEDL$A1EAADAE1EEDf A1E1ADEDd$DEA1AEDF$E1AEDD$EEE1EDt$EDF(AAAA1DE1DDN,DDL$EEE1AAA1E1EDN0AAE1DDDf4DDd$EEA1AA1EDf8vpmDDt$DAAӉA E1EDl$AEG>pmAE A1EF">pmAEEAAE A1EE/>pmAADADD AD1DDl$E>pm D1DDl$DG>pmAAA E1EDl$AEG>pmA‹D$E A1EDl$AEG%>pmEAAE A1EE.>pmDt$AADAD D1DE>pmDt$DA D1DG>pmDAAA E1EF>pmAEAE A1EG >pmAEEAAE A1EE.>pmDt$AADAD D1DD>pmDA D1DG>pmDt$DAAA E1EGvmzDt$AEDAD!A!A EDT$AEDG"vmzADD!A!AA EAA썬)vmzDADD!E!AA DݍvmzA‰D!E!AA DDGvmzA‰!E!A EDT$AEDG*vmzAD!A!A EAEF&vmzDADD!A!AA EAAA.vmzDt$DADD!E!AA DDT$݉AvmzA‰D!E!AA DDGvmzA‰!E!A ‹D$EAEF(vmzDADA!!A EAEG&vmzDADD!A!AA EDT$AADA*vmzADD!E!AA DDT$݉AvmzA‰D!E!AA DDGvmzA‰!E!A EDT$AEEDG*vmzAD!A!A EDT$AEEAA1EEE1E1AEAAE1DADD1D1DAˉD1ɉΉ1AA1EAD1DAA1AEDL$D1ADAAD1Al$D1DAD1\$1ӉDD\$D11AӉA1EDl$D1DA1ىAAEDL$D1DAD1AAAl$D1DD1ʼn\$1DAED1ډ1O1AÉAEDl$D1DD1WADAEDL$̉GO D1t$D|$AىȉAӉGGD DD?ŋD$ADO E1\$‰D_[]A\A]A^A_@f.AWI׹AVAUIATUSHhWdH%(HD$X1H\$H4$DWAU\LH G1HHI H?ML$$A@I|A)LM)LLIEHLHHD$IE$HD$IE,HD$ IE4HD$(IEP~z[8cxF"@`p0ٙEѕi vF]'!Z!$׷ 6.hC5W&,)M)`?Kz$yLEv$YU.a`MQ~vu4 .Q6QZj)=Vc&&F,;e''=*8>RD6SBc4ƈ(vI,L&SI_܇41 ص'NXkUl-wa~9eu/M/)2 CT 1?4+և@Wfrcıf)RA"9:|͠q0Vi(ib`UgT"Oi5''Q0eijvm)ylU/98 5{ߗlJw  qGQ#EN˙9\cHdk=ri*tcV@[V_J1eN!Ac!tMY˸a u"쟤 dEUqibVR `>fuyCʦ:oNf*ڐѮ Ag d 2<: ٫)E9L PjW:9٫43}h|<' B@J M*:ԱgYZ.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.gnu_debuglink.gnu_debugdata $oL( @@p08o4Eo@T88 ^BXX hx x c np p rt'' z2''+((<X(X(l- -- -- - - -X x- x-@/ /00 0xx0 x0x00$3PK!Xnhmac.rbnu[# == 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 PK!n::sha2.rbnu[# 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 PK!'f%XXsha1.sonuȯPK!Fx+x+sha2.sonuȯPK!lzw++>Gbubblebabble.sonuȯPK!TXX-smd5.sonuȯPK!8T_p;p; rmd160.sonuȯPK!Xndhmac.rbnu[PK!n::$sha2.rbnu[PK