o
    ÓgÄV´  ã                   @   sÆ   d Z d ¡ ZdZddlmZ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 ]Zeed ƒ 	ed ¡Zeed ƒ 	ed ¡Zed7 ZqBdS dS )z
Arciv Stream  ciphering
zArcIV encode decodez1.0é    )Ú	isUnicodeÚisPy3c                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zerdd	„ ZdS 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	   úE/var/www/html/env/lib/python3.10/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|ƒ}tr.|D ]}|||  d ||< q n|D ]}t|||  ƒd ||< q0d}tdƒD ]}|||  ||  d }|| || ||< ||< qE|dd| _| _	| _
dS )z&restore the cipher to it's start stateÚutf8é   r   N)r   r   ÚencodeÚlistÚrangeÚlenr   ÚordÚ_sboxÚ_iÚ_j)r   r   ÚsboxÚkÚlkÚiÚjr	   r	   r
   r      s    ÿzArcIV.resetc                 C   s  | j | j| j}}}tr)t|tƒrt| d¡ƒnt|tƒr"t|ƒn|dd… }nt|t	ƒr@tt
tt|tƒr;| d¡n|ƒƒ}n|dd… }t|ƒ}d}||k r‹|d d  | _}|||  d  | _}|| || ||< ||< || ||| ||  d  A ||< |d7 }||k sP|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   r   Ú
isinstanceÚstrr   r   ÚbytesÚ
basestringÚmapr   Úunicoder   )r   ÚBr   r   r   ÚCÚnÚpr	   r	   r
   Ú_encode.   s    8
$$ø	zArcIV._encodec                 C   s   t |  |¡ƒS )úArcIV encode string S)r   r&   ©r   ÚSr	   r	   r
   r   I   ó   zArcIV.encodec                 C   s   d  tt|  |¡ƒ¡S )r'   Ú )Újoinr    Úchrr&   r(   r	   r	   r
   r   M   s   N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   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   ó   t |ƒ | ¡S )z.One-line shortcut for making an encoder object©r   r   ©Útextr   r	   r	   r
   r   Ö   r*   r   c                 C   r4   )zOne-line shortcut for decodingr5   r6   r	   r	   r
   ÚdecodeÚ   s   r8   Ú__main__r   r2   r3   r   N)r1   ÚsplitÚ__all__Ú__version__Úreportlab.lib.utilsr   r   r   Ú_TESTSr   r8   r.   r   ÚtÚor	   r	   r	   r
   Ú<module>   sJ   Iýýýý4Êè 
û