o
    IAfoQ                     @   s  	 d dl Z d dlZd dlZg dZeefZdd ZdPddZdQdd	Z	d
d Z
dd ZeddZeddZdd Zdd ZdZdZdZdZdZi ai add ZdRddZdd Zejdd e_dRd!d"Zejded#e_d$d% Zejd&d e_dSd'd(Zejd&d)d#e_d*d+ Z dSd,d-Z!da"da#d.Z$d/Z%dTd0d1Z&dd ddd2d3d4Z'ddd5d6d7d8Z(d9Z)da*da+da,dSd:d;Z-d<d= Z.d>Z/e/d? d@ Z0dAdB Z1dCdD Z2dEdF Z3dGdH Z4dIdJ Z5dKdL Z6dMdN Z7e8dOkre6  dS dS )U    N)encodedecodeencodebytesdecodebytes	b64encode	b64decode	b32encode	b32decodeb32hexencodeb32hexdecode	b16encode	b16decode	b85encode	b85decode	a85encode	a85decodestandard_b64encodestandard_b64decodeurlsafe_b64encodeurlsafe_b64decodec                 C   sl   t | trz| dW S  ty   tdw t | tr| S zt|  W S  ty5   td| j	j
 d w )Nasciiz4string argument should contain only ASCII charactersz>argument should be a bytes-like object or ASCII string, not %r)
isinstancestrr   UnicodeEncodeError
ValueErrorbytes_types
memoryviewtobytes	TypeError	__class____name__s r#   /usr/lib/python3.10/base64.py_bytes_from_decode_data"   s"   

r%   c                 C   s.   	 t j| dd}|d ur|td|S |S )NF)newline   +/)binascii
b2a_base64	translatebytes	maketrans)r"   altcharsencodedr#   r#   r$   r   3   s
   r   Fc                 C   sP   	 t | } |d urt |}| t|d} |r#td| s#tdt| S )Nr'   s   [A-Za-z0-9+/]*={0,2}zNon-base64 digit found)	r%   r*   r+   r,   re	fullmatchr(   Error
a2b_base64)r"   r-   validater#   r#   r$   r   A   s   

r   c                 C   
   	 t | S N)r   r!   r#   r#   r$   r   Z   s   r   c                 C   r4   r5   )r   r!   r#   r#   r$   r   a   s   r   r'   s   -_c                 C   s   	 t | tS r5   )r   r*   _urlsafe_encode_translationr!   r#   r#   r$   r   o   s   r   c                 C   s   	 t | } | t} t| S r5   )r%   r*   _urlsafe_decode_translationr   r!   r#   r#   r$   r   x   s   

r   zK
Encode the bytes-like objects using {encoding} and return a bytes object.
a  
Decode the {encoding} encoded bytes-like object or ASCII string s.

Optional casefold is a flag specifying whether a lowercase alphabet is
acceptable as input.  For security purposes, the default is False.
{extra_args}
The result is returned as a bytes object.  A binascii.Error is raised if
the input is incorrectly padded or if there are non-alphabet
characters present in the input.
a  
RFC 3548 allows for optional mapping of the digit 0 (zero) to the
letter O (oh), and for optional mapping of the digit 1 (one) to
either the letter I (eye) or letter L (el).  The optional argument
map01 when not None, specifies which letter the digit 1 should be
mapped to (when map01 is not None, the digit 0 is always mapped to
the letter O).  For security purposes the default is None, so that
0 and 1 are not allowed in the input.
s    ABCDEFGHIJKLMNOPQRSTUVWXYZ234567s    0123456789ABCDEFGHIJKLMNOPQRSTUVc                    sR  | t vrdd | D   fdd D t | < d  t|ts#t| }t|d }|r3|dd|   }t }tj}t |  }t	dt|dD ]+}||||d  d}|||d?  ||d	? d
@   ||d? d
@   ||d
@   7 }qE|dkrd|dd < t
|S |dkrd|dd < t
|S |dkrd|dd < t
|S |dkrd|dd < t
|S )Nc                 S      g | ]}t |fqS r#   r+   .0ir#   r#   r$   
<listcomp>       z_b32encode.<locals>.<listcomp>c                    s   g | ]} D ]}|| qqS r#   r#   r;   abZb32tabr#   r$   r=                 r   big      i  
      s   ======i   s   ====   s   ===      =)_b32tab2r   r   r   r   len	bytearrayint
from_bytesranger+   )alphabetr"   leftoverr.   rV   Zb32tab2r<   cr#   rB   r$   
_b32encode   sB   

r[   c              	   C   st  | t vrdd t| D t | < t|}t|d rtd|d ur1t|}|tdd| }|r7|	 }t|}|
d}|t| }t }t |  }tdt|dD ]1}|||d  }	d}
z|	D ]
}|
d	> ||  }
qdW n ty}   td
d w ||
d	d7 }qU|d s|dvrtd|r|r|
d	| K }
|
d	d}dd	|  d }|d | |dd < t|S )Nc                 S   s   i | ]\}}||qS r#   r#   )r;   kvr#   r#   r$   
<dictcomp>   r>   z_b32decode.<locals>.<dictcomp>   zIncorrect paddings   01   OrP   r   rD   zNon-base32 digit foundrF   >   r   rJ   rM   rO      +   )_b32rev	enumerater%   rS   r(   r1   r*   r+   r,   upperrstriprT   rW   KeyErrorto_bytes)rX   r"   casefoldmap01lZpadcharsdecodedZb32revr<   ZquantaaccrZ   ZlastrY   r#   r#   r$   
_b32decode   sD   


ro   c                 C   
   t t| S r5   )r[   _b32alphabetr!   r#   r#   r$   r         
r   Zbase32)encodingc                 C   s   t t| ||S r5   )ro   rq   )r"   rj   rk   r#   r#   r$   r	      s   r	   )rs   
extra_argsc                 C   rp   r5   )r[   _b32hexalphabetr!   r#   r#   r$   r
     rr   r
   Z	base32hexc                 C   s   t t| |S r5   )ro   ru   r"   rj   r#   r#   r$   r     s   r    c                 C   s   	 t |  S r5   )r(   Zhexlifyrf   r!   r#   r#   r$   r     s   r   c                 C   s6   	 t | } |r|  } td| rtdt| S )Ns	   [^0-9A-F]zNon-base16 digit found)r%   rf   r/   searchr(   r1   Z	unhexlifyrv   r#   r#   r$   r     s   	

r   s   <~s   ~>c           	         s   t | tst|  } t|  d }|r| d|  } tdt| d  | } fdd|D }|rQ|sQ|d dkrF d d	 |d< |d d |  |d< d
|S )NrO   rE   z!%dIc                    sP   g | ]$}r
|s
d nr|dkrdn|d  |d d    |d   qS )   zi       yi^	 U   i9  r#   )r;   Zwordcharschars2foldnuls
foldspacesr#   r$   r=   9  s    

z_85encode.<locals>.<listcomp>rQ   ry   r   rD       )	r   r   r   r   rS   structStructunpackjoin)	rA   r}   r~   padr   r   paddingwordschunksr#   r|   r$   	_85encode/  s   

r   )r   wrapcolr   adobec                   s   	 t d u rdd tddD add tD a t| tt |d| |r%t   rVt|r,dnd fd	dtd
t D }|rQt|d d krQ|d d| |r\ t	7   S )Nc                 S   r8   r#   r9   r:   r#   r#   r$   r=   \  r>   za85encode.<locals>.<listcomp>!   v   c                 S      g | ]}t D ]}|| qqS r#   )	_a85charsr?   r#   r#   r$   r=   ]  rC   TrK   rJ   c                    s   g | ]
} ||  qS r#   r#   r:   resultr   r#   r$   r=   e  s    r   rQ   r      
)

_a85chars2rW   r   r   	_A85STARTmaxrS   appendr   _A85END)rA   r   r   r   r   r   r#   r   r$   r   G  s&   

r   s    	
)r   r   ignorecharsc             	   C   s|  	 t | } |r%| tstdt| tr| dd } n| d d } tdj	}g }|j
}g }|j
}|j}	| d D ]k}
d|
  krHdkr}n n3||
 t|dkr|d	}|D ]
}
d
| |
d  }qXz||| W n tjyx   tdd w |	  q<|
dkr|rtd|d q<|r|
dkr|rtd|d q<|
|v rq<td|
 d|}dt| }|r|d |  }|S )Nz1Ascii85 encoded byte sequences must end with {!r}rK   !Is   uuuur   u   rD   r   r{   zAscii85 overflowz   zz inside Ascii85 5-tuples       y   zy inside Ascii85 5-tuples       zNon-Ascii85 digit found: %cr   rO   )r%   endswithr   r   format
startswithr   r   r   packr   clearrS   errorr   )rA   r   r   r   packIrm   Zdecoded_appendZcurrZcurr_appendZ
curr_clearxrn   r   r   r#   r#   r$   r   p  s^   





r   sU   0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~c                 C   s4   	 t d u rdd tD add tD a t| tt |S )Nc                 S   r8   r#   r9   r:   r#   r#   r$   r=     r>   zb85encode.<locals>.<listcomp>c                 S   r   r#   )	_b85charsr?   r#   r#   r$   r=     rC   )
_b85chars2_b85alphabetr   r   )rA   r   r#   r#   r$   r     s
   r   c           
   	   C   s:  	 t d u rd gd a ttD ]\}}|t |< qt| } t|  d }| d|  } g }tdj}tdt| dD ]T}| ||d  }d}z|D ]
}|d t |  }qGW n  t	ys   t|D ]\}}t | d u rqt
d||  d q^ w z	||| W q8 tjy   t
d| d w d	|}	|r|	d |  }	|	S )
N   rD      ~r   r   r{   z#bad base85 character at position %dz+base85 overflow in hunk starting at byte %dr   )_b85decre   r   r%   rS   r   r   r   rW   r   r   r   r   r   )
rA   r<   rZ   r   outr   chunkrn   jr   r#   r#   r$   r     sR   


r   L   rO   rM   c                 C   sd   	 	 |  t}|sd S t|tk r'|  tt| }|sn
||7 }t|tk st|}|| qr5   )read
MAXBINSIZErS   r(   r)   write)inputoutputr"   nsliner#   r#   r$   r     s   


r   c                 C   s*   	 	 |   }|s
d S t|}|| qr5   )readliner(   r2   r   )r   r   r   r"   r#   r#   r$   r     s   

r   c              
   C   s   zt | }W n ty } zd| jj }t||d }~ww |jdvr0d|j| jjf }t||jdkrBd|j| jjf }t|d S )Nz"expected bytes-like object, not %s)rZ   rA   Bz-expected single byte elements, not %r from %srJ   z(expected 1-D data, not %d-D data from %s)r   r   r   r    r   ndim)r"   merrmsgr#   r#   r$   _input_type_check  s$   


r   c                 C   sN   	 t |  g }tdt| tD ]}| ||t  }|t| qd|S )Nr   r   )r   rW   rS   r   r   r(   r)   r   )r"   piecesr<   r   r#   r#   r$   r   $  s   
r   c                 C   s   	 t |  t| S r5   )r   r(   r2   r!   r#   r#   r$   r   /  s   
r   c            	   
   C   s6  	 dd l } dd l}z|| jdd  d\}}W n) |jyA } z| j| _t| td| jd   | d W Y d }~nd }~ww t}|D ] \}}|dkrPt}|dkrVt	}|dkr\t	}|d	krft
   d S qF|r|d d
krt|d d}||| jj W d    d S 1 sw   Y  d S || jj| jj d S )Nr   rJ   Zdeutzusage: %s [-d|-e|-u|-t] [file|-]
        -d, -u: decode
        -e: encode (default)
        -t: encode and decode string 'Aladdin:open sesame'rK   z-ez-dz-uz-t-rb)sysgetoptargvr   stderrstdoutprintexitr   r   testopenbufferstdin)	r   r   Zoptsargsr   funcor@   fr#   r#   r$   main6  s0   "r   c                  C   s<   d} t t|  t| }t t| t|}t t| d S )Ns   Aladdin:open sesame)r   reprr   r   )Zs0s1s2r#   r#   r$   r   P  s   r   __main__r5   )NF)FN)F)FFF)9r/   r   r(   __all__r+   rT   r   r%   r   r   r   r   r,   r6   r7   r   r   Z_B32_ENCODE_DOCSTRINGZ_B32_DECODE_DOCSTRINGZ_B32_DECODE_MAP01_DOCSTRINGrq   ru   rR   rd   r[   ro   r   r   __doc__r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ZMAXLINESIZEr   r   r   r   r   r   r   r   r    r#   r#   r#   r$   <module>   s~   

	
	
$/



)H
-	

