Viewing File: /usr/lib/python2.7/site-packages/passlib/tests/test_context.pyc

ó
j^ŽXc@€s!dZddlmZddlmZer?ddlmZnddlmZddlZddl	m
Z
ddlZeje
ƒZddlZddlZddlmZddlmZmZdd	lmZmZdd
lmZmZddlmZmZmZmZm 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.pytmerge_dicts&s
tCryptContextTestcB€s—eZdZddddgZgeD]Zeeƒ^q%Zededdddd	d
ddd
dddƒZe	edeƒZ
edƒZedƒZ
ejjedƒZe
jedƒedƒƒZejjedƒZe
jedƒedƒƒjdƒZejjedƒZerNeee
ƒeeeƒeeeƒneddd	dddddƒZd Ze	eeƒZeddƒZe	eeƒZedddd!dd"gd#dgdd"d	d$dd%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

ssample1.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(	RtassertEqualtto_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
ttjdƒ|j
t
tj|jddƒdS(stest from_string() constructorsutf-8tsectiontmypolicytencodingsutf-16tfakesectionN(Rtfrom_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|jddddƒ}|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_dicttassertIsNotR(R?tcc1tcc2tcc2btcc3tcc4((s>/usr/lib/python2.7/site-packages/passlib/tests/test_context.pyttest_04_copys cC€s)t|j}|jt|ƒdƒdS(stest repr()s!^<CryptContext at 0x-?[0-9a-f]+>$N(RRBtassertRegextrepr(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ƒ|ƒdS(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|idd6tid
d6dd6}|j|jdƒdƒtddƒ}|j|ddƒ|ƒ|j|ddƒ|ƒ|j|ddƒ|ƒ|j|idd6|ƒ|j|idd6|ƒtddƒ}|j|ddƒ|ƒ|j|idd6|ƒtddƒ}|j|ddƒ|ƒ|j|ddƒ|ƒ|j|idd6|ƒ|j|idd6|ƒtddƒ}|j|ddƒ|ƒ|j|idd6|ƒtddgd 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}|jttd|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
dd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ƒtvary_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
|jd|ƒƒ|j|jd|ƒƒq1W|jdƒ}|j|j|ƒdƒ|j
d	|jƒƒ}|j|j|ƒdƒ|j
d	|jƒddƒ}|j|j|ƒdƒ|jt|j
d	|jƒdd
ƒdS(s-test basic hash/identify/verify functionalityR,ittestR¶R¨R©tnotestR%tsecretR$N(RR%R$R&RR”R@tidentifyRoR§R¥tverifytassertFalsetgenhasht	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|jddƒjdƒƒ|j|jddd
dƒjdƒƒ|j|jddd
dƒjdƒƒ|j|jdddddddd	ƒdƒtrN|jddƒ}|j|jd
tdƒƒjdƒƒ|j|jd
tdƒƒjdƒƒn|jt	tƒjƒ|jt	tƒjddƒ|jt	|jddƒ|jt
|jddd
dƒ|jt
|jddƒ|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|jdd	d
ƒdS(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|jttƒjddƒ|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ˆ|dfgƒˆ2|j|j|d
dƒƒ|jˆ|dfgƒˆ2td
gƒ}x0|j
D]%\}}|jt|j||q˜W|jt
tƒjdƒ|jt
|j|ddƒ|jt|j|ddƒ|jt|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Ê(tcheck_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_prefixtclassmethodRTRõ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](\}}	|jt|j|||	qHW|j
|j|dƒtdfƒtdgƒ}xE|j
D]:\}}	|dkrÍq¯n|jt|jd||	q¯W|jttƒjddƒ|jt|jd|dd	ƒ|jt|jd|dd
ƒ|jt|jd|dd
ƒ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	|jd|ƒƒ|j|jd|ƒt
d	fƒ|jdgƒ!|jt|jdddƒWd	QX|jt|jd|ddƒ|jt|jd|ddƒt||gƒ}|j|jtdgƒƒ|j	|j
|jdƒƒdƒ|j	|jd|ƒƒ|j|jd|ƒt
d	fƒ|j	|j
|jdddƒƒdƒ|j	|jd|ddƒƒ|j|jd|ddƒt
d	fƒ|jdgƒ!|jt|jdd
dƒWd	QX|jt|jd|d
dƒ|jt|jd|d
dƒt||gddƒ}	|j|	jtdgƒƒ|jt|	jdƒ|jt|	jd|ƒ|jt|	jd|ƒ|j|	jdddƒ|ƒ|j	|	jd|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	dddd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	dtdƒddddtdƒ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>	cC€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
RRÏ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ƒ|jttdddƒ|jttddd
ƒ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"""""""cC€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(RR%RCRRtassertRaisesRegexRZtdisableR@tdefault_markerR¥t
is_enabledRuRÍtenableRRRSRT(R?R%RCRFRÄth_refth_otherth_dist	h_dis_refth_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„ZRS(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.contextRRtpasslib.excRRt
passlib.utilsR	R
RR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.pyt<module>s@.."		ÿÿÿÿÿÿš
Back to Directory File Manager