a
    ¦¾deh  ã                   @   s¾   d Z d ¡ ZdZddlmZ G dd„ dƒZdddd	œdd
dd	œd
d
dd	œdddd	œdddd	œgZdd„ Zdd„ Z	e
dkrºdZeD ]8Zeed ƒ ed ¡Zeed ƒ ed ¡Zed7 Zq€dS )z
Arciv Stream  ciphering
zArcIV encode decodez1.0é    )Ú	isUnicodec                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚArcIVzâ
	performs 'ArcIV' Stream Encryption of S using key
	Based on what is widely thought to be RSA's ArcIV algorithm.
	It produces output streams that are identical.

	NB there is no separate decoder arciv(arciv(s,key),key) == s
	c                 C   s   || _ |  ¡  d S )N)Ú_keyÚreset)ÚselfÚkey© r   úL/var/www/sistema_ama/venv/lib/python3.9/site-packages/reportlab/lib/arciv.pyÚ__init__   s    zArcIV.__init__c                 C   s´   | j }t|ƒr| d¡}ttdƒƒ}ttdƒƒ}t|ƒ}|D ]}|||  d ||< q<d}tdƒD ]6}|||  ||  d }|| ||  ||< ||< qb|dd  | _| _| _dS )z&restore the cipher to it's start stateÚutf8é   r   N)	r   r   ÚencodeÚlistÚrangeÚlenÚ_sboxÚ_iÚ_j)r   r   ÚsboxÚkZlkÚiÚjr   r   r	   r      s    zArcIV.resetc                 C   sÔ   | j | j| j  }}}t|tƒr.t| d¡ƒnt|tƒr@t|ƒn
|dd… }t|ƒ}d}||k rÐ|d d  | _}|||  d  | _}|| ||  ||< ||< || ||| ||  d  A ||< |d7 }qX|S )zn
		return the list of encoded bytes of B, B might be a string or a
		list of integers between 0 <= i <= 255
		r   Nr   é   r   )	r   r   r   Ú
isinstanceÚstrr   r   Úbytesr   )r   ÚBr   r   r   ÚCÚnÚpr   r   r	   Ú_encode*   s    6$
zArcIV._encodec                 C   s   t |  |¡ƒS )zArcIV encode string S)r   r    )r   ÚSr   r   r	   r   ?   s    zArcIV.encodeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   r   r    r   r   r   r   r	   r   	   s
   r   s   #Eg‰«Íïs   u·‡€™àÅ–)r   ÚinputÚoutputs           s   t”ÂçKys   Þ‰A£7]:s   ï#Es
             s
   Ö¡A§ì<8ß½as   s   u•ÃæJ	xJÔR3ŽýšéI��=vS4I¶w�ÊØÇŠ�+©¬f]SÕœ&ÂÑÄ�Áë¾æmk¶¹¸GÂZ‘Dz•ç^NñgyÍè¿
•…2¯–‰DOÓw�˜ýËÔç&Vu ™Ì~£Äª££‡Ò;�»ÍB¡½1zCÝ¥«ˆ–®€Á‹
ömÿ1–ëxNIZÒÎ�×÷r¨G¶_b	;¹åºS/¯ìGPƒ#æq2}ùDD2ËsgÎÈ/]DÀÐgÖP uÍKpÞÝwë›#k[tG9mb‰t!Ô=ù´.Dn5Žœ©²NËïØç¨wï–��ì›=5¥X\°	)/ÍçµìfÙKä@U¦ÙÝÃo”‡÷Ë')BdE™…Á]S¡Œ†Lã¢·UW“˜�&R¬òãn#‘¾äÝSõý³[Ùœs]=›Ã5îžö›8g¿-{Ñê¥•Ø¿ÀoøÓ	ëlª l€zb>øL=3Á•Ò>ã ÄàU�WÈ"Ô¸ÅiØI®Õ�N×óyXkKö„íjŸt†Ô›œK­›¢K–«ù$7,Š�ÿ±U5I §z=µòá¹ŸÍ†`†:šÔ«ä¤‰4=ÝåB¦XU@ýh<¿ØÀš(MêÌLÞþX¾q7Tq&ÈÔž'U«·é@°Àc                 C   s   t |ƒ | ¡S )z.One-line shortcut for making an encoder object©r   r   ©Útextr   r   r   r	   r   È   s    r   c                 C   s   t |ƒ | ¡S )zOne-line shortcut for decodingr(   r)   r   r   r	   ÚdecodeÌ   s    r+   Ú__main__r   r&   r'   r   N)r%   ÚsplitÚ__all__Ú__version__Zreportlab.lib.utilsr   r   Z_TESTSr   r+   r"   r   ÚtÚor   r   r   r	   Ú<module>   sD   ;ýýýý4Êè 