ÿØÿà JFIF    ÿÛ „ ( %!1!%*+...983,7(-.- PK]@Lbsha1.sonuȯELF>@P@8 @ P P P   888$$ Std Ptd ,,QtdRtdP P P GNUK\xq({CQB @ ( BE|DVqXF"Uuj  , P "X ` fP __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeSHA1_FinalInit_sha1rb_requirerb_path2classrb_define_class_underrb_data_object_wraprb_iv_setSHA1_InitSHA1_Updatelibruby.so.2.7libssl.so.1.1libcrypto.so.1.1libm.so.6libc.so.6_edata__bss_start_endOPENSSL_1_1_0GLIBC_2.2.5/opt/alt/ruby27/lib64 m'ui 5P P X  ` ` `             ( 0 8 @ H HHA HtH5R %S hhhhhhh% D% D% D% D% D% D% DH= H H9tH Ht H=y H5r H)HHH?HHtH HtfD=5 u+UH= Ht H=. d  ]wHHHff.SH=iH=dH=_HHH5ZH1H5 11HHH58[HHHdigestDigestDigest::BaseSHA1metadata;,Hp@`zRx $@FJ w?:*3$"Dp\pfEYGNUP  ` @`` A  P X o`0 W   oooo  GA$3a1 GA$3p1094` GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA*FORTIFY` r GA+GLIBCXX_ASSERTIONSsha1.so-2.7.8-141.el8.x86_64.debugX7zXZִF!t/?!]?Eh=ڊ2NH=N>&vL$; =ֿ0eyhUmQtɫއ,[2-8M9PQNSAEX+mmWT =yǂe~=Nֽܑs&𻩦.ŋ]Bl]m\cm%53fIr fV˰d*F9$ЂQ݃67tX7IJڀQzny;R Z@%֊5ojyTe|vT]LibmmhLel k^-UͨQ%y(e٭bQIIW< Ȣ~֗z?zukAopvZfW+(_T ѹӡC>]T}H_"1CHpk2ԭ0ļ/|-Mv H홹s$  x/{o5Iez:KzqâM`QŘjYx\9>Rb`[59SjyʖA.SZ0~ )n1 rx2niiEĕ0gYZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.got.plt.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata 88$o``4( 000W8o"Eo@T^Bhcn00pwF} 2 ) ,P P  P P X X ` ` X     PP PX`PD (d +PK]..sha2.sonuȯELF> @p'@8 @        888$$ Std Ptd <<QtdRtd  00GNU^hx:V̲@ (BE|qXGVbUF"y  , c` vh j` o __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeSHA512_FinalSHA256_FinalInit_sha2rb_intern2rb_requirerb_path2classrb_define_class_underrb_data_object_wraprb_ivar_setSHA512_InitSHA512_UpdateSHA384_InitSHA384_UpdateSHA256_InitSHA256_Updatelibruby.so.2.7libssl.so.1.1libcrypto.so.1.1libm.so.6libc.so.6_edata__bss_start_endGLIBC_2.2.5OPENSSL_1_1_0/opt/alt/ruby27/lib64Y ui {>m @     0  p P  p   ( ` h          ( 0 8 @  H  P  X HH HtH5 % hhhhhhhhqha%  D% D% D% D% D% D% D% D% DH= H H9tH& Ht H= H5 H)HHH?HHtH HtfD=U u+UH= Ht H= d- ]wHHHff.HHH~ff.HHHnff.AUH=ATUSHH=HH=VH=HGHH5HI"11H5g 1I-HLHOLHH511H5 1IHLHLHH5t1H5 11HHHH[H]A\A]HHmetadatadigestDigestDigest::BaseSHA256SHA384SHA512;<pX`zRx $FJ w?:*3$"D\p4FNA A(D0(G DBBGNU@  @ 0P  @pp !0>OY 8   o`   ` ooolo p GA$3a18 GA$3p1094P GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA*FORTIFYP b GA+GLIBCXX_ASSERTIONSsha2.so-2.7.8-141.el8.x86_64.debug1Q(7zXZִF!t/2]?Eh=ڊ2N. '~Xo/1U%V#?2I@DhZ&t:):.ĺb-6O:W؄Ia8)0ccLzr4ghpQ%)[,HٚlZLѲn_QV--zj!X\mlռWaّW?P/$Z9?}*< 7klM}Rդ>ɨDdc~_;/J}lyժ#*:!r3M XY\ߪL ; Y'$2j@S[5mwZ&y@Q`\Q|j'zMP>?i}"m+4x / $Ab5<lSM0:K\&1 Fzh-GOgl90}NQr>?.B0گwb>gYZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.got.plt.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata 88$o``4( (08oll.Eo@T^B``h8 8 c` ` n w } 2 9 <0 0          `` ` h `` D "("t@&+PK]-md5.sonuȯELF>@H@8 @ P P P   888$$ Std Ptd   ,,QtdRtdP P P GNUqeGV[/=b B A BE|_UqXF"Ush  , P X _ p fP __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeMD5_FinalInit_md5rb_requirerb_path2classrb_define_class_underrb_data_object_wraprb_iv_setMD5_InitMD5_Updatelibruby.so.2.7libssl.so.1.1libcrypto.so.1.1libm.so.6libc.so.6_edata__bss_start_endOPENSSL_1_1_0GLIBC_2.2.5/opt/alt/ruby27/lib64 m#ui 1P @ X  ` ` P            ( 0 8 @ H HHI HtH5b %c hhhhhhh% D% D% D% D% D% D% DH= H H9tH& Ht H= H5 H)HHH?HHtH HtfD=E u+UH= Ht H=> d ]wHHHff.SH=iH=dH=_HHH5ZH1H5 11HHH57[HHHdigestDigestDigest::BaseMD5metadata;,Hp@`zRx $@FJ w?:*3$"Dp\pfEYGNU@ ` @\P =  P X o`0 S   oooo GA$3a1 GA$3p1094P GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA*FORTIFYP b GA+GLIBCXX_ASSERTIONSmd5.so-2.7.8-141.el8.x86_64.debugo7zXZִF!t/? ]?Eh=ڊ2NߵN>&vL$; =ֿ0^3ӞB!.GUH>5\z4^2\bu $`Q:2:+ +rϢU{A9r\X7vxOtweb@x[ݍ N}-.s\0nVY{$UxaRqfEeЕxNJD9VXWwlqg g>/NTKr>muTx(U'ʽ)p݂-`:FWP; )YF3@w"X:"h2=+T(S}2!7Н0\fa("q֣}C#o?NJg#U!ܨlXۀ\Caf0A5E'L3|3 9||Y.dfmeuN)qp"OrmGJ_!^{pHCm72Q #73$# f:; #.JC#, {K+ [ LPK7iN̢n:IWxgXCctݑ+>9\ߣw,Ŏ#%f3RשMUo=Q&:9 k. Mf}Ҍy^a7Y~櫉 T8m<z%%%R6aFlBgYZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.got.plt.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata 88$o``4( 000S8o"Eo@T^Bhcn  pwF} 2 (  ,@ @  P P X X ` ` X     PP PX`PD (`+PK]_6 rmd160.sonuȯELF>@X@8 @  P P P   888$$ Std Ptd0 0 0 ,,QtdRtdP P P GNU^4B]kcK%} D  BEb&|qXF"|qU  , P e f3X 'P __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeRIPEMD160_FinalInit_rmd160rb_requirerb_path2classrb_define_class_underrb_data_object_wraprb_iv_setRIPEMD160_InitRIPEMD160_Updatelibruby.so.2.7libssl.so.1.1libcrypto.so.1.1libm.so.6libc.so.6_edata__bss_start_endGLIBC_2.2.5OPENSSL_1_1_0/opt/alt/ruby27/lib64 ui 8mDP ` X  ` ` p            ( 0 8 @ H  HH1 HtH5B %C hhhhhhh% D% D% D% D% D% D% DH= H H9tH Ht H=i H5b H)HHH?HHtH HtfD=% u+UH= Ht H= d ]wHHHff.SH=iH=dH=_HHH5ZH1H5 11HHH5:[HHHdigestDigestDigest::BaseRMD160metadata;,Hp@`zRx $@FJ w?:*3$"Dp\pfEYGNU` ` @`p  R  P X o`0 h   oooo  0GA$3a1 GA$3p1094p GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA*FORTIFYp GA+GLIBCXX_ASSERTIONSrmd160.so-2.7.8-141.el8.x86_64.debug;V7zXZִF!t/G&]?Eh=ڊ2NN UfG?*5z* N| *E9?3u[}C$NZJas;T}T;`>RBN0s ~fPeƈ/˵sM}=G͹Rr(0\D2u&DSV-F ^R{Ii76+-RIIۓPK &C.J&]IVЧ-b'밬1q׳J!,!!6 =Hc)*$Cc_.VaF[` -g9lr,O-x 㘺OcIo KEMtnv˃>Z1Uc۳8@k|bb.9LE:EQ+Sp*a{㿱' bY2/Z>,UJC"8B3%n}UH R0B6XH@JN~ 8qIP@vp%n;r^9pݘϯ&I8sF*h)-maJ)&q67;BWX?߻;ڧB g FEisQnlh^Xh$ՎYj! -I3Ozj9 cq_T? M$i4>R0ўۨkjqACEެ;\:`ҟ1_ 2o#U?gYZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.got.plt.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata 88$o``4( 000h8o"Eo@T^Bhcn@@pwF} 2  +0 0 ,` `  P P X X ` ` X     PP PX`PD ,h(+PK]E)..bubblebabble.sonuȯELF> @'@8 @      888$$ Std PtdDDQtdRtd  00GNU߸&(=2XU`@ BE\1A|qX U """pe, F"4p  ` G ;p __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_string_valuerb_str_newrb_eRuntimeErrorrb_raiserb_funcallvInit_bubblebabblerb_requirerb_path2classrb_internrb_define_module_functionrb_define_methodrb_define_singleton_methodlibruby.so.2.7libm.so.6libc.so.6_edata__bss_start_endGLIBC_2.2.5/opt/alt/ruby27/lib64*ui L @             ( 0 8 @ H  P  X  `  h HH HtH5 % hhhhhhhhqhah Qh A%- D%% D% D% D%  D% D% D% D% D% D% DH= H H9tH. Ht H= H5 H)HHH?HHtH HtfD=e u+UH= Ht H= Yd= ]wAWAVAUATUSH(H|$H|$HD$L A IHhALHHt@1HHD$H\$ HD$H@HD$HD$xMHD$ME1AIHIHpLtI)@ILI<6HBD F-AVHƒAVIADA)H88McIIHHHLHH)M9Fl D@@HHIHHRHH);LFDAFHIHHHIHHRHH);FM9 IAExHD$H([]A\A]A^A_fL`HhH*LHH9CH H5H81vfDHHD$GfHLGHwILoHHRHH) H\$ ;IBx3NAAaeff.HH5y 11HH '' AA":5p)`VZCSûO']AY4Z GoCYLZTX uqjrA"R ЏVFV&[1b\G}lLMhg{J Rphb8K $R%xSپpʔUJK󦡳3`}#i>޵VvIܱ{a'amzX#;*_ժ5\s~xf'Q;KOn1 /C;/bM'֘M"}L2k'R#5{Z~찉7Hi.$uie" k鉕2|^! Nx[g3;b5-, OЎyx@OKyvBukxwgYZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.got.plt.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata 88$o``4( 0xxn8o(Eo T00^Bhc  nw w}   wD      ( pp p  `p D "0"h&+PK] &+ + 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 53143 2015-12-16 05:31:54Z naruse $ require 'digest' require 'digest/sha2.so' module Digest # # A meta digest provider class for SHA256, SHA384 and SHA512. # class SHA2 < Digest::Class # call-seq: # Digest::SHA2.new(bitlen = 256) -> digest_obj # # Creates 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 # # Resets the digest to the initial state and returns self. def reset @sha2.reset self end # call-seq: # digest_obj.update(string) -> digest_obj # digest_obj << string -> digest_obj # # Updates the digest using a given _string_ and returns 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 # # Returns 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 # # Returns the length of the hash value of 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]]܃hmac.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 43668 2013-11-13 10:09:28Z zzak $ # 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.hexdigest # 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]@Lbsha1.sonuȯPK]..sha2.sonuȯPK]-Mmd5.sonuȯPK]_6 llrmd160.sonuȯPK]E)..=bubblebabble.sonuȯPK] &+ + Tsha2.rbnu[PK]]܃hmac.rbnu[PKp