DXc@`sdZddlmZmZmZddlZejeZddl m Z m Z ddl m Z ddlmZmZmZddlmZd d d gZd eefd YZd efdYZd efdYZd efdYZdS(sI passlib.tests.test_handlers_cisco - tests for Cisco-specific algorithms i(tabsolute_importtdivisiontprint_functionN(thashtexc(tui(tUserHandlerMixint HandlerCaset repeat_string(t UPASS_TABLEtcisco_pix_testtcisco_asa_testtcisco_type7_testt_PixAsaSharedTestc0B`seZdZeZeZdMdOdQdSdUdWdYd[d]d^d`dbdddfdgdhdidjdkdldndpdred+fdtdvdxdzd|d~dddddddddddddddedFj dGd=fdHfedFj dGj dIj dGd=fdJfg/Z dKZ RS(s3 class w/ shared info for PIX & ASA tests. tciscots2KFQnbNIdI.2KYOUthscsYtT8/k6Np8F1yz2ct8Ry2YjIyt7RRXU24tjohnthN7LzeyYjw12FSIUtjacks7DrfeZ7cyOj/PslDtrippertalexsh3mJrcH0901pqX/mt3USUcOPFUiMCO4Jktcisco1s CscFw-ITC!tadmcomslZt7HSIXw3.QP7.RtcangetinsTynyB./ftknE77QPtrramseytjgBZqYtsWfGcUKDit phonehometrharristzyIIMSYjiPm0L7a6ttest1sTRPEas6f/aa6JSPLttest2tOMT6mXmAvGyzrCtpttest3tgTC7RIy1XJzagmLmttest4soWC1WRwqlBlbpf/OtpasswordsNuLKvvWGg.x9HEKOt0123456789abcdefs.7nfVBEIEu4KbF/1t1234567890123456tfeCkwUGktTCAgIbDt watag00s1amtjMorNbK0514fadBhtjmINXNH6p1BxUppptCaiIvkLMu2TOHXGTt1234tRLPMUQ26KL4blgFNt01234567t0T52THgnYdV1tlOFt3s.z0dT9Alkdc7EIGSt36sCC3Lam53t/mHhoE7t365t8xPrWpNnBdD2DzdZt3333t3636t3653tadmsdfWs2qiao6KD/P2LtadmatadmadtusersPNZ4ycbbZ0jp1.j1tuser1234t 0123456789abtS31BxZOGlAigndcJswFqSX91X5.YaRKsitqjgo3kNgTVxExbnosmcXPL/vIZcIxLUQssf.T4BKdzdNkjxQl7stblesutf-8tOg8fB4NyF0m5Ed9cslatin-1scMvFC2XVBmK/68yBc`stfd}tdjj}||}|d}||}j|||d}||}j||j||||dtjtj||dtjtj||dtdS(s _calc_checksum() -- spoil oversize passwords during verify for details, see 'spoil_digest' flag instead that function. this helps cisco_pix/cisco_asa implement their policy of ``.truncate_verify_reject=True``. c`sjd|j|S(Nt use_defaults(thandlert_calc_checksum(tsecrettfor_hash(tself(sE/usr/lib/python2.7/site-packages/passlib/tests/test_handlers_cisco.pytcalcsR.tXtYRFN( tFalseRRCt truncate_sizetassertNotEqualtTruet assertRaisesRtPasswordSizeError(RGRHt short_secrett short_hasht long_secrett long_hashtalt_long_secrett alt_long_hash((RGsE/usr/lib/python2.7/site-packages/passlib/tests/test_handlers_cisco.pyttest_calc_digest_spoilers     (RR((RRs2KFQnbNIdI.2KYOU(RR((RRsYtT8/k6Np8F1yz2c(RR((RRR(RR((RRR(RR((RRs7DrfeZ7cyOj/PslD(RR((RRsh3mJrcH0901pqX/m(RR((RRR(RR((RRR(s CscFw-ITC!R((s CscFw-ITC!RslZt7HSIXw3.QP7.R(RsTynyB./ftknE77QP(RR((RRR(RR((RRR(RR((RRsTynyB./ftknE77QP(RR((RRR(R sTRPEas6f/aa6JSPL(R!R"(R#R$(R%soWC1WRwqlBlbpf/O(R&sNuLKvvWGg.x9HEKO(R's.7nfVBEIEu4KbF/1(R(R((R(RR)(R*R((R*RR+(RR((RRR,(s1234R((s1234RR/(R0R((R0RR1(R0R2((R0R2s.z0dT9Alkdc7EIGS(R0R3((R0R3sCC3Lam53t/mHhoE7(R0R4((R0R4R5(R0R6((R0R6s.z0dT9Alkdc7EIGS(R0R7((R0R7sCC3Lam53t/mHhoE7(R0R8((R0R8R5(R0R9((R0R9sdfWs2qiao6KD/P2L(R0R:((R0R:sdfWs2qiao6KD/P2L(R0R;((R0R;sdfWs2qiao6KD/P2L(R0R<((R0R<sPNZ4ycbbZ0jp1.j1(R0R=((R0R=sPNZ4ycbbZ0jp1.j1(R>R((R>RR?(R>R3((R>R3swFqSX91X5.YaRKsi(R>R4((R>R4R@(R>R6((R>R6smcXPL/vIZcIxLUQs(R>R7((R>R7swFqSX91X5.YaRKsi(R>R8((R>R8R@(R>R<((R>R<sf.T4BKdzdNkjxQl7(R>R=((R>R=sf.T4BKdzdNkjxQl7( t__name__t __module__t__doc__RNt _PixAsaSharedTest__unittest_skipRKt requires_userR Rtencodetdecodetpix_asa_shared_hashesRW(((sE/usr/lib/python2.7/site-packages/passlib/tests/test_handlers_cisco.pyR sh  $c)B`seZejZejdd!d#d%d'd)d+d-d/d1d3d5d7d9d;d=d?dAdCdEdGdIdKdMdOdQdSdUdWdYd[d]d_dadcdedgdidkg'ZRS(lt 0123456789abcRteacOpB7vE7ZDukSFR2sylJTd/qei66WZe3wR3thDx8QRlUhwd6bU8NR4tvYOOtnkh1HXcMrM7R6R7R8R<sf4/.SALxqDo59mfVR=t0123456789abcdt6r8888iMxEoPdLp4tf5lvmqWYj9gJqkIHtOJJ1Khg5HeAYBH1cR9tDbPLCFIkHc2SiyDkR:sWfO2UiTapPkF/FSnt0123456789abcdetal1e0XFIugTYLai3slYbwBu.f82OIApQBsKgKx1UQvdR/09i9utqLopkenJ4WBqxaZNR's.7nfVBEIEu4KbF/1(R`R((R`RRa(R`R2((R`R2sylJTd/qei66WZe3w(R`s36((R`s36Rb(R`s365((R`s365Rc(R`s3333((R`s3333sylJTd/qei66WZe3w(R`s3636((R`s3636Rb(R`s3653((R`s3653Rc(R`suser((R`susersf4/.SALxqDo59mfV(R`suser1234((R`suser1234sf4/.SALxqDo59mfV(RdR((RdRRe(RdR2((RdR2Rf(Rds36((Rds36Rg(Rds365((Rds365Rg(Rds3333((Rds3333Rf(Rds3636((Rds3636Rg(Rds3653((Rds3653Rg(Rdsadm((RdsadmRh(Rdsadma((RdsadmaRh(Rdsuser((RdsusersWfO2UiTapPkF/FSn(Rdsuser1234((Rdsuser1234sWfO2UiTapPkF/FSn(RiR((RiRRj(RiR2((RiR2slYbwBu.f82OIApQB(Ris36((Ris36slYbwBu.f82OIApQB(Ris365((Ris365slYbwBu.f82OIApQB(Ris3333((Ris3333slYbwBu.f82OIApQB(Ris3636((Ris3636slYbwBu.f82OIApQB(Ris3653((Ris3653slYbwBu.f82OIApQB(Risadm((RisadmsKgKx1UQvdR/09i9u(Risadma((RisadmasKgKx1UQvdR/09i9u(Risuser((RisuserRk(Risuser1234((Risuser1234Rk(s0123456789abcdefR((s0123456789abcdefRs.7nfVBEIEu4KbF/1(s0123456789abcdefs36((s0123456789abcdefs36s.7nfVBEIEu4KbF/1(s0123456789abcdefs365((s0123456789abcdefs365s.7nfVBEIEu4KbF/1(s0123456789abcdefs3333((s0123456789abcdefs3333s.7nfVBEIEu4KbF/1(s0123456789abcdefs3636((s0123456789abcdefs3636s.7nfVBEIEu4KbF/1(s0123456789abcdefs3653((s0123456789abcdefs3653s.7nfVBEIEu4KbF/1(s0123456789abcdefsuser((s0123456789abcdefsusers.7nfVBEIEu4KbF/1(s0123456789abcdefsuser1234((s0123456789abcdefsuser1234s.7nfVBEIEu4KbF/1(RXRYRt cisco_pixRCR R_tknown_correct_hashes(((sE/usr/lib/python2.7/site-packages/passlib/tests/test_handlers_cisco.pyR sR cBB`seZejZejd6d8d:d<d>d@dBdDdFdHdJdLdNdPdRdTdVdXdZd\d^d`dbdddfdhdjdldndpdrdtdvdxdzd|d~dddddddddddddddddddddddddddg@ZRS(R`RRaR3sFRV9JG18UBEgX0.OR4tNIwkusG9hmmMy6ZQR6tNmrkP98nT7RAeKZzR7R8R<s8Q/FZeam5ai1A47pR=RdReR2tyxGoujXKPduTVaYBsW0jckhnhjnr/DiT/tHuVOxfMQNahaoF8uR9tRtOmSeoCs4AUdZqZR:srrucwrcM0h25pr.mRiRjsnAZrQoHaL.fgrIqtt2GxIQ6ICE795587XtQmDsGwCRBbtGEKqMsAj2aP0d.nk62wl4msetxiXfo.bINJcXI7R's.7nfVBEIEu4KbF/1sGhI8.yFSC5lwoafgsKFBI6cNQauyY6h/GtGhdi1IlsswgYzzMHsIneB.wc9sfRzLPoht0123456789abcdefqsbKshl.EN.X3CVFRQtJAeTXHs0n30svlaGt4fKSSUBHT1ChGqHpsUSEJbxI6.VY4ecBPs/dwqyD7nGdwSrDwkt0123456789abcdefqwertyuiopas4wp19zS3OCe.2jt5tPjUoGqWBKPyV9qOesbfCy6xFAe5O/gzvMsrd/ZMuGTJFIb2BNGtzynfWw3UtszxLMgLt0123456789abcdefqwertyuiopastW6nbOddI0SutTK7mt 0123456789abcdefqwertyuiopasdfghs5hPT/iC6DnoBxo6a(s 0123456789abcR((s 0123456789abcRseacOpB7vE7ZDukSF(s 0123456789abcs36((s 0123456789abcs36sFRV9JG18UBEgX0.O(s 0123456789abcs365((s 0123456789abcs365Rn(s 0123456789abcs3333((s 0123456789abcs3333Ro(s 0123456789abcs3636((s 0123456789abcs3636sFRV9JG18UBEgX0.O(s 0123456789abcs3653((s 0123456789abcs3653Rn(s 0123456789abcsuser((s 0123456789abcsusers8Q/FZeam5ai1A47p(s 0123456789abcsuser1234((s 0123456789abcsuser1234s8Q/FZeam5ai1A47p(s0123456789abcdR((s0123456789abcdRs6r8888iMxEoPdLp4(s0123456789abcdR2((s0123456789abcdR2Rp(s0123456789abcds36((s0123456789abcds36sW0jckhnhjnr/DiT/(s0123456789abcds365((s0123456789abcds365Rq(s0123456789abcds3333((s0123456789abcds3333Rp(s0123456789abcds3636((s0123456789abcds3636sW0jckhnhjnr/DiT/(s0123456789abcds3653((s0123456789abcds3653Rq(s0123456789abcdsadm((s0123456789abcdsadmRr(s0123456789abcdsadma((s0123456789abcdsadmaRr(s0123456789abcdsuser((s0123456789abcdsusersrrucwrcM0h25pr.m(s0123456789abcdsuser1234((s0123456789abcdsuser1234srrucwrcM0h25pr.m(s0123456789abcdeR((s0123456789abcdeRsal1e0XFIugTYLai3(s0123456789abcdeR2((s0123456789abcdeR2snAZrQoHaL.fgrIqt(s0123456789abcdes36((s0123456789abcdes36Rs(s0123456789abcdes365((s0123456789abcdes365Rt(s0123456789abcdes3333((s0123456789abcdes3333snAZrQoHaL.fgrIqt(s0123456789abcdes3636((s0123456789abcdes3636Rs(s0123456789abcdes3653((s0123456789abcdes3653Rt(s0123456789abcdesadm((s0123456789abcdesadmsAj2aP0d.nk62wl4m(s0123456789abcdesadma((s0123456789abcdesadmasAj2aP0d.nk62wl4m(s0123456789abcdesuser((s0123456789abcdesusersetxiXfo.bINJcXI7(s0123456789abcdesuser1234((s0123456789abcdesuser1234setxiXfo.bINJcXI7(s0123456789abcdefR((s0123456789abcdefRs.7nfVBEIEu4KbF/1(s0123456789abcdefs36((s0123456789abcdefs36sGhI8.yFSC5lwoafg(s0123456789abcdefs365((s0123456789abcdefs365sKFBI6cNQauyY6h/G(s0123456789abcdefs3333((s0123456789abcdefs3333Ru(s0123456789abcdefs3636((s0123456789abcdefs3636sGhI8.yFSC5lwoafg(s0123456789abcdefs3653((s0123456789abcdefs3653sKFBI6cNQauyY6h/G(s0123456789abcdefsuser((s0123456789abcdefsusersIneB.wc9sfRzLPoh(s0123456789abcdefsuser1234((s0123456789abcdefsuser1234sIneB.wc9sfRzLPoh(RvR((RvRsbKshl.EN.X3CVFRQ(Rvs36((Rvs36Rw(Rvs365((Rvs365Rx(Rvs3333((Rvs3333sUSEJbxI6.VY4ecBP(Rvs3636((Rvs3636Rw(Rvs3653((Rvs3653Rx(Rvsuser((Rvsusers/dwqyD7nGdwSrDwk(Rvsuser1234((Rvsuser1234s/dwqyD7nGdwSrDwk(RyR((RyRs4wp19zS3OCe.2jt5(Rys36((Rys36Rz(Rys365((Rys365sbfCy6xFAe5O/gzvM(Rys3333((Rys3333srd/ZMuGTJFIb2BNG(Rys3636((Rys3636Rz(Rys3653((Rys3653sbfCy6xFAe5O/gzvM(Rysuser((RysuserR{(Rysuser1234((Rysuser1234R{(R|R((R|RR}(R|s36((R|s36R}(R|s365((R|s365R}(R|suser((R|suserR}(R|suser1234((R|suser1234R}(R~R((R~Rs5hPT/iC6DnoBxo6a(R~s36((R~s36s5hPT/iC6DnoBxo6a(R~s365((R~s365s5hPT/iC6DnoBxo6a(R~suser((R~susers5hPT/iC6DnoBxo6a(R~suser1234((R~suser1234s5hPT/iC6DnoBxo6a(RXRYRt cisco_asaRCR R_Rm(((sE/usr/lib/python2.7/site-packages/passlib/tests/test_handlers_cisco.pyR s  c B`s_eZejZdZeZdddddddedfgZ ddgZ dZ dZ RS(issecure t04480E051A33490EsIts time to go to lunch!t2153B1F1F443E22292D73212D5300194315591954465A0D0B59s t35t:pa55w0rdt08351F1B1D431516475E1B54382Fs hiImTesting:)t020E0D7206320A325847071E5F5Etcisco123t060506324F41584B56t1511021F07257A767BsSupe&8ZUbeRp4SSt 06351A3149085123301517391C501918t0958EDC8A9F495F6F8A5FDt0A480E051A33490Et 99400E4812cC`sddlm}m}|j}xd|jD]Y\}}||}||}|j|j|||j|j|d|q)W|jt |jdddS(stest cisco_type7.decode()i(t to_unicodetto_bytesRtasciiN( t passlib.utilsRRRCRmt assertEqualR^tNoneROtUnicodeDecodeError(RGRRRCRERtusecrettbsecret((sE/usr/lib/python2.7/site-packages/passlib/tests/test_handlers_cisco.pyttest_90_decodes    c C`s |j}|jt|dd|dddt|jt|dd|jt|dd|jt|dd|jt|jdd|jt|jdd|jt|jdd|jd|jdddt}WdQX|j|dtj d dS( stest salt value border casestsaltRBtabciidssalt/offset must be.*trelaxedNi4( RCROt TypeErrorRRNt ValueErrortusingtassertWarningListRR(RGRCtsubcls((sE/usr/lib/python2.7/site-packages/passlib/tests/test_handlers_cisco.pyt test_91_salts (ssecure R(sIts time to go to lunch!R(s t35t:pa55w0rdR(s hiImTesting:)R(RR(RR(sSupe&8ZUbeRp4SSR( RXRYRt cisco_type7RCt salt_bitstintt salt_typeR Rmtknown_unidentified_hashesRR(((sE/usr/lib/python2.7/site-packages/passlib/tests/test_handlers_cisco.pyR rs    (RZt __future__RRRtloggingt getLoggerRXtlogtpasslibRRtpasslib.utils.compatRtutilsRRRt test_handlersR t__all__R R R R (((sE/usr/lib/python2.7/site-packages/passlib/tests/test_handlers_cisco.pyts  Ej