ÿØÿà 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ÿÙ &)c\ddlZddlZddlZddlmZddlmZmZmZm Z m Z m Z m Z m Z mZ ddlZddlmZddlmZddlmZmZddlmZmZdd lmZmZdd lmZmZdd l m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(dd l)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0d Z1n #e2$rdZ1YnwxYwhdZ3dZ4GddZ5Gdde5Z6Gdde5Z7e1r:Gdde5Z8Gdde5Z9Gdde8Z:Gdde5Z;dSdS)NInvalidKeyError) base64url_decodebase64url_encodeder_to_raw_signature force_bytesfrom_base64url_uint is_pem_format is_ssh_keyraw_to_der_signatureto_base64url_uint)InvalidSignature)hashes)ecpadding)EllipticCurvePrivateKeyEllipticCurvePublicKey)Ed448PrivateKeyEd448PublicKey)Ed25519PrivateKeyEd25519PublicKey) RSAPrivateKeyRSAPrivateNumbers RSAPublicKeyRSAPublicNumbers rsa_crt_dmp1 rsa_crt_dmq1 rsa_crt_iqmprsa_recover_prime_factors)Encoding NoEncryption PrivateFormat PublicFormatload_pem_private_keyload_pem_public_keyload_ssh_public_keyTF> ES256ES384ES512ES521EdDSAPS256PS384PS512RS256RS384RS512ES256Kctttjttjttjd}t r+|ttjttjttjttjttjttjttjttjttjttjttjtd |S)zE Returns the algorithms that are implemented by the library. )noneHS256HS384HS512) r0r1r2r(r3r)r+r*r-r.r/r,) NoneAlgorithm HMACAlgorithmSHA256SHA384SHA512 has_cryptoupdate RSAAlgorithm ECAlgorithmRSAPSSAlgorithm OKPAlgorithm)default_algorithmss 0/usr/lib/python3/dist-packages/jwt/algorithms.pyget_default_algorithmsrFKs }344}344}344  !!%l&9::%l&9::%l&9::$[%788%k&899$[%788$[%788$&))?@@()?@@()?@@%     & cPeZdZdZdZdZdZedZedZ dS) AlgorithmzH The interface for an algorithm used to sign and verify tokens. ct)z Performs necessary validation and conversions on the key and returns the key value in the proper format for sign() and verify(). NotImplementedErrorselfkeys rE prepare_keyzAlgorithm.prepare_keyr "!rGct)zn Returns a digital signature for the specified message using the specified key value. rKrNmsgrOs rEsignzAlgorithm.signyrQrGct)zz Verifies that the specified digital signature is valid for the specified message and key values. rKrNrTrOsigs rEverifyzAlgorithm.verifyrQrGct)z7 Serializes a given RSA key into a JWK rKkey_objs rEto_jwkzAlgorithm.to_jwkrQrGct)zb Deserializes a given RSA key from JWK back into a PublicKey or PrivateKey object rK)jwks rEfrom_jwkzAlgorithm.from_jwkrQrGN) __name__ __module__ __qualname____doc__rPrUrY staticmethodr]r`rGrErIrIms"""""""""""\" ""\"""rGrIc$eZdZdZdZdZdZdS)r9zZ Placeholder for use when no signing or verification operations are required. c8|dkrd}|td|S)Nz*When alg = "none", key value must be None.rrMs rErPzNoneAlgorithm.prepare_keys) "99C ?!"NOO O rGcdS)NrGrfrSs rErUzNoneAlgorithm.signssrGcdS)NFrfrWs rErYzNoneAlgorithm.verifysurGN)rarbrcrdrPrUrYrfrGrEr9r9sK rGr9ceZdZdZejZejZej Z dZ dZ e dZe dZdZdZdS) r:zf Performs signing and verification operations using HMAC and the specified hash function. c||_dSNhash_algrNrps rE__init__zHMACAlgorithm.__init__s   rGc~t|}t|st|rtd|S)NzdThe specified key is an asymmetric key or x509 certificate and should not be used as an HMAC secret.)r r r rrMs rErPzHMACAlgorithm.prepare_keysJ#    C !9   rGctjtt|ddS)Noct)kkty)jsondumpsrr decoder[s rEr]zHMACAlgorithm.to_jwksBz%k'&:&:;;BBDD     rGcL t|trtj|}nt|tr|}nt n#t $rt dwxYw|ddkrt dt|dS)NKey is not valid JSONrwruzNot an HMAC keyrv) isinstancestrrxloadsdict ValueErrorrgetr)r_objs rEr`zHMACAlgorithm.from_jwks ;#s## !jooC&& !   ; ; ;!"9:: : ; 775>>U " "!"344 4C))) A A A&c\tj|||jSrn)hmacnewrpdigestrSs rErUzHMACAlgorithm.signs$xS$-0077999rGcTtj||||Srn)rcompare_digestrUrWs rErYzHMACAlgorithm.verifys#"3 #s(;(;<<>*--C-c22CC.sTBBBC / / /)#.. /Js6BB-,B-c d}t|ddrM|}ddgt|jjt|jjt|jt|jt|j t|j t|j t|j d }nt|ddre|}ddgt|jt|jd}ntdtj|S)Nprivate_numbersRSArU) rwkey_opsnedpqdpdqqirY)rwrrrNot a public or private key)getattrrrpublic_numbersrrzrrrrdmp1dmq1iqmprrxry)r\rnumberss rEr]zRSAAlgorithm.to_jwksCw 1488 E!1133! &x*7+A+CDDKKMM*7+A+CDDKKMM*7955<<>>*7955<<>>*7955<<>>+GL99@@BB+GL99@@BB+GL99@@BB  (D11 E!0022! (z*7955<<>>*7955<<>> &&CDDD:c?? "rGc < t|trtj| nt|tr| nt n#t $rt dwxYw ddkrt dd vrd vrd vrd vrt d gd } fd |D}t|}|rt|st d tt dt d}|rtt dt d t dt dt dt d|}nst d}t|j||j\}}t|||t!||t#||t%|||}|Sd vrNd vrJtt dt d}|St d)Nr|rwrzNot an RSA keyrrrothz5Unsupported RSA private key: > 2 primes not supported)rrrrrcg|]}|vSrfrf).0proprs rE z)RSAAlgorithm.from_jwk..AsCCCtts{CCCrGz@RSA key must include all parameters if any are present besides drrrrr)rrrrrrrr)r}r~rxrrrrranyallrr rr rrrrr private_key public_key) r_ other_props props_foundany_props_foundrrrrrrs @rEr`zRSAAlgorithm.from_jwk*s ?c3''%*S//CCT**%CC$$ ? ? ?%&=>>> ?wwu~~&&%&6777czzcSjjSCZZC<<)O;:: CCCC{CCC "%k"2"2"3{+;+;)Z"2'C11'C11"" #/-c#h77-c#h77-c#h770T;;0T;;0T;;'5GG,CH55A4&(!^-=DAq0)!Q//)!Q//)!Q//'5G**,,,s *'C11'C11 ))+++%&CDDDs A A A'cv||tj|Srn)rUrPKCS1v15rprSs rErUzRSAAlgorithm.signts)88C!1!3!3T]]__EE ErGc |||tj|dS#t$rYdSwxYw)NTF)rYrrrprrWs rErYzRSAAlgorithm.verifywsW  3W%5%7%7IIIt#   uu s;? A  A N)rarbrcrdrr;r<r=rrrPrer]r`rUrYrfrGrEr@r@s   % % %   $ ! #! # ! #F G EG E G ER F F F     rGr@ceZdZdZejZejZejZdZdZ dZ dZ e dZ e dZdS) rAzr Performs signing and verification operations using ECDSA and the specified hash function c||_dSrnrorqs rErrzECAlgorithm.__init__rrGct|ttfr|St|ttfst dt |} |drt|}nt|}n!#t$rt|d}YnwxYwt|ttfstd|S)Nrs ecdsa-sha2-rzcExpecting a EllipticCurvePrivateKey/EllipticCurvePublicKey. Wrong key provided for ECDSA algorithms) r}rrrr~rr rr'r&rr%rrMs rErPzECAlgorithm.prepare_keys# 79OPQQ  cE3<00 B @AAAc""C  ?>>.113-c22CC-c22C ? ? ?*3>>> ?c$;=S#TUU %yJs4BB-,B-c||tj|}t ||jSrn)rUrECDSArprcurve)rNrTrOder_sigs rErUzECAlgorithm.signs9hhsBHT]]__$=$=>>G';; ;rGcB t||j}n#t$rYdSwxYw t|tr|}|||tj| dS#t$rYdSwxYw)NFT) r rrr}rrrYrrrpr)rNrTrOrXrs rErYzECAlgorithm.verifys .sCI>>   uu  c#:;;+..**C 7C$--//)B)BCCCt#   uu s &&A$B BBct|tr'|}n9t|tr|}nt dt|jtjrd}n}t|jtj rd}n[t|jtj rd}n9t|jtj rd}nt d|jd|t|j t|jd}t|tr;t|j|d <t%j|S) NrP-256P-384P-521 secp256k1Invalid curve: EC)rwcrvxyr)r}rrrrrrr SECP256R1 SECP384R1 SECP521R1 SECP256K1rrrzrr private_valuerxry)r\rrrs rEr]zECAlgorithm.to_jwks'#:;; E!(!3!3!5!5!D!D!F!FG%;<< E!(!7!7!9!9%&CDDD'-66 IGM2<88 IGM2<88 IGM2<88 I!%&G &G&GHHH&~'788??AA&~'788??AA C'#:;; ,++--;&((C:c?? "rGc t|trtj|}nt|tr|}nt n#t $rt dwxYw|ddkrt dd|vsd|vrt dt|d}t|d}|d}|dkrNt|t|cxkrd krnntj }nt d |d krMt|t|cxkrd krnntj }nt d |dkrMt|t|cxkrdkrnntj }ntt d|dkrMt|t|cxkrd krnntj}n!t dt d|tjt |dt |d|}d|vr|St|d}t|t|krt dt||tjt |d|S)Nr|rwrzNot an Elliptic curve keyrrrr z)Coords should be 32 bytes for curve P-256r0z)Coords should be 48 bytes for curve P-384rBz)Coords should be 66 bytes for curve P-521rz-Coords should be 32 bytes for curve secp256k1rbig) byteorder)rrrrz!D should be {} bytes for curve {})r}r~rxrrrrrrlenrrrrrEllipticCurvePublicNumbersint from_bytesrEllipticCurvePrivateNumbersr)r_rrrr curve_objrrs rEr`zECAlgorithm.from_jwksG ?c3''%*S//CCT**%CC$$ ? ? ?%&=>>> ?wwu~~%%%&ABBB#~~C%&ABBB ..A ..AGGENNEq66SVV))))r))))) " II)*UVVV'!!q66SVV))))r))))) " II)*UVVV'!!q66SVV))))r))))) " II)*UVVV+%%q66SVV))))r))))) " II)G&&?&?&?@@@:..e.44..e.44N #~~%00222 ..A1vvQ%7Q1qE22Nkmm rN)rarbrcrdrr;r<r=rrrPrUrYrer]r`rfrGrErArA~s   % % %   8 < < <     # #  #D ? ?  ? ? ? rGrAceZdZdZdZdZdS)rBzA Performs a signature using RSASSA-PSS with MGF1 c ||tjtj||jj|S)Nmgf salt_length)rUrPSSMGF1rp digest_sizerSs rErUzRSAPSSAlgorithm.sign$sY88  T]]__55 $ 9   rGc  |||tjtj||jj|dS#t $rYdSwxYw)NrTF)rYrrrrprrrWs rErYzRSAPSSAlgorithm.verify.s  K#L99$(M$=MMOOt#   uu sA,A00 A>=A>N)rarbrcrdrUrYrfrGrErBrBs<          rGrBcVeZdZdZdZdZdZdZedZ edZ dS) rCz Performs signing and verification operations using EdDSA This class requires ``cryptography>=2.6`` to be installed. c dSrnrf)rNkwargss rErrzOKPAlgorithm.__init__Ds DrGct|ttfrt|tr|d}|d}d|vrt |}n3d|vrt |d}n|dddkrt|}t|ttttfstd|S) Nutf-8z-----BEGIN PUBLICz-----BEGIN PRIVATErrzssh-zcExpecting a EllipticCurvePrivateKey/EllipticCurvePublicKey. Wrong key provided for EdDSA algorithms) r}rr~encoderzr&r%r'rrrrr)rNrOstr_keys rErPzOKPAlgorithm.prepare_keyGs#s|,, 3c3''.**W--C**W--&'11-c22CC)W44.sTBBBCCQqS\V++-c22C"$4o~V &yJrGc|t|turt|dn|}||S)aS Sign a message ``msg`` using the EdDSA private key ``key`` :param str|bytes msg: Message to sign :param Ed25519PrivateKey}Ed448PrivateKey key: A :class:`.Ed25519PrivateKey` or :class:`.Ed448PrivateKey` isinstance :return bytes signature: The signature, as bytes r)typerrUrSs rErUzOKPAlgorithm.sign_s8*.c%)?)?%W%%%SC88C== rGcj t|turt|dn|}t|turt|dn|}t|ttfr|}|||dS#tjj $rYdSwxYw)a Verify a given ``msg`` against a signature ``sig`` using the EdDSA key ``key`` :param str|bytes sig: EdDSA signature to check ``msg`` against :param str|bytes msg: Message to sign :param Ed25519PrivateKey|Ed25519PublicKey|Ed448PrivateKey|Ed448PublicKey key: A private or public EdDSA key instance :return bool verified: True if signature is valid, False if not. rTF) rrr}rrrrY cryptography exceptionsrrWs rErYzOKPAlgorithm.verifyjs -1#YYe-C-CeC)))-1#YYe-C-CeC)))c$5#GHH+..**C 3$$$t*;   uu sBBB21B2ct|ttfr|tjt j}t|trdnd}tjtt| d|dSt|ttfr|tjtjt!}|tjt j}t|trdnd}tjtt| tt| d|dSt%d) N)encodingformatEd25519Ed448OKP)rrwr)rrencryption_algorithm)rrrwrr)r}rr public_bytesr!Rawr$rxryrr rzrr private_bytesr#r"rr)rOrrrs rEr]zOKPAlgorithm.to_jwks# 0.ABB $$%\'+%$.c3C#D#DQii'z-k!nn==DDFF$"# 1?CDD %%%\(,)5& NN$$11%\'+2 $.c3D#E#ERii7z-k!nn==DDFF-k!nn==DDFF$" ""?@@ @rGc< t|trtj|}nt|tr|}nt n#t $rt dwxYw|ddkrt d|d}|dkr|dkrt d|d |vrt d t|d } d |vr.|dkrtj |Stj |St|d }|dkrtj |Stj |S#t $r}t d |d}~wwxYw) Nr|rwrzNot an Octet Key PairrrrrrzOKP should have "x" parameterrzInvalid key parameter)r}r~rxrrrrrrrfrom_public_bytesrrfrom_private_bytesr)r_rrrrerrs rEr`zOKPAlgorithm.from_jwks ?c3''%*S//CCT**%CC$$ ? ? ?%&=>>> ?wwu~~&&%&=>>>GGENNE !!ew&6&6%&?&?&?@@@#~~%&EFFF ..A Hc>> ))/A!DDD);A>>>$SWWS\\22I%%,?BBB&9!<<< H H H%&=>>CG Hs6A A A&:E<E<,;E<(E<< FFFN) rarbrcrdrrrPrUrYrer]r`rfrGrErCrC=s        0 ! ! !   * % A% A % AN  H H  H H HrGrC)ModuleNotFoundErrorrequires_cryptographyrFrIr9r:r@rArBrCrfrGrErs ''''''                      '""""888888555555EEEEEEEE                    JJJJJ    D&"&"&"&"&"&"&"&"RI,6=6=6=6=6=I6=6=6=rcHUUUUUyUUUn_____i___B,