ó j^ŽXc@€s!dZddlmZddlmZer?ddlmZnddlmZddlZddl m Z ddl Z e j e ƒZddlZddlZddlmZddlmZmZdd lmZmZdd lmZmZdd lmZmZmZmZm Z m!Z!ddl"j#j$Z%dd l&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,dd l-m.Z.m/Z0m1Z2m3Z3ej4j5ej4j6e7ƒƒZ8d„Z9de'fd„ƒYZ:ddl;Z;ddl<Z<de%j=fd„ƒYZ>de%j=fd„ƒYZ?de'fd„ƒYZ@dS(stests for passlib.contextiÿÿÿÿ(twith_statement(tPY3(tNoSectionErrorN(tpartial(thash(t CryptContexttLazyCryptContext(tPasslibConfigWarningtPasslibHashWarning(ttickt to_unicode(tirangetutunicodet str_to_uasciitPY2tPY26(tTestCasetset_filetTICK_RESOLUTIONt quicksleept time_callthandler_derived_from(tregister_crypt_handler_patht_has_crypt_handlert_unload_handler_nametget_crypt_handlercO€sD|jƒ}x|D]}|j|ƒqW|r@|j|ƒn|S(N(tcopytupdate(tfirsttargstkwdsttargettarg((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyt merge_dicts&s   tCryptContextTestcB€s—eZdZddddgZgeD]Zeeƒ^q%Zededdddd d d d d dddƒZe edeƒZ e dƒZ e dƒZ ejjedƒZe je dƒe dƒƒZejjedƒZe je dƒe dƒƒjdƒZejjedƒZerNeee ƒeeeƒeeeƒneddd dd dddƒZd Ze eeƒZeddƒZe eeƒZedddd!dd"gd#dgdd"d d$d d%d&d'd(d)d*d+d,d)d-d.d/d0ƒ Z d1„Z!d2„Z"d3„Z#d4„Z$d5„Z%d6„Z&d7„Z'd8„Z(d9„Z)d:„Z*d;„Z+d<„Z,d=„Z-d>„Z.dZd?„Z0d@„Z1dA„Z2dB„Z3dC„Z4dD„Z5dE„Z6dZifdZiddF6fdGifd[ifgZ7dH„Z8dI„Z9dJ„Z:dK„Z;edL„Z<dM„Z=dN„Z>dO„Z?dP„Z@dQ„ZAdR„ZBdS„ZCdT„ZDdU„ZEdV„ZFdW„ZGdX„ZHdY„ZIRS(\Rt des_cryptt md5_cryptt bsdi_cryptt sha512_crypttschemestdefaulttall__vary_roundsgš™™™™™¹?tbsdi_crypt__max_roundsi1utbsdi_crypt__default_roundsi©atsha512_crypt__max_roundsiPÃtsha512_crypt__min_roundsi@œs[passlib] schemes = des_crypt, md5_crypt, bsdi_crypt, sha512_crypt default = md5_crypt ; this is using %... all__vary_rounds = 10%% bsdi_crypt__default_rounds = 25001 bsdi_crypt__max_rounds = 30001 sha512_crypt__max_rounds = 50000 sha512_crypt__min_rounds = 40000 só[passlib] schemes = des_crypt, md5_crypt, bsdi_crypt, sha512_crypt default = md5_crypt all__vary_rounds = 0.1 bsdi_crypt__default_rounds = 25001 bsdi_crypt__max_rounds = 30001 sha512_crypt__max_rounds = 50000 sha512_crypt__min_rounds = 40000 s sample1.cfgs s s sample1b.cfgs [passlib]s [mypolicy]sutf-16s sample1c.cfgtbsdi_crypt__min_roundsiIqi¹ˆiyiȯsŒ[passlib] bsdi_crypt__min_rounds = 29001 bsdi_crypt__max_rounds = 35001 bsdi_crypt__default_rounds = 31001 sha512_crypt__min_rounds = 45000 tphpasst sha256_cryptt deprecatediitbsdi_crypt__vary_roundsitsha256_crypt__max_roundsi¸ tsha256_crypt__min_roundsiÐtsha256_crypt__default_roundst phpass__identtHtphpass__default_roundsicC€s7tt|ƒjƒtjddƒtjddƒdS(Ntignores The 'all' scheme is deprecated.*s4.*'scheme' keyword is deprecated as of Passlib 1.7.*(tsuperR#tsetUptwarningstfilterwarnings(tself((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyR<²scC€sñtƒ}|j|jƒiƒt|j}|j|jƒ|jƒt|j}|j|jƒ|jƒt|j}|j|jƒ|jƒt|j}|j|jƒ|jƒtdtdƒgƒ}|j|jƒdƒdS(stest class constructorR(R1N(s sha256_crypt( Rt assertEqualtto_dictt sample_1_dicttsample_1_resolved_dictt sample_2_dictt sample_3_dictR R((R?tctx((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_01_constructorºs cC€s%tj|jƒ}|j|jƒ|jƒtj|jƒ}|j|jƒ|jƒtj|jjdƒƒ}|j|jƒ|jƒtj|jƒ}|j|jƒ|jƒtj|j ddddƒ}|j|jƒ|jƒ|j t tjdƒ|j t tj|jddƒdS(stest from_string() constructorsutf-8tsectiontmypolicytencodingsutf-16t fakesectionN(Rt from_stringtsample_1_unicodeR@RARBtsample_1_unnormalizedtencodetsample_1b_unicodetsample_1c_bytest assertRaisest TypeErrortNoneR(R?RF((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_02_from_stringÕs cC€stjj|jƒs+td|jƒ‚ntj|jƒ}|j|jƒ|j ƒtj|j ƒ}|j|jƒ|j ƒtj|j ddddƒ}|j|jƒ|j ƒ|j t tjtjjtdƒƒ|j ttj|jddƒdS( stest from_path() constructorscan't find data file: %rRHRIRJsutf-16ssample1xxx.cfgRKN(tostpathtexistst sample_1_patht RuntimeErrorRt from_pathR@RARBtsample_1b_pathtsample_1c_pathRRtEnvironmentErrortjointhereR(R?RF((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_03_from_pathós cC€sVt|j}|j|j}|j|jƒ|jƒ|j|jƒ|jƒ|j|j}|j|jƒ|jƒ|j|jƒ|jƒ|j|j}|j|jƒ|jƒ|jƒ}|j ||ƒ|j|jƒ|jƒ|j|jƒ|jƒ|j |j|j|jƒ|jƒ|j|jƒ|jƒdS(stest copy() methodN( RRBRRDR@RAtsample_12_dictREtsample_123_dictt assertIsNotR(R?tcc1tcc2tcc2btcc3tcc4((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyt test_04_copys  cC€s)t|j}|jt|ƒdƒdS(s test repr()s!^$N(RRBt assertRegextrepr(R?Re((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyt test_09_repr+scC€s$tƒ}|j|jƒ|j|jƒ|jƒ|j|jƒ|j|jƒ|jƒ|j|jjdƒƒ|j|jƒ|jƒ|jt|jdƒt|j}|jidt ƒ|j|jƒ|jƒtƒ}|j|jƒ|j|j ƒ|j|jƒ|j ƒdS(s test load() / load_path() methodsutf-8RN( RtloadRBR@RARMRORRRSRTtTrueRD(R?RF((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyt test_10_load4s   cC€s»tddgddddƒ}|jƒ}|jt|jdtƒ|j|jƒ|ƒ|jt|jdtƒ|j|jƒ|ƒ|jt|jd d ƒ|j|jƒ|ƒd S( s$test load() errors restore old stateR$R1R6iˆR*gš™™™™™¹?ttoo__many__key__partstfake_context_optionR5i'N( Rt to_stringRRRSRRoR@tKeyErrort ValueError(R?tcctresult((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_11_load_rollback_s  cC€sUt|j}|jƒ|j|jƒ|jƒt|j}|j|j|j|jƒ|jƒ|j|j|j|jƒ|jƒt|j}|j|jƒ|j|jƒ|jƒt|j}|j|j ƒ|j|jƒ|jƒ|j t |jiiƒ|j t |jiddgƒ|j t |jdƒdS(stest update() methodR(R$N( RRBRR@RARDRbRERctsample_2_unicodeRRRSRT(R?RF((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_12_updatews" cC€sæd„}|jttddƒ|jttddƒ|jttddƒ|jttddƒ|jttddƒ|jttd d ƒ|jt|id d 6tid d6dd6}|j|jdƒdƒtdd ƒ}|j|dd ƒ|ƒ|j|dd ƒ|ƒ|j|dd ƒ|ƒ|j|id d6|ƒ|j|id d6|ƒtdd ƒ}|j|dd ƒ|ƒ|j|id d6|ƒtddƒ}|j|ddƒ|ƒ|j|ddƒ|ƒ|j|idd6|ƒ|j|idd6|ƒtddƒ}|j|ddƒ|ƒ|j|idd6|ƒtdd gd d!ƒ}|jt|jd"d!ƒ|jttddgd#d$ƒ|jttddgd%d$ƒd&S('stest basic option parsingc[€st|jƒS(N(RRA(R((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pytparsežst__gš™™™™™¹?tdefault__scheme__txt__optiontdefault____optiont__scheme__optiont!category__scheme__option__invalidi0uR%sadmin.context__schemessmd5_crypt,des_cryptR(R$sadmin.context__defaulttadminR)tcontext__defaulttdefault__context__defaultscontext.defaultsdefault.context.defaulttadmin__context__defaultsadmin.context.defaultR*tdefault__all__vary_roundssall.vary_roundssdefault.all.vary_roundstadmin__all__vary_roundssadmin.all.vary_roundsR0R7tPtmd5_crypt__identtdes_crypt__salttxxt all__saltN(RRRSRRtR@tdefault_schemetdictR(R?R{RFRw((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_20_optionsœsH    cC€sFtdd ƒ}|j|jƒd ƒtdddgƒ}|j|jƒd ƒtddƒ}|j|jƒd ƒtdtjtjgƒ}|j|jƒdƒ|jttdt j gƒdt j fd„ƒY}|jt td|gƒdt j fd„ƒY}|jt td||gƒ|jt td dgƒd S(s%test 'schemes' context option parsingR(R$R%s des_crypt, md5_crypt, tnamelesscB€seZdZRS(N(t__name__t __module__RTtname(((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyR‘ÿstdummy_1cB€seZdZRS(R•(R’R“R”(((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyR•stadmin__context__schemesN((s des_crypts md5_crypt(s des_crypts md5_crypt(s des_crypts md5_crypt( RRTR@R(RR$R%RRRStuht StaticHandlerRuRt(R?RvR‘R•((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_21_schemesèsc C€sdd„}tddgƒ}|jdddgƒ|j||ƒdgƒtddgdddgƒ}|j||ƒdgƒ|jttdtjgdddgƒtddddddgƒ}|j||ƒddgƒ|jttddgddgƒ|jt tddgddgƒ|jt tdddgdddgƒ|jt tdddgd dddƒ|jt tdddgd dddƒ|jt tdddgd dddƒ|jt tdddgd dddƒtdddgddd ddgƒ|jttdd ƒtddgdddgddgƒ}|j||ƒdgƒ|j||d ƒdgƒ|j||d ƒdgƒtddgdddgdgƒ}|j||ƒdgƒ|j||d ƒdgƒ|j||d ƒgƒdS(s(test 'deprecated' context option parsingcS€s2g|jƒD]!}|j||ƒjr |^q S(N(R(thandlerR2(RFtcategoryR”((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pytgetdepsR2R%R(R$smd5_crypt,des_cryptR1tadmin__context__deprecatedR)R†i{tuserRƒN( RTRRR@RRRSRR%RtRu(R?RœRv((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_22_deprecated sh                cC€s€|jtddƒjƒtddƒƒtdddddgƒ}|j|jƒdƒtdtjdddgƒ}|j|jƒdƒtdddgƒ}|j|jƒdƒ|jddƒ|j|jƒdƒ|jt tddgddƒ|jt tddƒtdddddgddƒ}|j|jƒdƒ|j|jdƒdƒ|j|jd ƒdƒd S( s%test 'default' context option parsingR)R%R(R$R2iR†RžRƒN( R@RRARRŽRR%RRRRtRS(R?RF((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_23_defaulths&   cC€s{d„}|j|dƒdƒ|j|dƒdƒ|j|dƒdƒ|j|dƒdƒ|j|dƒdƒdS(s&test 'vary_rounds' hash option parsingcS€std|ƒjƒdS(NR*(RRA(tv((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyR{sgš™™™™™¹?s0.1s10%ièt1000N(R@(R?R{((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_24_vary_roundss  cC€s |jt||ƒd|ƒdS(Ntmsg(t assertTrueR(R?RštbaseR¤((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pytassertHandlerDerivedFrom¡scC€stƒ}|j|jƒdƒ|j|jdtƒdƒt|j}|j|jƒt|jƒƒ|j|jdtdtƒt|jƒƒxBt|jdtƒ|jƒD]"\}}|j t ||ƒƒq³Wt|j }|j|jƒdƒdS(stest schemes() methodtresolvet unconfiguredN(((( RR@R(RoRBttupletsample_1_schemestsample_1_handlerstzipR¥RRD(R?RFRwtcorrect((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_30_schemes¤s ++cC€sÓtƒ}|jt|jƒt|j}|j|jƒdƒ|j|jdtdtƒtjƒ|j |jdtƒtjƒt|j }|jt|jƒtd|j ƒ}|j|jƒdƒdS(stest default_scheme() methodR%R¨R©R(R$N( RRRRtRŽRBR@RoRR%R§RDR«(R?RF((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_31_default_scheme¸s %cC€stƒ}|jt|jƒ|jt|jdƒt|j}|j|jdtƒtjƒ|j |jƒtjƒ|j|jddtƒtj ƒ|j |jdƒtj ƒ|jt|jdƒtdddƒ}|j|jdtƒtj ƒ|j |jƒtj ƒ|j|jdddtƒtj ƒ|j |jddƒtj ƒ|j|jdd dtƒtjƒ|j |jddƒtj ƒt rþ|j|jdt dƒdtƒtj ƒ|j|jdt d ƒdtƒtjƒnd S( stest handler() methodR%R©R$tmysql323ssha256_crypt,md5_cryptR†R›tstaffRƒN(RRRRtRšRBR@RoRR%R§R$R1RR (R?RF((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_32_handlerÐs& "%%+cC€súdd„}tdtddddgdddgdd d d d d dddgddddddƒ }|j|jjdƒ|j||dƒtdtdd dd ƒƒ|j||ddƒtdtdd dd ƒƒ|j||ddƒtddddƒƒ|j||dƒtdtdtƒƒ|j||ddƒtdtdtƒƒ|j||ddƒtdtdtƒƒ|j||dƒtdd ƒƒ|j||ddƒtdd ƒƒ|j||ddƒtdddtƒƒdS(s*test internal _get_record_options() methodcS€s|jj||ƒdS(Ni(t_configt_get_record_options_with_flag(RFtschemeR›((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pytoptions÷sttruncate_errorR(R'R$R&R2R*gš™™™™™¹?R3gš™™™™™É?R-i NRRˆgš™™™™™©?tadmin__bsdi_crypt__vary_roundsg333333Ó?tadmin__sha512_crypt__max_roundsi@œRƒt vary_roundst max_roundsRžN(sadmin(RTRRoR@R´t categoriesR(R?R·Ri((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_33_optionsôsP            cC€sKt|j}|j|jƒ|jƒ|j|jdtƒ|jƒdS(stest to_dict() methodR¨N(RRBR@RARoRC(R?RF((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_34_to_dictCscC€sÏt|j}|jƒ}ts7|j||jƒntj|ƒ}|j|jƒ|jƒ|jddƒ}|j||jddƒƒddl m }t|dgƒ}|jƒ}|j |dƒd S( stest to_string() methodRHspassword-securitys [passlib]s[password-security]iÿÿÿÿ(t UnsaltedHashR%sM# NOTE: the 'unsalted_test_hash' handler\(s\) are not registered with PasslibN( RRBRsRR@RMRLRAtreplacet!passlib.tests.test_utils_handlersRÀRk(R?RFtdumptctx2totherRÀtctx3((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_35_to_stringJs  R¶icC€sžtjtjtjg}t|ddƒ}x¸|D]°}|jdd|jƒ}|j|j|ƒ|jƒ|j|j|dtdtƒ|ƒ|j |j|dtƒ|ƒ|j |j d|ƒƒ|j |j d|ƒƒq1W|jdƒ}|j|j|ƒdƒ|j d |jƒƒ}|j|j|ƒdƒ|j d |jƒddƒ}|j|j|ƒdƒ|jt|j d |jƒdd ƒd S( s-test basic hash/identify/verify functionalityR,ittestR¶R¨R©tnotestR%tsecretR$N(RR%R$R&RR”R@tidentifyRoR§R¥tverifyt assertFalsetgenhasht genconfigRRRu(R?thandlersRvtcryptth((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyt test_40_basicqs  %c C€sîtdddgdddddd ƒ}|j|jƒjd ƒƒ|j|jd dƒjd ƒƒ|j|jd dd dƒjdƒƒ|j|jd dd dƒjd ƒƒ|j|jd ddddddd ƒdƒtrN|jddƒ}|j|jd tdƒƒjdƒƒ|j|jd tdƒƒjd ƒƒn|jt tƒjƒ|jt tƒjd dƒ|jt |jd dƒ|jt |jd dd dƒ|jt |jd dƒ|jt |jd dƒdS(stest genconfig() methodR(R%R0R7R8R9itadmin__phpass__identR‰s$1$R¶s$H$5R›Rƒs$P$5R²tsaltt.itroundstidents"$P$6........22zGEuacuPOqEpYPDeR0R/R)tfakeiNs........( RR¥RÏt startswithR@RRR RRRtRS(R?Rvtc2((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_41_genconfigŒs* "((! (+cC€sPtdgƒ}|jdƒ}x3|jD](\}}|jt|j|||q(Wtdgƒ}xE|jD]:\}}|d kr‹qmn|jt|jd||qmWtdgƒ}|jt|jdd ƒ|jttƒjddƒ|jt|jd|ddƒ|jt|jd|ddƒ|jt|jd|d dƒd S( stest genhash() methodR$tstubRÊR±RR¶RÙiR›N( RRtnonstring_vectorsRRRSRÎRTRtRÏ(R?RvRRÊRtconfig((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_42_genhash½s   cC€sút|j}|jdƒ}|j|jdƒƒ|j|jd|ƒƒ|j|jd|ƒƒ|jt|j ddƒtdgƒ}x0|j D]%\}}|jt |j||q˜W|jt tƒjdƒ|jt |jddd ƒd S( stest hash() methodtpasswords$5$rounds=3000$t passwordxR6i R$RÊR›iN( Rt sample_4_dictRR¥RÚRÌRÍRRRuRRÞRSRt(R?RvRRÊR((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyt test_43_hasháscC€sIt|j}|jdgƒ*|j|jdddddƒdƒWd QX|jdgƒ0|j|jdddddd d ƒd ƒWd QX|jdgƒ*|j|jdd dddƒdƒWd QX|jdgƒ*|j|jdd dddƒdƒWd QX|jt|jdddƒ|jt|jdddƒd S(s;test hash() method -- legacy 'scheme' and settings keywordss"passing settings to.*is deprecatedRáR¶R0RÕRÖis"$H$5........De04R5Egz0aq8Tf.1eVhY/NRØR‰s"$P$5........De04R5Egz0aq8Tf.1eVhY/R×iÏtnacls?$5$rounds=1999$nacl$nmfwJIxqj0csloAAvSER0B8LU0ERCAbhmMug4Twl609iÑs?$5$rounds=2001$nacl$8PdeoPL4aXQnJ0woHhqgIw/efyfCKC2WHneOpnvF.31RÊRÙis........s........(RRãtassertWarningListR@RRRRtRS(R?t use_16_legacyRv((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_43_hash_legacyýs&    cC€södddg}t|ddƒ}|j|jdƒd ƒ|jt|jddtƒtdgƒ}x0|jD]%\}}|jt|j||qoWtƒ}|j |jdƒd ƒ|jt |jddtƒ|jt|jd d d ƒd S( stest identify() border casesR%R$R&R,is$9$232323123$1287319827trequiredRR›iN( RR@RËRTRRRuRoRÞRStassertIsRt(R?RÐRvRR((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_44_identify.s cC€s"dddg}t|ddƒ}tjjdƒ}|j|jd|ƒƒ|j|jd|ƒ ƒ|j|jd|ddƒƒ|j|jd|ddƒ ƒ|jt|jd|ddƒ|jt|jd d ƒtdgƒ}|jd ƒ}}x3|jD](\}}|jt|j|||q W|j |j|dƒƒtdgƒ}xE|jD]:\}}|dkr…qgn|jt|jd ||qgW|jt tƒjd d ƒ|jt |jd |dd ƒ|jt|jd |ddƒ|jt|jd |ddƒdS(stest verify() scheme kwdR%R$R&R,iRÈRÉR¶RÝs$6$232323123$1287319827RÊRRÙiR›N( RRR%R¥RÌRRRuRÞRSRÍRTRt(R?RÐRvRÒtrefhashRÊR((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_45_verifyHs.    c€s2t|j}|j|jdƒƒ|j|jdƒƒ|j|jdƒƒ|j|jdƒƒ|j|jdƒƒ|j|jdƒƒg‰dtjf‡fd†ƒY}t|gƒ}|jd ƒ}}|j|j|ƒƒ|jˆ|dfgƒˆ2|j|j|d d ƒƒ|jˆ|d fgƒˆ2|j|j|d d ƒƒ|jˆ|d fgƒˆ2td gƒ}x0|j D]%\}}|j t |j||q˜W|j t tƒjdƒ|j t |j|ddƒ|j t |j|ddƒ|j t |j|ddƒdS(stest needs_update() methodt 9XXD4trGYeGJAs"$1$J8HC2RCr$HcmM.7NxB2weSvlw2FgzU0sK$5$rounds=1999$jD81UCoo.zI.UETs$Y7qSTQ6mTiU9qZB4fRr43wRgQq4V.5AAf7F97Pzxey/sK$5$rounds=2000$228SSRje04cnNCaQ$YGV4RYu.5sNiBvorQDlO0WWQjyJVGKBcJXz3OtyQ2u8sK$5$rounds=3000$fS9iazEwTKi7QPW4$VasgBC8FqlOvD7x2HhABaMXCTh9jwHclPA9j5YQdns.sK$5$rounds=3001$QlFHHifXvpFX4PLs$/0ekt7lSs/lOikSerQ0M/1porEHxYq7W/2hdFpxA3fAtdummyc€s5eZdZdZed‡fd†ƒZd„ZRS(Rït@c€sˆj||fƒ|dkS(Ntnu(tappend(tclsRRÊ(t check_state(s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyt needs_update“scS€sGddlm}t|tƒr1|jdƒ}nt||ƒjƒƒS(Niÿÿÿÿ(tmd5sutf-8(thashlibRöt isinstanceR RORt hexdigest(R?RÊRö((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyt_calc_checksum˜sN(R’R“R”t _hash_prefixt classmethodRTRõRú((Rô(s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyRïs RÈRÊtbobRñR$RR¶RÙiR›N(RRãR¥RõRÍR—R˜RR@RTRÞRRRSRt(R?RvRïRFRRìR((Rôs>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_46_needs_update{s6c C€sjt|j}|jdƒjdƒ}|jdƒjdƒ}|jd|ƒ\}}|j|ƒ|j|d ƒ|jd|ƒ\}}|j|ƒ|j|d ƒ|jd|ƒ\}}|j|ƒ|j|j |ƒdƒ|jd|ƒ\}}|j|ƒ|j|d ƒtdgƒ}|jdƒ}}x3|j D](\}} |j t |j||| qHW|j |j|d ƒtd fƒtdgƒ}xE|j D]:\}} |d krÍq¯n|j t |jd|| q¯W|j ttƒjddƒ|j t|jd|dd ƒ|j t |jd|dd ƒ|j t |jd|d d ƒd S( stest verify_and_update()R$RáR1t wrongpassRÝRÊRR¶RÙiR›N(RRãRšRtverify_and_updateRÍRêRTR¥RËRÞRRRSR@tFalseRt( R?Rvth1th2toktnew_hashRRìRÊR((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_47_verify_and_updateÂs:     "  c C€sðddlm}m}m}|jdƒ}|jdddƒ}|jdddƒ}t||gƒ}|j|jtƒƒ|j |j |jdƒƒdƒ|j |j d|ƒƒ|j|j d|ƒt d fƒ|jdgƒ!|jt|jdddƒWd QX|jt|j d|ddƒ|jt|j d|ddƒt||gƒ}|j|jtdgƒƒ|j |j |jdƒƒdƒ|j |j d|ƒƒ|j|j d|ƒt d fƒ|j |j |jdddƒƒdƒ|j |j d|ddƒƒ|j|j d|ddƒt d fƒ|jdgƒ!|jt|jdd dƒWd QX|jt|j d|d dƒ|jt|j d|d dƒt||gd d ƒ} |j| jtdgƒƒ|jt| jdƒ|jt| j d|ƒ|jt| j d|ƒ|j| jdddƒ|ƒ|j | j d|ddƒƒ|j| j d|ddƒt d fƒ|j| j d|ddƒtd fƒ|j| j d|ddƒt |fƒd S( sLhash(), verify(), and verify_and_update() -- discard unused context keywordsiÿÿÿÿ(R$R%t postgres_md5RÝRžtrootRƒR$s"passing settings to.*is deprecatedNtbadkwdR2tauto(t passlib.hashR$R%RRRR@t context_kwdstsetR¥RËRÌRRoRTRæRRRSR( R?R$R%Rtdes_hasht pg_root_hasht pg_admin_hashReRfRh((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_48_context_kwdsüsH"""""(("((cC€sGtddgddddddƒ}d }|jdd ƒ}|j|jdƒ|j|jdƒ|j|jdƒ|jtgd ƒ#|j dd dd dd ƒ}Wd QX|j|j d dƒd|ƒ|jgƒ+|j|j ddd dƒd|ƒWd QX|j|j ddd dƒd|ƒ|j|j ddd dƒd|ƒ|jtgd ƒ7|j dt dƒd dd dt dƒd ƒ}Wd QX|j|j d dƒd|ƒ|jgƒ+|j|j ddd dƒd|ƒWd QX|j|j ddd dƒd|ƒ|j|j ddd dƒd|ƒ|j|j d dƒd|ƒt j j}|j dd d|d>ƒ}|j|j d dƒd||fƒ|j dd ddƒ}|j|j d dƒd|ƒ|jt|j ddƒ|j ddƒ|j ddƒ|jt|j ddƒtddgƒ}|jt|j ddddƒ|jttdd ƒ|jttdd ƒ|jttd!d ƒ|jttdd ƒtjjƒ}|jttdd|ƒ|jttdd|ƒ|jttdd!|ƒ|jttdd|ƒd S("stest rounds limitsR(R1R5iÐR4i¸ R6iÄ s+...........................................iiôNRÕRås$5$rounds=1000$nacl$R×iÏs$5$rounds=1999$nacl$s$5$rounds=2000$nacl$iÑs$5$rounds=2001$nacl$geÍÍAs$5$rounds=999999999$nacl$i¹ s$5$rounds=3001$nacl$s$5$rounds=3000$nacl$i· s$5$rounds=2999$nacl$s$5$rounds=2500$nacl$is$5$rounds=%d$nacl$%sR~R*(Rt _get_recordRTR@tmin_desired_roundstmax_desired_roundstdefault_roundsRæRRRÏtintRR1RRRutdatetimetnowRS(R?RvtSTUBtcustom_handlerRÛtdftbad((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_50_rounds_limitsQsj  &   &    & c C€stddgddddddƒ}|jt|jd d ƒ|jt|jd d ƒ|jt|jd d ƒ|jd d ƒ}|j|jddƒjd ƒ|j|dddƒ|jd dƒ}|j|jddƒjd ƒ|j|dddƒ|jd dƒ}|j|jddƒjdƒ|j|dddƒ|jd dƒ}|j|jddƒjdƒ|j|dddƒ|jd dƒ}|j|jddƒjdƒ|j|dddƒ|jd dƒ}|j|jddƒjdƒ|j|dddƒdS(stest linear vary roundsR(R1R5iËR4iÕR6iÐR*iÿÿÿÿs-1%s101%is0%iiÏiÑids0.1%gü©ñÒMbP?iÎiÒs100%gð?N( RRRRuRR@RRTR»tassert_rounds_range(R?RvRÛ((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_51_linear_vary_roundsÇs2 c C€s«tddgddddddƒ}|jt|jd d ƒ|jt|jd d ƒ|jt|jd d ƒ|jd d ƒ}|j|jddƒjd ƒ|j|dddƒ|jd dƒ}|j|jddƒjd ƒ|j|dddƒ|jd dƒ}|j|jddƒjdƒ|j|dddƒ|jd dƒ}|j|jddƒjdƒ|j|dddƒ|jd dƒ}|j|jddƒjdƒ|j|dddƒ|jd dƒ}|j|jddƒjdƒ|j|dddƒ|jd dƒ}|j|jddƒjdƒ|j|dddƒ|jd dƒ}|j|jddƒjdƒ|j|dddƒdS(stest log2 vary roundsR(tbcrypttbcrypt__min_roundsitbcrypt__max_roundsitbcrypt__default_roundsiR*iÿÿÿÿs-1%s101%is0%iiiids1%g{®Gáz„?s49%g\Âõ(\ß?s50%gà?s100%gð?N( RRRRuRR@RRTR»R(R?RvRÛ((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_52_log2_vary_roundsís> c C€s°|j|ƒ}|jdd!|j}tƒ}xHtdƒD]:}|j|d|ƒ} |j| ƒj} |j| ƒq<W|j t |ƒ|dƒ|j t |ƒ|dƒdS(s2helper to check vary_rounds covers specified rangeiii,RÕs"vary_rounds had wrong lower limit:s"vary_rounds had wrong upper limit:N( Rštdefault_salt_charst max_salt_sizeR R RÏRLR×taddR@tmintmax( R?tcontextR¶tlowertupperRšRÕtseentiRÒtr((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyRs cC€sœtjdddtƒtddgƒ}|j|jd ƒ|j|jddƒjd ƒ|j|jddƒjd ƒ|j|jdd ƒjd ƒd S( sharden_verify -- parsingR:s.*harden_verify.*R›R(R1t harden_verifytttruetfalseN(R=R>tDeprecationWarningRR@R0RTtusing(R?RF((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_harden_verify_parsing-scC€spd}d}tjƒ}||_td|gƒ}|jƒt|jƒ\}}|j||d||ƒdS(s' dummy_verify() method gš™™™™™©?gš™™™™™É?R(tdeltaN(t DelayHashR5tdelayRt dummy_verifyRtassertAlmostEqual(R?texpectedtaccuracyRšRFtelapsedt_((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_dummy_verify9s   cC€sdd„}tdddƒ}|j||dƒtttgƒ|j||dƒtttgƒ|jddƒ|j||dƒtttgƒ|j||dƒtttgƒ|jdd ƒ|j||dƒtttgƒ|j||dƒtttgƒtd gddƒ}|j||dƒtgƒ|j||dƒtgƒ|jttd dd ƒ|jttd dd ƒdS(s+test deprecated='auto' is handled correctlycS€s,g|jƒD]}|j||ƒj^q S(N(R(RšR2(RFR›R¶((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pytgetstatePss sha256_crypt,md5_crypt,des_cryptR2R RƒR)R%R†R$R1ssha256_crypt,md5_cryptsauto,md5_cryptsmd5_crypt,autoN(RTRR@RRoRRRRu(R?RARF((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_61_autodeprecateMs" """"""c C€s ddlm}m}tdgƒ}tddgƒ}|jdƒ}|jdƒ}|jtd|jƒ|jtd|j|ƒ|jtd|j|ƒ|jƒ}|j||j ƒ|j|ƒ}|j||j |ƒ|j|ƒ} |j| |j |ƒ|j|j|ƒ|ƒ|j |j |ƒƒd} |jt | |j |ƒ|jt | |j |ƒ|jt | |j |ƒ|j |j |ƒƒ|jt | |j |ƒ|j |j |ƒƒ|j |j |ƒƒ|jt | |jdƒ|jt|jd ƒ|j|j|ƒ|ƒ|jt | |j|ƒ|jt | |j|ƒ|jt | |j|ƒ|jt | |jdƒ|jt|jd ƒ|j|j|ƒ|ƒ|jt | |j|ƒ|jt d |j|ƒ|j|j|ƒ|ƒd S( sdisabled hash supportiÿÿÿÿ(R%t unix_disabledR$RCtfoosno disabled hasher presentshash could not be identifiedR1scannot restore original hashN(R R%RCRRtassertRaisesRegexRZtdisableR@tdefault_markerR¥t is_enabledRuRÍtenableRRRSRT( R?R%RCRFRÄth_refth_otherth_dist h_dis_reft h_dis_othertHASH_NOT_IDENTIFIED((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_disabled_hashesmsd                             N((JR’R“tdescriptionPrefixR«R”RR¬RRBR"RCR RNRMRVRWR_R`RYRÁRPR\RORQR]RRRDRyRbRERcRãR<RGRURaRjRmRpRxRzRR™RŸR R£RTR§R¯R°R³R¾R¿RÇRÞRÓRÜRàRäRèRëRíRþRRRRR$RR6R@RBRP(((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyR#1sº                    +  % L $ \ %     $ O  !    1 $  1  3 G : U v & /   R8cB€s>eZdZdZejZdZdZe dƒZ d„Z RS(s-dummy hasher which delays by specified amountt delay_hashi(is$x$cC€sNtj|jƒt|tƒr1|jdƒ}nttjd|ƒj ƒƒS(Nsutf-8tprefix( ttimetsleepR9RøR RORR÷tsha1Rù(R?RÊ((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyRúÏs( R’R“t__doc__R”R—tLOWER_HEX_CHARStchecksum_charst checksum_sizeR9R RûRú(((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyR8Çs  tdummy_2cB€seZdZRS(R[(R’R“R”(((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyR[ØstLazyCryptContextTestcB€s)eZdZd„Zd„Zd„ZRS(RcC€stdƒ|jtdƒdS(NR[(tunload_handler_namet addCleanup(R?((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyR<Þs cC€s |jtdƒƒtddƒttddgƒddgƒ}|jtdtƒƒ|j|jƒdƒ|j|j dƒj ƒ|jtdtƒƒdS(stest plain kwdsR[spasslib.tests.test_contextR$R2N(sdummy_2s des_crypt( RÍthas_crypt_handlerRRtiterRoR@R(R¥RšR2(R?Rv((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_kwd_constructorãs !c€s¦ˆjtdƒƒtddƒt‡fd†}td|dtƒ}ˆjtdtƒƒˆj|jƒdƒˆj|j dƒj ƒˆjtdtƒƒdS(NR[spasslib.tests.test_contextc€s/ˆj|ƒtdtddgƒddgƒS(NR(R[R$R2(R¥RR`(tflag(R?(s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pytonloadõs RcRbR$(sdummy_2s des_crypt( RÍR_RRRRoR@R(R¥RšR2(R?RcRv((R?s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_callable_constructorñs (R’R“RQR<RaRd(((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyR\Ûs  (ARWt __future__Rtpasslib.utils.compatRt configparserRt ConfigParserRt functoolsRtloggingt getLoggerR’tlogRVR=tpasslibRtpasslib.contextRRt passlib.excRRt passlib.utilsR R R R R RRRtpasslib.utils.handlerstutilsRÐR—tpasslib.tests.utilsRRRRRRtpasslib.registryRRR_RR]RRWtabspathtdirnamet__file__R`R"R#R÷RTR˜R8R[R\(((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyts@    .."  ÿÿÿÿÿÿš