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:/usr/lib/python2.7/site-packages/passlib/tests/
Upload File :
Current File : //usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyc
�
���Xc@sdZddlZddlmZddlZeje�ZddlZddl	Z
ddlmZddl
mZmZddlmZmZddlmZddlmZmZmZd	gZeZZejd
dfkr�ddlmZnejd
d
fkr ddlmZnd
Z dZ!dZ"dZ#dZ$dZ%dZ&dZ'ej(j)dksnt*d��ej(j+dks�t*d��d�Z,e,�Z-d�Z.defd��YZ/dj0d�Z1e1dd Z2e1d d! Z3d"efd#��YZ4dS($s"passlib.tests -- test passlib.totpi����N(tpartial(texc(tunicodetu(tTestCaset	time_call(ttotp(tTOTPt	AppWallettAES_SUPPORTt
EngineTestii(tErrortabcdeft�t4AOGGDBBQSYHNTUZs
�c!��vΙs�]�9�0 D�y/�4&��tS3JDVB7QD2R7JPXXtJBSWY3DPEHPK3PXPs
Hello!ޭ��isunexpected float_info.radixi,s#double precision unexpectedly smallcCs�d}d}xetrs|d>}ytjj|d�j}Wntttfk
rYPnX||krjPn|}qW|d8}d}t||�S(s8
    helper to calc max_time_t constant (see below)
    iiiIЇ�:i@(tTruetdatetimetutcfromtimestamptyeart
ValueErrortOSErrort
OverflowErrortmin(tvalueRt
next_valuet	next_yeartmax_datetime_timestamp((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyt_get_max_time_t8s	



cCs|dddS(Niii((traw_size((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pytto_b32_sizeist
AppWalletTestcBsheZdZd�Zd�Zd�Zdd�Zd�Zd�Z	de
d�Zd	�Zd
�Z
RS(spasslib.totp.AppWalletcCs%t�}|j|ji�|j|j�idd6dd6}t|�}|j|j|�|j|j�td�}|j|j|�td�}|j|jidd6dd6�td�}|j|j|�|jttd	�|jttd
�|jttidd6dd6�dS(
s-constructor -- 'secrets' param -- input typestaaat1tbbbt2s
 1: aaa
# comment
 
2: bbb   s"1: aaa: bbb 
# comment
 
2: bbb   saaa: bbbs{"1":"aaa","2":"bbb"}i{s[123]tN(	RtassertEqualt_secretstassertFalsethas_secretst
assertTruetassertRaisest	TypeErrorR(tselftwallettref((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_secrets_typesvs 	!cCs�idd6dd6dd6}t|�}|j|j|�tidtd�6dtd�6dtd�6�}|j|j|�tidd6dd6dd6�}|j|j|�|jttidd
6�tidd6�}|jttidd	6�|jttidd
6�titd�d6dd6dd6�}|j|j|�|jttidd6�|jttidd6�|jttigd6�dS(s9constructor -- 'secrets' param -- tag/value normalizationR!R"R#t02tccctCis1-2_3.4s-abcsab*$i{N(i(RR&R'RR+R,RtNone(R-R/R.((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_secrets_tags�s 3!'cCsStidd6dd6�}|j|jd�|j|j|j�d�tidd6dd6dd6�}|j|jd�|j|j|j�d�tidd6dd6dd6dd�}|j|jd�|j|j|j�d�|jttidd6dd6dd6dd�t�}|j|jd	�|jt|jd	�d	S(
s"constructor -- 'default_tag' paramtoneR"ttwoR1R!tAtdefault_tagtBN(RR&R9t
get_secretR+tKeyErrorR4(R-R.((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_default_tag�s!''	cCs?tr|o|�n%|o+|jt|�|jd��dS(Ns$'cryptography' package not installed(R	R+tRuntimeErrortskipTest(R-tcanary((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pytrequire_aes_support�scCs�titd6td6�}tddddddd	d
dd�}|jdt|j|��|j|j|�d
t�tddddddd	ddd�}|j|j|�d
t�tddddddd	ddd�}|j|j|�d
t	�|j
�}|jdd�|j|j|�d
d�|j
�}|jdd�|jt
|j|�|j
�}|jdd�|jt|j|�dS(s.decrypt_key()R"R$tvitci
tst6D7N7W53O7HHS37NLUFQtktMHCTEGSNPFN5CGBJttR@itSPZJ54Y6IPUD2BYA4C6AtZGDXXTVQOWYLC2AUitFCCTARTIJWE7CPQHUDKAt D2DRS32YESGHHINWFFCELKN7Z6NAHM4Ms
�D6.F7�Qt3i�N(RtPASS1tPASS2tdictRARtdecrypt_keyR&tKEY1_RAWtKEY2_RAWtcopytupdateR+R<R(R-R.tCIPHER1tCIPHER2tCIPHER3ttemp((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_decrypt_key�s(cCs�|j�titd6td6dd�}tdddddd	d
d	dd�}|j|j|�d�|j�}|jdd�|j	|j|�d�|j�}|jdd�|j	|j|�d�d
S(s$.decrypt_key() -- needs_recrypt flagR"R$tencrypt_costi
RBiRCRDtAAAARFRHiN(
RARRNRORPR(RQRTRUR*(R-R.R/RY((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_decrypt_key_needs_recrypts
 'R"cCs�|jt|�tdddddg��|j|dd�|j|d|�|j|d|j�|jt|d�t|j��|jt|d�tt|���|j|�\}}|j||�|j||�dS(s.check encrypt_key() result has expected formatRBRHRCRDRFiN(R&tsetR[tlenRt	salt_sizeRQ(R-tresultR.tkeyttagt
needs_recryptt
result_keytresult_needs_recrypt((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pytassertSaneResult0s+#&cCs�titd6dd�}|jdt|jt��|jt�}|j||t�|jt�}|j||t�|j|d|d�|j|d|d�titd6dd�}|jt�}|j||t�titd6td6�}|jt�}|j||td	d�titd6�}d
|_	|jt�}|j||t�|jt
�}|j||t
�|jt|jd�dS(
s.encrypt_key()R"R[iR@RDRFiR$Rci@R%N(
RRNRARtencrypt_keyRRRgtassertNotEqualROR`RSR+R(R-R.Ratothertwallet2((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_encrypt_keyAs*	cCs�|j�tidd6�}|jd8_tt|jt�dd�\}}|jd7_tt|jt�dd�\}}|j||dd|dd	�d
S(s verify cost parameter via timingR!R"itmaxtimeiiitdeltag�?N(RARR[RRRhRRtassertAlmostEqual(R-R.Rnt_tdelta2((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_encrypt_cost_timingjs
$$N(t__name__t
__module__tdescriptionPrefixR0R5R=R4RARZR]tFalseRgRlRr(((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyR os	2	%	 	&		)t12345678901234567890tasciii ii@tTotpTestcBsDeZdZdZd�Zd�Zdod�Zd�Ze	dddd	d
ddd
�Z
e	dddd�dpdqdrdsdtge	dddd
�dudvdwdxdyge	dddd�dzd{ge	dedd!dd	�d|d}d~dd�d�ge	dedd!dd.�d�d�d�d�d�d�ge	de
dd!dd5�d�d�d�d�d�d�ge	dd<dd�d�d�ge	dd<ddAd
dB�d�ge	dedd!d
dE�d�ge	dedd!dd.d
dE�d�ge	de
dd!dd5d
dE�d�ggZdI�ZdJ�ZdK�ZdL�ZdM�ZdN�ZdO�ZdP�ZdQ�ZdR�ZdS�ZdodT�ZdU�ZdV�ZdW�ZdX�ZdY�ZdZ�Z d[ddd\d]�Z!d^�Z"d_�Z#d`�Z$da�Z%dodb�Z&dodc�Z'dd�Z(de�Z)df�Z*dg�Z+dh�Z,di�Z-dj�Z.dk�Z/dl�Z0dm�Z1dn�Z2RS(�s3
    common code shared by TotpTest & HotpTest
    spasslib.totp.TOTPcCsJtt|�j�ddlm}|j�|jtd|j��dS(Ni����(tlookup_hashtrng(	tsuperRytsetUptpasslib.crypto.digestRztclear_cachet	patchAttrttotp_modulet	getRandom(R-Rz((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyR}�s
cCs|j�j�tS(sY
        helper to generate random epoch time
        :returns float: epoch time
        (R�trandomt
max_time_t(R-((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pytrandtime�scKs�|j�}d|kr%t|d<n|jd|jdd��|jd|jddd	g��|jd
|jdd��|p�t|�S(s@
        helper which generates a random TOTP instance.
        Rbtnewtdigitsii
talgtsha1tsha256tsha512tperiodix(R�Rt
setdefaulttrandinttchoiceR(R-tclstkwdsR{((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pytrandotp�s
"cCs�|j�}|j�}|j|j|jd�xCtd�D](}|j|jkrZPn|j�}q>W|jd�xCtd�D](}|j|jkr�Pn|j�}q�W|jd�dS(s,
        internal test -- randotp()
        skey not randomized:i
sdigits not randomizedsalg not randomizedN(R�RiRbtrangeR�tfailR�(R-totp1totp2Rp((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_randotp�s
tformattbase32R�R�R�iR�iRbtACDEFGHJKL234567ii��6Tt221105i��6Tt178491i��6Tiռ6Tiּ6Tt915114t20221105t86178491t03915114sS3JD-VB7Q-D2R7-JPXXi5��Tt000492iS��Tt897212trawi;t94287082i�5:Bt07081804i�5:Bt14050471i��It89005924i�5wt69279037I��t65353130R�t46119246t68084774t67062674t91819424t90698825t77737706R�t90693936t25091201t99943326t93441116t38618901t47863826Ri�St727248i.ѡTt122419i	i)i�ѡTt	662331049i<t19360094t40857319t37023009c
cs�ddlm}x�|jD]�}|jj�}|j|d�x�|dD]�}t|�dkru|\}}}n|\}}d}tj	d||||�||�}d|j
||f}	|||||	fVqKWqWdS(	sv
        helper to iterate over test vectors.
        yields ``(totp, time, token, expires, prefix)`` tuples.
        i����(Riiis+test vector: %r time=%r token=%r expires=%rsalg=%r time=%r token=%r: N(tpasslib.totpRtvectorstvector_defaultsRTRUR_R4tlogtdebugR�(
R-RtrowR�tentryttimettokentexpirestotptprefix((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pytiter_test_vectors,scCsd|jtt�|jttdddt�tdt�}tdt�}|j|j|j�dS(sconstructor -- 'new'  parameterRbt4aoggdbbqsyhntuzR�N(R+R,RRRiRb(R-R�R�((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_ctor_w_newEs
c	CsD|jttdtdd�j�d�|jttdtdd�j�d�|jttdtdd�j�d�|jttdtd	d
�j�d
�|jttdtd	d�j�d�|jttdtd	ddd�|jttdtd	d
�|jtdt	j
dd�g��tdd�}WdQXdS(s constructor -- 'size'  parameterR�R�R�iR�i R�i@tsizei
iii	tcategoryt
message_res-.*for security purposes, secret key must be.*t0AthexNt0A0A0A0A0A0A0A0A0A(R&R_RRRbR+RtassertWarningListRPRtPasslibSecurityWarning(R-Rp((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_ctor_w_sizeQs((((("cCs�|jtt�jt�|jttj��jt�|jtd�jt�|jttd�|jtdd�jt�|jttdd�|jttd�jt�dS(s,constructor -- 'key' and 'format' parameterss 4aog gdbb qsyh ntuz sao!ggdbbqsyhntuzte01c630c2184b076ce99R�tX01c630c2184b076ce99R�N(	R&RtKEY1RbRRtlowerR+tBase32DecodeErrortBase16DecodeError(R-((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_ctor_w_key_and_formatiscCs[|jttdd�jd�|jttdd�jd�|jtttdd�dS(sconstructor -- 'alg' parameterR�sSHA-256R�tSHA256sSHA-333N(R&RR�R�R+R(R-((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_ctor_w_alg�scCst|jtttdd�|jttdd�jd�|jttdd�jd�|jtttdd�dS(s!constructor -- 'digits' parameterR�iii
iN(R+RRR�R&R�(R-((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_ctor_w_digits�scCs�|jtt�jd�|jttdd�jd�|jtttdd�|jtttdd�|jtttdd�|jtttdd�dS(	s!constructor -- 'period' parameteriR�i?g�?tabcii����N(R&RR�R�R+R,R(R-((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_ctor_w_period�scCsU|jtt�jd�|jttdd�jd�|jtttdd�dS(s constructor -- 'label' parametertlabelsfoo@barsfoo:barN(R&RR�R�R4R+R(R-((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_ctor_w_label�scCsU|jtt�jd�|jttdd�jd�|jtttdd�dS(s!constructor -- 'issuer' parametertissuersfoo.comsfoo.com:barN(R&RR�R�R4R+R(R-((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_ctor_w_issuer�scCs�|jtt�jd�|jtjdd�t�jd�|jttjdd�|jttjdd�|jttjdd�|jttjdd�dS(	susing() -- 'period' parameteriR�i?g�?R�ii����N(R&RR�R�tusingR+R,R(R-((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_using_w_period�s%cs|j�}|j|jtj�|j|jd�ttj���dg��fd�}|jdt	j
d|��}|j|jd�d�|j|jd�d�|jt
t	j
dd�d}|jt|t	j
dd	��|jt|t	j
dd
��dS(susing -- 'now' parametergH�z��^@cs�dcd7<�dS(Nii(((tcounter(s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pytnow�sR�R�i~ii{s)now\(\) function must return non-negativecSsdS(NR�((((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyt<lambda>�scSsdS(Ni����((((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyR��sN(R�tassertIsR�t_timeR�Rotnormalize_timeR4tintRR�R&R+R,tassertRaisesRegextAssertionError(R-R�R�tmsg_re((R�s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_using_w_now�s%	cCs|dkr!|jdd�}n|j|jtd��d�|j|jd�d�|j|jd�d�|j|jd�d�|jt|jd�|jt|jd�|jtj|jd�|jtj|jd	�|jtj|jd
�dS(s$normalize_token() -- instance methodR�it1234567i��iG�t0234567g��2At123456t01234567iNa�N(	R4R�R&tnormalize_tokenRR+R,RtMalformedTokenError(R-R�((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_normalize_token_instance�scCs |jdtjdd��dS(s!normalize_token() -- class methodR�R�iN(R�RR�(R-((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_normalize_token_classscs)tj�}|j|�}x�td�D]�}|j��t��}|j|j��|�|j|j|d�|�|j|j|�|�tjj	��}|j|j|�|�|j
}z5t�fd��|_
|j|jd�|�Wd||_
Xq(W|j
t|jd�dS(snormalize_time()i
g�?cs�S(N(((R�(s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyR�sNt1234(RR�R�R�R�R�R&R�RRR�tstaticmethodR4R+R,(R-tTotpFactoryR�Rpttinttdttorig((R�s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_normalize_times 	cCs|j�}ttd�}|j|jt�|j|jd�|j|jt�|j|j�d�|j|jdd�d�|j|jdt	�t�|j|jdd�d	�td
t
d|jdd
��}|j}|j}|j�}dS(s pretty_key() and .key attributesR�R�s4AOG-GDBB-QSYH-NTUZtsept s4AOG GDBB QSYH NTUZR�R�se01c-630c-2184-b076-ce99R�R�i
iN(R�RRRR&Rbthex_keyt
base32_keyR�t
pretty_keyRvRR�(R-R{R�Rp((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_key_attrs$s!		cCs�ddlm}m}|d�}|jd�}|j||�|j|jd�|j|jd�|j|jd�|j|d�|jt	|�d�|j|d	d�|j|d
d�|j
t|jd�|j
t|jd�|j
|�d�|_|j|jd
�|j
|j�d�|_|j|jd	�|j|j�|jd�}|j||�|j||�|jd�}|j||�|j||�|jd�}|j||�dS(sgenerate() -- TotpToken() classi����(Rt	TotpTokents3jdvb7qd2r7jpxxiS��TR�i��iT��Tiiii����cSsdS(Ng�Tn'�A((((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyR�Rsg�?cSsdS(NiU��T((((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyR�Vsi7��TiW��TN(R�iT��T(R�RRtgeneratetassertIsInstanceR&R�R�texpire_timeR_R+t
IndexErrort__getitem__R*R�t	remainingtvalidR(tassertIsNotRi(R-RRR�Ratresult2tresult3tresult4((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_totp_token=s8
csMddlm}|dt�}|j��|j��}|j}|j|t�|jd}|j	|j|d�j|�|j
|j|d�j|�tjj��}|j	t
|j|��t
���|j	|j|�j|�|jd�fd��d|j�}|j	|j�j|�|jt|jd�d	S(
s
generate()i����(RR�iiR�cs�S(N(((R�(s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyR��sRbN(R�RRR�RR�R	RR�R&RiRRR�R�R�RR+R(R-RR�RaR�t
start_timeR�R�((R�s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyt
test_generatehs	
  %'cCs�x�|j�D]y\}}}}}|j|�}|j|j|d|�|j|j||jd|�|r
|j|j|�q
q
WdS(sgenerate() -- reference vectorstmsgN(R�RR&R�R�R�R
(R-R�R�R�R�R�Ra((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyt!test_generate_w_reference_vectors�s" iR%cCs�ddlm}|j||�|j|jt�|j|jj|�|j|j|d|d�||}||}	|j|j|	d|d�|j|j	|d|d�|j|j
|d|d�|j|j||�|	d|}
|j|j|
�|j|j
|
|�|jt|�d	�|j||	|f�|jt|jd
�|j|d|	�|j|d|�|jt|jd	�|j|�dS(Ni����(t	TotpMatchRs matched time:s matched counter:s expected counter:s	 skipped:iii����i(R�RR	RRR&R�R�R�texpected_countertskippedt
cache_secondsR
t
cache_timeR_R+RRR*(R-tmatchR�RR�twindowRRtexpectedR�R
((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pytassertTotpMatch�s*

cs\d�d}tjd�fd��t�}|j|��}|j|d�dd�dS(	s!match() -- valid TotpMatch objecti�kt781501R�cs�dS(Niii�Q(((R�(s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyR��sR�RiN(RR�tKEY3RR (R-R�R�Ra((R�s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_totp_match_w_valid_token�s
!cstddlm}d�d}tjd�fd��t�}|j|�d�}|j|d�dd	d
�dS(s3match() -- valid TotpMatch object with future tokeni����(Ri�kR!R�cs�dS(Niii�Q(((R�(s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyR��siR�RiN(R�RRR�R"RR (R-RR�R�Ra((R�s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_totp_match_w_older_token�s!csdd�d}tjd�fd��t�}|j|�d�}|j|d�ddd�d	S(
s1match() -- valid TotpMatch object with past tokeni�kR!R�cs�dS(Niii�Q(((R�(s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyR��siR�Ri����N(RR�R"RR (R-R�R�Ra((R�s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_totp_match_w_new_token�s
!csQd�d}tjd�fd��t�}|jtj|j|�d�dS(s#match() -- invalid TotpMatch objecti�kR!R�cs�dS(Niii�Q(((R�(s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyR��si<N(RR�R"R+RtInvalidTokenErrorR(R-R�R�((R�s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_totp_match_w_invalid_token�s!c	Ks�d|j|j|j|||f}|j|||�}|j|d|j|�d|jd|jdd�d|d|�dS(	s,helper to test otp.match() output is corrects5key=%r alg=%r period=%r token=%r gen_time=%r time=%r:R�R�RiRRN(RR�R�RR R�tget(	R-texpect_skippedR�R�R�tgen_timeR�RRa((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pytassertVerifyMatches�s"	cKsGd|j|j|j|||f}|j||j||d||�S(s/helper to test otp.match() throws correct errors5key=%r alg=%r period=%r token=%r gen_time=%r time=%r:t__msg__(RR�R�R+R(R-t	exc_classR�R�R�R*R�R((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pytassertVerifyRaises�s"c	Cs�|j�}|j}|j�}|j|�j}td|d|�}t|j|�}t|j|�}|t	j
|||dd�|d
|||d|�|d
|||dd|�|d||dd�|t	j
|||dd�|d|||d|�|d|||dd|�|t	j
||d|dd�|t	j
||d|d|�|d||d|dd|�tjj|�}|d||dd�|t
|d�d	S(
s)match() -- 'time' and 'window' parametersR�R*Riiii����i����N(R�R�R�RR�RPRR+R.RR&RRR(	R-R�R�R�R�tcommont
assertMatchesR+R�((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_match_w_window�s(	!!"
c
Cs|j�}|j}|j�}td|d|�}t|j|�}t|j|�}d|}|j||�j}|t	j
||dd�|d||ddd|�|j||�j}	|t	j
|	|dd�|d
|	|ddd|�dS(	smatch() -- 'skew' parametersR�R*iRii����tskewN(R�R�R�RPRR+R.RR�RR&(
R-R�R�R�R/R0R+R2tbehind_tokentahead_token((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_match_w_skew$s	
cCsY|j�}|j}|j�}|j|�}|j}|j}|j}td|d|�}t|j	|�}	t|j
|�}
|	d|||d|�|	d|||d|dd|�|
tj||d|d|d|�|
tj
|||d|d|�}|j|j|�|
tj
||d|dd�}|j|j|�d	S(
s0match() -- 'reuse' and 'last_counter' parametersR�R*i����Rtlast_counteriiiN(R�R�R�RR�R�R
RPRR+R.RR&tUsedTokenErrorR&(R-R�R�R�ttdataR�R�R
R/R0R+terr((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_match_w_reuse;s*				
cCs�td�}|j}d}|j|d|��|j|d|��|jtj|d|�|jtj|d|�|jtj|d|�dS(	smatch() -- token normalizationtotxl2f5cctbprpzxi�6Ts    3 32-136  t332136t12345t12345Xt0123456N(RRR*R+RR�(R-R�RR�((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyt test_match_w_token_normalizationds	cCs�x�|j�D]}\}}}}}|j}|||�}|j|�|j|j||jd|�|jtj|||ddd�q
WdS(smatch() -- reference vectorsRidRiN(	R�RR*R&R�R�R+RR&(R-R�R�R�R�RRRa((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_match_w_reference_vectorszs"	
 cs0ddlm}d�|jd�fd��}tdddd	d
d�}|jd|�}|j|d
��tdddd	d
d�}|jtj|jd|�tdddd	�}|jt	|jd|�d}|jd|�}|j|d
��d}|jd|�}|j|d
��dS(sverify()i����(Ri�6TR�cs�S(N(((R�(s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyR��sRBittypeRRbR;R<R�t332155s3{"v": 1, "type": "totp", "key": "otxl2f5cctbprpzx"}s,otpauth://totp/Label?secret=otxl2f5cctbprpzxN(
R�RR�RPtverifyR R+RR&R(R-RR�tsource1Rtsource1jsont
source1uri((R�s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_verify�s cCs�ddlm}|j}|td��}|j|jt�|d�}|j|jt�|tdddddt��}|j|jt�|td	��}|j|jt�|d	�}|j|jt�|j	||�|�t
�}|jd
|�j|�}|j||�|j|j
�|j
��|jd
|�j|�}|j	||�|jt|td��|jt|d�dS(
s
from_source()i����(RsNotpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=ExampleRBiRBRRbs3{"v": 1, "type": "totp", "key": "JBSWY3DPEHPK3PXP"}R.tfooN(R�Rtfrom_sourceRR&RbtKEY4_RAWRPtKEY4R�RR�Rtto_dictR+R(R-RRJR�twallet1R�R�((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_from_source�s*	!	cCs�ddlm}|j}|d�}|j||�|j|jt�|j|jd�|j|jd�|j|j	d�|j|j
d�|j|jd�|d	�}|j|jt�|jt
|d
�|jt|d�|d�}|j|jd
�|j|jd�|d�}|j|jd�|j|jd�|d�}|j|jd�|j|jd�|jt
|jd�|d�}|j|j	d�|jt
|d�|d�}|j|jd�|jt
|d�|jt
|d�|jt
|d�|d�}|j|j
d�|jt
|d�|jt
|d�|jtd tjd!d"�g��|d#�}Wd$QX|j|jt�|j|j
d�d$S(%s
from_uri()i����(RsNotpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Examplesalice@google.comtExampleR�iisNotpauth://totp/Example:alice@google.com?secret=jbswy3dpehpk3pxp&issuer=Examples0otpauth://totp/Example:alice@google.com?digits=6s?otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHP@3PXPsOotpauth://totp/Provider1:Alice%20Smith?secret=JBSWY3DPEHPK3PXP&issuer=Provider1sAlice Smitht	Provider1sMotpauth://totp/Big%20Corporation%3A%20alice@bigco.com?secret=JBSWY3DPEHPK3PXPsalice@bigco.comsBig CorporationsOotpauth://totp/alice@bigco.com?secret=JBSWY3DPEHPK3PXP&issuer=Big%20CorporationsGotpauth://totp/Provider1:alice?secret=JBSWY3DPEHPK3PXP&issuer=Provider2sPotpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&algorithm=SHA256R�sPotpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&algorithm=SHA333sHotpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&digits=8isHotpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&digits=AsJotpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&digits=%20sIotpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&digits=15sIotpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&period=63i?sHotpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&period=0sIotpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&period=-1R�R�s!unexpected parameters encounteredsQotpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&foo=bar&period=63N(R�Rtfrom_uriR	R&RbRKR�R�R�R�R�R+RR�R�RPRtPasslibRuntimeWarningRRL(R-RRRR�((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyt
test_from_uri�sT	cCsLttdddddd�}|j|jdd�d	�|jt|jdd�|j|jd�d
�d|_|j|j�d
�d|_|j|j�d	�|jt|jd�|jt|jdd�|jttdd
�jd�d�|jttdd�jd�d�|jttdd�jd�d�dS(sto_uri()R�R�R�iR�isalice@google.comsExample OrgsLotpauth://totp/alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Example%20Orgs7otpauth://totp/alice@google.com?secret=JBSWY3DPEHPK3PXPslabel:with:semicolonssissuer:with:semicolonsR�sHotpauth://totp/alice@google.com?secret=JBSWY3DPEHPK3PXP&algorithm=SHA256is@otpauth://totp/alice@google.com?secret=JBSWY3DPEHPK3PXP&digits=8i?sAotpauth://totp/alice@google.com?secret=JBSWY3DPEHPK3PXP&period=63N(	RRLR&tto_uriR+RR4R�R�(R-R�((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_to_uriUs(		cCsddlm}|j}|tdddddtdd	d
d��}|j||�|j|jt�|j|j	d	�|j|j
d�|j|jd�|j|jd
�|j|j
d�|jt|tdddt��|jt|tdddddt��|jt|tdddddt��|jt|tdddt��|tdddddtj�dd	d
d��}|j|jt�|jt|tdddd��|jt|tdddddd��|tdddddtddd
d��}|j|j	d�|j|j
d�|tdddddtdd��}|j|jd�|jt|tdddddtdd��|tdddddtdd��}|j|j
d�|jt|tdddddtdd��|jt|tdddddtdd��|tdddddtdd��}|j|jd�|jt|tdddddtdd��|jt|tdddddtdd��|jt|tdddddtdd��dS( sfrom_dict()i����(RRBiRBRRbR�salice@google.comR�RPR�iiii�sJBSWY3DPEHP@3PXPsAlice SmithRQR�R�tsha333R�iR8iR�i?tINVALIDi{N(R�Rt	from_dictRPRLR	R&RbRKR�R�R�R�R�R+RR�R�R,(R-RRYR�((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_from_dict�sD	-"(("3"-'.'..'..c
Cs�ttdddddd�}|j|j�tddd	d
dt��ttdddddddd
dd�}|j|j�tddd	d
dtdd
dd��ttdddddddd
�}|j|j�tddd	d
dtdd
��ttdddddddd�}|j|j�tddd	d
dtdd��tjdd�}|t�}|j|j�tddd	d
dt��|tdd�}|j|j�tddd	d
dt��|jttdd�j�tddd	d
dtdd��|jttdd�j�tddd	d
dtdd��|jttdd�j�tddd	d
dtdd��dS(s	to_dict()R�R�R�iR�iRBiRBRRbR�salice@google.comR�sExample OrgR�ii?N(RRLR&RMRPR�(R-R�R�((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyttest_to_dict�s8+	
	
++""N(i��6TR�(i��6TR�(i��6TR�(iռ6TR�(iּ6TR�(i��6TR�(i��6TR�(i��6TR�(iռ6TR�(iּ6TR�(i5��TR�(iS��Ts897212(i;R�(i�5:BR�(i�5:BR�(i��IR�(i�5wR�(I��R�(i;R�(i�5:BR�(i�5:BR�(i��IR�(i�5wR�(I��R�(i;R�(i�5:BR�(i�5:BR�(i��IR�(i�5wR�(I��R�(i�SR�(i.ѡTR�(i�ѡTR�(i�5:BR�(i�5:BR�(i�5:BR�(3RsRtt__doc__RuR}R�R4R�R�RPR�tRFC_KEY_BYTES_20tRFC_KEY_BYTES_32tRFC_KEY_BYTES_64R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�RRRRR R#R$R%R'R+R.R1R5R:R@RARHRORTRVRZR[(((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyRy�s�	
		!$*					
						"				+	 	!		
				0		)			$	/	w	=	^(5R\Rt	functoolsRtloggingt	getLoggerRsR�tsysR�R�tpasslibRtpasslib.utils.compatRRtpasslib.tests.utilsRRRR�R�RRR	t__all__R,R�R�tversion_infotbinasciiRRNROR�RRRSR"RLRKt
float_infotradixR�tmant_digRR�RR tencodeR]R^R_Ry(((s;/usr/lib/python2.7/site-packages/passlib/tests/test_totp.pyt<module>sH	
	/		�