ÿØÿà JFIF    ÿÛ „ !.%+&8&+/1555$;@;4?.451 4,$,44444444444414444444444444444444444444444444444444ÿÀ  á á" ÿÄ     ÿÄ ?    !1AQaq"2‘¡±ÁðBRbrÑá#‚’¢²3S CñÿÄ   ÿÄ !    !1QAa‘2ÿÚ   ? 5˜Z¯V¦cø)›t/? z¨±>Õ5€¶‹Á¤·¼z¼Ü¬+ñ®v¤¨_ˆR­BFn©—˜ý®ç̝P8gýt·ÉSTŦˆìät?þé¼íìN/Þa)ì–í6ô… Ï¿øÃj´¿KÇü]ÿ ªô¹-eKànëÕHTx}ýSÜ›ÿ ”7Ø×&µ<¦  ¥ÑO¶[Ù¯ä¨ÞÃÿ PZ-¬;#õ|•oaÿ ©CìÞz3˜öː/¤­ñTûIØ}š^ mÓ%ªxˆ¥ÉŸu=Z+ISe¿45™¼u;ú&WØ÷€æßQ™®{|íx*TC“#ZŠìZ§²‹ 6pv…³¿¡äª*áZÐ%ÒOáˆo"x«OHk w±æ+¬V(kMúŸ5Vö«$ ÁrÏbàb57/luR ¸ÑÛj Òµì`Мq­û žICÀÊ•©4€Âcà¨Ï€O´<èÐ:›ù(Ë^L8þ‘ÍÌ#¸Ð_Ì©ÙK(Öz 4¬û+¸;ü’V’84‘¬ÃŽ:[â‡ÔÌáõp¢~§ªlæ£ö{®G>J¼"°‡7¯ÆÉèßû ‹É‹§ÁòÃýâßî ^ƾÙõ‹×óH#«LP½ïX=xÑÍ$|W?•~• îëÔ©ª‹ {ÝT…Kÿ ”hûâá)J*ö˜–ÔU;iÇ€/ ÆþjóZ\ýwØ=Ìm ºèËL9 ýèÆð/¨’¥öo=nË.%Îì ŽÕ¯È|{Oj²ƒE6e/ßdÄõ²Ìâ1O®ò×TsəԸhOMýíMˆ¿¼H˜l²,7Â¥#MF/Úf°Ö½± ¸–dr‹NýÊ íjqx{œÉ ä-È ¦ øÄër¨q°ð †nцýÑÄÆ’mä…n<0È™;ÁÝá¯ÁZƒ7FÀmì­ É&9ˆîéi¶ùN§Y• ÃZãAâ?•‡©‰ , ó¾IŸŠc1 4â&y­&pŠ­6;M À 0¹qç»p.á …ŸÅáK@%6·y6ƒ‰3?”úºŽ‰éX5ªPT §µ!=Mž«Ú½‹ÅgÂSâÉaþÓoö–¯ÁÔìR>5éÿ üs¶ÆUcÌ kÇR ]ÿ ù¬¼«VŽ;Â|‡~¢¦”ÏŰæ {L™Õ°Óv¹ò¸írޡעCÃ!íVÕ {¶»sŒNPg/ "uÕbkm²“$ďå¿é¹§°½æz¯6 †s¿!s–wÚÝ“™Œ °.ûj>·+™Òa…©Œ&rÝÎtÛë긪Ît’LAVp%c Úý[ÄzJ¾ÇàXXç@˜ó<êL]·T˜¾¥1Ó©V‡g´æ½¦Ý@¹óø!_@´ÞâSÁ —S3™•& ]@JHÚý©ZŽ €×æÔr»Áf!‡yÞ4Mv*èÓã_{‘åóUuљØ«Oïé*®EvÑ Œ÷‡U \"㪒ÍK+À 4“M¡ï:0¥5í!'<@î´”>Ç»&Z–ïCCV˜Ì5Šo&îhè.žû |ÓK©h$s6KìŒëã)¹hI¦GïOåóI;ììü#É$Š0…Ææ¥TØ.5­¾gn´ “ÂÖ\:hœ89G)J@„}œ:’Ò{/Š"¦_Æ×7Æ3VÇŠÊa]ÚŒÙ€Ä–=®uÁßâACZƒ§§£ Qnâ:«,×{tyø¬iÛcœÜÄ€H½ÄÍCk´÷šß .W'b¤Íåh]÷€=,Žv×cÚEÚHXJX¶îo¨FÒtèöŸ>ªª6[J®Fµ£sGÁeqõfe\íjÒÐïÄÐGˆe1Ø‹.Ø”‘Ëuø Y­ˆÜ ŽG|zùªüMpDnQWÄ”%JŠ™)â*p@Örš«ÕT2Ð%ˆG#ª„ ·¤!°ŸOTÂT¸aÚ%4&h™LµšØüÐ.F¿²ÐÞ_Ç‚¾ÅÃaÜ÷09Æ q€öy˜v‡85õN÷]¬äѼóS{°_MެúÔ#°Ç¸0åÞè2ëôPcvÆw9®ií1Ä8F™˜à‰´+‰Ik1òÝ7“Ñ×ÒsÝ\x‚h`ÞÑ`ó"|µEcý£n˜h`}GÞ !±ù²Ápü²ß6 0ïi󜵩SÈÇ7˜-ÕURO˜¦´f$ªž-Í6(œ}<„ éc øs]ŽŽ„*—¾ ìdŽ„)méª\¿êÎIg¾ØÞ~I#C/¼¼´EÁÈŽi8“©õådô·>euä ƒ'Ê×लR1ÉJE1ÐAát`t;ÇР%Ý<‡¥„ÍÆ`×Oyó)õiI€ñQaŸ4Ûù\áàaÃÔ¹HÃu¹*k€¦<„e S‡&õÏ B!ŽhüÞ`yj}mªf×\¿ Ç~æ­9‡û\՞Ǖg²1Žû5V7 !àöšm° c`ܬøÇìµÒ'P"?…´Ö,"§^•õލsÔ)6˜sæéÍR¼ ò|Sl”‹7 nPW Gòú÷½§O¯‡„l¡kSÞŒr½PÊ@æ¢pŽ-mÿ #Ÿ˜Àº¶Áä¦;ïÔæ$1££`“Õ>„—·ž)ßð³ñ#Ï Ô$¶œ‰ÊE‹À;÷º ¯«P:Ñ”8–IÊtpÞ3ª“>ê“þës4ò2OÏÕ­±zô†Õ§‰.÷ä¸;¿˜“'œ›žª}«Œ{ª±Ì 9ÔóÞÕ‡0 $íWV3Üì¬ —@kÝ4@¿r¼±½¬™›?øØæ´'Áé®CË3-g$˜ö‡×auÚi´Žp/êÛ æF›Ú2v‹ã¿¿,nB1̨ƃqÞa5͝@&Æû“él÷ \C²½UÍc ¯k×¢U ÖéQå™—-r wô ÞÏ<Ò=&=ÿ Ôê Òêˈt,i—;LîÜ á¸*ÚÃ1$êL•LÍ <É)ýÐà’ ;F™{ƒ™˜€&'}‚ãÄK`¡ÞT@I;®žZóè‚s’7®°›+§O­Åq©é»²9<Ô J ¼9O’HL»Ùïì¸rk¼Ž_ý‘TŸu[²ßÚŒ·ü÷B%¯E ŸÔX5êO´ Ç•€’I0 ÉJX` ñ¹õ%;µŸD‘«´€àwÒ™U ûئžÖö\×®×´8 ½‡ºÐÆÓ§?Àkmœ=;d5*@-ì0F Rªýš[Ü6âö̃ڸr*KA9· u*µæ£?U¸Âêí†8@¦X4 e-ò„0s{ HâUpU?¼mñRa°®a%Ð'tÉ×’\¾ÊÉ]t›h>·(Ë@R¼¡Ãt h}’O÷au<+nT…Ö…MӐ??Óe95 q>í/;&JSû °¯ÊéÞ øƒ*Ã2½Ài&:nôUl=¾¿5eˆ3”ñc|Ú2V”>„»&eE;«ÚäC p¢Û úy 9š[ŒÌx¼擼A&DåÒ¯ˆ¤ÀÌ;"˜ ÏQä¸åhÊ}Ûq«Û0WžÒ|»€ø®öCm5•\ÇÀ§Pe3£]0ÃàLDÉ‰1øªxjgwT‚÷¿LΨK‹›ùs—xˆÜ±µ kæ¸f‰‰ÜGk/LÛØ6d9ò¶ùA{ƒA3š/¬D¬khÓk‰`˜"㯒r¿±Óã jx‡°e}<Ñø\3y:'À•/h½Í€Ç4~g ?Û(¼]v‘ªlKÎâ~?O‚W%{Ì:“'©úNq¾›úo(X’¥¯ˆ nFê{Ç€ü?º'ë ø‹ì Þ09ŒÌç9Æ —ËC`j@ÓÄ(+a‹un¸#ÂꟋ{K`‘ÑÍÍ'à´»/Û,KW;Þ4²þð ï Nm|~fGÏ(…³Ã)«1ö­Õ ¥‡¨©ƒÃ™ü-s=à=U66Ï«Ýc蓦W¹íž®›nÔ%êÇìŒ<#Ü×84ån®Ð ÒåOC` ñânÑs‡¢ç 1õ%Îhì½Ã½® e:ݼUZo™`  ÅZŸŒÊ«ê1ÏÄo$q¹Þ€©ˆhÐÉä¯ñ[!…Ú˜àJ:x2$Íß&PåT£6ç— ‡Í*4Ýšçjÿ ‰É nófÐ ó(L5C•åÆ\rMÒ@ò }y-W}™üýVù—ú¢=Ù”c®‘< M ž ´Phr ¦©TD ‘ù.$´÷O‡‘V2Æò.=IUŒ=ž‡â¬i™aþÓåÙ?òUø'ØÖ•.~* šTŒ!•-×áºTâ®ä#õü'´ eýlYÅÓeÕKÂrT"CÚ@u!Óxƒ{š3€}1¿(r}%«nËamjÑ%ÑNEò v ˜à  σöK³,*º.àzù¨™Ó ÚçâU¦*¿ 9{%Ö¹ njûdaXöb) kÛÆ±ûÓ\°M7ˆÂ=û›ç¿Ã‚­V»Cg–8ÙêE- j)k$º`Ã-ùEýeBÆÇ]c¡°ñty&Òd0nõ'¡W+ƒ*|–øµFa\GQªEAÔp5\Ǽ·¼Ç8·õ -â§Ú[ ‡ uZeÖ 3}×d'+¹:ð+K†Û®s!Ï$úe€<Û”x)1»a­¡LC]¸µík…ÚàA»AYº{†ªS[¦5HÒ7ù --,ísòDØ€èk ÞÀîÜ ò@â( ËNˆë›4ô½•/¦o‡€Û7 ê•ÆêòðÜy'Án½µ á˜ݦ ndeo…[ì¶Ê,¥R³Ä=À±—–ß;£™´ñSâ*g§”ïaið‘Jå~™ÓÞ ß³Õ¢»8x埒²52>AÊb&-÷\7´éÄù€T˜,w;3{ï˜k…à¹ÄqÀ«œ{€\ ˆ¾[´¨јr &Úé„Ívˆ±8†¿]|¬ņ4I×pÞS1ÈÖz‰#Ìv‡G!YNògñ:màTz¢Ý1ô©^O=~ë|5Bã™ç•¼µõ•bÆ@úÕS¬ÈŒ#¬zünrŸ û” Z²•èðV"ÁHÚý©wÝ €7¼Ìu1hÑa3Éä û f$o¿É ™Ú›ÝçnpÒ3äÌ3†Í§,Äï]$‰/pê †«À¼¸e9­Æê_C]žƒ·ý·frÁN«, E=›Çq -‰öŒ:aÏ¿±í&£Í:-} 84‘ÿ eƒQÑeëSsuiA ³g㟥ú£?ÿ ʼn*”“÷aühe:ÊWa@ÒÞk±eØ] F Ô—r.åä˜ @ö¥ªZoÐýYL·¥S²G/‡ñ <~*ZÆ´è>JlòàÛÆ½ÿ 窘ìGN¢:I®KšJp/`íIÁÀõ#Ä-€ö­šµŒoF4|ÆQØÆ@Ì|£Ô…¢À{9˜è½Üó›€ôYÒÎYsið;ís¤€à²ˆ‚4qÉVŒI$ ‰"° æµ8cXGjœˏ¡Aâý•ËÜ¢ûï e·çLx']á"oÅÎê3¯Ç—¹”ó0nå‚âg{Œñ> S´˜îè°g238‚ãköÝfÚd´6Ò€;ò÷±¢™¼›º ¢Æ'¥Ðx'e¬ç ]bÈÆV¢ó‹kýBO ðÊâ$Ÿ!×T 3Mýמ žìٍàÌü‘8÷€àæØ8æ©6‰©L´«…oãpð„~Çk‰!ñ;‹”ÛžÍ àž±z Ÿôû øŸÝužÏ;ÿ #|u6™Þ¬ÚˆÐõA4¶â|ôl|Ê2ŽÇ¤ÝÅÇY.<#Aí.k§hóF‚”Y; M½Ö4hŸ4&›­¿tès´%FìL¥£Ãk‰ÇT¤haÁ¤ÚxfÉ`ÑìË›>i 3t‚:,–+^÷´–{Û–Nxi"x‘Ûg î¨>¥Õ܁ùZH,2Û“:8xÊ¢Çí9.É-Ìâã-=çjwµS˜dütžçwýGòú®®ûº_ˆýx$–¡ãøO EÚÛÏ÷R„×w+3£Á£öUMyR²¹âŒ°š›¸Ñãò9§Ó_Dl+Ùßc›úšGÅÌc†Ž!Ko=¶.‘Îÿ c²(2®V mª.ÿ ¹B›¹å ù„öŸSV>™ü¯$y:G¢Z×àøúdî¹û­·ýÇ´:•c LÍõi_‹ö+ÎæGÊè>OŠ•äž´§Þ{X}¨1ÚTc›»Qþ•êô°t¿OP?eæ~É{5]•ÙR£r5†nZ\ã@ &îJõ ¾àC°þV>fé¥/ü5ñÊIº_é5 ;e­h<@ Ä&æÃëE%;X,ÒãÆÞ`Oò¦kŸm#˜!ÀyÄ¢| óLšò¥Ä` ¶R=|ÈCâh5ò3DˆïF†ðÒ#ÅìÛœ?¸yhBãœí ZxßÎÄhºRK„`Þödvײ™ÀÈÑÒgŒuY w³%†ƒÓzõ ÖÏp‚dH®¦A´ù§»ÓÇMæ~)ˆð‡û:ù&Ä •vGD´À n ݇¼Ö8Fö óáà£~Ë¥x`oK|Ä?fxiØü%pìR>éò+Û±éÎ>núlFŤ'tq8LZÏvÃ?„¡ß±È⽆¯³íü@x|PöUäèØã¡ð‚ŒAìÏ"vÍwóŸÍ{ ý0.z È•Ö{,N¡£¡ŸKÕÙž>Ýœþ ÍÀ°<×EA!Å‚D™IúOÍ¡>ôG}Â` ÍßkÜL™Ž Þð™ {IøF²¹òQ3&!ÃÂÞz.d&Ï-sH¸,Ôõ˜ŽP€ 77ˆÝ¼ÊëÜw =cÕ Ú,ØÐ5ÎYÐ)ì´öœgŒ[¤ßv㙑8心>h]§µháYš£²ºÑ.{Ï7Sð•?´~×SÃKýJÛ˜ ™Íäiúu<µX¶1õ^kâçIÑ£sZ4h>j*ÔšD:4­¿_ ÷¸ Õxæÿ ¸?Mù _•­ÊÐ ä ÷ý ÑwL œ­ïnTkÛUÍN©ë:¦fV ¶ÜÔÜMªÅâA½–¿R×TXš-%iTÊT•‡Ù‚JôϐZxWÑè‰f‰òG º ×Õû2aZ7OU3[“×AT–ÞŒ…-‘¤”Ì ì&(ˆ¿­•ƒkï’:ðY¦W‘ Å)“†‘˜³Åtcø˜ñTÂwÚÇ4|üLÇªí–v- qˆèU qPE.†â‘˜µ Æ,ÐÅs]8¾„oúÑ i>ÜxxÈó)ƒ ´æÁâØ$À‰vžŸf$Ž |ãw;ÀÁIJ»b` {¦Ó¤Ú$©YÀ‘n@Óïž«9J¼êG m¤ ܯ¹ÌW4€ÐÒÅÛ‡#褕Ÿn-?í|с¥÷Ú¹¬'´ÞÜ9ÓK `hê£SÄSà?7—Wí_´…óB›»:=Ãïq`<8ñÓŒÑlú2d¬ê³£hÖ[l|$vÝro~'R®‰§°ñmY ͧäP |PUª¹·:3Œ[Û{Xÿ ºâ@‚W–Äé u‚ ¯´*=íή.pûÒdt @G‰¬ s¸ ëÉücr ÞæÑ¨Ê@>¤¢Ö±. Þ'¯°ÌME[YéïĵÂCå½ Ué©Áû'Ê9%eÔðNU”ë‘ÌsD3/®+UI˜9h.WC”빓$#:pz:YÓ ¿xž* ³$Í +$kñAŠ‹†¢ Uê>¸)_š¬÷©ßAÂÔb9ÇU ¯¾á•9¯ÏÏ÷O÷¼¼Fähal1‰3Ì[Ïr•´UCksNÐ] R‘¸¥H+§Šé†c©vÖÞ0iÓ76s†î!§=ß ¼~Ô'°Ãmäoäš³ªøi1úÉ)³yV8 CLÄØÁ‘WYïi€H6ÖÑiámø^ÈY´°Ñ7¥Û*—Ñ©L«Qƒï—Ùrÿ ›£Ð*š¸ˆL©ˆ$ˆ ÷¾D§9È®«qbqC)–ˆïv´çñsÑVT­Ø, <àïºÀO«Jý·õ àfPìð .wFšir´þ’2_Y *Æ€x\« ì€9š@ Ž|F⇥ˆkZ@hÖÄ0t¿-<“‹qµ¾*ZL¤Ú)&BJpÓF5=$„at*Zš$’ÑtdûÝRI1 2މ$€$I$#‰SÞ’Hë¬ï;Á$¡t$’`<(ñÇt)$‡Ð.Êf¢X’Kt=Éé$‚ˆªè¢oÝëòI%Rgcª÷ŠyI%¡‰ÿ !ñ)´õ $¤ Ô’IIGÿÙa 3g@sddlZddlmZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z ddlmZmZmZddlmZeedZhdZedZedureZnd d ed d DZed dgdZeekred dgdZndZzddlmZm Z m!Z!m"Z"Wn*e#y@dZdZ e$Z!ddZ"Yn0z ddl%Z%Wne#yfdZ%Yn0e &e%dZ'z ddl(Z(Wne#ydZ(Yn0e j)ddZ*e &e* oe(dZ+ddZ,dZ-ddZ.Gddde j/Z0Gdd d e j/Z1e2d!kre 3dS)"N) unhexlify)support)_4G bigmemtestimport_fresh_module) HTTPExceptionZgettotalrefcount>md5Zblake2Zsha3sha1sha512sha256ZPY_BUILTIN_HASHLIB_HASHEScCsh|] }|qS)strip).0mr r 0/opt/python39/lib/python3.9/test/test_hashlib.py "sr",hashlib_hashlib)Zfresh)Zblocked)HASHHASHXOFopenssl_md_meth_names get_fips_modecCsdSNrr r r r rr6srzrequires _blake2T)Zubzrequires _sha3cCs6d}d}|D]$}|||d?d@||d@7}q |S)NZ0123456789abcdefr )shrir r rhexstrJs "r"z(http://www.pythontest.net/hashlib/{}.txtc cst|}zt|}Wn&ttfy>td|Yn0|T|D]>}|}| dsJ|sfqJ| d}t |d|d<|VqJWdn1s0YdS)NzCould not retrieve {}#rr) URLformatrZopen_urlresourceOSErrorrunittestZSkipTestr startswithsplitbytesfromhex) hash_nameurlZtestdatalinepartsr r r read_vectorsUs  r0cseZdZdZddhZejdkp eZddZ fddZ e d d Z e d d Z d dZddZddZddZddZddZddZddZddZdd Zd!d"Zd#d$Zdd&d'Zd(d)Zd*d+Zed,d-Zed.d/Z dd2d3Z!d4d5Z"ed6d7Z#d8d9Z$ed:d;Z%edd?Z'd@dAZ(dBdCZ)e*+e,j-e.dDkdEe/e.dDdFd%dGdHdIZ0e*+e,j-e.dFkdEe/e.dFdFd%dGdJdKZ1e*+e,j-e.dFkdEe/e.dFdFd%dGdLdMZ2dNdOZ3dPdQZ4dRdSZ5dTdUZ6dVdWZ7dXdYZ8dZd[Z9d\d]Z:d^d_Z;d`daZdfdgZ?dhdiZ@djdkZAdldmZBdndoZCdpdqZDdrdsZEdtduZFdvdwZGdxdyZHedzd{ZIed|d}ZJed~dZKeddZLeddZMeddZNeddZOeddZPeddZQeddZReddZSeddZTeddZUeddZVeddZWeddZXeddZYeddZZeddZ[eddZ\eddZ]eddZ^ddZ_e`jaddZbddZce*deed1udddZfZgS)HashLibTestCase)rMD5r ZSHA1sha224ZSHA224r SHA256sha384ZSHA384r ZSHA512blake2bblake2ssha3_224sha3_256sha3_384sha3_512 shake_128 shake_256r<r=posixc CsRz t|WStyL}z(|jr8|tvr8td|WYd}~n d}~00dS)z@Import a module and return a reference to it or None on failure.z%Did a C extension fail to compile? %sN) importlib import_moduleModuleNotFoundError_warn_on_extension_importbuiltin_hasheswarningswarn)self module_nameerrorr r r_conditional_import_modulers  $z*HashLibTestCase._conditional_import_modulec st}jD]}||q d}|r<|ddhi_|D] }trZ|drZqFtj|<qFj D]0\}}|t t |d|fdd}||qrd}|_ |r, t|d t|d j D]F\}}t |d |d} | rz | WntyYq0|| qfd d } d } | rP| dd} | rh| dd} | r| d| dd}|r| d| d|r| d| dtsd}|r| d| d| d| d| d| dttj|i|dS)N_blake2r6r7Zsha3_c[s.|durtj|fi|Stj||fi|SN)rnew)dataZ_algkwargsr r r_test_algorithm_via_hashlib_newszAHashLibTestCase.__init__.._test_algorithm_via_hashlib_newr openssl_md5Z openssl_sha1Zopenssl_cs"ttd|}j||dS)N__get_builtin_constructor)getattrrconstructors_to_testadd)name constructorrFr radd_builtin_constructorsz9HashLibTestCase.__init__..add_builtin_constructor_md5r_sha1r _sha256r3r _sha512r5r _sha3r8r9r:r;r<r=)setsupported_hash_namesrTlowerrIupdaterS SKIP_SHA3r(itemsrRrr assertTruehasattr ValueErrorsuperr1__init__)rFargsrNZ algorithms algorithmrJ constructorsrOrrVrXrYrZr[r\r] __class__rWrrh{sp            zHashLibTestCase.__init__cCs|j}tj|SrK)rSvalues itertoolschain from_iterable)rFrkr r rhash_constructorss z!HashLibTestCase.hash_constructorscCstSrK)rrWr r r is_fips_modeszHashLibTestCase.is_fips_modecCsLtdtd}|jD]0}||dd}|j|jvr>|dq|qdS)Nb FZusedforsecurity)arrayrangerrrUshakes hexdigest)rFaconscr r rtest_hash_arrays     zHashLibTestCase.test_hash_arraycCs"|tjtdd|jDdS)Ncss|]}|r|VqdSrK)islower)rZ_algor r r sz=HashLibTestCase.test_algorithms_guaranteed..) assertEqualralgorithms_guaranteedr^r_rWr r rtest_algorithms_guaranteedsz*HashLibTestCase.test_algorithms_guaranteedcCsD|ttjtj|dtjtjD]}tj|dd}q,dS)NZ undefinedFrv)rdr^rrissubsetalgorithms_available assertNotInrL)rFrUdigestr r rtest_algorithms_availables  z)HashLibTestCase.test_algorithms_availablecCstjddd|jr|d|jD]}|dd|dddq$tjdddtjdd|jdur|jjddd|jjdddS)Nr Trvzskip in FIPS moder)rrLrsskipTestrrrrrPrFr}r r rtest_usedforsecurity_trues     z)HashLibTestCase.test_usedforsecurity_truecCsvtjddd|jD]}|dd|dddqtjdddtjdd|jdurr|jjddd|jjdddS)Nr Frvrr)rrLrrrrrPrr r rtest_usedforsecurity_falses    z*HashLibTestCase.test_usedforsecurity_falsecCs$|ttjd|ttjddS)Nzspam spam spam spam spam) assertRaisesrfrrL TypeErrorrWr r rtest_unknown_hashsz!HashLibTestCase.test_unknown_hashcCs|tdjddS)Nr4r )rrrLrUrWr r rtest_new_upper_to_lowersz'HashLibTestCase.test_new_upper_to_lowerc Csttd}ttd}|t|dz ddl}WntyJ|dYn0dtjd<| z0|t|dWdt vr|tjd<qtjd=n dt vr|tjd<ntjd=0|t |d|d}| ||j |t|d dgdS) NrQZ__builtin_constructor_cachetestrz_md5 module not availablerYrr2)rRrrrfrY ImportErrorrsysmodulesclearlocalsrZassertIsrrsorted)rFZget_builtin_constructorZbuiltin_constructor_cacherYrVr r rtest_get_builtin_constructors2        z,HashLibTestCase.test_get_builtin_constructorcCs~|jD]r}|dd}|j|jvrP||dt|t|d|dq||t|t||qdS)NFrvrw) rrrUrzassertIsInstancerr*rr"r{rFr}rr r rtest_hexdigest s   zHashLibTestCase.test_hexdigestc Csd}|jD]}|dd}|j|jvr&q tdur:t|tr:q |j|jfD]R}|t|d|D]:}|tt f||Wdq\1s0Yq\qFq dS)N)i ll lll Frvi) rrrUrzr isinstancerr{rrf OverflowError)rFZ large_sizesr}rrlengthr r rtest_digest_length_overflow*s   z+HashLibTestCase.test_digest_length_overflowcCsr|jD]f}|dd}||jt|j|jvr@||j|jn||j|j||jtj |jddjqdS)NFrv) rrrrUstrr_assertInrrrrLrr r rtest_name_attribute:s   z#HashLibTestCase.test_name_attributec Cs,d}d}d}d}|jD]}|dd}|||||||||j|jvr`d}nd}|dd}|||||||j||j||||||dd} ||j|| j|||||dd} | j|} | } | |||j|| j||| j|| qdS) Nsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbs~ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddFrv)rwr )rrrarUrzrrcopy) rFZaasZbeesZceesZdeesr}Zm1riZm2Zm3Zm4Z m4_digestZm4_copyr r rtest_large_updateGs0          z!HashLibTestCase.test_large_updateFc Kst|d}|}|j|}|t|d|D]}||fi|} |sR| n| |} || |d||| t||f|s| n| |} t|} || | |s2|t| | j q2dS)NzrHash algorithm %s constructed using %s returned hexdigest %r for %d byte input data that should have hashed to %r.) lenr`rSZassertGreaterEqualr{rrr*r+ digest_size) rFrUrMr{ZshakerNrrkhash_object_constructorrZcomputedrr r rcheckgs(     zHashLibTestCase.checkcCs&|j|}|D]}|t|dqdS)NZspam)rSrr)rFZalgorithm_namerkrr r rcheck_no_unicode|s z HashLibTestCase.check_no_unicodecCs@|d|d|d|d|d|ddS)Nrr r3r r5r rrWr r rtest_no_unicodes      zHashLibTestCase.test_no_unicodecCs|d|ddS)Nr6r7rrWr r rtest_no_unicode_blake2s z&HashLibTestCase.test_no_unicode_blake2cCs@|d|d|d|d|d|ddS)Nr8r9r:r;r<r=rrWr r rtest_no_unicode_sha3s      z$HashLibTestCase.test_no_unicode_sha3rNcCs|j|}|D]}|dd}||j|||j||rn|t||||t||d|n,|t|||t|d|||j||| ddt |qdS)NFrvr_r) rSr block_sizerrrr{rUrr)repr)rFrUrrZ digest_lengthrkrrr r rcheck_blocksize_names   z$HashLibTestCase.check_blocksize_namecCsX|ddd|ddd|ddd|ddd |d d d |d d ddS)Nr@rwr r3r r50r rrWr r rtest_blocksize_names z#HashLibTestCase.test_blocksize_namecCs\|ddd|ddd|ddd |d d d |d ddd|dddd dS)Nr8rr9rr:hrr;Hrr<rr=rrWr r rtest_blocksize_name_sha3s z(HashLibTestCase.test_blocksize_name_sha3cCsl|j|}|D]X}|}tdur,t|tr,q|||d||j|||j|||j|qdS)Ni@)rSrrrZ_capacity_bitsZ _rate_bitsZ_suffix)rFrUZcapacityZratesuffixrkrrr r r check_sha3s zHashLibTestCase.check_sha3cCsd|dddd|dddd|dd d d|d d d d|dddd|dddddS)Nr8iir9i@r:ii@r;i@r<i@r=)rrWr r rtest_extra_sha3s zHashLibTestCase.test_extra_sha3cCs |ddd|ddddS)Nr6rrr7rrrWr r rtest_blocksize_name_blake2sz*HashLibTestCase.test_blocksize_name_blake2cCs|jddddddS)NrrZ d41d8cd98f00b204e9800998ecf8427eFrvrrWr r rtest_case_md5_0szHashLibTestCase.test_case_md5_0cCs|jddddddS)NrabcZ 900150983cd24fb0d6963f7d28e17f72FrvrrWr r rtest_case_md5_1szHashLibTestCase.test_case_md5_1cCs|jddddddS)Nrs>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789Z d174ab98d277d9f5a5611c2c9f419d9fFrvrrWr r rtest_case_md5_2s zHashLibTestCase.test_case_md5_2z!test cannot run on 32-bit systemsr)sizeZmemusedry_runcCs|dd|ddS)NrAZ c9af2dff37468ce5dfee8f2cfc0a9c6drrFrr r rtest_case_md5_hugesz"HashLibTestCase.test_case_md5_hugecCs|dd|ddS)NrrZ 28138d306ff1b8281f1a9067e1a1a2b3rrr r rtest_case_md5_uintmaxsz%HashLibTestCase.test_case_md5_uintmaxcCs4t}|d|dd||ddS)z,Regression test for gh-98517 CVE-2022-37454.Z880762e8ce6700f114fec0f621fd97c4b9c00147fa052215294cceeedN)rr8rarr{)rFrrr r rtest_sha3_update_overflows z)HashLibTestCase.test_sha3_update_overflowcCs|ddddS)Nr rZ(da39a3ee5e6b4b0d3255bfef95601890afd80709rrWr r rtest_case_sha1_0sz HashLibTestCase.test_case_sha1_0cCs|ddddS)Nr rZ(a9993e364706816aba3e25717850c26c9cd0d89drrWr r rtest_case_sha1_1sz HashLibTestCase.test_case_sha1_1cCs|ddddS)Nr 8abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopqZ(84983e441c3bd26ebaae4aa1f95129e5e54670f1rrWr r rtest_case_sha1_2 sz HashLibTestCase.test_case_sha1_2cCs|dddddS)Nr a@BZ(34aa973cd4c4daa4f61eeb2bdbad27316534016frrWr r rtest_case_sha1_3s z HashLibTestCase.test_case_sha1_3cCs|ddddS)Nr3rZ8d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42frrWr r rtest_case_sha224_0sz"HashLibTestCase.test_case_sha224_0cCs|ddddS)Nr3rZ823097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7rrWr r rtest_case_sha224_1sz"HashLibTestCase.test_case_sha224_1cCs|ddddS)Nr3rZ875388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525rrWr r rtest_case_sha224_2sz"HashLibTestCase.test_case_sha224_2cCs|dddddS)Nr3rrZ820794655980c91d8bbb4c1ea97618a4bf03f42581948b2ee4ee7ad67rrWr r rtest_case_sha224_3$s z"HashLibTestCase.test_case_sha224_3cCs|ddddS)Nr rZ@e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855rrWr r rtest_case_sha256_0)sz"HashLibTestCase.test_case_sha256_0cCs|ddddS)Nr rZ@ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015adrrWr r rtest_case_sha256_1-sz"HashLibTestCase.test_case_sha256_1cCs|ddddS)Nr rZ@248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1rrWr r rtest_case_sha256_21sz"HashLibTestCase.test_case_sha256_2cCs|dddddS)Nr rrZ@cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0rrWr r rtest_case_sha256_36s z"HashLibTestCase.test_case_sha256_3cCs|ddddS)Nr5rZ`38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95brrWr r rtest_case_sha384_0;sz"HashLibTestCase.test_case_sha384_0cCs|ddddS)Nr5rZ`cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7rrWr r rtest_case_sha384_1@sz"HashLibTestCase.test_case_sha384_1cCs|ddddS)Nr5pabcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstuZ`09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712fcc7c71a557e2db966c3e9fa91746039rrWr r rtest_case_sha384_2Esz"HashLibTestCase.test_case_sha384_2cCs|dddddS)Nr5rrZ`9d0e1809716474cb086e834e310a4a1ced149e9c00f248527972cec5704c2a5b07b8b3dc38ecc4ebae97ddd87f3d8985rrWr r rtest_case_sha384_3Ls z"HashLibTestCase.test_case_sha384_3cCs|ddddS)Nr rZcf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3errWr r rtest_case_sha512_0Rsz"HashLibTestCase.test_case_sha512_0cCs|ddddS)Nr rZddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49frrWr r rtest_case_sha512_1Wsz"HashLibTestCase.test_case_sha512_1cCs|ddddS)Nr rZ8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909rrWr r rtest_case_sha512_2\sz"HashLibTestCase.test_case_sha512_2cCs|dddddS)Nr rrZe718483d0ce769644e2e42c7bc15b4638e1f98b13b2044285632a803afa973ebde0ff244877ea60a4cb0432ce577c31beb009c5c2c49aa2e4eadb217ad8cc09brrWr r rtest_case_sha512_3cs z"HashLibTestCase.test_case_sha512_3c Cs"||j|t|dD]}|d|dqd|d}|jt||d||j|t|dD]}|d|dqdd|d} |jt|| d||j|td|dD]}||dq|jt|dd|jt|dd|jt||dd||j|t|dD]}|d|dqd|d} |jt|| d|||d dtdd D]}||d qf|jt|dd |jt|d d tdd D]}||d q|jt|dd |jt|dd |jt|d d tdd D]}||d q|jt|dd |jt|d d td|dD]}||dq.|jt|dd|jt||dd|dd|dd|jt|dd|jt |dd|dd||d|jt|dd|jt ||dd|jt |d d|jt |d d|t |d|d d d d dddd ddddd dS)Nrrsalt)personrrkeyrr)fanout)depth) node_depth) inner_size) leaf_sizerl) node_offset)rM)stringrrT) rrrrrrrrrr last_node) rZ SALT_SIZEryrrfZ PERSON_SIZEZMAX_DIGEST_SIZEZ MAX_KEY_SIZEr{rr) rFrVZ salt_sizeZ person_sizeZkey_sizerZ max_offsetr!rrrr r r check_blake2hs          zHashLibTestCase.check_blake2c Csxdd}|dd}|D]X}|D]N}|||}|||} |||d} || ||| |d} || qq|S)NcSsTd}d||@}d}t|}t|D]*}|||@}||}}|d?d@||<q$|S)NrlKZ=r) bytearrayry)rseedmaskr|rtoutr!tr r r selftest_seqs    z4HashLibTestCase.blake2_rfc7693..selftest_seqrr)rr)rarr{) rFrVZmd_lenZin_lenrZouterZoutlenZinlenZindatarZunkeyedZkeyedr r rblake2_rfc7693s    zHashLibTestCase.blake2_rfc7693cCsB|tjdddddgd}gd}||tj||ddS)Nrwrl)rrrr)rrrrrZ@c23a7800d98123bd10f506c61e29da5603d763b8bbad2e737f5e765a7bccd475)rrr6rr)rFZ b2b_md_lenZ b2b_in_lenr r r test_blake2bszHashLibTestCase.test_blake2bcCs|ddddS)Nr6rZ786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2cerrWr r rtest_case_blake2b_0sz#HashLibTestCase.test_case_blake2b_0cCs|ddddS)Nr6rZba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d17d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923rrWr r rtest_case_blake2b_1sz#HashLibTestCase.test_case_blake2b_1cCs*|jddddddddd d d d d dddS)Nr6fooZ 920568b0c5873b2f0ab67bedb6cf1b2brwbarbazbingrrrrrT rrrrrrrrrrrrrWr r r test_case_blake2b_all_parameterssz0HashLibTestCase.test_case_blake2b_all_parameterscCs4tdD]&\}}}t|}|jd|||dqdS)Nr6rr0r*r+rrFmsgrmdr r rtest_blake2b_vectorss z$HashLibTestCase.test_blake2b_vectorscCsB|tjdddddgd}gd}||tj||ddS)Nrl)rwrrr)rrrArrZ@6a411f08ce25adcdfb02aba641451cec53c598b24f4fc787fbdc88797f4c1dfe)rrr7rr)rFZ b2s_md_lenZ b2s_in_lenr r r test_blake2sszHashLibTestCase.test_blake2scCs|ddddS)Nr7rZ@69217a3079908094e11121d042354a7c1f55b6482ca1a51e1b250dfd1ed0eef9rrWr r rtest_case_blake2s_0sz#HashLibTestCase.test_case_blake2s_0cCs|ddddS)Nr7rZ@508c5e8c327c14e2e1a72ba34eeb452f37458b209ed63a294d999b4c86675982rrWr r rtest_case_blake2s_1sz#HashLibTestCase.test_case_blake2s_1cCs*|jddddddddd d d d d dddS)Nr7rZ bf2a8f7fe3c555012a6f8046e646bc75rwrrrrrrrrrTrrrWr r r test_case_blake2s_all_parameters sz0HashLibTestCase.test_case_blake2s_all_parameterscCs4tdD]&\}}}t|}|jd|||dqdS)Nr7rrrr r rtest_blake2s_vectorss z$HashLibTestCase.test_blake2s_vectorscCs|ddddS)Nr8rZ86b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7rrWr r rtest_case_sha3_224_0%sz$HashLibTestCase.test_case_sha3_224_0cCs$tdD]\}}|d||qdS)Nr8r0rrFrrr r rtest_case_sha3_224_vector*sz)HashLibTestCase.test_case_sha3_224_vectorcCs|ddddS)Nr9rZ@a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434arrWr r rtest_case_sha3_256_0/sz$HashLibTestCase.test_case_sha3_256_0cCs$tdD]\}}|d||qdS)Nr9r(r)r r rtest_case_sha3_256_vector4sz)HashLibTestCase.test_case_sha3_256_vectorcCs|ddddS)Nr:rZ`0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004rrWr r rtest_case_sha3_384_09sz$HashLibTestCase.test_case_sha3_384_0cCs$tdD]\}}|d||qdS)Nr:r(r)r r rtest_case_sha3_384_vector?sz)HashLibTestCase.test_case_sha3_384_vectorcCs|ddddS)Nr;rZa69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26rrWr r rtest_case_sha3_512_0Dsz$HashLibTestCase.test_case_sha3_512_0cCs$tdD]\}}|d||qdS)Nr;r(r)r r rtest_case_sha3_512_vectorJsz)HashLibTestCase.test_case_sha3_512_vectorcCs$|dddd|dddddS)Nr<rZ@7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26TZ7f9crrWr r rtest_case_shake_128_0Os z%HashLibTestCase.test_case_shake_128_0cCs&tdD]\}}|d||dqdS)Nr<Tr(r)r r rtest_case_shake128_vectorVsz)HashLibTestCase.test_case_shake128_vectorcCs$|dddd|dddddS)Nr=rZ@46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fTZ46b9rrWr r rtest_case_shake_256_0[s z%HashLibTestCase.test_case_shake_256_0cCs&tdD]\}}|d||dqdS)Nr=Tr(r)r r rtest_case_shake256_vectorbsz)HashLibTestCase.test_case_shake256_vectorcCsd}|jD]J}|dd}|d|d||d|d|dd}|dq t}|d|d||d||dtdd|d}||ddS)NiFrv1#xZ@1cfceca95989f51f658e3f3ffe7f1cd43726c9e088c13ee10b46f57cef135b94)rrrarr rr{)rFZ gil_minsizer}rr r rtest_gilgs*       zHashLibTestCase.test_gilc std}d}|dt|}fdd}g}t|D]N}td|}||d||t|dtj||fd}| |qD|D] }| q|D] }| q||dS) Nrsswineflui@ cs4d}|tkr0|||||7}qdSr)rra) chunk_sizeindexrMZhasherr rhash_in_chunkss z=HashLibTestCase.test_threaded_hashing..hash_in_chunksrur)targetri) rr r{ryrZ assertGreaterr threadingThreadappendstartjoin) rFZ num_threadsZ smallest_dataZ expected_hashr<threadsZ threadnumr9threadr r;rtest_threaded_hashings(     z%HashLibTestCase.test_threaded_hashingcCs|j}|dur||tdSrK)rsrint)rFZ fips_moder r rtest_get_fips_modesz"HashLibTestCase.test_get_fips_modez need _hashlibcCsh|tdtWdn1s(0Y|tdtWdn1sZ0YdS)Nzcannot create 'HASH' instancez cannot create 'HASHXOF' instance)assertRaisesRegexrrrrWr r rtest_internal_typess$z#HashLibTestCase.test_internal_types)F)rrN)h__name__ __module__ __qualname__r_rzosrUCOMPILED_WITH_PYDEBUGrBrIrhpropertyrrrsrrrrrrrrrrrrrrrrequires_blake2r requires_sha3rrrrrrrrrrr'skipIfrmaxsizerrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr"r#r$r%r&r'r*r+r,r-r.r/r0r1r2r3r4r8rZ reap_threadsrErG skipUnlessrrI __classcell__r r rlrr1es M                   O                       #r1c @szeZdZgdZdddddedfdddd ded fd d d d dedfgZeddfeddfeddfeddfeddfgeddfeddfeddfeddfeddfgeddfeddfeddfedd fed!dfgd"Zd#d$Z e e dud%d&d'Z e eed(d)d*d+Ze eed,d-e j ed.d/d0d1Zd2d3ZdS)4KDFTests))passwordsaltrN)rWrXrN)rWrXN)spasswordPASSWORDpasswords$saltSALTsaltSALTsaltSALTsaltSALTsaltrYr)s passwordssaltrYrwrrwrZ77d6576238657b203b19ca42c18a0497f16b4844e3074ae8dfdffa3fede21442fcd0069ded0948f8326a753a0fc81f17e8d3e0fb2e0d3628cf35e20c38d18906rWsNaClrr Zfdbabe1c9d3472007856e7190d01e9fe7c6ad7cbc8237830e77376634b3731622eaf30d92e22a3886ff109279d9830dac727afb94a83ee6d8360cbdfa2cc0640s pleaseletmeinsSodiumChloridei@Z7023bdcb3afd7348461c06cd81fd38ebfda8fbba904f8e3ea9b543f6545da1f2d5432955613f0fcf62d49705242a9af9e61e85dc0d651e40dfcf017b45575887Z(0c60c80f961f0e71f3a9b524af6012062fe037a6NZ(ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957Z(4b007901b765489abead49d926f721d065a429c1Z23d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038Z 56fa6aa75548099dcc37d7f03425e0c3Z@120fb6cffcf8b32c43e7225256c4f837a86548c92ccc35480805987cb70be17bZ@ae4d0c95af6b46d32d0adff928f06dd02a303f8ef3c251dfd6e2d85a95474c43Z@c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134aZP348c89dbcbd32b2f32d814b8116e84cf2b17347ebc1800181c4e2a1fb8dd53e1c635518c7dac47e9(Z 89b69d0516f829893c696226650a8687Z867f70cf1ade02cff3752599a3a53dc4af34c7a669815ae5d513554e1c8cf252c02d470a285a0501bad999bfe943c08f050235d7d68b1da55e63f73b60a57fceZe1d9c16aa681708a45f5c7c4e215ceb66e011a2e9f0040713f18aefdb866d53cf76cab2868a39b9f7840edce4fef5a82be67335c77a6068e04112754f27ccf4eZd197b1b33db0143e018b12f3d1d1479e6cdebdcc97c5c0f87f6902e072f457b5143f30602641b3d55cd335988cb36b84376060ecd532e039b742a239434af2d5Z8c0511f4c6e597c6ac6315d8f0362e225f3c501495ba23b868c005174dc4ee71115b59f9e60cd9532fa33e0f75aefe30225c583a186cd82bd4daea9724a3d3b8rZ 9d9e9c4cd21fe4be24d5b8244c759665)r r r c Cs|jD]\}}||vrq t|jD]\}}|\}}} } ||\} } | rN| } ||||| | } || | |||| | f||t|t|| | } || | ||t|t|| | } || | | dur&||||| } || | |||| fq&q |td|ddddWdn1s 0Yd|vr| t |dddd| t |ddd d| t|dddd | t|dddd | t|ddddd | t|ddddd |dd dddd } || |jdd d dS)Nz.*unsupported.*unknownspassrXrr ssha1passrrrrW)r,passwordrZ iterationsdklen) pbkdf2_resultsrc enumeratepbkdf2_test_vectorsr memoryviewr rHrfrr)rFZpbkdf2Z supportedZ digest_nameresultsr!Zvectorr^rroundsr_expectedZoverwrite_dklenr r r r_test_pbkdf2_hmacsd          .     zKDFTests._test_pbkdf2_hmacztest requires builtin_hashlibcCs|tjtdSrK)rgbuiltin_hashlib pbkdf2_hmacrCrWr r rtest_pbkdf2_hmac_py$szKDFTests.test_pbkdf2_hmac_pyriz test requires OpenSSL > 1.0cCs|tjtdSrK)rgopenssl_hashlibrirrWr r rtest_pbkdf2_hmac_c(szKDFTests.test_pbkdf2_hmac_cscryptz test requires OpenSSL > 1.1zscrypt is blocked in FIPS mode)reasonc Cs|jD]0\}}}}}}tj|||||d}|||qtjdddddd|t$tjddddddWdn1s0Y|t$tjddddddWdn1s0Y|ttdWdn1s0Y|ttddWdn1s*0Y|t$tjdddddd Wdn1sj0Yd D]L}|tttf$tjdd|dddWdn1s0Yqxd D]L}|tttf$tjddd|ddWdn1s 0Yqd D]L}|tttf$tjdddd|dWdn1s\0Yqd D]N}|tttf&tjddddd|d Wdn1s0Yqnd D]N} |tttf&tjddddd| dWdn1s0YqdS)N)rnr prWrXrr rr^rr)rrrN)rrN)rN)rror rpmaxmem)rror rpr_)scrypt_test_vectorsrrmrrrrfr) rFr^rror rprfresultrqr_r r r test_scrypt-sB 2 2 ( , 4888*zKDFTests.test_scryptcCs |dtj|dtjdS)NZ blake2b512zsha3-512)rrrrWr r rtest_normalized_nameUszKDFTests.test_normalized_name)rJrKrLrbrrrr*r+r`rgr'rRrhrjrTrerkrlrrrtrur r r rrVsn         &1     %rV__main__)4rxZbinasciirrr?rorMrZ sysconfigr>r'rDrrZ test.supportrrrZ http.clientrrerNZdefault_builtin_hashesZget_config_varrCr r`r)rkrhrrrrrr frozensetrJrTrPr]Zcheck_sanitizerrbrQr"r$r0ZTestCaser1rVrJmainr r r r sr            [!