PNG  IHDRQgAMA a cHRMz&u0`:pQ<bKGDgmIDATxwUﹻ& ^CX(J I@ "% (** BX +*i"]j(IH{~R)[~>h{}gy)I$Ij .I$I$ʊy@}x.: $I$Ii}VZPC)I$IF ^0ʐJ$I$Q^}{"r=OzI$gRZeC.IOvH eKX $IMpxsk.쒷/&r[޳<v| .I~)@$updYRa$I |M.e JaֶpSYR6j>h%IRز if&uJ)M$I vLi=H;7UJ,],X$I1AҒJ$ XY XzI@GNҥRT)E@;]K*Mw;#5_wOn~\ DC&$(A5 RRFkvIR}l!RytRl;~^ǷJj اy뷦BZJr&ӥ8Pjw~vnv X^(I;4R=P[3]J,]ȏ~:3?[ a&e)`e*P[4]T=Cq6R[ ~ޤrXR Հg(t_HZ-Hg M$ãmL5R uk*`%C-E6/%[t X.{8P9Z.vkXŐKjgKZHg(aK9ڦmKjѺm_ \#$5,)-  61eJ,5m| r'= &ڡd%-]J on Xm|{ RҞe $eڧY XYrԮ-a7RK6h>n$5AVڴi*ֆK)mѦtmr1p| q:흺,)Oi*ֺK)ܬ֦K-5r3>0ԔHjJئEZj,%re~/z%jVMڸmrt)3]J,T K֦OvԒgii*bKiNO~%PW0=dii2tJ9Jݕ{7"I P9JKTbu,%r"6RKU}Ij2HKZXJ,妝 XYrP ެ24c%i^IK|.H,%rb:XRl1X4Pe/`x&P8Pj28Mzsx2r\zRPz4J}yP[g=L) .Q[6RjWgp FIH*-`IMRaK9TXcq*I y[jE>cw%gLRԕiFCj-ďa`#e~I j,%r,)?[gp FI˨mnWX#>mʔ XA DZf9,nKҲzIZXJ,L#kiPz4JZF,I,`61%2s $,VOϚ2/UFJfy7K> X+6 STXIeJILzMfKm LRaK9%|4p9LwJI!`NsiazĔ)%- XMq>pk$-$Q2x#N ؎-QR}ᶦHZډ)J,l#i@yn3LN`;nڔ XuX5pF)m|^0(>BHF9(cզEerJI rg7 4I@z0\JIi䵙RR0s;$s6eJ,`n 䂦0a)S)A 1eJ,堌#635RIgpNHuTH_SԕqVe ` &S)>p;S$魁eKIuX`I4춒o}`m$1":PI<[v9^\pTJjriRŭ P{#{R2,`)e-`mgj~1ϣLKam7&U\j/3mJ,`F;M'䱀 .KR#)yhTq;pcK9(q!w?uRR,n.yw*UXj#\]ɱ(qv2=RqfB#iJmmL<]Y͙#$5 uTU7ӦXR+q,`I}qL'`6Kͷ6r,]0S$- [RKR3oiRE|nӦXR.(i:LDLTJjY%o:)6rxzҒqTJjh㞦I.$YR.ʼnGZ\ֿf:%55 I˼!6dKxm4E"mG_ s? .e*?LRfK9%q#uh$)i3ULRfK9yxm܌bj84$i1U^@Wbm4uJ,ҪA>_Ij?1v32[gLRD96oTaR׿N7%L2 NT,`)7&ƝL*꽙yp_$M2#AS,`)7$rkTA29_Iye"|/0t)$n XT2`YJ;6Jx".e<`$) PI$5V4]29SRI>~=@j]lp2`K9Jaai^" Ԋ29ORI%:XV5]JmN9]H;1UC39NI%Xe78t)a;Oi Ҙ>Xt"~G>_mn:%|~ޅ_+]$o)@ǀ{hgN;IK6G&rp)T2i୦KJuv*T=TOSV>(~D>dm,I*Ɛ:R#ۙNI%D>G.n$o;+#RR!.eU˽TRI28t)1LWϚ>IJa3oFbu&:tJ*(F7y0ZR ^p'Ii L24x| XRI%ۄ>S1]Jy[zL$adB7.eh4%%누>WETf+3IR:I3Xה)3אOۦSRO'ٺ)S}"qOr[B7ϙ.edG)^ETR"RtRݜh0}LFVӦDB^k_JDj\=LS(Iv─aTeZ%eUAM-0;~˃@i|l @S4y72>sX-vA}ϛBI!ݎߨWl*)3{'Y|iSlEڻ(5KtSI$Uv02,~ԩ~x;P4ցCrO%tyn425:KMlD ^4JRxSهF_}شJTS6uj+ﷸk$eZO%G*^V2u3EMj3k%)okI]dT)URKDS 7~m@TJR~荪fT"֛L \sM -0T KfJz+nإKr L&j()[E&I ߴ>e FW_kJR|!O:5/2跌3T-'|zX ryp0JS ~^F>-2< `*%ZFP)bSn"L :)+pʷf(pO3TMW$~>@~ū:TAIsV1}S2<%ޟM?@iT ,Eūoz%i~g|`wS(]oȤ8)$ ntu`өe`6yPl IzMI{ʣzʨ )IZ2= ld:5+請M$-ї;U>_gsY$ÁN5WzWfIZ)-yuXIfp~S*IZdt;t>KūKR|$#LcԀ+2\;kJ`]YǔM1B)UbG"IRߊ<xܾӔJ0Z='Y嵤 Leveg)$znV-º^3Ւof#0Tfk^Zs[*I꯳3{)ˬW4Ւ4 OdpbZRS|*I 55#"&-IvT&/윚Ye:i$ 9{LkuRe[I~_\ؠ%>GL$iY8 9ܕ"S`kS.IlC;Ҏ4x&>u_0JLr<J2(^$5L s=MgV ~,Iju> 7r2)^=G$1:3G< `J3~&IR% 6Tx/rIj3O< ʔ&#f_yXJiގNSz; Tx(i8%#4 ~AS+IjerIUrIj362v885+IjAhK__5X%nV%Iͳ-y|7XV2v4fzo_68"S/I-qbf; LkF)KSM$ Ms>K WNV}^`-큧32ŒVؙGdu,^^m%6~Nn&͓3ŒVZMsRpfEW%IwdǀLm[7W&bIRL@Q|)* i ImsIMmKmyV`i$G+R 0tV'!V)֏28vU7͒vHꦼtxꗞT ;S}7Mf+fIRHNZUkUx5SAJㄌ9MqμAIRi|j5)o*^'<$TwI1hEU^c_j?Е$%d`z cyf,XO IJnTgA UXRD }{H}^S,P5V2\Xx`pZ|Yk:$e ~ @nWL.j+ϝYb퇪bZ BVu)u/IJ_ 1[p.p60bC >|X91P:N\!5qUB}5a5ja `ubcVxYt1N0Zzl4]7­gKj]?4ϻ *[bg$)+À*x쳀ogO$~,5 زUS9 lq3+5mgw@np1sso Ӻ=|N6 /g(Wv7U;zωM=wk,0uTg_`_P`uz?2yI!b`kĸSo+Qx%!\οe|އԁKS-s6pu_(ֿ$i++T8=eY; צP+phxWQv*|p1. ά. XRkIQYP,drZ | B%wP|S5`~́@i޾ E;Չaw{o'Q?%iL{u D?N1BD!owPHReFZ* k_-~{E9b-~P`fE{AܶBJAFO wx6Rox5 K5=WwehS8 (JClJ~ p+Fi;ŗo+:bD#g(C"wA^ r.F8L;dzdIHUX݆ϞXg )IFqem%I4dj&ppT{'{HOx( Rk6^C٫O.)3:s(۳(Z?~ٻ89zmT"PLtw䥈5&b<8GZ-Y&K?e8,`I6e(֍xb83 `rzXj)F=l($Ij 2*(F?h(/9ik:I`m#p3MgLaKjc/U#n5S# m(^)=y=đx8ŬI[U]~SцA4p$-F i(R,7Cx;X=cI>{Km\ o(Tv2vx2qiiDJN,Ҏ!1f 5quBj1!8 rDFd(!WQl,gSkL1Bxg''՞^ǘ;pQ P(c_ IRujg(Wz bs#P­rz> k c&nB=q+ؔXn#r5)co*Ũ+G?7< |PQӣ'G`uOd>%Mctz# Ԫڞ&7CaQ~N'-P.W`Oedp03C!IZcIAMPUۀ5J<\u~+{9(FbbyAeBhOSܳ1 bÈT#ŠyDžs,`5}DC-`̞%r&ڙa87QWWp6e7 Rϫ/oY ꇅ Nܶըtc!LA T7V4Jsū I-0Pxz7QNF_iZgúWkG83 0eWr9 X]㾮݁#Jˢ C}0=3ݱtBi]_ &{{[/o[~ \q鯜00٩|cD3=4B_b RYb$óBRsf&lLX#M*C_L܄:gx)WΘsGSbuL rF$9';\4Ɍq'n[%p.Q`u hNb`eCQyQ|l_C>Lb꟟3hSb #xNxSs^ 88|Mz)}:](vbۢamŖ࿥ 0)Q7@0=?^k(*J}3ibkFn HjB׻NO z x}7p 0tfDX.lwgȔhԾŲ }6g E |LkLZteu+=q\Iv0쮑)QٵpH8/2?Σo>Jvppho~f>%bMM}\//":PTc(v9v!gոQ )UfVG+! 35{=x\2+ki,y$~A1iC6#)vC5^>+gǵ@1Hy٪7u;p psϰu/S <aʸGu'tD1ԝI<pg|6j'p:tպhX{o(7v],*}6a_ wXRk,O]Lܳ~Vo45rp"N5k;m{rZbΦ${#)`(Ŵg,;j%6j.pyYT?}-kBDc3qA`NWQū20/^AZW%NQ MI.X#P#,^Ebc&?XR tAV|Y.1!؅⨉ccww>ivl(JT~ u`ٵDm q)+Ri x/x8cyFO!/*!/&,7<.N,YDŽ&ܑQF1Bz)FPʛ?5d 6`kQձ λc؎%582Y&nD_$Je4>a?! ͨ|ȎWZSsv8 j(I&yj Jb5m?HWp=g}G3#|I,5v珿] H~R3@B[☉9Ox~oMy=J;xUVoj bUsl_35t-(ՃɼRB7U!qc+x4H_Qo֮$[GO<4`&č\GOc[.[*Af%mG/ ňM/r W/Nw~B1U3J?P&Y )`ѓZ1p]^l“W#)lWZilUQu`-m|xĐ,_ƪ|9i:_{*(3Gѧ}UoD+>m_?VPۅ15&}2|/pIOʵ> GZ9cmíتmnz)yߐbD >e}:) r|@R5qVSA10C%E_'^8cR7O;6[eKePGϦX7jb}OTGO^jn*媓7nGMC t,k31Rb (vyܴʭ!iTh8~ZYZp(qsRL ?b}cŨʊGO^!rPJO15MJ[c&~Z`"ѓޔH1C&^|Ш|rʼ,AwĴ?b5)tLU)F| &g٣O]oqSUjy(x<Ϳ3 .FSkoYg2 \_#wj{u'rQ>o;%n|F*O_L"e9umDds?.fuuQbIWz |4\0 sb;OvxOSs; G%T4gFRurj(֍ڑb uԖKDu1MK{1^ q; C=6\8FR艇!%\YÔU| 88m)֓NcLve C6z;o&X x59:q61Z(T7>C?gcļxѐ Z oo-08jہ x,`' ҔOcRlf~`jj".Nv+sM_]Zk g( UOPyεx%pUh2(@il0ݽQXxppx-NS( WO+轾 nFߢ3M<;z)FBZjciu/QoF 7R¥ ZFLF~#ȣߨ^<쩡ݛкvџ))ME>ώx4m#!-m!L;vv#~Y[đKmx9.[,UFS CVkZ +ߟrY٧IZd/ioi$%͝ب_ֶX3ܫhNU ZZgk=]=bbJS[wjU()*I =ώ:}-蹞lUj:1}MWm=̛ _ ¾,8{__m{_PVK^n3esw5ӫh#$-q=A̟> ,^I}P^J$qY~Q[ Xq9{#&T.^GVj__RKpn,b=`żY@^՝;z{paVKkQXj/)y TIc&F;FBG7wg ZZDG!x r_tƢ!}i/V=M/#nB8 XxЫ ^@CR<{䤭YCN)eKOSƟa $&g[i3.C6xrOc8TI;o hH6P&L{@q6[ Gzp^71j(l`J}]e6X☉#͕ ׈$AB1Vjh㭦IRsqFBjwQ_7Xk>y"N=MB0 ,C #o6MRc0|$)ف"1!ixY<B9mx `,tA>)5ػQ?jQ?cn>YZe Tisvh# GMމȇp:ԴVuږ8ɼH]C.5C!UV;F`mbBk LTMvPʍϤj?ԯ/Qr1NB`9s"s TYsz &9S%U԰> {<ؿSMxB|H\3@!U| k']$U+> |HHMLޢ?V9iD!-@x TIî%6Z*9X@HMW#?nN ,oe6?tQwڱ.]-y':mW0#!J82qFjH -`ѓ&M0u Uγmxϵ^-_\])@0Rt.8/?ٰCY]x}=sD3ojަЫNuS%U}ԤwHH>ڗjܷ_3gN q7[q2la*ArǓԖ+p8/RGM ]jacd(JhWko6ڎbj]i5Bj3+3!\j1UZLsLTv8HHmup<>gKMJj0@H%,W΃7R) ">c, xixј^ aܖ>H[i.UIHc U1=yW\=S*GR~)AF=`&2h`DzT󑓶J+?W+}C%P:|0H܆}-<;OC[~o.$~i}~HQ TvXΈr=b}$vizL4:ȰT|4~*!oXQR6Lk+#t/g lԁߖ[Jڶ_N$k*". xsxX7jRVbAAʯKҎU3)zSNN _'s?f)6X!%ssAkʱ>qƷb hg %n ~p1REGMHH=BJiy[<5 ǁJҖgKR*倳e~HUy)Ag,K)`Vw6bRR:qL#\rclK/$sh*$ 6덤 KԖc 3Z9=Ɣ=o>X Ώ"1 )a`SJJ6k(<c e{%kϊP+SL'TcMJWRm ŏ"w)qc ef꒵i?b7b('"2r%~HUS1\<(`1Wx9=8HY9m:X18bgD1u ~|H;K-Uep,, C1 RV.MR5άh,tWO8WC$ XRVsQS]3GJ|12 [vM :k#~tH30Rf-HYݺ-`I9%lIDTm\ S{]9gOڒMNCV\G*2JRŨ;Rҏ^ڽ̱mq1Eu?To3I)y^#jJw^Ńj^vvlB_⋌P4x>0$c>K†Aļ9s_VjTt0l#m>E-,,x,-W)سo&96RE XR.6bXw+)GAEvL)͞K4$p=Ũi_ѱOjb HY/+@θH9޼]Nԥ%n{ &zjT? Ty) s^ULlb,PiTf^<À] 62R^V7)S!nllS6~͝V}-=%* ʻ>G DnK<y&>LPy7'r=Hj 9V`[c"*^8HpcO8bnU`4JȪAƋ#1_\ XϘHPRgik(~G~0DAA_2p|J묭a2\NCr]M_0 ^T%e#vD^%xy-n}-E\3aS%yN!r_{ )sAw ڼp1pEAk~v<:`'ӭ^5 ArXOI驻T (dk)_\ PuA*BY]yB"l\ey hH*tbK)3 IKZ򹞋XjN n *n>k]X_d!ryBH ]*R 0(#'7 %es9??ښFC,ՁQPjARJ\Ρw K#jahgw;2$l*) %Xq5!U᢯6Re] |0[__64ch&_}iL8KEgҎ7 M/\`|.p,~`a=BR?xܐrQ8K XR2M8f ?`sgWS%" Ԉ 7R%$ N}?QL1|-эټwIZ%pvL3Hk>,ImgW7{E xPHx73RA @RS CC !\ȟ5IXR^ZxHл$Q[ŝ40 (>+ _C >BRt<,TrT {O/H+˟Pl6 I B)/VC<6a2~(XwV4gnXR ϱ5ǀHٻ?tw똤Eyxp{#WK qG%5],(0ӈH HZ])ג=K1j&G(FbM@)%I` XRg ʔ KZG(vP,<`[ Kn^ SJRsAʠ5xՅF`0&RbV tx:EaUE/{fi2;.IAwW8/tTxAGOoN?G}l L(n`Zv?pB8K_gI+ܗ #i?ޙ.) p$utc ~DžfՈEo3l/)I-U?aԅ^jxArA ΧX}DmZ@QLےbTXGd.^|xKHR{|ΕW_h] IJ`[G9{).y) 0X YA1]qp?p_k+J*Y@HI>^?gt.06Rn ,` ?);p pSF9ZXLBJPWjgQ|&)7! HjQt<| ؅W5 x W HIzYoVMGP Hjn`+\(dNW)F+IrS[|/a`K|ͻ0Hj{R,Q=\ (F}\WR)AgSG`IsnAR=|8$}G(vC$)s FBJ?]_u XRvύ6z ŨG[36-T9HzpW̞ú Xg큽=7CufzI$)ki^qk-) 0H*N` QZkk]/tnnsI^Gu't=7$ Z;{8^jB% IItRQS7[ϭ3 $_OQJ`7!]W"W,)Iy W AJA;KWG`IY{8k$I$^%9.^(`N|LJ%@$I}ֽp=FB*xN=gI?Q{٥4B)mw $Igc~dZ@G9K X?7)aK%݅K$IZ-`IpC U6$I\0>!9k} Xa IIS0H$I H ?1R.Чj:4~Rw@p$IrA*u}WjWFPJ$I➓/6#! LӾ+ X36x8J |+L;v$Io4301R20M I$-E}@,pS^ޟR[/s¹'0H$IKyfŸfVOπFT*a$I>He~VY/3R/)>d$I>28`Cjw,n@FU*9ttf$I~<;=/4RD~@ X-ѕzἱI$: ԍR a@b X{+Qxuq$IЛzo /~3\8ڒ4BN7$IҀj V]n18H$IYFBj3̵̚ja pp $Is/3R Ӻ-Yj+L;.0ŔI$Av? #!5"aʄj}UKmɽH$IjCYs?h$IDl843.v}m7UiI=&=0Lg0$I4: embe` eQbm0u? $IT!Sƍ'-sv)s#C0:XB2a w I$zbww{."pPzO =Ɔ\[ o($Iaw]`E).Kvi:L*#gР7[$IyGPI=@R 4yR~̮´cg I$I/<tPͽ hDgo 94Z^k盇΄8I56^W$I^0̜N?4*H`237}g+hxoq)SJ@p|` $I%>-hO0eO>\ԣNߌZD6R=K ~n($I$y3D>o4b#px2$yڪtzW~a $I~?x'BwwpH$IZݑnC㧄Pc_9sO gwJ=l1:mKB>Ab<4Lp$Ib o1ZQ@85b̍ S'F,Fe,^I$IjEdù{l4 8Ys_s Z8.x m"+{~?q,Z D!I$ϻ'|XhB)=…']M>5 rgotԎ 獽PH$IjIPhh)n#cÔqA'ug5qwU&rF|1E%I$%]!'3AFD/;Ck_`9 v!ٴtPV;x`'*bQa w I$Ix5 FC3D_~A_#O݆DvV?<qw+I$I{=Z8".#RIYyjǪ=fDl9%M,a8$I$Ywi[7ݍFe$s1ՋBVA?`]#!oz4zjLJo8$I$%@3jAa4(o ;p,,dya=F9ً[LSPH$IJYЉ+3> 5"39aZ<ñh!{TpBGkj}Sp $IlvF.F$I z< '\K*qq.f<2Y!S"-\I$IYwčjF$ w9 \ߪB.1v!Ʊ?+r:^!I$BϹB H"B;L'G[ 4U#5>੐)|#o0aڱ$I>}k&1`U#V?YsV x>{t1[I~D&(I$I/{H0fw"q"y%4 IXyE~M3 8XψL}qE$I[> nD?~sf ]o΁ cT6"?'_Ἣ $I>~.f|'!N?⟩0G KkXZE]ޡ;/&?k OۘH$IRۀwXӨ<7@PnS04aӶp.:@\IWQJ6sS%I$e5ڑv`3:x';wq_vpgHyXZ 3gЂ7{{EuԹn±}$I$8t;b|591nءQ"P6O5i }iR̈́%Q̄p!I䮢]O{H$IRϻ9s֧ a=`- aB\X0"+5"C1Hb?߮3x3&gşggl_hZ^,`5?ߎvĸ%̀M!OZC2#0x LJ0 Gw$I$I}<{Eb+y;iI,`ܚF:5ܛA8-O-|8K7s|#Z8a&><a&/VtbtLʌI$I$I$I$I$I$IRjDD%tEXtdate:create2022-05-31T04:40:26+00:00!Î%tEXtdate:modify2022-05-31T04:40:26+00:00|{2IENDB`Mini Shell

HOME


Mini Shell 1.0
DIR:/opt/imunify360/venv/lib/python3.11/site-packages/Crypto/PublicKey/__pycache__/
Upload File :
Current File : //opt/imunify360/venv/lib/python3.11/site-packages/Crypto/PublicKey/__pycache__/DSA.cpython-311.pyc
�

ƺhjW���gd�ZddlZddlZddlZddlmZmZmZmZm	Z	ddl
mZddlm
Z
mZddlmZddlmZmZmZmZmZddlmZdd	lmZmZmZdd
lmZmZm Z Gd�de!��Z"d
�Z#dd�Z$dd�Z%d�Z&d�Z'd�Z(d�Z)d�Z*dd�Z+e+Z,dZ-dS))�generate�	construct�DsaKey�
import_key�N)�bchr�bord�tobytes�tostr�
iter_range)�Random)�PKCS8�PEM)�SHA256)�	DerObject�DerSequence�
DerInteger�DerObjectId�DerBitString)�Integer)�test_probable_prime�	COMPOSITE�PROBABLY_PRIME)�_expand_subject_public_key_info�_create_subject_public_key_info� _extract_subject_public_key_infoc��eZdZdZgd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Z		dd�ZeZeZd�Zd�Zd�Zd�Zd�Zd�Zd�ZdS)ra�Class defining an actual DSA key.
    Do not instantiate directly.
    Use :func:`generate`, :func:`construct` or :func:`import_key` instead.

    :ivar p: DSA modulus
    :vartype p: integer

    :ivar q: Order of the subgroup
    :vartype q: integer

    :ivar g: Generator
    :vartype g: integer

    :ivar y: Public key
    :vartype y: integer

    :ivar x: Private key
    :vartype x: integer

    :undocumented: exportKey, publickey
    ��y�g�p�q�xc	��t|�����}td��}|�|��s"tdt	||z
��z���||z
}|rB|td��kr/tdt	|td��z
��z���t|��|_dS)N�rrr r!z$Some DSA components are missing = %s�r"zUnknown DSA components = %s)�set�keys�issubset�
ValueError�str�dict�_key)�self�key_dict�	input_set�
public_set�	extra_sets     �v/builddir/build/BUILD/imunify360-venv-2.5.2/opt/imunify360/venv/lib64/python3.11/site-packages/Crypto/PublicKey/DSA.py�__init__zDsaKey.__init__gs�����
�
���(�(�	��.�/�/�
��"�"�9�-�-�	:��C� ��i�!7�8�8�9�:�:�
:��
�*�	��	;��c�&�k�k�1�1��:� ��S��[�[�!8�9�9�:�;�;�
;���N�N��	�	�	�c�������std���d|cxkr�jksntd����fd�dD��\}}}}t	jd|���}||z�|��}||z}	t|||��|z}
|||z|	|
zzz|z}tt|
|f��S)Nz)DSA public key cannot be used for signing�zk is not between 2 and q-1c�*��g|]}�j|��S��r,��.0�compr-s  �r2�
<listcomp>z DsaKey._sign.<locals>.<listcomp>y����G�G�G�$�d�i��o�G�G�Gr4)r"r!r r)�
min_inclusive�
max_exclusive)
�has_private�	TypeErrorr!r)r�random_range�inverse�pow�map�int)r-�m�kr"r!r r�blind_factor�inv_blind_k�blind_x�r�ss`           r2�_signzDsaKey._signss�������!�!�	I��G�H�H�H��A������������9�:�:�:�G�G�G�G�2F�G�G�G�
��1�a���+�!�9:�<�<�<��#�a�'�0�0��3�3���l�"����1�a�L�L�1���
�L�1�,�w��{�:�
;�q�@���3��A����r4c�8��|\}}�fd�dD��\}}}}d|cxkr|krnnd|cxkr|ksndSt|���|��}	|	|z|z}
|	|z|z}t||
|��t|||��z|z|z}||kS)Nc�*��g|]}�j|��Sr8r9r:s  �r2r=z"DsaKey._verify.<locals>.<listcomp>�r>r4)rr!r rrF)rrDrE)
r-rH�sigrMrNrr!r r�w�u1�u2�vs
`            r2�_verifyzDsaKey._verify�s�������1�G�G�G�G�2F�G�G�G�
��1�a���A�	�	�	�	��	�	�	�	�	�1�q�9�9�9�9�1�9�9�9�9��5��A�J�J���q�!�!���!�e�q�[���!�e�q�[��
��B��]�]�S��B��]�]�
*�Q�
.�!�3���A�v�
r4c��d|jvS)z!Whether this is a DSA private keyr"r9�r-s r2rAzDsaKey.has_private�s���d�i��r4c��dS)NFr8rYs r2�can_encryptzDsaKey.can_encrypt�s���ur4c��dS)NTr8rYs r2�can_signzDsaKey.can_sign�s���tr4c�X��t�fd�dD����}t|��S)z^A matching DSA public key.

        Returns:
            a new :class:`DsaKey` object
        c3�6�K�|]}|�j|fV��dS�Nr9)r;rIr-s  �r2�	<genexpr>z$DsaKey.public_key.<locals>.<genexpr>�s.����� Q� Q�q�!�T�Y�q�\�!2� Q� Q� Q� Q� Q� Qr4r$)r+r)r-�public_componentss` r2�
public_keyzDsaKey.public_key�s8���!� Q� Q� Q� Q�<P� Q� Q� Q�Q�Q���'�(�(�(r4c�
�t|�����t|�����krdSd}|jD]2}|o-t|j|d��t|j|d��k}�3|S)NFT)�boolrA�_keydata�getattrr,)r-�other�resultr<s    r2�__eq__z
DsaKey.__eq__�s����� � �"�"�#�#�t�E�,=�,=�,?�,?�'@�'@�@�@��5����M�	B�	B�D��B����D�$�!?�!?�!(���T�4�!@�!@�"A�F�F��
r4c�.�|�|��Sr`)rj)r-rhs  r2�__ne__z
DsaKey.__ne__�s���;�;�u�%�%�%�%r4c��ddlm}|�)Nr)�
PicklingError)�picklern)r-rns  r2�__getstate__zDsaKey.__getstate__�s��(�(�(�(�(�(��r4c� ���fd�dD��S)zPThe DSA domain parameters.

        Returns
            tuple : (p,q,g)
        c�D��g|]}t�j|����Sr8)rGr,r:s  �r2r=z!DsaKey.domain.<locals>.<listcomp>�s'���A�A�A���D�I�d�O�$�$�A�A�Ar4)r r!rr8rYs`r2�domainz
DsaKey.domain�s ���B�A�A�A��A�A�A�Ar4c��g}|jD]m}|dkr@t|j�����}|�d|fz���Ht||��r|�|���n|���r|�d��d|jjt|��d�
|��fzS)Nr zp(%d)�privatez
<%s @0x%x %s>�,)rfrr �size_in_bits�append�hasattrrA�	__class__�__name__�id�join)r-�attrsrI�bitss    r2�__repr__zDsaKey.__repr__�s�������	 �	 �A��C�x�x��t�v���3�3�5�5�����W��w�.�/�/�/�/���q�!�!�
 ����Q����������	$��L�L��#�#�#��$�.�"9�2�d�8�8�S�X�X�e�_�_�!U�U�Ur4c�r�	t|j|��S#t$rt|���wxYwr`)rGr,�KeyError�AttributeError)r-�items  r2�__getattr__zDsaKey.__getattr__�sD��	'��t�y���'�'�'���	'�	'�	'� ��&�&�&�	'���s��6rNc�����|�t|��}|�tj}|dkrc�fd�dD��}d���fd�|D��}dg|z}d�d	�|D����}	d
t	j|	��dd�zSt
�j�j�j	g��}
��
��r�|�d}|rS|sd
}t�j���
��}tj|t |||
|���}|rd}
nd}
d}n�|dkr|rt#d���d�j�j�j	�j�jg}t
|���
��}d}
n;|rt#d���t't t�j��|
��}d}
|dkr|S|dkr)t)j
||
dz||��}t|��St#d|z���)a�Export this DSA key.

        Args:
          format (string):
            The encoding for the output:

            - *'PEM'* (default). ASCII as per `RFC1421`_/ `RFC1423`_.
            - *'DER'*. Binary ASN.1 encoding.
            - *'OpenSSH'*. ASCII one-liner as per `RFC4253`_.
              Only suitable for public keys, not for private keys.

          passphrase (string):
            *Private keys only*. The pass phrase to protect the output.

          pkcs8 (boolean):
            *Private keys only*. If ``True`` (default), the key is encoded
            with `PKCS#8`_. If ``False``, it is encoded in the custom
            OpenSSL/OpenSSH container.

          protection (string):
            *Only in combination with a pass phrase*.
            The encryption scheme to use to protect the output.

            If :data:`pkcs8` takes value ``True``, this is the PKCS#8
            algorithm to use for deriving the secret and encrypting
            the private DSA key.
            For a complete list of algorithms, see :mod:`Crypto.IO.PKCS8`.
            The default is *PBKDF2WithHMAC-SHA1AndDES-EDE3-CBC*.

            If :data:`pkcs8` is ``False``, the obsolete PEM encryption scheme is
            used. It is based on MD5 for key derivation, and Triple DES for
            encryption. Parameter :data:`protection` is then ignored.

            The combination ``format='DER'`` and ``pkcs8=False`` is not allowed
            if a passphrase is present.

          randfunc (callable):
            A function that returns random bytes.
            By default it is :func:`Crypto.Random.get_random_bytes`.

        Returns:
          byte string : the encoded key

        Raises:
          ValueError : when the format is unknown or when you try to encrypt a private
            key with *DER* format and OpenSSL/OpenSSH.

        .. warning::
            If you don't provide a pass phrase, the private key will be
            exported in the clear!

        .. _RFC1421:    http://www.ietf.org/rfc/rfc1421.txt
        .. _RFC1423:    http://www.ietf.org/rfc/rfc1423.txt
        .. _RFC4253:    http://www.ietf.org/rfc/rfc4253.txt
        .. _`PKCS#8`:   http://www.ietf.org/rfc/rfc5208.txt
        N�OpenSSHc�N��g|]!}�j|�����"Sr8)r,�to_bytes)r;r"r-s  �r2r=z%DsaKey.export_key.<locals>.<listcomp>s+���J�J�J��D�I�a�L�)�)�+�+�J�J�Jr4)r r!rrc�Z�t|d��dzrtd��|zS|S)Nr�)rrr%s r2�funczDsaKey.export_key.<locals>.funcs.����1��J�J��%����7�7�Q�;�&��Hr4c�&��g|]
}�|����Sr8r8)r;r"r�s  �r2r=z%DsaKey.export_key.<locals>.<listcomp>s!���*�*�*��D�D��G�G�*�*�*r4�ssh-dssr4c�X�g|]'}tjdt|����|z��(S)�>I)�struct�pack�len)r;�kps  r2r=z%DsaKey.export_key.<locals>.<listcomp>s/��P�P�P��V�[��s�2�w�w�7�7�"�<�P�P�Pr4�ssh-dss ���Tz"PBKDF2WithHMAC-SHA1AndDES-EDE3-CBC)�
key_params�randfunczENCRYPTED PRIVATE�PRIVATErz#DSA private key cannot be encryptedrzDSA PRIVATEz*PKCS#8 is only meaningful for private keys�PUBLIC�DERz KEYz3Unknown key format '%s'. Cannot export the DSA key.)r	r�get_random_bytesr}�binascii�
b2a_base64rr r!rrArr"�encoder
�wrap�oidr)rrr)r-�format�pkcs8�
passphrase�
protectionr��tup1�tup2�keyparts�	keystring�params�private_key�
binary_key�key_type�ints�pem_strr�s`               @r2�
export_keyzDsaKey.export_key�sg����v�!� ��,�,�J����.�H��Y���J�J�J�J�5I�J�J�J�D�
�
�
�+�*�*�*�T�*�*�*�D�"�|�d�*�H����P�P�x�P�P�P���I���!4�Y�!?�!?����!D�D�D��d�f�d�f�d�f�5�6�6�������	 ��}����
)�!�F�!E�J�(���0�0�7�7�9�9��"�Z� +�S�*� *�v�)1�"�"�"�
�
�)�2�H�H�(�H�!�
�
��U�?�?�z�?�$�%J�K�K�K��4�6�4�6�4�6�4�6�4�6�B��(��.�.�5�5�7�7�
�(����
O� �!M�N�N�N�8�� *�4�6� 2� 2�F�<�<�J��H��U�?�?����U�?�?��j� *�H�v�,=� *�H���G��7�#�#�#��N�QW�W�X�X�Xr4c� �td����Nz'Use module Crypto.Signature.DSS instead��NotImplementedError)r-�M�Ks   r2�signzDsaKey.signU���!�"K�L�L�Lr4c� �td���r�r�)r-r��	signatures   r2�verifyz
DsaKey.verifyXr�r4c��t�r`r�)r-�	plaintextr�s   r2�encryptzDsaKey.encrypt[���!�!r4c��t�r`r�)r-�
ciphertexts  r2�decryptzDsaKey.decrypt^r�r4c��t�r`r��r-r��Bs   r2�blindzDsaKey.blindar�r4c��t�r`r�r�s   r2�unblindzDsaKey.unblinddr�r4c��t�r`r�rYs r2�sizezDsaKey.sizegr�r4)rNNNN)r{�
__module__�__qualname__�__doc__rfr3rOrWrAr[r]rcrjrlrprsr�r�r��	exportKey�	publickeyr�r�r�r�r�r�r�r8r4r2rrNs���������,)�(�(�H�
#�
#�
#� � � �"	�	�	� � � �
������)�)�)����&�&�&����
B�B�B�V�V�V�'�'�'�?C�,0�{Y�{Y�{Y�{Y�|�I��I�M�M�M�M�M�M�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"r4rc�T�����dddd��|��}|�td|z���tjdz�|�zdz
�zdz
}|dz
|�zz
}t	d	��}d|dz
z}t||��tkrj|d
���t	jtj����	����|dz
z}||zdz}t||��tk�j|�
��|ksJ�d�d|dz
z}	��fd�t|dz��D���d
��D���t��fd�t|��D���|d|zdz
zd|�zzz��}t	||z��}	|	�
��|ksJ�|	|dzz}
|	|
dz
z
}|�
��|krt||��tkrn	�|dzz
���|dz
|z}tjd��D]�}
�dztd��zt	|
�����z}t	jtj|���	����}t#|||��}|dkrn��|||�fS)z+Generate a new set of DSA domain parameters����)���NzInvalid modulus length (%d)�r6��@Tc	���g|]M}tj�t�|z�����z�������NSr8)r�newrr��digest)r;�j�offset�seeds  ��r2r=z$_generate_domain.<locals>.<listcomp>�s\���
+�
+�
+���j�����
� 3� 3� <� <� >� >�>�?�?�F�F�H�H�
+�
+�
+r4c�6�g|]}tj|����Sr8�r�
from_bytes)r;rVs  r2r=z$_generate_domain.<locals>.<listcomp>�s#��0�0�0��g� ��#�#�0�0�0r4c�2��g|]}�|d|�zzz��S)r6r8)r;�i�V�outlens  ��r2r=z$_generate_domain.<locals>.<listcomp>�s+���C�C�C���1���q�6�z�*�+�C�C�Cr4�sggen)�getr)r�digest_sizerrrr�r�r�rwr�sum�	itertools�countrr�rE)�Lr��N�n�b_r!�	upper_bit�U�W�X�cr �er�rr�r�r�r�s               @@@@r2�_generate_domainr�ks	��������3�(�(�,�,�Q�/�/�A��y��6��:�;�;�;�
�
�!�
#�F�	
�V��a��F�"�Q�&�A�	
�Q��!�f�*�	�B�	��
�
�A��a�!�e��I�
�a��
*�
*�n�
<�
<��x��|�|����v�z�$�/�/�6�6�8�8�9�9�Y��]�K��
�	�M�A����a��
*�
*�n�
<�
<�

�>�>���q� � � � ��F��a�!�e��I��
+�
+�
+�
+�
+�!�!�a�%�(�(�
+�
+�
+��0�0�Q�0�0�0���C�C�C�C�C�Z��]�]�C�C�C��1��!�r�'�Q��'�A�!�f�*�,=�>�
@�
@��
�A�	�M�"�"���~�~���1�$�$�$�$�
��Q��K��
��Q��K���>�>���q� � ��q�(�+�+�~�=�=���!�a�%����$
�Q��1��A����#�#�����7�N�T�!�W�W�$�w�u�~�~�'>�'>�'@�'@�@����v�z�!�}�}�3�3�5�5�6�6����1�a�L�L����6�6��E��
�q�!�T�?�r4c��|�tj}|r�tt|��\}}}t	|��t
k}|t	|��t
kz}||dz
|zdkz}||dkp||kz}|t
|||��dkz}|rtd���nt||��\}}}}|�	��}|�	��}	||krtd||fz���||	fdvrtd||	fz���d|cxkr|ksntd���tj
|	d	z|�
��}
|
|dz
zdz}t
|||��}|||||d�}
t|
��S)a�Generate a new DSA key pair.

    The algorithm follows Appendix A.1/A.2 and B.1 of `FIPS 186-4`_,
    respectively for domain generation and key pair generation.

    Args:
      bits (integer):
        Key length, or size (in bits) of the DSA modulus *p*.
        It must be 1024, 2048 or 3072.

      randfunc (callable):
        Random number generation function; it accepts a single integer N
        and return a string of random data N bytes long.
        If not specified, :func:`Crypto.Random.get_random_bytes` is used.

      domain (tuple):
        The DSA domain parameters *p*, *q* and *g* as a list of 3
        integers. Size of *p* and *q* must comply to `FIPS 186-4`_.
        If not specified, the parameters are created anew.

    Returns:
      :class:`DsaKey` : a new DSA key object

    Raises:
      ValueError : when **bits** is too little, too big, or not a multiple of 64.

    .. _FIPS 186-4: http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf
    Nr6rzInvalid DSA domain parametersz?Mismatch between size of modulus (%d) and 'bits' parameter (%d)))r�r�)r�r�)r�r�)r�r�z;Lengths of p and q (%d, %d) are not compatibleto FIPS 186-3zIncorrent DSA generatorr�)�
exact_bitsr�r)rr�rFrrrrEr)r�rw�randomr)rr�rsr r!r�	fmt_error�_r�r�r�r"rr.s              r2rr�s���<���*��
�6��g�v�&�&���1�a�(��*�*�i�7�	��(��+�+�y�8�8�	��q�1�u��k�a�'�'�	��Q�!�V�%�q�A�v�%�	��S��A�q�\�\�Q�&�&�	��	>��<�=�=�=�	>�&�d�H�5�5�
��1�a��	�����A�	�����A��D�y�y��6�9:�D�	�B�C�C�	C�	
�1�v�0�0�0��)�,-�q�6�2�3�3�	3�
�q�9�9�9�9�1�9�9�9�9��2�3�3�3�	��!�b�&�8�<�<�<�A�	�Q��U��a��A��A�q�!���A��A�1�!��4�4�H��(���r4Tc	���ttdtt|������}t	|��}d}|�rt|j��tk}|t|j��tkz}||jdz
|jzdkz}||j	dkp|j	|jkz}|t|j	|j|j��dkz}||jdkp|j|jkz}t|d��rJ||j
dkp|j
|jkz}|t|j	|j
|j��|jkz}|rtd���|S)a�Construct a DSA key from a tuple of valid DSA components.

    Args:
      tup (tuple):
        A tuple of long integers, with 4 or 5 items
        in the following order:

            1. Public key (*y*).
            2. Sub-group generator (*g*).
            3. Modulus, finite field order (*p*).
            4. Sub-group order (*q*).
            5. Private key (*x*). Optional.

      consistency_check (boolean):
        If ``True``, the library will verify that the provided components
        fulfil the main DSA properties.

    Raises:
      ValueError: when the key being imported fails the most basic DSA validity checks.

    Returns:
      :class:`DsaKey` : a DSA key object
    rFr6rr"zInvalid DSA key components)r+�ziprFrrrr rr!rrErryr"r))�tup�consistency_checkr.�keyr�s     r2rr�sS��2�C�1�3�w��3D�3D�E�E�F�F�H�
��
�
�C��I��;�'���.�.�)�;�	��(���/�/�9�<�<�	��s�u�q�y�C�E�)�a�/�/�	��S�U�a�Z�1�3�5�C�E�>�1�	��S�����s�u�-�-��2�2�	��S�U�a�Z�1�3�5�C�E�>�1�	��3����	;����!��5�s�u���~�5�I���S�U�C�E�3�5�1�1�S�U�:�:�I��7��5�6�6�6��Jr4c����|rtd���t���|dd�����ddkrtd����fd�dD��}t|��S)	Nz-DSA private key already comes with parameters�T)�nr_elements�only_ints_expectedrzNo version foundc� ��g|]
}�|��Sr8r8)r;r<�ders  �r2r=z+_import_openssl_private.<locals>.<listcomp>'s���
1�
1�
1��3�t�9�
1�
1�
1r4)r��r6r��)r)r�decoder)�encodedr�r�r�rs    @r2�_import_openssl_privater!sz���
�J��H�I�I�I�
�-�-�
�
�w�A�$�
�
O�
O�C�
�1�v��{�{��+�,�,�,�
1�
1�
1�
1��
1�
1�
1�C��S�>�>�r4c�`�t|��\}}}|tkrtd���|r|rtd���t���|��j}t
t���|p|����\}}}	||	||f}
t|
��S)NzNo DSA subjectPublicKeyInfozToo many DSA parameters)	rr�r)rr
�value�listrr)rr�r��algoid�encoded_key�
emb_paramsrr r!rr�s           r2�_import_subjectPublicKeyInfor+s���'F�w�'O�'O�#�F�K��
��}�}��6�7�7�7�
�4�*�4��2�3�3�3������K�(�(�.�A��;�=�=�'�'��(<�*�=�=�>�>�G�A�q�!��a��A�,�C��S�>�>�r4c�B�t|��}t|d|��Sr`)rr)rr�r��sp_infos    r2�_import_x509_certr9s!��.�w�7�7�G�'���v�>�>�>r4c��|rtd���tj||��}|dtkrtd���t	���|d��j}tt���|d����\}}}t|||��||||f}t|��S)Nz"PKCS#8 already includes parametersrzNo PKCS#8 encoded DSA keyr6r�)r)r
�unwrapr�rr
rrrrEr)	rr�r�rIr"r r!rr�s	         r2�
_import_pkcs8r?s���
�?��=�>�>�>�
��W�j�)�)�A���t�s�{�{��4�5�5�5������A�a�D�!�!�'�A��;�=�=�'�'��!��-�-�.�.�G�A�q�!��q�!�Q�<�<��A�q�!�
$�C��S�>�>�r4c��ttttf}|D]!}	||||��cS#t$rY�wxYwt	d���)z?Import a DSA key (public or private half), encoded in DER form.�DSA key format is not supported)rrrrr))�key_datar�r��	decodings�decodings     r2�_import_key_derrKsx��)�-�"�� �I�
����	��8�H�j�&�9�9�9�9�9���	�	�	��D�	�����6�
7�
7�7s�/�
<�<c�B��t|��}|�t|��}|�d��r;tjt	|��|��\}}}|rd}t||d��S|�d��r�t
j|�d��d��}g�t|��dkrctjd|dd���d}��|dd|z���|d|zd�}t|��dk�c�dd	kr�fd
�dD��}t|��St|��dkr*t|d��dkrt||d��Std
���)a�Import a DSA key.

    Args:
      extern_key (string or byte string):
        The DSA key to import.

        The following formats are supported for a DSA **public** key:

        - X.509 certificate (binary DER or PEM)
        - X.509 ``subjectPublicKeyInfo`` (binary DER or PEM)
        - OpenSSH (ASCII one-liner, see `RFC4253`_)

        The following formats are supported for a DSA **private** key:

        - `PKCS#8`_ ``PrivateKeyInfo`` or ``EncryptedPrivateKeyInfo``
          DER SEQUENCE (binary or PEM)
        - OpenSSL/OpenSSH custom format (binary or PEM)

        For details about the PEM encoding, see `RFC1421`_/`RFC1423`_.

      passphrase (string):
        In case of an encrypted private key, this is the pass phrase
        from which the decryption key is derived.

        Encryption may be applied either at the `PKCS#8`_ or at the PEM level.

    Returns:
      :class:`DsaKey` : a DSA key object

    Raises:
      ValueError : when the given key cannot be parsed (possibly because
        the pass phrase is wrong).

    .. _RFC1421: http://www.ietf.org/rfc/rfc1421.txt
    .. _RFC1423: http://www.ietf.org/rfc/rfc1423.txt
    .. _RFC4253: http://www.ietf.org/rfc/rfc4253.txt
    .. _PKCS#8: http://www.ietf.org/rfc/rfc5208.txt
    Ns-----r�� r6r�r�rr�c�D��g|]}tj�|����Sr8r�)r;r"r�s  �r2r=zimport_key.<locals>.<listcomp>�s(���I�I�I�q�7�%�h�q�k�2�2�I�I�Ir4)r�rr6r��0r)r	�
startswithrr
r
rr��
a2b_base64�splitr�r��unpackrxrrr))	�
extern_keyr�r�marker�enc_flagr��lengthr�r�s	        @r2rr\s����P��$�$�J����Z�(�(�
����X�&�&�6�"%�*�U�:�->�->�
�"K�"K���f�h��	��J��s�J��5�5�5����[�)�)�
"��'�
�(8�(8��(>�(>�q�(A�B�B�	����)�n�n�q� � ��]�4��2�A�2��7�7��:�F��O�O�I�a��F�
�l�3�4�4�4�!�!�f�*�+�+�.�I��)�n�n�q� � ��A�;�*�$�$�I�I�I�I�L�I�I�I�C��S�>�>�!�
�:������t�J�q�M�2�2�d�:�:��z�:�t�<�<�<�
�6�
7�
7�7r4z1.2.840.10040.4.1)NN)Tr`).�__all__r�r�r��Crypto.Util.py3compatrrr	r
r�Cryptor�	Crypto.IOr
r�Crypto.Hashr�Crypto.Util.asn1rrrrr�Crypto.Math.Numbersr�Crypto.Math.Primalityrrr�Crypto.PublicKeyrrr�objectrr�rrrrrrrr�	importKeyr�r8r4r2�<module>r7sF��2=�
<�
<������
�
�
�
�����H�H�H�H�H�H�H�H�H�H�H�H�H�H������� � � � � � � � ���������������������(�'�'�'�'�'�3�3�3�3�3�3�3�3�3�3�@�@�@�@�@�@�@�@�@�@�@Z"�Z"�Z"�Z"�Z"�V�Z"�Z"�Z"�z2�2�2�jF�F�F�F�R.�.�.�.�p������?�?�?�	�	�	�8�8�8�"C8�C8�C8�C8�N
�	����r4