ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ Bd\Rc@sdZddlZejddkrEejddkrEddlTnddlTdZdZdZdZd Z d Z d Z dd Z d ddYZdS(s4Module with definitions common to all block ciphers.iNiii(t*iiiiicCsQ|j|}t||krG|r:td|n||}n|pP|S(sFFind a parameter in tuple and dictionary arguments a function receivess!Parameter '%s' is specified twice(tgettlent ValueError(tnametindextargstkwargstdefaulttparam((sJ/opt/alt/python27/lib64/python2.7/site-packages/Crypto/Cipher/blockalgo.pyt _getParameter|s  t BlockAlgocBs)eZdZdZdZdZRS(s)Class modelling an abstract block cipher.cOstdd||dt|_|j|_|jtkrc|j||||_|jj|_nt|_ t|_ tdd|||_|jst dn|j|t t d|jd|jd }t|j|jkr/|j|j|jd t d|jd |jd  |_nt|j|jd kr|j|_|j|jt d|jd |jd  |_|jd |jd d !krt d n|jd |_n t d|j|jd f|j|t |j|j d|jd |_dS(NtmodeiRtivisMODE_OPENPGP requires an IVst segment_sizeiiiis%Failed integrity check for OPENPGP IVs4Length of IV must be %d or %d bytes for MODE_OPENPGP(R tMODE_ECBR t block_sizet MODE_OPENPGPtnewt_ciphertIVtFalset_done_first_blockt_done_last_blockRtMODE_CFBtbRtencryptt _encrypted_IVtdecrypt(tselftfactorytkeyRRt IV_cipher((sJ/opt/alt/python27/lib64/python2.7/site-packages/Crypto/Cipher/blockalgo.pyt__init__s>        cCs|jtkr|jt||j|j}|dkr|jrZtd|jnt|_|td|}|jj |t| }n|jj |}|j s|j |}t|_ n|S|jj |S(sXEncrypt data with the key and the parameters set at initialization. The cipher object is stateful; encryption of a long block of data can be broken up in two or more calls to `encrypt()`. That is, the statement: >>> c.encrypt(a) + c.encrypt(b) is always equivalent to: >>> c.encrypt(a+b) That also means that you cannot reuse an object for encrypting or decrypting other data with the same key. This function does not perform any padding. - For `MODE_ECB`, `MODE_CBC`, and `MODE_OFB`, *plaintext* length (in bytes) must be a multiple of *block_size*. - For `MODE_CFB`, *plaintext* length (in bytes) must be a multiple of *segment_size*/8. - For `MODE_CTR`, *plaintext* can be of any length. - For `MODE_OPENPGP`, *plaintext* must be a multiple of *block_size*, unless it is the last chunk of the message. :Parameters: plaintext : byte string The piece of data to encrypt. :Return: the encrypted data, as a byte string. It is as long as *plaintext* with one exception: when encrypting the first message chunk with `MODE_OPENPGP`, the encypted IV is prepended to the returned ciphertext. isFOnly the last chunk is allowed to have length not multiple of %d bytess( R RRRRRtTrueRRRRR(Rt plaintexttpadding_lengthtpaddedtres((sJ/opt/alt/python27/lib64/python2.7/site-packages/Crypto/Cipher/blockalgo.pyRs'!      cCs|jtkr|jt||j|j}|dkr|jrZtd|jnt|_|td|}|jj |t| }n|jj |}|S|jj |S(sDecrypt data with the key and the parameters set at initialization. The cipher object is stateful; decryption of a long block of data can be broken up in two or more calls to `decrypt()`. That is, the statement: >>> c.decrypt(a) + c.decrypt(b) is always equivalent to: >>> c.decrypt(a+b) That also means that you cannot reuse an object for encrypting or decrypting other data with the same key. This function does not perform any padding. - For `MODE_ECB`, `MODE_CBC`, and `MODE_OFB`, *ciphertext* length (in bytes) must be a multiple of *block_size*. - For `MODE_CFB`, *ciphertext* length (in bytes) must be a multiple of *segment_size*/8. - For `MODE_CTR`, *ciphertext* can be of any length. - For `MODE_OPENPGP`, *plaintext* must be a multiple of *block_size*, unless it is the last chunk of the message. :Parameters: ciphertext : byte string The piece of data to decrypt. :Return: the decrypted data (byte string, as long as *ciphertext*). isFOnly the last chunk is allowed to have length not multiple of %d bytess( R RRRRRR"RRR(Rt ciphertextR$R%R&((sJ/opt/alt/python27/lib64/python2.7/site-packages/Crypto/Cipher/blockalgo.pyRs"!   (t__name__t __module__t__doc__R!RR(((sJ/opt/alt/python27/lib64/python2.7/site-packages/Crypto/Cipher/blockalgo.pyR s 3 ;((R*tsyst version_infotCrypto.Util.py21compattCrypto.Util.py3compatRtMODE_CBCRtMODE_PGPtMODE_OFBtMODE_CTRRtNoneR R (((sJ/opt/alt/python27/lib64/python2.7/site-packages/Crypto/Cipher/blockalgo.pyts &