U +MbC@sdZddlZddlmZmZmZddlmZddlm Z GdddZ e fdd Z Gd d d ej Z Gd d d e ZGdddej ZGdddej ZGdddej ZGdddej ZGdddej ZGdddej ZefddZddZdS)z&Self-testing for PyCrypto hash modulesN)a2b_hexb2a_hexhexlify)b)strxor_cc@s eZdZdS) _NoDefaultN)__name__ __module__ __qualname__r r D/tmp/pip-target-t616c12r/lib/python/Crypto/SelfTest/Cipher/common.pyr!srcCs:z ||}Wn"tk r.|tkr&|YSX||=|S)zAGet an item from a dictionary, and remove it from the dictionary.)KeyErrorr)dkdefaultretvalr r r _extract"s  rc@s4eZdZddZddZddZddZd d Zd S) CipherSelfTestcCs:tj|||_|}t|d|_tt|d|_tt|d|_ tt|d|_ t|dd|_ t|dd|_ t|dd|_ |j rt|j |_ t|dd}t||_|dk rt|jd ||_t|d d|_|jdkrt|d d|_|jdk r0t|j|_n,d|_t|d d|_|jdk r0t|j|_||_dS N descriptionkey plaintext ciphertext module_name assoc_datamacmodeMODE_ivnonceunittestTestCase__init__modulecopyrrrrrrrrrstr mode_namegetattrrr extra_paramsselfr$paramsrr r r r#0s4          zCipherSelfTest.__init__cCs|jSN)rr+r r r shortDescriptionVszCipherSelfTest.shortDescriptioncCsX|j}t|j}g}|jdk r*|jg}|jdk rD|t|jg7}|jj|f||Sr-r)r%rrrrr$newr+r,rZ old_styler r r _newYs    zCipherSelfTest._newcCs*t|jd|sdS|jt|jd|kS)NrF)hasattrr$rr()r+namer r r isModeeszCipherSelfTest.isModec Cst|j}t|j}g}|jr.dd|jD}d}d}tdD]t}|}|}|D]} || || qVt||} t| |} |r| || | || | | }}q>| |j|| |j||j rt| } | |j | | t|j dS)NcSsg|]}tt|qSr )rr.0xr r r osz*CipherSelfTest.runTest..)rrrrranger3updaterencryptdecrypt assertEqualrdigestverify) r+rrrctpticipherdeciphercompZctXZptXrr r r runTestjs2         zCipherSelfTest.runTestN)rr r r#r/r3r6rIr r r r r.s & rc@seZdZddZddZdS)CipherStreamingSelfTestcCs*|j}|jdk r |d|jf7}d|fS)Nz in %s modez%%s should behave like a stream cipher)rrr')r+descr r r r/s z(CipherStreamingSelfTest.shortDescriptionc Cst|j}t|j}g}|}tdt|dD] }|||||dq0tt d |}| |j|g}|}tdt|dD] }|||||dqtt d |}| |j|dS)Nr) rrrr3r<lenappendr>rrjoinr@)r+rrZct3rFrEZpt3r r r rIs  zCipherStreamingSelfTest.runTestN)rr r r/rIr r r r rJsrJc@s$eZdZddZddZddZdS) RoundtripTestcCs^ddlm}tj|||_||j|_t |d|_ dt |d|_ | dd|_ dS)Nr)Randomrdrr)ZCryptorRr!r"r#r$Zget_random_bytes block_sizerrrrgetr)r+r$r,rRr r r r#s  zRoundtripTest.__init__cCs d|jfS)Nz8%s .decrypt() output of .encrypt() should not be garbled)rr.r r r r/szRoundtripTest.shortDescriptioncCsX|jj}|jt|j|}||j}|jt|j|}||}||j|dSr-) r$MODE_ECBr1rrr>rr?r@)r+rZencryption_cipherrZdecryption_cipherZdecrypted_plaintextr r r rIs   zRoundtripTest.runTestN)rr r r#r/rIr r r r rQs rQc@s,eZdZddZddZddZddZd S) IVLengthTestcCs$tj|||_t|d|_dSNrr!r"r#r$rrr+r$r,r r r r#s zIVLengthTest.__init__cCsdS)NzTCheck that all modes except MODE_ECB and MODE_CTR require an IV of the proper lengthr r.r r r r/szIVLengthTest.shortDescriptioncCs(|t|jjt|j|jjtddS)NrM) assertRaises TypeErrorr$r1rrrVrr.r r r rIszIVLengthTest.runTestcCs d|jjS)N)r$rTr.r r r _dummy_counterszIVLengthTest._dummy_counterN)rr r r#r/rIr^r r r r rWsrWc@seZdZddZddZdS)NoDefaultECBTestcCs$tj|||_t|d|_dSrXrYrZr r r r#s zNoDefaultECBTest.__init__cCs|t|jjt|jdSr-)r[r\r$r1rrr.r r r rIszNoDefaultECBTest.runTestNrr r r#rIr r r r r_sr_c@seZdZddZddZdS) BlockSizeTestcCs(tj|||_tt|d|_dSrX)r!r"r#r$rrrrZr r r r#s zBlockSizeTest.__init__cCs*|j|j|jj}||j|jjdSr-)r$r1rrVr@rT)r+rFr r r rIszBlockSizeTest.runTestNr`r r r r rasrac@s(eZdZdZddZddZddZdS) ByteArrayTestz;Verify we can use bytearray's for encrypting and decryptingcCs:tj|||_|}t|d|_tt|d|_tt|d|_ tt|d|_ t|dd|_ t|dd|_ t|dd|_ |j rt|j |_ t|dd}t||_|dk rt|jd ||_t|d d|_|jdkrt|d d|_|jdk r0t|j|_n,d|_t|d d|_|jdk r0t|j|_||_dSrr r*r r r r#s4          zByteArrayTest.__init__cCsX|j}t|j}g}|jdk r*|jg}|jdk rD|t|jg7}|jj|f||Sr-r0r2r r r r3s    zByteArrayTest._newc Cst|j}t|j}g}|jr.dd|jD}|}|}|D]}||||qBt|t|}t| t|}| |j|| |j||j rt| } | |j | | tt|j dS)NcSsg|]}ttt|qSr ) bytearrayrrr7r r r r:)sz)ByteArrayTest.runTest..)rrrrr3r=rr>rcr?r@rrArB r+rrrrFrGrHrCrDrr r r rI#s$     zByteArrayTest.runTestNrr r __doc__r#r3rIr r r r rbs% rbc@s(eZdZdZddZddZddZdS) MemoryviewTestz;Verify we can use memoryviews for encrypting and decryptingcCs:tj|||_|}t|d|_tt|d|_tt|d|_ tt|d|_ t|dd|_ t|dd|_ t|dd|_ |j rt|j |_ t|dd}t||_|dk rt|jd ||_t|d d|_|jdkrt|d d|_|jdk r0t|j|_n,d|_t|d d|_|jdk r0t|j|_||_dSrr r*r r r r#Bs4          zMemoryviewTest.__init__cCsX|j}t|j}g}|jdk r*|jg}|jdk rD|t|jg7}|jj|f||Sr-r0r2r r r r3gs    zMemoryviewTest._newc Cst|j}t|j}g}|jr.dd|jD}|}|}|D]}||||qBt|t|}t| t|}| |j|| |j||j rt| } | |j | | tt|j dS)NcSsg|]}ttt|qSr ) memoryviewrrr7r r r r:ysz*MemoryviewTest.runTest..)rrrrr3r=rr>rhr?r@rrArBrdr r r rIss$     zMemoryviewTest.runTestNrer r r r rg?s% rgc Csg}d}tt|D]}||}i}t|dkrJ|\|d<|d<|d<nrt|dkrt|\|d<|d<|d<|d<nHt|dkr|\|d<|d<|d<|d<} || ntd t|fd |krd |d <|} t| d} t| d} t| d} t| d }t| dd}|dk r|}n,|d kr6| s6d | | f}nd | | | f}d||d|f}||d<||d<|||s|t||t||t||t ||t ||g7}d}| t ||q|S)NFrLrrrrUnsupported tuple size %drECB p=%s, k=%sp=%s, k=%s, %r %s #%d: %srT) r<rNr=AssertionErrorr%rrQrWr_rbrarOr)r$r test_dataZadditional_paramstestsextra_tests_addedrErowr,r)p2p_key p_plaintext p_ciphertextZp_mode p_descriptionrr5r r r make_block_testssR            r{cCsg}d}tt|D]t}||}i}t|dkrJ|\|d<|d<|d<nrt|dkrt|\|d<|d<|d<|d<nHt|dkr|\|d<|d<|d<|d<}||ntd t|f|} t| d} t| d} t| d} t| dd} | dk r| }n"| sd | | f}nd | | | f}d ||d |f}||d<||d<|sj|t||g7}|t||d}|t |||t ||q|S)NFrLrrrrirrjrkrmrnrorprT) r<rNr=rqr%rrbrOrgrrJ)r$rrrrsrtrErur,r)rvrwrxryrzrr5r r r make_stream_testssF        r|)rfr!binasciirrrZCrypto.Util.py3compatrZCrypto.Util.strxorrrrr"rrJrQrWr_rarbrgdictr{r|r r r r s    c   PP>