ÿØÿà 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ÿÙ  jxhddlmZmZmZmZddlZddlZddlZddlZddl m Z m Z m Z m Z mZmZmZmZmZmZmZmZmZmZmZddlmZmZmZddlmZmZm Z m!Z!m"Z"ddl#m$Z$ddl%m&Z&dd l'm(Z(m)Z)m*Z*Gd d Z+Gd d Z,GddZ-dZ.dZ/e e!ee"edZ0dZ1dZ2ddZ3ddZ4dZ5dZ6dZ7dZ8y))unicode_literalsdivisionabsolute_importprint_functionN)CertBag Certificate DSAPrivateKey ECPrivateKey EncryptedDataEncryptedPrivateKeyInfoInteger OctetStringPfxPrivateKeyInfo PublicKeyInfo RSAPrivateKey RSAPublicKey SafeContentsunarmor)pbkdf1pbkdf2 pkcs12_kdf)aes_cbc_pkcs7_decryptdes_cbc_pkcs5_decryptrc2_cbc_pkcs5_decrypt rc4_decrypttripledes_cbc_pkcs5_decrypt)constant_compare)pretty_message)byte_clsstr_cls type_namecZeZdZdZdZdZedZedZedZ edZ y)_PrivateKeyBaseNc |jdk(r|jdjS|jdk(r\|jdd}td|d|d|d |jj |jdjd S|jd k(rM|jdj}|jdd|d<|jj |d <|Sy )a. Unwraps the private key into an asn1crypto.keys.RSAPrivateKey, asn1crypto.keys.DSAPrivateKey or asn1crypto.keys.ECPrivateKey object :return: An asn1crypto.keys.RSAPrivateKey, asn1crypto.keys.DSAPrivateKey or asn1crypto.keys.ECPrivateKey object rsa private_keydsaprivate_key_algorithm parametersrpqgversionr,r-r. public_keyr(ecr1N) algorithmasn1parsedr r1unwrap)selfparamsoutputs E/opt/nydus/tmp/pip-target-mjwu0ny1/lib/python/oscrypto/_asymmetric.pyr6z_PrivateKeyBase.unwrap-s >>U "99]+22 2 >>U "YY67 EF C[C[C["oo446#yy7>> "  >>T !YY}-44F#'99-D#El#SF< #'??#9#9#;F< M "c.|jjSzO :return: A unicode string of "rsa", "dsa" or "ec" r4r3r7s r:r3z_PrivateKeyBase.algorithmKyy"""r;c4|jjdSH :return: A unicode string of EC curve name rr4curver?s r:rEz_PrivateKeyBase.curveTyyq!!r;c.|jjSzS :return: The number of bits in the key, as an integer r4bit_sizer?s r:rJz_PrivateKeyBase.bit_size]yy!!!r;c.|jjSzT :return: The number of bytes in the key, as an integer r4 byte_sizer?s r:rOz_PrivateKeyBase.byte_sizefr@r;) __name__ __module__ __qualname__r4 _fingerprintr6propertyr3rErJrOr;r:r%r%(sa DL<##""""##r;r%cjeZdZdZdZdZedZedZedZ edZ edZ y)_PublicKeyBaseNcp|jdk(r|jdS|jdjS)a7 Unwraps a public key into an asn1crypto.keys.RSAPublicKey, asn1crypto.core.Integer (for DSA) or asn1crypto.keys.ECPointBitString object :return: An asn1crypto.keys.RSAPublicKey, asn1crypto.core.Integer or asn1crypto.keys.ECPointBitString object r2r1)r3r4r5r?s r:r6z_PublicKeyBase.unwrapus4 >>T !99\* *yy&---r;ch|jt|jd|_|jS)aZ Creates a fingerprint that can be compared with a private key to see if the two form a pair. This fingerprint is not compatible with fingerprints generated by any other software. :return: A byte string that is a sha256 hash of selected components (based on the key type) N)rSr4r?s r: fingerprintz_PublicKeyBase.fingerprints/    $ ,TYY =D    r;c.|jjSr=r>r?s r:r3z_PublicKeyBase.algorithmr@r;c4|jjdSrBrDr?s r:rEz_PublicKeyBase.curverFr;c.|jjSrHrIr?s r:rJz_PublicKeyBase.bit_sizerKr;c.|jjSrMrNr?s r:rOz_PublicKeyBase.byte_sizer@r;) rPrQrRr4rSr6rTrZr3rErJrOrUr;r:rWrWpsu DL .!!"##""""##r;rWcPeZdZdZedZedZedZedZy)_CertificateBaseNc.|jjSr=)r1r3r?s r:r3z_CertificateBase.algorithm(((r;c.|jjS)rC)r1rEr?s r:rEz_CertificateBase.curves$$$r;c.|jjS)zZ :return: The number of bits in the public key, as an integer )r1rJr?s r:rJz_CertificateBase.bit_sizes'''r;c.|jjS)z[ :return: The number of bytes in the public key, as an integer )r1rOr?s r:rOz_CertificateBase.byte_sizerbr;) rPrQrRr4rTr3rErJrOrUr;r:r`r`sU D ))%%(())r;r`c|j}|dk(s|dk(r|djS|dk(rj|dd}|dj}td|d|d |d tt |d j |j |dj |d S|d k(r|dj}|dd|d<|St d |jz)a Unwraps an asn1crypto.keys.PrivateKeyInfo object into an asn1crypto.keys.RSAPrivateKey, asn1crypto.keys.DSAPrivateKey or asn1crypto.keys.ECPrivateKey. :param key_info: An asn1crypto.keys.PrivateKeyInfo object :return: One of: - asn1crypto.keys.RSAPrivateKey - asn1crypto.keys.DSAPrivateKey - asn1crypto.keys.ECPrivateKey r' rsassa_pssr(r)r*r+rr,r-r.r/r2z#Unsupported key_info.algorithm "%s")r3r5r rpownative ValueError)key_infokey_algr8r5s r:_unwrap_private_key_informs   G%7l2 &---%12<@-(//!#s "" s ""# "   $-(//'(?@N| :X=O=OO PPr;ct|tr|dj}|jdk(r#d|dj|djfz}n|jdk(r|dd}t t |d j|djj|d j}d |d j|d j|d j|jfz}n}|jd k(rn|dj}|5||j}|jdjj}d|jdz}|jd}||z }ttr|jd}tj|jSt|tr+|jdk(r1|dj}d|dj|djfz}n|jdk(rR|dj}|dd}d |d j|d j|d j|jfz}nF|jd k(r7|dj}d|jdz}|jd}||z }ttr|jd}tj|jSt!t#dt%|)a5 Returns a fingerprint used for correlating public keys and private keys :param key_object: An asn1crypto.keys.PrivateKeyInfo or asn1crypto.keys.PublicKeyInfo :raises: ValueError - when the key_object is not of the proper type ;return: A byte string fingerprint r(r'z%d:%dmoduluspublic_exponentr)r*r+r.r,z %d:%d:%d:%dr-r2r1z%s:rzutf-8r3z key_object must be an instance of the asn1crypto.keys.PrivateKeyInfo or asn1crypto.keys.PublicKeyInfo classes, not %s ) isinstancerr5r3rirrhr1r4rEencoder"hashlibsha256digestrrjr r#) key_objectload_private_keykeyto_hashr8r1public_key_objects r:rSrSs*n-'..   5 (I%%%&--!G  ! !U * 78FF s ""=)0077s """J $s ""s ""s ""!! 'G ! !T )\*11J! %5Z$@$K$K!.33LAHHOO j..q11GnnW-G z !G gw 'nnW-G~~g&--//*m,   5 (\*11CI%%%&--!G  ! !U *\*11C ,\:F#s ""s ""s "" 'G ! !T )#L188Jj..q11GnnW-G z !G gw 'nnW-G~~g&--// ^ *  r;)rc2rc4des tripledesaesct|tsttdt |d}t j d|Ct|\}}}|dk(rttd|dk(rtj|dS||dk(r$ tj|}|j|S||dk(r tj|}|d d }|Std #t$rYnwxYw tj|}|jtj|dS#t$rYwxYw#t$r Ytd wxYw) a Loads a public key from a DER or PEM-formatted file. Supports RSA, DSA and EC public keys. For RSA keys, both the old RSAPublicKey and SubjectPublicKeyInfo structures are supported. Also allows extracting a public key from an X.509 certificate. :param data: A byte string to load the public key from :raises: ValueError - when the data does not appear to contain a public key :return: An asn1crypto.keys.PublicKeyInfo object < data must be a byte string, not %s N\s*----- private keyz The data specified does not appear to be a public key or certificate, but rather a private key r' public key certificatetbs_certificatesubject_public_key_infozQThe data specified does not appear to be a known public key or certificate format)rqr! TypeErrorr r#rematch _unarmor_pemrjrwraploadrirr )datakey_typealgopkirpk parsed_certrks r: parse_publicr~s" dH %  dO    H xx d#/+D1$ } $^  5= %%dE2 28|3 $$T*C JJJ8}4 %**40K"#456OPHO h ii'    ##D)C JJ %%c51 1      h ii s6"C'=D=' C32C376D.. D:9D:= EEct|tsttdt |d}t j d|At|\}}}|dk(rttd|dk(rttd||dk(r tj|Sttd #t$rYwxYw) a@ Loads a certificate from a DER or PEM-formatted file. Supports X.509 certificates only. :param data: A byte string to load the certificate from :raises: ValueError - when the data does not appear to contain a certificate :return: An asn1crypto.x509.Certificate object rNrrz The data specified does not appear to be a certificate, but rather a private key rz The data specified does not appear to be a certificate, but rather a public key rzU The data specified does not appear to be a known certificate format ) rqr!rr r#rrrrjr r)rr_s r:parse_certificaters dH %  dO    H xx d#/(.!T } $^  | #^ 8}4 ##D) ) ^     sB99 CCc|t|tsttdt ||.t|ts ttdt |d}t j d|Bt||\}}}|dk(rttd|dk(rttd tj|}|j|S#t$rYnwxYw tj|}|d }|d j}t|||}tj|}|j|S#t$rYnwxYw tj|} | jtj| d S#t$rYnwxYw t!j|} | jtj| d S#t$rYnwxYw t#j|} | jtj| d S#t$rYnwxYwttd)a% Loads a private key from a DER or PEM-formatted file. Supports RSA, DSA and EC private keys. Works with the follow formats: - RSAPrivateKey (PKCS#1) - ECPrivateKey (SECG SEC1 V2) - DSAPrivateKey (OpenSSL) - PrivateKeyInfo (RSA/DSA/EC - PKCS#8) - EncryptedPrivateKeyInfo (RSA/DSA/EC - PKCS#8) - Encrypted RSAPrivateKey (PEM only, OpenSSL) - Encrypted DSAPrivateKey (PEM only, OpenSSL) - Encrypted ECPrivateKey (PEM only, OpenSSL) :param data: A byte string to load the private key from :param password: The password to unencrypt the private key :raises: ValueError - when the data does not appear to contain a private key, or the password is invalid :return: An asn1crypto.keys.PrivateKeyInfo object rH password must be a byte string, not %s r;rrz The data specified does not appear to be a private key, but rather a public key rz The data specified does not appear to be a private key, but rather a certificate encryption_algorithmencrypted_datar'r)r2zU The data specified does not appear to be a known private key format )rqr!rr r#rrrrjrrrir _decrypt_encrypted_datarrr r ) rpasswordrrrparsed_wrapperencryption_algorithm_infordecrypted_datar5s r: parse_privatersW6 dH %  dO    (H-N(#   xx d#/(x8!T | #^  } $^  !!$'       055d;$23I$J!'(89@@01JN\de!!.1      ##D) ""6511     ##D) ""6511     ""4( ""6400     ^  s[:"C C)(C)-AE EE6F FF6G G G $6H H'&H'ct|\}}}d}tj||}|stt d|j d}|j }|tgdvr/|j dj}d|t|||fS|j} d}| dk(rd} n | d k(rd } d }| ||fS) a3 Removes PEM-encoding from a public key, private key or certificate. If the private key is encrypted, the password will be used to decrypt it. :param data: A byte string of the PEM-encoded data :param password: A byte string of the encryption password, or None :return: A 3-element tuple in the format: (key_type, algorithm, der_bytes). The key_type will be a unicode string of "public key", "private key" or "certificate". The algorithm will be a unicode string of "rsa", "dsa" or "ec". zc^((DSA|EC|RSA) PRIVATE KEY|ENCRYPTED PRIVATE KEY|PRIVATE KEY|PUBLIC KEY|RSA PUBLIC KEY|CERTIFICATE)zx data does not seem to contain a PEM-encoded certificate, private key or public key r)zRSA PRIVATE KEYzDSA PRIVATE KEYzEC PRIVATE KEYrNzencrypted private keyzrsa public keyrr') rrrrjr groupstripsetlower_unarmor_pem_openssl_private) rr object_typeheaders der_bytes type_regex armor_type pem_headerrrs r:rrvs$'.dm#K)vJ*k2J     !!!$J ::|d}|jddk7r#|jjd\}}nd}|s|S|r$tj|j d}|j }iddd dd d d d d ddddddddddddddddddd dd dd ddddd|}tj||ddzj}|t|kDr>|tj||z|ddzjz }|t|kDr>|d|}iddd dd dd dd ddddddddddddddddddd dd dd dd d!d!d|} t| } | dk(r | ||S| |||S)"a Parses a PKCS#1 private key, or encrypted private key :param headers: A dict of "Name: Value" lines from right after the PEM header :param data: A byte string of the DER-encoded PKCS#1 private key :param password: A byte string of the password to use if the private key is encrypted :return: A byte string of the DER-encoded private key NzDEK-Info,RC4asciiz aes-128-cbczaes-128z aes-192-cbczaes-192z aes-256-cbc zaes-256r|zrc4-64zrc4-40z rc2-64-cbcz rc2-40-cbczrc2-cbcr{z des-ede3-cbczdes-ede3des3z des-ede-cbc)zdes-cbcr}rrr~r}) findrsplitbinascii unhexlifyrrrrsmd5rulen crypto_funcs) rrrenc_algo enc_iv_hexenc_ivr8enc_key_lengthenc_key enc_algo_name decrypt_funcs r:rrs"HJ FW$ ;;s r !#)<<>#7#7#< HjH  ##J$5$5g$>?~~Hr2 r 2  r  2  r ! ! a a 2 r  B !" r#$'()N,kk(VAa[0188:G 3w< '7;;w1F1QK?@GGII 3w< 'a'Gu5 u 5  u  5  u % % e e 5 u   K  !" {#$'()M* .LGT** v ..r;cnt|tsttdt ||.t|ts ttdt |d}i}i}t j |}|d}|djdk7rttd|j}|d }|r|d d d j} d ddddddd| } t| ||dj|dj| d} tt| } tj| |dj| j!} |d dj}t#| |s td|D]}|d}t|t$rt'|j||||2t|t(r6|d}|d}|dj}t+|||}t'|||||xttdt-|j/}t-|j/}t1t3||z}d}d}g}t5|dk\r,|d}||}||}|Dcgc] }||k7s ||}}|||fSt5|dkDr*t1t3|j/d}||}t5|dkDr-t1t3|j/d}||}||=t5|dkDr%t1t3|j7d }|||fScc}w)!aY Parses a PKCS#12 ANS.1 DER-encoded structure and extracts certs and keys :param data: A byte string of a DER-encoded PKCS#12 file :param password: A byte string of the password to any encrypted data :param load_private_key: A callable that will accept a byte string and return an oscrypto.asymmetric.PrivateKey object :raises: ValueError - when any of the parameters are of the wrong type or value OSError - when an error is returned by one of the OS decryption functions :return: A three-element tuple of: 1. An asn1crypto.keys.PrivateKeyInfo object 2. An asn1crypto.x509.Certificate object 3. A list of zero or more asn1crypto.x509.Certificate objects that are "extra" certificates, possibly intermediates from the cert chain rNrr; auth_safe content_typerzV Only password-protected PKCS12 files are currently supported mac_datamacdigest_algorithmr3r0@)sha1sha224rtsha384sha512 sha512_224 sha512_256mac_salt iterationscontentruzPassword provided is invalidencrypted_content_infocontent_encryption_algorithmencrypted_contentz[ Public-key-based PKCS12 files are not currently supported rrc.|jjSN)subjecthuman_friendly)cs r:z_parse_pkcs12..sAYAYr;)rx)rqr!rr r#rrrirjauthenticated_safergetattrrshmacnewcontentsrurr_parse_safe_contentsr rrkeyssortedlistrvalues)rrrwcerts private_keyspfxrrrmac_algo key_lengthmac_keyhash_mod computed_hmac stored_hmac content_inforrrrdecrypted_contentkey_fingerprintscert_fingerprintscommon_fingerprintsrxcert other_certsrZf first_keys r: _parse_pkcs12rs4 dH %  dO    (H-N(#   EL ((4.CK I ''61    //:HE?#56{CJJ      Z ' ' \ " ) )   7H-)I*>*G*GRYY[ uoh/66  {;;< <* y) g{ +  hP` a  /%,-E%F "(>?](^ % 67J K R R  78QSdfn o  !2E<Sc d^ !+,<,,./EJJL) &69J&J!KL C DK 1$)!, ;'[!).CA!{2BuQx CT;'' <14 1 1 345a8 9% 5zA~4 -.q1 Y )  5zA~T%,,.17YZ { ##Ds . L29L2c@t|trtj|}|D]}|d}t|trG|dj dk(s+|dj }|dd}|dj |t|d<_t|tr||t||<t|trF|d} |d j } t| | |} tj| } | |t| |<t|trt|||||y) a& Parses a SafeContents PKCS#12 ANS.1 structure and extracts certs and keys :param safe_contents: A byte string of ber-encoded SafeContents, or a asn1crypto.pkcs12.SafeContents parsed object :param certs: A dict to store certificates in :param keys: A dict to store keys in :param password: A byte string of the password to any encrypted data :param load_private_key: A callable that will accept a byte string and return an oscrypto.asymmetric.PrivateKey object bag_valuecert_idx509 cert_valuerrNrr) rqr!rrrrir5rSrr rr) safe_contentsrrrrwsafe_bagrrpublic_key_inforencrypted_key_bytesdecrypted_key_bytesr(s r:rrs&,-*$))-8 ![) i )#**f4 .55"&'8"9:S"T=F|=T=[=[l?D9:  > 2FOLi1AB C  #: ;(12H(I %"+,<"="D"D "9:SUhjr"s (--.ABKHSLk3CD E  < 0 E<K[ \ 1"r;c2t|j}|jdk(rr|jdk(rtt dt |j ||j|j|j}|j}||||}|S|jdk(rPt|j ||j|j|jdz}|dd}|dd}||||}|S|jdk(rt|j ||j|j|jd }|jd k(r |||}|St|j ||j|j|jd }||||}S) al Decrypts encrypted ASN.1 data :param encryption_algorithm_info: An instance of asn1crypto.pkcs5.Pkcs5EncryptionAlgorithm :param encrypted_content: A byte string of the encrypted content :param password: A byte string of the encrypted content's password :return: A byte string of the decrypted plaintext rrc5zc PBES2 encryption scheme utilizing RC5 encryption is not supported rrrrrrr|r)rencryption_cipherkdfrjr rkdf_hmackdf_saltkdf_iterationsr encryption_ivrrencryption_block_size)rrrrrr plaintextderived_outputs r:rrs" 9 K KLL!$$0 $ 6 6% ?^   % . .  % . . % 4 4 % 0 0  +88 *;VD P M # & &( 2 % . .  % . . % 4 4 % 0 01 4  !1%"% *;VD 6 3 # & &, 6 % . .  % . . % 4 4 % 0 0   % 6 6% ?$W.?@I  )22)22)88)?? F%W.?HI r;r)9 __future__rrrrrsrrr_asn1rr r r r r rrrrrrrrrrrrr symmetricrrrrrutilr_errorsr _typesr!r"r#r%rWr`rmrSrrrrrrrrrrUr;r:rsRR $,+##00E#E#PH#H#V&)&)R*QZaJ !  ,  FjR7trj0'fX/vG$T1hNr;