Xc@sdZddlmZddlZejeZddlZddlZddl Z ddl m Z ddl m Z ddlmZmZmZmZddlmZmZmZmZmZmZedZed Zed Zd Zd d dgZdddddddgZdZ dddgZ!defdYZ"defdYZ#defdYZ$e$j%d Z&e$j%d!Z'd"efd#YZ(d$efd%YZ)e)j%d Z*e)j%d!Z+d&efd'YZ,d(efd)YZ-d*efd+YZ.d,efd-YZ/d.efd/YZ0d0efd1YZ1d2eefd3YZ2d4efd5YZ3d6efd7YZ4d8efd9YZ5d:efd;YZ6d<efd=YZ7d>efd?YZ8e8j%d Z9e8j%d!Z:d@efdAYZ;e;j%d Z<dBeefdCYZ=dDefdEYZ>e>j%d Z?e>j%d!Z@dFeefdGYZAdHeefdIYZBdJefdKYZCdLefdMYZDdNefdOYZEdPefdQYZFdRefdSYZGdTefdUYZHdVeefdWYZIdXefdYYZJdZefd[YZKd\efd]YZLd^eefd_YZMd`efdaYZNeNj%d ZOeNj%d!ZPdbefdcYZQddefdeYZReRj%d ZSeRj%d!ZTdfefdgYZUeUj%d ZVeUj%d!ZWdhefdiYZXdjefdkYZYdlefdmYZZdS(ns?passlib.tests.test_handlers - tests for passlib hash algorithmsi(twith_statementN(thash(t repeat_string(tirangetPY3tutget_method_function(tTestCaset HandlerCaset skipUnlesst TEST_MODEtUserHandlerMixintEncodingHandlerMixins*\u0399\u03c9\u03b1\u03bd\u03bd\u03b7\u03c2s \u20AC\u00A5$st\u00e1\u0411\u2113\u0259s táБℓət django_bcrypttdjango_bcrypt_sha256t django_argon2t test_handlersttest_handlers_argon2ttest_handlers_bcryptttest_handlers_ciscottest_handlers_djangottest_handlers_pbkdf2ttest_handlers_scryptcCsddlm}||}t|drV|tkrV|j}d||f}n d|}xTtD]L}d|}t|tj|}yt ||SWqgt k rqgXqgWt d|dS( s;return HandlerCase instance for scheme, used by other testsi(tget_crypt_handlertbackendss %s_%s_tests%s_testspasslib.tests.stest case %r not foundN( tpasslib.registryRthasattrt_omitted_backend_testst get_backendt_handler_test_modulest __import__tsystmodulestgetattrtAttributeErrortKeyError(tschemeRthandlertbackendtnametmoduletmodnametmod((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pytget_handler_case-s        targon2tbcryptt bcrypt_sha256tapr_md5_crypt_testcBs,eZejZdedfgZdgZRS(t myPasswords%$apr1$r31.....$HqJZimcKQFAMYayBlzkrA/s%$apr1$bzYrOHUx$a1FcpXuQDJV3vPY20CS6N1s%$apr1$r31.....$HqJZimcKQFAMYayBlzkrA!(R0s%$apr1$r31.....$HqJZimcKQFAMYayBlzkrA/(t__name__t __module__Rt apr_md5_cryptR%t UPASS_TABLEtknown_correct_hashestknown_malformed_hashes(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyR/Hs t bigcrypt_testcBsdeZejZd d edfgZdgZgej D]Z e ddkr7e ^q7Z dZ RS( t passphrasetqiyh4XPJGsOZ2MEAyLkfWqeQsThis is very long passwds#f8.SVpL2fvwjkAnxn8/rgTkwvrif6bjYB5ctSEChBAyMbMNhgGLyP7kD1HZUs;qiyh4XPJGsOZ2MEAyLkfWqef8.SVpL2fvwjkAnxn8/rgTkwvrif6bjYB5cdit des_cryptcCs)|jttjdtdtddS(Nt use_defaultstchecksumt yh4XPJGsOZ(t assertRaisest ValueErrorRtbigcrypttTrueR(tself((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyttest_90_internals(R8R9(sThis is very long passwds#f8.SVpL2fvwjkAnxn8/rgTkwvrif6bjYB5c( R1R2RRAR%R4R5tknown_unidentified_hashesRtknown_other_hashestrowRD(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyR7as  t_bsdi_crypt_testcBseZdZejZd)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9ed#fgZd$gZd%e fd&e fgZ d'Z d(Z RS(:stest BSDiCrypt algorithmsU*U*U*U*s_J9..CCCCXBrJUJV154MsU*U***Us_J9..CCCCXUhOBTXzaiEsU*U***U*s_J9..CCCC4gQ.mB/PffMs*U*U*U*Us_J9..XXXXvlzQGqpPPdks *U*U*U*U*s_J9..XXXXsqM/YSSP..Ys*U*U*U*U*U*U*U*Us_J9..XXXXVL7qJCnku0Is*U*U*U*U*U*U*U*U*s_J9..XXXXAj8cFbP5scIt ab1234567s_J9..SDizh.vll5VED9gt cr1234567s_J9..SDizRjWQ/zePPHctzxyDPWgydbQjgqs_J9..SDizxmRI1GjnQuEs726 evens_K9..SaltNrQgIYUAeoYts_J9..SDSD5YGyRCr4W4ct s_K1..crsmZxOLzfJH8iwtmys_KR/.crsmykRplHbAvwAsmy socras_K1..crsmf/9NzZr1fLMs my socratess_K1..crsmOv1rbde9A9osmy socrates notes_K1..crsm/2qeAhdISMAs_7C/.ABw0WIKy0ILVqo2s_K1.!crsmZxOLzfJH8iwsfreebsd|openbsd|netbsd|darwins linux|solariscKs*tjddtt|j|dS(Ntignores!bsdi_crypt rounds should be odd.*(twarningstfilterwarningstsuperRHttest_77_fuzz_input(RCtkwds((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRSscCs|j}d}d}d}|j|j|||j|j|||j|j||j|j||jd}|j|j|dS(s&needs_update() should flag even roundss_Y/../cG0zkJa6LY6k4cs_Z/..TgFg0/ptQtpAgwsttesttstubN(R%t assertTruetverifyt needs_updatet assertFalseR(RCR%t even_hashtodd_hashtsecrettnew_hash((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyttest_needs_update_w_even_roundss (sU*U*U*U*s_J9..CCCCXBrJUJV154M(sU*U***Us_J9..CCCCXUhOBTXzaiE(sU*U***U*s_J9..CCCC4gQ.mB/PffM(s*U*U*U*Us_J9..XXXXvlzQGqpPPdk(s *U*U*U*U*s_J9..XXXXsqM/YSSP..Y(s*U*U*U*U*U*U*U*Us_J9..XXXXVL7qJCnku0I(s*U*U*U*U*U*U*U*U*s_J9..XXXXAj8cFbP5scI(RIs_J9..SDizh.vll5VED9g(RJs_J9..SDizRjWQ/zePPHc(RKs_J9..SDizxmRI1GjnQuE(s726 evens_K9..SaltNrQgIYUAeoY(RLs_J9..SDSD5YGyRCr4W4c(RMs_K1..crsmZxOLzfJH8iw(RNs_KR/.crsmykRplHbAvwA(smy socras_K1..crsmf/9NzZr1fLM(s my socratess_K1..crsmOv1rbde9A9o(smy socrates notes_K1..crsm/2qeAhdISMA(R1R2t__doc__Rt bsdi_cryptR%R4R5RERBtFalsetplatform_crypt_supportRSR_(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRHs2    tos_crypttbuiltint crypt16_testc Bs5eZejZddddddded fgZRS(R8sqi8H8R7OM4xMUNMPuRAZxlY.tprintftaaCjFz4Sh8Eg2QSqAReePlq6sAA/xje2RyeiSU0iBY3PDwjYotLOLOAQICI82QB4IPs/.FcK3mad6JwYt8LVmDqz9Lct LOLOAQICIs/.FcK3mad6JwYSaRHJoTPzY2tLOLOAQICs/.FcK3mad6JwYelhbtlysKy6tLs/.CIu/PzYCkl6elhbtlysKy6tYeDc9tKkkmDvwP7buzpwhoqQ(s passphrasesqi8H8R7OM4xMUNMPuRAZxlY.(RgRh(RgsAA/xje2RyeiSU0iBY3PDwjYo(Ris/.FcK3mad6JwYt8LVmDqz9Lc(Rjs/.FcK3mad6JwYSaRHJoTPzY2(Rks/.FcK3mad6JwYelhbtlysKy6(Rls/.CIu/PzYCkl6elhbtlysKy6(R1R2Rtcrypt16R%R4R5(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRfs t_des_crypt_testc BskeZdZejZddddd d!d"d#d$d%d&eddfg ZdddgZde fgZ RS('stest des-crypt algorithmsU*U*U*U*t CCNf8Sbh3HDfQsU*U***Us CCX.K.MFy4OissU*U***U*s CC4rMpbg9AMZ.s*U*U*U*Ut XXxzOu6maQKqQRLt SDbsugeBiC58At OgAwTx2l6NADIRMs /Hk.VPuwQTXbcRUt N1tQbOFcM5fpgsCompl3X AlphaNu3merics um.Wguz3eVCx2s%4lpHa N|_|M3r1K W/ Cur5Es: #$%(*)(*%#t sNYqfOyauIyictAlOtBsOlt cEpWz5IUCShqMs hell\u00D6t saykDgk3BPZ9Es !gAwTx2l6NADIt OgAwTx2l6NADtOgAwTx2l6NADIjs+freebsd|openbsd|netbsd|linux|solaris|darwin(sU*U*U*U*Rp(sU*U***Us CCX.K.MFy4Ois(sU*U***U*s CC4rMpbg9AMZ.(s*U*U*U*URq(RLRr(RLRs(RMs /Hk.VPuwQTXbc(stestRt(sCompl3X AlphaNu3merics um.Wguz3eVCx2(s%4lpHa N|_|M3r1K W/ Cur5Es: #$%(*)(*%#Ru(RvRw( R1R2R`RR;R%RR5RERBRc(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRos$  t fshp_testcBsVeZdZejZddddedfgZd d gZd d d gZ dZ RS(stest fshp algorithmRUs'{FSHP0|0|1}qUqP5cyxm6YcTAhz05Hph5gvu9M=sF{FSHP1|8|4096}MTIzNDU2NzjTdHcmoXwNc0ff9+ArUHoN0CvlbPZpxFi1C6RDM/MHSA==tOrpheanBeholderScryDoubtsF{FSHP1|8|4096}GVSUFDAjdh0vBosn1GUhzGLHP7BmkbCZVH/3TQqGIjADXpc+6NCg3g==tExecuteOrder66s{{FSHP3|16|8192}0aY7rZQ+/PR+Rd5/I9ssRM7cjguyT8ibypNaSp/U1uziNO3BVlg5qPUng+zHUDQC3ao/JbzOnIBUtAeWHEy7a2vZeZ7jAwyJJa2EqOsq4Io=sP{FSHP1|16|16384}9v6/l3Lu/d9by5nznpOScqQo8eKu/b/CKli3RCkgYg4nRTgZu5y659YV8cCZ68ULs'{FSHX0|0|1}qUqP5cyxm6YcTAhz05Hph5gvu9M=s&FSHP0|0|1}qUqP5cyxm6YcTAhz05Hph5gvu9M=s&{FSHP0|0|1}qUqP5cyxm6YcTAhz05Hph5gvu9Ms'{FSHP0|1|1}qUqP5cyxm6YcTAhz05Hph5gvu9M=s'{FSHP0|0|A}qUqP5cyxm6YcTAhz05Hph5gvu9M=cCs|j}tdddd}|dd||dtd||dd||dtd||dd||jt|dd ||jt|dtdd||jt|dd||jt|dd |d S( stest variant keywordtsalttatroundsitvariantt1tsha256t9i N(R%tdictRR?t TypeErrortNonetcomplexR@(RCR%RT((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyttest_90_variantVs "(stests'{FSHP0|0|1}qUqP5cyxm6YcTAhz05Hph5gvu9M=(stestsF{FSHP1|8|4096}MTIzNDU2NzjTdHcmoXwNc0ff9+ArUHoN0CvlbPZpxFi1C6RDM/MHSA==(R|sF{FSHP1|8|4096}GVSUFDAjdh0vBosn1GUhzGLHP7BmkbCZVH/3TQqGIjADXpc+6NCg3g==(R}s{{FSHP3|16|8192}0aY7rZQ+/PR+Rd5/I9ssRM7cjguyT8ibypNaSp/U1uziNO3BVlg5qPUng+zHUDQC3ao/JbzOnIBUtAeWHEy7a2vZeZ7jAwyJJa2EqOsq4Io=( R1R2R`RtfshpR%R4R5RER6R(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyR{!s     t hex_md4_testcBs#eZejZdedfgZRS(tpasswordt 8a9d093f14f8701df17732b2bb182c74t 876078368c47817ce5f9115f3a42cf74(RR(R1R2Rthex_md4R%R4R5(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRss t hex_md5_testcBs#eZejZdedfgZRS(Rt 5f4dcc3b5aa765d61d8327deb882cf99t 05473f8a19f66815e737b33264a0d0b0(spasswordR(R1R2Rthex_md5R%R4R5(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRzs t hex_sha1_testcBs#eZejZdedfgZRS(Rt(5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8t(e059b2628e3a3e2de095679de9822c1d1466e0f0(spasswordR(R1R2Rthex_sha1R%R4R5(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRs thex_sha256_testcBs#eZejZdedfgZRS(Rt@5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8t@6ed729e19bf24d3d20f564375820819932029df05547116cfc2cc868a27b4493(spasswordR(R1R2Rt hex_sha256R%R4R5(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRs thex_sha512_testcBs#eZejZdedfgZRS(Rtb109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e07394c706a8bb980b1d7785e5976ec049b46df5f1326af5a2ea6d103fd07c95385ffab0cacbc86td91bb0a23d66dca07a1781fd63ae6a05f6919ee5fc368049f350c9f293b078a18165d66097cf0d89fdfbeed1ad6e7dba2344e57348cd6d51308c843a06f29caf(spasswordR(R1R2Rt hex_sha512R%R4R5(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRs t htdigest_testcBsJeZejZd eeefdfgZddgZ dZ dZ RS( sCircle Of LifetMufasastestrealm@host.comt 939e7578ed9e3c518a452acee763bce9t 4dabed2727d583178777fab468dd1f17t 939e7578edAe3c518a452acee763bce9t 939e7578edxe3c518a452acee763bce9cCs|jddS(Ns)test case doesn't support 'realm' keyword(tskipTest(RC((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyt test_80_userscCsQt|tr!|\}}}n d\}}|jd||jd||S(sinsert username into kwdstusertrealm(susersrealm(t isinstancettuplet setdefault(RCR]RTRR((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pytpopulate_contexts  (sCircle Of LifeRstestrealm@host.com((sCircle Of LifeRstestrealm@host.comR( R1R2RthtdigestR%R4t UPASS_USDt UPASS_WAVR5RERR(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRs     t ldap_md5_testcBs#eZejZdedfgZRS(t helloworlds{MD5}/F4DjTilcDIIVEHn/nAQsA==s{MD5}BUc/ihn2aBXnN7MyZKDQsA==(Rs{MD5}/F4DjTilcDIIVEHn/nAQsA==(R1R2Rtldap_md5R%R4R5(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRs tldap_sha1_testcBs#eZejZdedfgZRS(Rs!{SHA}at+xg6SiyUovktq1redipHiJpaE=s!{SHA}4FmyYo46Pi3glWed6YIsHRRm4PA=(s helloworlds!{SHA}at+xg6SiyUovktq1redipHiJpaE=(R1R2Rt ldap_sha1R%R4R5(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRs tldap_salted_md5_testcBsAeZejZd edfd ddgZddd d d gZRS(t testing1234s"{SMD5}UjFY34os/pnZQ3oQOzjqGu4yeXE=s"{SMD5}Z0ioJ58LlzUeRxm3K6JPGAvBGIM=RUs&{SMD5}LnuZPJhiaY95/4lmVFpg548xBsD4P4cws2{SMD5}XRlncfRzvGi0FDzgR98tUgBg7B3jXOs9p9S615qTkg==s2{SMD5}FbAkzOMOxRbMp6Nn4hnZuel9j9Gas7a2lvI+x5hT6j0=s"{SMD5}IGVhwK+anvspmfDt2t0vgGjt/Q==s%{SMD5}LnuZPJhiaY95/4lmVFpg548xBsD4P4csM{SMD5}LnuZPJhiaY95/4lmVFpg548xBsD4P4cw{SMD5}LnuZPJhiaY95/4lmVFpg548xBsD4P4cw=s&{SMD5}LnuZPJhiaY95/4lmV=pg548xBsD4P4cws&{SMD5}LnuZPJhiaY95/4lmVFpg548xBsD4P===(Rs"{SMD5}UjFY34os/pnZQ3oQOzjqGu4yeXE=(stests&{SMD5}LnuZPJhiaY95/4lmVFpg548xBsD4P4cw(stests2{SMD5}XRlncfRzvGi0FDzgR98tUgBg7B3jXOs9p9S615qTkg==(stests2{SMD5}FbAkzOMOxRbMp6Nn4hnZuel9j9Gas7a2lvI+x5hT6j0=(R1R2Rtldap_salted_md5R%R4R5R6(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRs   tldap_salted_sha1_testcBsDeZejZddedfdddgZd d d d d gZRS(t testing123s&{SSHA}0c0blFTXXNuAMHECS4uxrj3ZieMoWImrR]s&{SSHA}0H+zTv8o4MR4H43n03eCsvw1luG8LdB7s&{SSHA}3yCSD1nLZXznra4N8XzZgAL+s1sQYsx5RUs.{SSHA}P90+qijSp8MJ1tN25j5o1PflUvlqjXHOGeOckw==s6{SSHA}/ZMF5KymNM+uEOjW+9STKlfCFj51bg3BmBNCiPHeW2ttbU0=s6{SSHA}Pfx6Vf48AT9x3FVv8znbo8WQkEVSipHSWovxXmvNWUvp/d/7s&{SSHA}ZQK3Yvtvl6wtIRoISgMGPkcWU7Nfq5U=s+{SSHA}P90+qijSp8MJ1tN25j5o1PflUvlqjXHOGeOcks-{SSHA}P90+qijSp8MJ1tN25j5o1PflUvlqjXHOGeOckw=s.{SSHA}P90+qijSp8MJ1tN25j5o1Pf=UvlqjXHOGeOckw==s.{SSHA}P90+qijSp8MJ1tN25j5o1PflUvlqjXHOGeOck===(Rs&{SSHA}0c0blFTXXNuAMHECS4uxrj3ZieMoWImr(ssecrets&{SSHA}0H+zTv8o4MR4H43n03eCsvw1luG8LdB7(stests.{SSHA}P90+qijSp8MJ1tN25j5o1PflUvlqjXHOGeOckw==(stests6{SSHA}/ZMF5KymNM+uEOjW+9STKlfCFj51bg3BmBNCiPHeW2ttbU0=(stests6{SSHA}Pfx6Vf48AT9x3FVv8znbo8WQkEVSipHSWovxXmvNWUvp/d/7(R1R2Rtldap_salted_sha1R%R4R5R6(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRs   tldap_plaintext_testcBsreZejZdeer!enefeer6enefgZddgZ dgZ de j fdYZ RS( Rs{FOO}barRLRs{MD5}/F4DjTilcDIIVEHn/nAQsA==tFuzzHashGeneratorcBseZdZRS(cCs3x,tr.ttj|j}|r|SqWdS(N(RBRRRRtrandom_password(RCtpwd((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRs (R1R2R(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRs(spasswordspassword(sldap_md5s{MD5}/F4DjTilcDIIVEHn/nAQsA==( R1R2Rtldap_plaintextR%R4RtPASS_TABLE_UTF8R5RERFRR(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRs   t_ldap_md5_crypt_testcBs;eZejZd ddddded fgZd gZRS(RLs){CRYPT}$1$dOHYPKoP$tnxS1T8Q6VVn3kpV8cN6o.RMs){CRYPT}$1$m/5ee7ol$bZn0kIBFipq39e.KDXX8I0RUs){CRYPT}$1$ec6XvcoW$ghEtNK2U1MC5l.Dwgi3020sCompl3X AlphaNu3merics){CRYPT}$1$nX1e7EeI$ljQn72ZUgt6Wxd9hfvHdV0s%4lpHa N|_|M3r1K W/ Cur5Es: #$%(*)(*%#s){CRYPT}$1$jQS7o98J$V6iTcr71CGgwW2laf17pi1s){CRYPT}$1$SuMrG47N$ymvzYjr7QcEQjaK5m1PGx1s){CRYPT}$1$d6/Ky1lU$/xpf8m7ftmWLF.TjHCqel0s){CRYPT}$1$dOHYPKoP$tnxS1T8Q6VVn3kpV8cN6o!(RLs){CRYPT}$1$dOHYPKoP$tnxS1T8Q6VVn3kpV8cN6o.(RMs){CRYPT}$1$m/5ee7ol$bZn0kIBFipq39e.KDXX8I0(stests){CRYPT}$1$ec6XvcoW$ghEtNK2U1MC5l.Dwgi3020(sCompl3X AlphaNu3merics){CRYPT}$1$nX1e7EeI$ljQn72ZUgt6Wxd9hfvHdV0(s%4lpHa N|_|M3r1K W/ Cur5Es: #$%(*)(*%#s){CRYPT}$1$jQS7o98J$V6iTcr71CGgwW2laf17pi1(stests){CRYPT}$1$SuMrG47N$ymvzYjr7QcEQjaK5m1PGx1(R1R2Rtldap_md5_cryptR%R4R5R6(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRs t_ldap_sha1_crypt_testcBs5eZejZdedfgZdZdZRS(Rs5{CRYPT}$sha1$10$c.mcTzCw$gF8UeYst9yXX7WNZKc5Fjkq0.au7s5{CRYPT}$sha1$10$rnqXlOsF$aGJf.cdRPewJAXo1Rn1BkbaYh0fPcCs*|jddtt|j|dS(NRi (RRRRtpopulate_settings(RCRT((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyREscCs|jddS(Ntunneeded(R(RC((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRSIs(spasswords5{CRYPT}$sha1$10$c.mcTzCw$gF8UeYst9yXX7WNZKc5Fjkq0.au7( R1R2Rtldap_sha1_cryptR%R4R5RRS(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyR;s   t lmhash_testcBseZejZeZddddddd eddfeddfedd!fdfeddfdfeddfdfeddfdfg Z dgZ dZ RS("t OLDPASSWORDt c9b81d939d6fd80cd408e6b105741864t NEWPASSWORDt 09eeab5aa415d6e4d408e6b105741864twelcomet c23413a8a1e7665faad3b435b51404eeRLt aad3b435b51404eeaad3b435b51404eetzzZZZzzt a5e6066de61c3e35aad3b435b51404eeR8t 855c3697d9979e78ac404c4ba2c66533tYokohamat 5ecd9236d21095ce7584248b8d2c9f9es ENCYCLOPDIAt fed6416bffc9750d48462b9d7aaac065s encyclopdiast 25d8ab4a0659c97aaad3b435b51404eetcp437slatin-1t 184eecbbe9991b44aad3b435b51404eesutf-8t 00dd240fcfab20b8aad3b435b51404eet 855c3697d9979e78ac404c4ba2c6653XcCsddlm}ddlm}|j}x]|jD]R\}}i}|j||}|||}|j|j|||q3W|j t |jddS(stest lmhash.raw() methodi(t unhexlify(t str_to_basciiiN( tbinasciiRtpasslib.utils.compatRR%R5Rt assertEqualtrawR?R(RCRRtlmhashR]RRTtdata((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyt test_90_rawvs  (RR(RR(RR(RLR(RR(s passphraseR(RRN( R1R2RRR%RBtsecret_case_insensitiveRRR5RER(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRRs"  t_md5_crypt_testcBsweZejZdddddd d!d"d#d$d%d&eddfedfgZddgZde fde fgZ RS('sU*U*U*U*s"$1$dXc3I7Rw$ctlgjDdWJLMT.qwHsWhXR1sU*U***Us"$1$dXc3I7Rw$94JPyQc/eAgQ3MFMCoMF.0sU*U***U*s"$1$dXc3I7Rw$is1mVIAEtAhIzSdfn5JOO0s*U*U*U*Us"$1$eQT9Hwbt$XtuElNJD.eW5MN5UCWyTQ0RLs"$1$Eu.GHtia$CFkL/nE1BYTlEPiVx1VWX0s"$1$dOHYPKoP$tnxS1T8Q6VVn3kpV8cN6o.RMs"$1$m/5ee7ol$bZn0kIBFipq39e.KDXX8I0RUs"$1$ec6XvcoW$ghEtNK2U1MC5l.Dwgi3020sCompl3X AlphaNu3merics"$1$nX1e7EeI$ljQn72ZUgt6Wxd9hfvHdV0s%4lpHa N|_|M3r1K W/ Cur5Es: #$%(*)(*%#s"$1$jQS7o98J$V6iTcr71CGgwW2laf17pi1s"$1$SuMrG47N$ymvzYjr7QcEQjaK5m1PGx1tss"$1$ssssssss$YgmLTApYTv12qgTwBoj8i/s"$1$d6/Ky1lU$/xpf8m7ftmWLF.TjHCqel0s"$1$dOHYPKoP$tnxS1T8Q6VVn3kpV8cN6o!s#$1$dOHYPKoP$tnxS1T8Q6VVn3kpV8cN6o.$s$freebsd|openbsd|netbsd|linux|solaristdarwin(sU*U*U*U*s"$1$dXc3I7Rw$ctlgjDdWJLMT.qwHsWhXR1(sU*U***Us"$1$dXc3I7Rw$94JPyQc/eAgQ3MFMCoMF.0(sU*U***U*s"$1$dXc3I7Rw$is1mVIAEtAhIzSdfn5JOO0(s*U*U*U*Us"$1$eQT9Hwbt$XtuElNJD.eW5MN5UCWyTQ0(RLs"$1$Eu.GHtia$CFkL/nE1BYTlEPiVx1VWX0(RLs"$1$dOHYPKoP$tnxS1T8Q6VVn3kpV8cN6o.(RMs"$1$m/5ee7ol$bZn0kIBFipq39e.KDXX8I0(stests"$1$ec6XvcoW$ghEtNK2U1MC5l.Dwgi3020(sCompl3X AlphaNu3merics"$1$nX1e7EeI$ljQn72ZUgt6Wxd9hfvHdV0(s%4lpHa N|_|M3r1K W/ Cur5Es: #$%(*)(*%#s"$1$jQS7o98J$V6iTcr71CGgwW2laf17pi1(stests"$1$SuMrG47N$ymvzYjr7QcEQjaK5m1PGx1(stests"$1$SuMrG47N$ymvzYjr7QcEQjaK5m1PGx1( R1R2Rt md5_cryptR%RR4R5R6RBRbRc(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRs&    t msdcc_testcBseZejZeZd%d'd)d+d-d/d1d3d5d7d9ededfdfededfdfeddfd fed!fd"fgZ d#d:dfgZ RS(;tAsdf999tsevanst b1176c2587478785ec1037e5abc916d0t ASDqwe123tjdoet 592cdfbc3f1ef77ae95c75f851e37166ttest1t 64cd29e36a8431a2b111378564a10631ttest2t ab60bdb4493822b175486810ac2abe63ttest3t 14dd041848e12fc48c0aa7a416a4a00cttest4t b945d24866af4b01a6d89b9d932a153cs 1234qwer!@#$t Administratort 7b69d06ef494621e3f47b9802fe7776dRRt 2d9f0b052932ad18b87f315641921cdaRLtroott 176a4c2bd45ac73687676c2f09045353tTEST1tokoladatnineteen_characterst 290efa10307e36a79b3eebf2a6b29455s\u00FCt 48f84e6f73d6d5305f6558a33fa2c9bbs \u00FC\u00FCt 593246a8335cf0261799bda2a2a9c623s \u20AC\u20ACt 9121790702dda0fa5d353014c334c2cetbobt fcb82eb4212865c7ac3503156ca3f349t B1176C2587478785EC1037E5ABC916D0(RR((RRR(RR((RRR(RR((RRR(RR((RRR(RR((RRR(RR((RRR(s 1234qwer!@#$R((s 1234qwer!@#$RR(spasswordsuser((spasswordsuserR(RLR((RLRR(RR((RRR(RR((RRR(RR( R1R2RtmsdccR%RBtuser_case_insensitiveRR4R5tknown_alternate_hashes(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRs& t msdcc2_testcBseZejZeZd(d*d,d.d0d2d4d6d8d:d<d>eddfdfed dfd!fed"d#fd$fed%fd&fgZ RS(?Rt 607bbe89611e37446e736f7856515bf8tqerwttJoet e09b38f84ab0be586b730baf61781e30t12345t 6432f517a900b3fc34ffe57f0f346e16RLtbint c0cbe0313a861062e29f92ede58f9b36tw00tRt 87136ae0a18b2dafe4a41d555425b2edteighteencharacterst fc5df74eca97afd7cd5abb0032496223t longpasswordttwentyXXX_characterst cfc6a1e33eb36c3d4f84e4c2606623d2ttwentyoneX_characterst 99ff74cea552799da8769d30b2684beettwentytwoXX_characterst 0a721bdc92f27d7fb23b87a445ec562fRtTEST2t c6758e5be7fc943d00b97972a8a97620Rt 360e51304a2d383ea33467ab0b639cc4Rt 6f79ee93518306f071c47185998566aes\u00FCtjoet bdb80f2c4656a8b8591bd27d39064a54s \u20AC\u20ACt 1e1e20f482ff748038e47d801d0d1bdas \u00FC\u00FCtadmint 0839e4a07c00f18a8c65cf5b985b9e73Rt cad511dc9edefcf69201da72efb6bb55(stest1stest1((stest1stest1R (R R ((R R R(RR ((RR R(RLsbin((RLsbinR(Rsnineteen_characters((Rsnineteen_charactersR(RR((RRR(RR((RRR(RR((RRR(RR((RRR(stest2R((stest2RR(stest3stest3((stest3stest3R (stest4stest4((stest4stest4R!( R1R2Rtmsdcc2R%RBRRR4R5(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyR s$ tmssql2000_testc Bs}eZejZdZddd d!d"d#d$d%d&d'edfedfg Zd(gZ dddddgZ de dgZ RS()s verify-onlytTestt^0x010034767D5C0CFA5FDCA28C4A56085E65E882E71CB0ED2503412FD54D6119FFF04129A1D72E7C3194F7284A7F3AtTESTt^0x010034767D5C2FD54D6119FFF04129A1D72E7C3194F7284A7F3A2FD54D6119FFF04129A1D72E7C3194F7284A7F3Atxt^0x010086489146C46DD7318D2514D1AC706457CBF6CD3DF8407F071DB4BBC213939D484BF7A766E974F03C96524794tAAAAt^0x0100CF465B7B12625EF019E157120D58DD46569AC7BF4118455D12625EF019E157120D58DD46569AC7BF4118455Dt123t^0x01002D60BA07FE612C8DE537DF3BFCFA49CD9968324481C1A8A8FE612C8DE537DF3BFCFA49CD9968324481C1A8A8Rt^0x01005B20054332752E1BC2E7C5DF0F9EBFE486E9BEE063E8D3B332752E1BC2E7C5DF0F9EBFE486E9BEE063E8D3B3tfoot^0x0100A607BA7C54A24D17B565C59F1743776A10250F581D482DA8B6D6261460D3F53B279CC6913CE747006A2E3254tbart^0x01000508513EADDF6DB7DDD270CCA288BF097F2FF69CC2DB74FBB9644D6901764F999BAB9ECB80DE578D92E3F80Dtcanardt^0x01008408C523CF06DCB237835D701C165E68F9460580132E28ED8BC558D22CEDF8801F4503468A80F9C52A12C0A3tlapint^0x0100BF088517935FC9183FE39FDEC77539FD5CB52BA5F5761881E5B9638641A79DBF0F1501647EC941F3355440A2t^0x0100624C0961B28E39FEE13FD0C35F57B4523F0DA1861C11D5A5B28E39FEE13FD0C35F57B4523F0DA1861C11D5A5t^0x010083104228FAD559BE52477F2131E538BE9734E5C4B0ADEFD7F6D784B03C98585DC634FE2B8CA3A6DFFEC729B4t^0x01005b20054332752e1bc2e7c5df0f9ebfe486e9bee063e8d3b332752e1bc2e7c5df0f9ebfe486e9bee063e8d3b3t^0X01005B20054332752E1BC2E7C5DF0F9EBFE486E9BEE063E8D3B332752E1BC2E7C5DF0F9EBFE486E9BEE063E8D3B3t^0x02005B20054332752E1BC2E7C5DF0F9EBFE486E9BEE063E8D3B332752E1BC2E7C5DF0F9EBFE486E9BEE063E8D3B3t\0x01005B20054332752E1BC2E7C5DF0F9EBFE486E9BEE063E8D3B332752E1BC2E7C5DF0F9EBFE486E9BEE063E8D3t`0x01005B20054332752E1BC2E7C5DF0F9EBFE486E9BEE063E8D3B332752E1BC2E7C5DF0F9EBFE486E9BEE063E8D3B3AFt60x01005B20054332752E1BC2E7C5DF0F9EBFE486E9BEE063E8D3B3t^0x01005B200543327G2E1BC2E7C5DF0F9EBFE486E9BEE063E8D3B332752E1BC2E7C5DF0F9EBFE486E9BEE063E8D3B3(R*R+(R,R-(R.R/(R0R1(R2R3(s12345R4(R5R6(R7R8(R9R:(R;R<(R?s12345R4( R1R2Rt mssql2000R%RRR4R5R RERR6(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyR)s.     tmssql2005_testcBseZejZd%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5edfedfgZd6gZdd d!d"d#gZ d$gZ RS(7R,t60x010034767D5C2FD54D6119FFF04129A1D72E7C3194F7284A7F3Attotot60x01004086CEB6BF932BC4151A1AF1F13CD17301D70816A8886908R2t60x01004A335DCEDB366D99F564D460B1965B146D6184E4E1025195t60x0100E11D573F359629B344990DCD3D53DE82CF8AD6BBA7B638B6R0t60x010036D726AE86834E97F20B198ACD219D60B446AC5E48C54F30ttitit60x01004086CEB60ED526885801C23B366965586A43D3DEAC6DD3FDR5t60x0100A607BA7C54A24D17B565C59F1743776A10250F581D482DA8R7t60x01000508513EADDF6DB7DDD270CCA288BF097F2FF69CC2DB74FBR9t60x01008408C523CF06DCB237835D701C165E68F9460580132E28EDR;t60x0100BF088517935FC9183FE39FDEC77539FD5CB52BA5F5761881R*t60x010034767D5C0CFA5FDCA28C4A56085E65E882E71CB0ED250341t60x0100993BF2315F36CC441485B35C4D84687DC02C78B0E680411FR.t60x010086489146C46DD7318D2514D1AC706457CBF6CD3DF8407F07t60x0100CF465B7B12625EF019E157120D58DD46569AC7BF4118455Dt60x01002D60BA07FE612C8DE537DF3BFCFA49CD9968324481C1A8A8RRDt60x0100624C0961B28E39FEE13FD0C35F57B4523F0DA1861C11D5A5t60x010083104228FAD559BE52477F2131E538BE9734E5C4B0ADEFD7t60x01005b20054332752e1bc2e7c5df0f9ebfe486e9bee063e8d3b3t60X010036D726AE86834E97F20B198ACD219D60B446AC5E48C54F30t60x020036D726AE86834E97F20B198ACD219D60B446AC5E48C54F30t40x010036D726AE86834E97F20B198ACD219D60B446AC5E48C54Ft80x010036D726AE86834E97F20B198ACD219D60B446AC5E48C54F3012R4t60x010036D726AE86G34E97F20B198ACD219D60B446AC5E48C54F30(sTESTRH(RIRJ(s123RK(s123RL(sAAAARM(RIRJ(RNRO(sfooRP(sbarRQ(scanardRR(slapinRS(sTestRT(sTestRU(R.RV(sAAAARW(s123RX(s12345s60x01005B20054332752E1BC2E7C5DF0F9EBFE486E9BEE063E8D3B3(R[s12345s60x01005B20054332752E1BC2E7C5DF0F9EBFE486E9BEE063E8D3B3( R1R2Rt mssql2005R%RR4R5R RER6(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRGjs8     t mysql323_testcBsTeZejZd d d edfgZdgZdZd e j fd YZ RS(tdrewt697a7de87c5390b2Rt5d2e19393cc5ef67tmypasst6f8c114b58f2ce9et4ef327ca5491c8d7t6z8c114b58f2ce9ecCs2|jd}|jd}|j||dS(s$check whitespace is ignored per specRfsmy passN(t do_encryptR(RCthth2((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyttest_90_whitespacesRcBseZdZRS(cCs"|jdd|jddkS(NRMRL(treplace(RCR]tother((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pytaccept_password_pairs(R1R2Rp(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRs(RcRd(spasswordRe(smypassRg( R1R2Rtmysql323R%R4R5RERmRR(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRbs   t mysql41_testcBs5eZejZd d d d edfgZd gZRS(tverysecretpasswords)*2C905879F74F28F8570989947D06A8429FB943E6t 12345678123456781234567812345678s)*F9F1470004E888963FB466A5452C9CBD9DF6239Cs ' OR 1 /*'s)*97CF7A3ACBE0CA58D5391AC8377B5D9AC11D46D9Rfs)*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4s)*E7AFE21A9CFA2FC9D15D942AE8FB5C240FE5837Bs)*6Z8989366EAF75BB670AD8EA7A7FC1176A95CEF4(Rss)*2C905879F74F28F8570989947D06A8429FB943E6(Rts)*F9F1470004E888963FB466A5452C9CBD9DF6239C(s ' OR 1 /*'s)*97CF7A3ACBE0CA58D5391AC8377B5D9AC11D46D9(smypasss)*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4(R1R2Rtmysql41R%R4R5RE(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRrs t nthash_testc BsSeZejZdedfdedfdddddddg ZdgZRS(Rt 6677b2c394311355b54f25eec5bfacf5Rt 256781a62031289d3c2c98c14f1efc8cRLt 31d6cfe0d16ae931b73c59d7e0c089c0ttiggert b7e0ea9fbffcf6dd83086e905089effdsüt 8bd6e4fb88e01009818749c5443ea712süüt cc1260adb6985ca749f150c7e0b22063s€t 030926b781938db4365d46adc7cfbcb8s€€t 682467b963bb4e61943e170a04f7db46R8t 7f8fe03093cc84b267b109625f6bbf4bt 7f8fe03093cc84b267b109625f6bbfxb(RLRy(RzR{(süR|(süüR}(s€R~(s€€R(s passphraseR(R1R2RtnthashR%RR5RE(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRvs  tbsd_nthash_testcBs&eZejZddgZdgZRS(R8s$$3$$7f8fe03093cc84b267b109625f6bbf4bsüs$$3$$8bd6e4fb88e01009818749c5443ea712s$$3$$7f8fe03093cc84b267b109625f6bbfxb(s passphrases$$3$$7f8fe03093cc84b267b109625f6bbf4b(süs$$3$$8bd6e4fb88e01009818749c5443ea712(R1R2Rt bsd_nthashR%R5RE(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyR$s  t oracle10_testc BsneZejZeZeZdededfdfd!d#d%d'd)d+d-e dfdfg Z dgZ RS(.ttigertscotttF894844C34402B67tttTiGGeRtScOt7AA1A84E31ED7771td_syspwtSYSTEMt1B9F1F9A5CB9EB31t strat_passwdt strat_usertAEBEDBB4EFB5225Bs #95LWEIGHTStUSERt000EA4D72A142E29tCIAO2010tALFREDOtEB026A76F0650F7BtGLOUGloutBobtCDC6B483874B875Bt GLOUGLOUTERtbOBtEF1F9139DB2D5279tLONG_MOT_DE_PASSE_OUItBOBtEC8147ABB3373D53tSystemtB915A853F297B281tF894844C34402B6Z(RR((RRR(RR((RRR(RR((RRR(s #95LWEIGHTSR((s #95LWEIGHTSRR(RR((RRR(RR((RRR(RR((RRR(RR((RRR( R1R2Rtoracle10R%RBRRRR4R5RE(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyR4s  t oracle11_testcBs2eZejZd d dddded fgZRS(tabc123s>S:5FDAB69F543563582BA57894FE1C1361FB8ED57B903603F2C52ED1B4D642s SyStEm123!@#s>S:450F957ECBE075D2FA009BA822A9E28709FBC3DA82B44D284DDABEC14C42toracles>S:3437FF72BD69E3FB4D10C750B92B8FB90B155E26227B9AB62D94F54E5951t11gs>S:61CE616647A4F7980AFD7C7245261AF25E0AFE9C9763FCF0D54DA667D4E6s>S:B9E7556F53500C8C78A58F50F24439D79962DE68117654B6700CE7CC71CFtSHAlalas>S:2BFCFDF5895014EE9BB2B9BA067B01E0389BB5711B7B5F82B7235E9E182Cs>S:51586343E429A6DF024B8F242F2E9F8507B1096FACD422E29142AA4974B0(Rs>S:5FDAB69F543563582BA57894FE1C1361FB8ED57B903603F2C52ED1B4D642(s SyStEm123!@#s>S:450F957ECBE075D2FA009BA822A9E28709FBC3DA82B44D284DDABEC14C42(Rs>S:3437FF72BD69E3FB4D10C750B92B8FB90B155E26227B9AB62D94F54E5951(Rs>S:61CE616647A4F7980AFD7C7245261AF25E0AFE9C9763FCF0D54DA667D4E6(Rs>S:B9E7556F53500C8C78A58F50F24439D79962DE68117654B6700CE7CC71CF(Rs>S:2BFCFDF5895014EE9BB2B9BA067B01E0389BB5711B7B5F82B7235E9E182C(R1R2Rtoracle11R%R4R5(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyR]s t phpass_testc BsGeZejZddddddddddedfg ZdgZRS(t test12345s"$P$9IQRaTwmfeRo7ud9Fh4E2PdI0S3r.L0Rs"$H$9aaaaaSXBjgypwqm.JsMssPLiS8YQ00t123456s"$H$9PE8jEklgZhgLmZl5.HYJAzfGCQtzi1s"$H$9pdx7dbOW3Nnt32sikrjAxYFjX8XoK1tthisisalongertestPWs"$P$912345678LIjjb6PhecupozNBmDndU0t JohnRippers"$P$612345678si5M0DDyPpmRCmcltU/YW/s"$H$712345678WhEyvy1YWzT4647jzeOmo0s"$P$B12345678L6Lpt4BxNotVIMILOa9u81RLs"$P$7JaFQsPzJSuenezefD/3jHgt5hVfNH0scompL3X!s"$P$FiS0N5L672xzQx1rt1vgdJQRYKnQM9/s"$P$7SMy8VxnfsIy2Sxm7fJxDSdil.h7TW.s"$P$9IQRaTwmfeRo7ud9Fh4E2PdI0S3r!L0(Rs"$P$9IQRaTwmfeRo7ud9Fh4E2PdI0S3r.L0(stest1s"$H$9aaaaaSXBjgypwqm.JsMssPLiS8YQ00(Rs"$H$9PE8jEklgZhgLmZl5.HYJAzfGCQtzi1(Rs"$H$9pdx7dbOW3Nnt32sikrjAxYFjX8XoK1(Rs"$P$912345678LIjjb6PhecupozNBmDndU0(Rs"$P$612345678si5M0DDyPpmRCmcltU/YW/(Rs"$H$712345678WhEyvy1YWzT4647jzeOmo0(Rs"$P$B12345678L6Lpt4BxNotVIMILOa9u81(RLs"$P$7JaFQsPzJSuenezefD/3jHgt5hVfNH0(scompL3X!s"$P$FiS0N5L672xzQx1rt1vgdJQRYKnQM9/(R1R2RtphpassR%R4R5R6(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRxs tplaintext_testcBsMeZejZeZddeer*ene fe er?ene fgZ RS(RLR(RLRL(spasswordspassword( R1R2Rt plaintextR%RBtaccepts_all_hashesR4RRR5(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRs  tpostgres_md5_testcBs8eZejZd d dedfdfgZd gZRS(Rftpostgrest#md55fba2ea04fd36069d2574ea71c8efe9dRt#md540c31989b20437833f697e485811254bt testpasswordttestusert#md5d4fc5129cc2c25465a5370113ae9835ft#md5cb9f11283265811ce076db86d18a22d2t#md54zc31989b20437833f697e485811254b(smypassR((smypassRR(smypasssroot((smypasssrootR(RR((RRR(R1R2Rt postgres_md5R%R4R5RE(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRs  t_sha1_crypt_testcBsPeZejZd d edfgZddddgZdefd e fgZ RS( Rs1$sha1$19703$iVdJqfSE$v4qYKl1zqYThwpjJAoKX6UvlHq/as1$sha1$21773$uV7PTeux$I9oHnvwPZHMO0Nq6/WgyGV/tDJIHs1$sha1$40000$uJ3Sp7LE$.VEmLO5xntyRFYihC7ggd3297T/Ds1$sha1$21773$u!7PTeux$I9oHnvwPZHMO0Nq6/WgyGV/tDJIHs1$sha1$01773$uV7PTeux$I9oHnvwPZHMO0Nq6/WgyGV/tDJIHs2$sha1$21773$uV7PTeux$I9oHnvwPZHMO0Nq6/WgyGV/tDJIH$s-$sha1$$uV7PTeux$I9oHnvwPZHMO0Nq6/WgyGV/tDJIH$tnetbsds$freebsd|openbsd|linux|solaris|darwin(spasswords1$sha1$19703$iVdJqfSE$v4qYKl1zqYThwpjJAoKX6UvlHq/a(spasswords1$sha1$21773$uV7PTeux$I9oHnvwPZHMO0Nq6/WgyGV/tDJIH( R1R2Rt sha1_cryptR%R4R5R6RBRbRc(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRs   t RoundupTestcBseZdZdZRS(cCs:|j|j|||j|jd||dS(NR.(RWRXRZ(RCRkR]R((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyt _test_pairscCsr|jtjdd|jtjdd|jtjdd|jtjdd|jtjdddS(Ntsekrits-{SHA}8d42e738c7adee551324955458b5e2c0b49ee655s%{MD5}ccbc53f4464604e714f69dd11138d8b5s{CRYPT}nFia0rj2TT59As{plaintext}sekritsD{PBKDF2}5000$7BvbBq.EZzz/O0HuwX3iP.nAG3s$g3oPnFFaga2BJaX5PoPRljl4XIE(RRt ldap_hex_sha1t ldap_hex_md5tldap_des_crypttroundup_plaintexttldap_pbkdf2_sha1(RC((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyt test_pairss((R1R2RR(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRs t_sha256_crypt_testc BseZejZd:d;d<d=d>d?d@dAdBdCeddfg ZedryejdDdEdFdGdHdIdJdKdLg nd d!d"gZ dMdNdOdPdQdRdSgZ e Z d7e fdUd9efgZRS(VsU*U*U*U*s?$5$LKO/Ute40T3FNF95$U0prpBQd4PloSGU0pnpM4z9wKn4vZ1.jsrzQfPqxph9sU*U***Us?$5$LKO/Ute40T3FNF95$fdgfoJEBoMajNxCv3Ru9LyQ0xZgv0OBMQoq80LQ/Qd.sU*U***U*s?$5$LKO/Ute40T3FNF95$8Ry82xGnnPI/6HtFYnvPBTYgOL23sdMXn8C29aO.x/As*U*U*U*Us?$5$9mx1HkCz7G1xho50$O7V7YgleJKLUhcfk9pgzdh3RapEaWqMtEp9UUBAKIPARLs?$5$kc7lRD1fpYg0g.IP$d7CMTcEqJyTXyeq8hTdu/jB/I6DGkoo62NXbHIR7S43sL$5$rounds=10428$uy/jIAhCetNCTtb0$YWvUOXbkqlqhyoPMpN8BMe.ZGsGx2aBvxTvDFI613c3RMsL$5$rounds=10376$I5lNtXtRmf.OoMd8$Ko3AI1VvTANdyKhBPavaRjJzNpSatKU6QVN9uwS9MH.RUsL$5$rounds=11858$WH1ABM5sKhxbkgCK$aTQsjPkz0rBsH3lQlJxw9HDTDXPKBxC0LlVeV69P.t1sCompl3X AlphaNu3mericsL$5$rounds=10350$o.pwkySLCzwTdmQX$nCMVsnF3TXWcBPOympBUUSQi6LGGloZoOsVJMGJ09UBs%4lpHa N|_|M3r1K W/ Cur5Es: #$%(*)(*%#sL$5$rounds=11944$9dhlu07dQMRWvTId$LyUI5VWkGFwASlzntk1RLurxX54LUhgAcJZIt0pYGT7swith unic\u00D6desK$5$rounds=1000$IbG0EuGQXw5EkMdP$LQ5AfPf13KufFsKtmazqnzSGZ4pxtUNw3woQ.ELRDF4tfullR]s?$5$rounds=1004$nacl$oiWPbm.kQ7.jTCZoOtdv7/tO5mWv/vxw5yTqlBagVR7s?$5$rounds=1005$nacl$6Mo/TmGDrXxg.bMK9isRzyWH3a..6HnSVVsJMEX7ud/s?$5$rounds=1006$nacl$I46VwuAiUBwmVkfPFakCtjVxYYaOJscsuIeuZLbfKIDs?$5$rounds=1007$nacl$9fY4j1AV3N/dV/YMUn1enRHKH.7nEL4xf1wWB6wfDD4s?$5$rounds=1008$nacl$CiFWCfn8ODmWs0I1xAdXFo09tM8jr075CyP64bu3by9s?$5$rounds=1009$nacl$QtpFX.CJHgVQ9oAjVYStxAeiU38OmFILWm684c6FyEDs?$5$rounds=1010$nacl$ktAwXuT5WbjBW/0ZU1eNMpqIWY1Sm4twfRE1zbZyo.Bs?$5$rounds=1011$nacl$QJWLBEhO9qQHyMx4IJojSN9sS41P1Yuz9REddxdO721s?$5$rounds=1012$nacl$mmf/k2PkbBF4VCtERgky3bEVavmLZKFwAcvxD1p3kV2sL$5$rounds=10428$uy/:jIAhCetNCTtb0$YWvUOXbkqlqhyoPMpN8BMeZGsGx2aBvxTvDFI613c3sM$5$rounds=010428$uy/jIAhCetNCTtb0$YWvUOXbkqlqhyoPMpN8BMe.ZGsGx2aBvxTvDFI613c3sM$5$rounds=10428$uy/jIAhCetNCTtb0$YWvUOXbkqlqhyoPMpN8BMe.ZGsGx2aBvxTvDFI613c3$s $5$saltstrings Hello world!s9$5$saltstring$5B8vYYiY.CVt1RlTTf8KbXBH3hsxY/GNooZaBBGWEc5s$$5$rounds=10000$saltstringsaltstringsL$5$rounds=10000$saltstringsaltst$3xv.VbSHBb41AL9AvLeujZkZRBAwqFMz2.opqey6IcAs $5$rounds=5000$toolongsaltstringsThis is just a testsK$5$rounds=5000$toolongsaltstrin$Un/5jzAHMgOGZ5.mWJpuVolil07guHPvOW8mGRcvxa5s$$5$rounds=1400$anotherlongsaltstringsTa very much longer text to encrypt. This one even stretches over morethan one line.sK$5$rounds=1400$anotherlongsalts$Rx.j8H.h8HjEDGomFU8bDkXm3XIUnzyxf12oP84Bnq1s$5$rounds=77777$shorts4we have a short salt string but not a short passwordsA$5$rounds=77777$short$JiO1O3ZpDAxGJeaDIuqCoEFysAe1mZNJRs3pw0KQRd/s!$5$rounds=123456$asaltof16chars..sa short stringsM$5$rounds=123456$asaltof16chars..$gP3VQ/6X7UUEW3HkBn2w1/Ptq2jxPyzV/cZKmF/wJvDs$5$rounds=10$roundstoolows$the minimum number is still observedsG$5$rounds=1000$roundstoolow$yfvwcWrQ8l/K0DAWyuPMDNHpIVlTQebY9l/gL972bICsfreebsd(9|1\d)|linuxtfreebsd8sfreebsd|openbsd|netbsd|darwin(sU*U*U*U*s?$5$LKO/Ute40T3FNF95$U0prpBQd4PloSGU0pnpM4z9wKn4vZ1.jsrzQfPqxph9(sU*U***Us?$5$LKO/Ute40T3FNF95$fdgfoJEBoMajNxCv3Ru9LyQ0xZgv0OBMQoq80LQ/Qd.(sU*U***U*s?$5$LKO/Ute40T3FNF95$8Ry82xGnnPI/6HtFYnvPBTYgOL23sdMXn8C29aO.x/A(s*U*U*U*Us?$5$9mx1HkCz7G1xho50$O7V7YgleJKLUhcfk9pgzdh3RapEaWqMtEp9UUBAKIPA(RLs?$5$kc7lRD1fpYg0g.IP$d7CMTcEqJyTXyeq8hTdu/jB/I6DGkoo62NXbHIR7S43(RLsL$5$rounds=10428$uy/jIAhCetNCTtb0$YWvUOXbkqlqhyoPMpN8BMe.ZGsGx2aBvxTvDFI613c3(RMsL$5$rounds=10376$I5lNtXtRmf.OoMd8$Ko3AI1VvTANdyKhBPavaRjJzNpSatKU6QVN9uwS9MH.(stestsL$5$rounds=11858$WH1ABM5sKhxbkgCK$aTQsjPkz0rBsH3lQlJxw9HDTDXPKBxC0LlVeV69P.t1(sCompl3X AlphaNu3mericsL$5$rounds=10350$o.pwkySLCzwTdmQX$nCMVsnF3TXWcBPOympBUUSQi6LGGloZoOsVJMGJ09UB(s%4lpHa N|_|M3r1K W/ Cur5Es: #$%(*)(*%#sL$5$rounds=11944$9dhlu07dQMRWvTId$LyUI5VWkGFwASlzntk1RLurxX54LUhgAcJZIt0pYGT7(ssecrets?$5$rounds=1004$nacl$oiWPbm.kQ7.jTCZoOtdv7/tO5mWv/vxw5yTqlBagVR7(ssecrets?$5$rounds=1005$nacl$6Mo/TmGDrXxg.bMK9isRzyWH3a..6HnSVVsJMEX7ud/(ssecrets?$5$rounds=1006$nacl$I46VwuAiUBwmVkfPFakCtjVxYYaOJscsuIeuZLbfKID(ssecrets?$5$rounds=1007$nacl$9fY4j1AV3N/dV/YMUn1enRHKH.7nEL4xf1wWB6wfDD4(ssecrets?$5$rounds=1008$nacl$CiFWCfn8ODmWs0I1xAdXFo09tM8jr075CyP64bu3by9(ssecrets?$5$rounds=1009$nacl$QtpFX.CJHgVQ9oAjVYStxAeiU38OmFILWm684c6FyED(ssecrets?$5$rounds=1010$nacl$ktAwXuT5WbjBW/0ZU1eNMpqIWY1Sm4twfRE1zbZyo.B(ssecrets?$5$rounds=1011$nacl$QJWLBEhO9qQHyMx4IJojSN9sS41P1Yuz9REddxdO721(ssecrets?$5$rounds=1012$nacl$mmf/k2PkbBF4VCtERgky3bEVavmLZKFwAcvxD1p3kV2(s $5$saltstrings Hello world!s9$5$saltstring$5B8vYYiY.CVt1RlTTf8KbXBH3hsxY/GNooZaBBGWEc5(s$$5$rounds=10000$saltstringsaltstrings Hello world!sL$5$rounds=10000$saltstringsaltst$3xv.VbSHBb41AL9AvLeujZkZRBAwqFMz2.opqey6IcA(s $5$rounds=5000$toolongsaltstringsThis is just a testsK$5$rounds=5000$toolongsaltstrin$Un/5jzAHMgOGZ5.mWJpuVolil07guHPvOW8mGRcvxa5(s$$5$rounds=1400$anotherlongsaltstringsTa very much longer text to encrypt. This one even stretches over morethan one line.sK$5$rounds=1400$anotherlongsalts$Rx.j8H.h8HjEDGomFU8bDkXm3XIUnzyxf12oP84Bnq1(s$5$rounds=77777$shorts4we have a short salt string but not a short passwordsA$5$rounds=77777$short$JiO1O3ZpDAxGJeaDIuqCoEFysAe1mZNJRs3pw0KQRd/(s!$5$rounds=123456$asaltof16chars..sa short stringsM$5$rounds=123456$asaltof16chars..$gP3VQ/6X7UUEW3HkBn2w1/Ptq2jxPyzV/cZKmF/wJvD(s$5$rounds=10$roundstoolows$the minimum number is still observedsG$5$rounds=1000$roundstoolow$yfvwcWrQ8l/K0DAWyuPMDNHpIVlTQebY9l/gL972bICN(RN(R1R2Rt sha256_cryptR%RR5R textendR6tknown_correct_configsRBtfilter_config_warningsRRbRc(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRs\      t_sha512_crypt_testc BsteZejZd*d+d,d-d.d/d0d1d2d3edfg ZddgZd4d5d6d7d8d9d:gZe Z e j Z RS(;sU*U*U*U*sj$6$LKO/Ute40T3FNF95$6S/6T2YuOIHY0N3XpLKABJ3soYcXD9mB7uVbtEZDj/LNscVhZoZ9DEH.sBciDrMsHOWOoASbNLTypH/5X26gN0sU*U***Usj$6$LKO/Ute40T3FNF95$wK80cNqkiAUzFuVGxW6eFe8J.fSVI65MD5yEm8EjYMaJuDrhwe5XXpHDJpwF/kY.afsUs1LlgQAaOapVNbggZ1sU*U***U*sj$6$LKO/Ute40T3FNF95$YS81pp1uhOHTgKLhSMtQCr2cDiUiN03Ud3gyD4ameviK1Zqz.w3oXsMgO6LrqmIEcG3hiqaUqHi/WEE2zrZqa/s*U*U*U*Usj$6$OmBOuxFYBZCYAadG$WCckkSZok9xhp4U1shIZEV7CCVwQUwMVea7L3A77th6SaE9jOPupEMJB.z0vIWCDiN9WLh2m9Oszrj5G.gt330RLsj$6$ojWH1AiTee9x1peC$QVEnTvRVlPRhcLQCk/HnHaZmlGAAjCfrAN0FtOsOnUk5K5Bn/9eLHHiRzrTzaIKjW9NTLNIBUCtNVOowWS2mN.sw$6$rounds=11021$KsvQipYPWpr93wWP$v7xjI4X6vyVptJjB1Y02vZC5SaSijBkGmq1uJhPr3cvqvvkd42Xvo48yLVPFt8dvhCsnlUgpX.//Cxn91H4qy1RMsw$6$rounds=11104$ED9SA4qGmd57Fq2m$q/.PqACDM/JpAHKmr86nkPzzuR5.YpYa8ZJJvI8Zd89ZPUYTJExsFEIuTYbM7gAGcQtTkCEhBKmp1S1QZwaXx0RUsw$6$rounds=11531$G/gkPn17kHYo0gTF$Kq.uZBHlSBXyzsOJXtxJruOOH4yc0Is13uY7yK0PvAvXxbvc1w8DO1RzREMhKsc82K/Jh8OquV8FZUlreYPJk1sCompl3X AlphaNu3mericsw$6$rounds=10787$wakX8nGKEzgJ4Scy$X78uqaX1wYXcSCtS4BVYw2trWkvpa8p7lkAtS9O/6045fK4UB2/Jia0Uy/KzCpODlfVxVNZzCCoV9s2hoLfDs/s%4lpHa N|_|M3r1K W/ Cur5Es: #$%(*)(*%#sw$6$rounds=11065$5KXQoE1bztkY5IZr$Jf6krQSUKKOlKca4hSW07MSerFFzVIZt/N3rOTsUgKqp7cUdHrwV8MoIVNCk9q9WL3ZRMsdbwNXpVk0gVxKtz1sw$6$rounds=40000$PEZTJDiyzV28M3.m$GTlnzfzGB44DGd1XqlmC4erAJKCP.rhvLvrYxiT38htrNzVGBnplFOHjejUGVrCfusGWxLQCc3pFO0A/1jYYr0sx$6$rounds=011021$KsvQipYPWpr93wWP$v7xjI4X6vyVptJjB1Y02vZC5SaSijBkGmq1uJhPr3cvqvvkd42Xvo48yLVPFt8dvhCsnlUgpX.//Cxn91H4qy1sw$6$rounds=11021$KsvQipYPWpr9:wWP$v7xjI4X6vyVptJjB1Y02vZC5SaSijBkGmq1uJhPr3cvqvvkd42Xvo48yLVPFt8dvhCsnlUgpX.//Cxn91H4qy1s $6$saltstrings Hello world!sd$6$saltstring$svn8UoSVapNtMuq1ukKS4tPQd8iKwSMHWjl/O817G3uBnIFNjnQJuesI68u4OTLiBFdcbYEdFCoEOfaS35inz1s$$6$rounds=10000$saltstringsaltstringsw$6$rounds=10000$saltstringsaltst$OW1/O6BYHV6BcXZu8QVeXbDWra3Oeqh0sbHbbMCVNSnCM/UrjmM0Dp8vOuZeHBy/YTBmSK6H9qs/y3RnOaw5v.s $6$rounds=5000$toolongsaltstringsThis is just a testsv$6$rounds=5000$toolongsaltstrin$lQ8jolhgVRVhY4b5pZKaysCLi0QBxGoNeKQzQ3glMhwllF7oGDZxUhx1yxdYcz/e1JSbq3y6JMxxl8audkUEm0s$$6$rounds=1400$anotherlongsaltstringsTa very much longer text to encrypt. This one even stretches over morethan one line.sv$6$rounds=1400$anotherlongsalts$POfYwTEok97VWcjxIiSOjiykti.o/pQs.wPvMxQ6Fm7I6IoYN3CmLs66x9t0oSwbtEW7o7UmJEiDwGqd8p4ur1s$6$rounds=77777$shorts4we have a short salt string but not a short passwordsl$6$rounds=77777$short$WuQyW2YR.hBNpjjRhpYD/ifIw05xdfeEyQoMxIXbkvr0gge1a1x3yRULJ5CCaUeOxFmtlcGZelFl5CxtgfiAc0s!$6$rounds=123456$asaltof16chars..sa short stringsx$6$rounds=123456$asaltof16chars..$BtCwjqMJGx5hrJhZywWvt0RLE8uZ4oPwcelCjmw2kSYu.Ec6ycULevoBK25fs2xXgMNrCzIMVcgEJAstJeonj1s$6$rounds=10$roundstoolows$the minimum number is still observedsr$6$rounds=1000$roundstoolow$kUMsbe306n21p9R.FRkW3IGn.S9NPN0x50YhH1xhLsPuWGsUSklZt58jaTfF4ZEQpyUNGc0dqbpBYYBaHHrsX.(sU*U*U*U*sj$6$LKO/Ute40T3FNF95$6S/6T2YuOIHY0N3XpLKABJ3soYcXD9mB7uVbtEZDj/LNscVhZoZ9DEH.sBciDrMsHOWOoASbNLTypH/5X26gN0(sU*U***Usj$6$LKO/Ute40T3FNF95$wK80cNqkiAUzFuVGxW6eFe8J.fSVI65MD5yEm8EjYMaJuDrhwe5XXpHDJpwF/kY.afsUs1LlgQAaOapVNbggZ1(sU*U***U*sj$6$LKO/Ute40T3FNF95$YS81pp1uhOHTgKLhSMtQCr2cDiUiN03Ud3gyD4ameviK1Zqz.w3oXsMgO6LrqmIEcG3hiqaUqHi/WEE2zrZqa/(s*U*U*U*Usj$6$OmBOuxFYBZCYAadG$WCckkSZok9xhp4U1shIZEV7CCVwQUwMVea7L3A77th6SaE9jOPupEMJB.z0vIWCDiN9WLh2m9Oszrj5G.gt330(RLsj$6$ojWH1AiTee9x1peC$QVEnTvRVlPRhcLQCk/HnHaZmlGAAjCfrAN0FtOsOnUk5K5Bn/9eLHHiRzrTzaIKjW9NTLNIBUCtNVOowWS2mN.(RLsw$6$rounds=11021$KsvQipYPWpr93wWP$v7xjI4X6vyVptJjB1Y02vZC5SaSijBkGmq1uJhPr3cvqvvkd42Xvo48yLVPFt8dvhCsnlUgpX.//Cxn91H4qy1(RMsw$6$rounds=11104$ED9SA4qGmd57Fq2m$q/.PqACDM/JpAHKmr86nkPzzuR5.YpYa8ZJJvI8Zd89ZPUYTJExsFEIuTYbM7gAGcQtTkCEhBKmp1S1QZwaXx0(stestsw$6$rounds=11531$G/gkPn17kHYo0gTF$Kq.uZBHlSBXyzsOJXtxJruOOH4yc0Is13uY7yK0PvAvXxbvc1w8DO1RzREMhKsc82K/Jh8OquV8FZUlreYPJk1(sCompl3X AlphaNu3mericsw$6$rounds=10787$wakX8nGKEzgJ4Scy$X78uqaX1wYXcSCtS4BVYw2trWkvpa8p7lkAtS9O/6045fK4UB2/Jia0Uy/KzCpODlfVxVNZzCCoV9s2hoLfDs/(s%4lpHa N|_|M3r1K W/ Cur5Es: #$%(*)(*%#sw$6$rounds=11065$5KXQoE1bztkY5IZr$Jf6krQSUKKOlKca4hSW07MSerFFzVIZt/N3rOTsUgKqp7cUdHrwV8MoIVNCk9q9WL3ZRMsdbwNXpVk0gVxKtz1(s $6$saltstrings Hello world!sd$6$saltstring$svn8UoSVapNtMuq1ukKS4tPQd8iKwSMHWjl/O817G3uBnIFNjnQJuesI68u4OTLiBFdcbYEdFCoEOfaS35inz1(s$$6$rounds=10000$saltstringsaltstrings Hello world!sw$6$rounds=10000$saltstringsaltst$OW1/O6BYHV6BcXZu8QVeXbDWra3Oeqh0sbHbbMCVNSnCM/UrjmM0Dp8vOuZeHBy/YTBmSK6H9qs/y3RnOaw5v.(s $6$rounds=5000$toolongsaltstringsThis is just a testsv$6$rounds=5000$toolongsaltstrin$lQ8jolhgVRVhY4b5pZKaysCLi0QBxGoNeKQzQ3glMhwllF7oGDZxUhx1yxdYcz/e1JSbq3y6JMxxl8audkUEm0(s$$6$rounds=1400$anotherlongsaltstringsTa very much longer text to encrypt. This one even stretches over morethan one line.sv$6$rounds=1400$anotherlongsalts$POfYwTEok97VWcjxIiSOjiykti.o/pQs.wPvMxQ6Fm7I6IoYN3CmLs66x9t0oSwbtEW7o7UmJEiDwGqd8p4ur1(s$6$rounds=77777$shorts4we have a short salt string but not a short passwordsl$6$rounds=77777$short$WuQyW2YR.hBNpjjRhpYD/ifIw05xdfeEyQoMxIXbkvr0gge1a1x3yRULJ5CCaUeOxFmtlcGZelFl5CxtgfiAc0(s!$6$rounds=123456$asaltof16chars..sa short stringsx$6$rounds=123456$asaltof16chars..$BtCwjqMJGx5hrJhZywWvt0RLE8uZ4oPwcelCjmw2kSYu.Ec6ycULevoBK25fs2xXgMNrCzIMVcgEJAstJeonj1(s$6$rounds=10$roundstoolows$the minimum number is still observedsr$6$rounds=1000$roundstoolow$kUMsbe306n21p9R.FRkW3IGn.S9NPN0x50YhH1xhLsPuWGsUSklZt58jaTfF4ZEQpyUNGc0dqbpBYYBaHHrsX.( R1R2Rt sha512_cryptR%R4R5R6RRBRRRc(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyR|s@   tsun_md5_crypt_testc BseZejZddddedfgZddd d!gZdddddddddg Zde fde fgZ dZ RS("t Gpcs3_adms%$md5$zrdhpMlZ$$wBvMOEqbSjU.hu5T2VEP01t aa12345678s%$md5$vyy8.OVF$$FY4TWzuauRl4.VQNobqMY.tthiss%$md5$3UqYqndY$$6P.aaWOoucxxq.l00SS9k0tpasswds$$md5$RPgLF6IJ$WTvAlUJ7MqH5xak2FMEwS/s1$md5,rounds=5000$10VYDzAA$$1arAVtMA3trgE1qJ2V0Ez1s$md5$3UqYqndY$s%$md5$3UqYqndY$$.................DUMMYs $md5$3UqYqndYs$$md5$3UqYqndY$HIZVnfJNGCPbDZ9nIRSgP1s$$md5$3UqYqndY$.................DUMMYs$md5,rounds=5000s$md5,rounds=500A$xxxxs$md5,rounds=0500$xxxxs$md5,rounds=0$xxxxs$$md5$RPgL!6IJ$WTvAlUJ7MqH5xak2FMEwS/s#$md5$RPgLa6IJ$WTvAlUJ7MqH5xak2FMEwSs%$md5$RPgLa6IJ$WTvAlUJ7MqH5xak2FMEwS/.s$md5$3UqYqndY$$s&$md5$RPgLa6IJ$$$WTvAlUJ7MqH5xak2FMEwS/tsolariss#freebsd|openbsd|netbsd|linux|darwincCs@t|tr-|jdr-tdn|jj||S(Ns$.................DUMMYs,pretending '$...' stub hash is config string(RtstrtendswithR@R%RX(RCR]R((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyt do_verify9s(Rs%$md5$zrdhpMlZ$$wBvMOEqbSjU.hu5T2VEP01(Rs%$md5$vyy8.OVF$$FY4TWzuauRl4.VQNobqMY.(sthiss%$md5$3UqYqndY$$6P.aaWOoucxxq.l00SS9k0(Rs$$md5$RPgLF6IJ$WTvAlUJ7MqH5xak2FMEwS/(s$md5$3UqYqndY$sthiss%$md5$3UqYqndY$$6P.aaWOoucxxq.l00SS9k0(s%$md5$3UqYqndY$$.................DUMMYsthiss%$md5$3UqYqndY$$6P.aaWOoucxxq.l00SS9k0(s $md5$3UqYqndYsthiss$$md5$3UqYqndY$HIZVnfJNGCPbDZ9nIRSgP1(s$$md5$3UqYqndY$.................DUMMYsthiss$$md5$3UqYqndY$HIZVnfJNGCPbDZ9nIRSgP1( R1R2Rt sun_md5_cryptR%R4R5RR6RBRbRcR(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRs4    tunix_disabled_testcBsGeZejZd edfgZddddgZdZdZ RS( Rt!t*s$1$xxxtabcs./azs{SHA}xxxcCs t|_tt|jdS(N(RBRRRRttest_76_hash_border(RC((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRVs cCsJtjdd|j}|j|jddd|j|jdd|j|j|jd|j|j|jj|j|j|jddddd|j|jdddd|j|jddjdd|jt |jdddd|jt |jddd|jt |jddd S( s%test marker option & special behaviorROs-passing settings to .*.hash\(\) is deprecatedRVs!asdRLtmarkers*xxxRN( RPRQR%Rtgenhashtdefault_markerRtusingR?R@(RCR%((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyttest_90_special[s "%(spasswordR( R1R2Rt unix_disabledR%R4R5RERR(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRCs   tunix_fallback_testcBsDeZejZeZdedfgZdZ dZ dZ RS(RRcCs'tt|jtjdddS(NROs'unix_fallback' is deprecated(RRRtsetUpRPRQ(RC((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyR}scCs|j}|j|jdddt|j|jddxFdD]>}|j|jd|dt|j|jd|qHWdS(stest enable_wildcard flagRRLtenable_wildcards!*xN(R%RWRXRBRZ(RCRktc((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyttest_90_wildcards   cCs^|j}|j|jddd|j|jdd|j|jddddS(s%test preserves existing disabled hashRVRLRs!asdN(R%RRR(RCR%((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyttest_91_preserves_existings (spasswordR( R1R2Rt unix_fallbackR%RBRR4R5RRR(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyRrs   ([R`t __future__Rtloggingt getLoggerR1tlogtosRRPtpasslibRt passlib.utilsRRRRRRtpasslib.tests.utilsRRR R R R RRR4RRRR+tconditionally_available_hashesR/R7RHtcreate_backend_casetbsdi_crypt_os_crypt_testtbsdi_crypt_builtin_testRfRotdes_crypt_os_crypt_testtdes_crypt_builtin_testR{RRRRRRRRRRRRtldap_md5_crypt_os_crypt_testtldap_md5_crypt_builtin_testRtldap_sha1_crypt_os_crypt_testRRtmd5_crypt_os_crypt_testtmd5_crypt_builtin_testRR R)RGRbRrRvRRRRRRRtsha1_crypt_os_crypt_testtsha1_crypt_builtin_testRRtsha256_crypt_os_crypt_testtsha256_crypt_builtin_testRtsha512_crypt_os_crypt_testtsha512_crypt_builtin_testRRR(((s?/usr/lib/python2.7/site-packages/passlib/tests/test_handlers.pyts    ".     )E*R'3/:#SY$#)(  #\Lu/