%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /lib/python3.9/site-packages/passlib/utils/__pycache__/
Upload File :
Create Path :
Current File : //lib/python3.9/site-packages/passlib/utils/__pycache__/binary.cpython-39.opt-1.pyc

a

f�Wc�z�@s�dZddlmZmZmZddlmZmZmZ	m
Zddlm
Z
mZmZddlZe�e�ZddlmZddlmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#ddl$m%Z%gd	�Z&e!d
�Z'e!d�Z(e!d�Z)e!d
�Z*e'e!d�Z+e!d�Z,e!d�Z-e!d�Z.eed��Z/dZ0dZ1dZ2e3ee/��Z4d0dd�Z5dd�Z6dd�Z7dZ8dZ9dZ:dd�Z;d d!�Z<d"d#�Z
e5d$d%d&��Z=e2d'Z>d(d)�ZGd*d+�d+e?�Z@Gd,d-�d-e@�ZAeAe)�ZBeAe)d.d/�ZCeAe*d.d/�ZDdS)1zC
passlib.utils.binary - binary data encoding/decoding/manipulation
�)�absolute_import�division�print_function)�	b64encode�	b64decode�	b32decode�	b32encode)�
b2a_base64�
a2b_base64�ErrorN)�exc)�PY3�
bascii_to_str�irange�imap�iter_byte_chars�join_byte_values�join_byte_elems�
nextgetter�suppress_cause�u�unicode�unicode_or_bytes_types)�memoized_property)�BASE64_CHARS�PADDED_BASE64_CHARS�
AB64_CHARS�HASH64_CHARS�BCRYPT_CHARS�	HEX_CHARS�LOWER_HEX_CHARS�UPPER_HEX_CHARS�ALL_BYTE_VALUES�compile_byte_translation�ab64_encode�ab64_decode�b64s_encode�b64s_decoderr�Base64Engine�LazyBase64Engine�h64�h64big�bcrypt64z@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/z@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./z@./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzz@./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789�=Z0123456789abcdefABCDEFZ0123456789ABCDEFZ0123456789abcdef����=cCsl|durtdd�}ntt|��}|��D]6\}}t|t�rDt|�}t|t�rX|�d�}|||<q*t	�
|�S)a�
    return a 256-byte string for translating bytes using specified mapping.
    bytes not specified by mapping will be left alone.

    :param mapping:
        dict mapping input byte (str or int) -> output byte (str or int).

    :param source:
        optional existing byte translation string to use as base.
        (must be 255-length byte string).  defaults to identity mapping.

    :returns:
        255-length byte string for passing to bytes().translate.
    N�ascii)�_TRANSLATE_SOURCE�listr�items�
isinstancer�ordr�encode�B_EMPTY�join)�mapping�source�target�k�v�r@�8/usr/lib/python3.9/site-packages/passlib/utils/binary.pyr#ns



r#cCst|��t�S)zr
    encode using shortened base64 format which omits padding & whitespace.
    uses default ``+/`` altchars.
    )r	�rstrip�
_BASE64_STRIP��datar@r@rAr&�sr&c
Cs�t|t�r8z|�d�}Wnty6ttd���Yn0t|�d@}|dkrNn,|dkr`|t7}n|dkrr|t7}ntd��z
t	|�WSt
y�}ztt|���WYd}~n
d}~00dS)zq
    decode from shortened base64 format which omits padding & whitespace.
    uses default ``+/`` altchars.
    r2�4string argument should contain only ASCII characters�r�zinvalid base64 inputN)r6rr8�UnicodeEncodeErrorr�
ValueError�len�_BASE64_PAD2�_BASE64_PAD1r
�_BinAsciiError�	TypeError)rE�off�errr@r@rAr'�s"



r's=
s==cCst|��dd�S)z�
    encode using shortened base64 format which omits padding & whitespace.
    uses custom ``./`` altchars.

    it is primarily used by Passlib's custom pbkdf2 hashes.
    �+�.)r&�replacerDr@r@rAr$�sr$cCsHt|t�r8z|�d�}Wnty6ttd���Yn0t|�dd��S)z�
    decode from shortened base64 format which omits padding & whitespace.
    uses custom ``./`` altchars, but supports decoding normal ``+/`` altchars as well.

    it is primarily used by Passlib's custom pbkdf2 hashes.
    r2rFrSrR)r6rr8rIrrJr'rTrDr@r@rAr%�s
r%cCstt|��t��S)zh
    wrapper around :func:`base64.b32encode` which strips padding,
    and returns a native string.
    )r�
_b32encoderB�B_EQUAL�r<r@r@rAr�sr�B�O)�8�0�cCsJt|t�r|�d�}|�t�}t|�d@}|r@|td|�7}t|d�S)z�
    wrapper around :func:`base64.b32decode`
    which handles common mistyped chars.
    padding optional, ignored if present.
    r2�NT)r6rr8�	translate�_b32_translaterK�_b32_decode_pad�
_b32decode)r<Z	remainderr@r@rAr�s


rc@seZdZdZdZdZdZdZdZdZ	d:dd�Z
edd��Zdd	�Z
d
d�Zdd
�Zdd�Zdd�Zdd�Zdd�Zedd��Zedd��Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Z d.d/�Z!d0d1�Z"d2d3�Z#d4d5�Z$d6d7�Z%d8d9�Z&dS);r(acProvides routines for encoding/decoding base64 data using
    arbitrary character mappings, selectable endianness, etc.

    :arg charmap:
        A string of 64 unique characters,
        which will be used to encode successive 6-bit chunks of data.
        A character's position within the string should correspond
        to its 6-bit value.

    :param big:
        Whether the encoding should be big-endian (default False).

    .. note::
        This class does not currently handle base64's padding characters
        in any way what so ever.

    Raw Bytes <-> Encoded Bytes
    ===========================
    The following methods convert between raw bytes,
    and strings encoded using the engine's specific base64 variant:

    .. automethod:: encode_bytes
    .. automethod:: decode_bytes
    .. automethod:: encode_transposed_bytes
    .. automethod:: decode_transposed_bytes

    ..
        .. automethod:: check_repair_unused
        .. automethod:: repair_unused

    Integers <-> Encoded Bytes
    ==========================
    The following methods allow encoding and decoding
    unsigned integers to and from the engine's specific base64 variant.
    Endianess is determined by the engine's ``big`` constructor keyword.

    .. automethod:: encode_int6
    .. automethod:: decode_int6

    .. automethod:: encode_int12
    .. automethod:: decode_int12

    .. automethod:: encode_int24
    .. automethod:: decode_int24

    .. automethod:: encode_int64
    .. automethod:: decode_int64

    Informational Attributes
    ========================
    .. attribute:: charmap

        unicode string containing list of characters used in encoding;
        position in string matches 6bit value of character.

    .. attribute:: bytemap

        bytes version of :attr:`charmap`

    .. attribute:: big

        boolean flag indicating this using big-endian encoding.
    NFcCs�t|t�r|�d�}nt|t�s,t�|d��t|�dkr@td��tt|��dkrXtd��||_	|j
|_tdd�t
|�D��}|j
|_||_|r�|j|_|j|_n|j|_|j|_dS)N�latin-1�charmap�@z'charmap must be 64 characters in lengthz-charmap must not contain duplicate characterscss|]\}}||fVqdS�Nr@)�.0�idx�valuer@r@rA�	<genexpr>]r/z(Base64Engine.__init__.<locals>.<genexpr>)r6rr8�bytesrZExpectedStringErrorrKrJ�set�bytemap�__getitem__�	_encode64�dict�	enumerate�	_decode64�big�_encode_bytes_big�
_encode_bytes�_decode_bytes_big�
_decode_bytes�_encode_bytes_little�_decode_bytes_little)�selfrcrr�lookupr@r@rA�__init__Qs$


zBase64Engine.__init__cCs|j�d�S)zcharmap as unicoderb)rl�decode)ryr@r@rArcsszBase64Engine.charmapcCstt|t�stdt|�f��tt|�d�\}}tr@tt|��}ntdd�|D��}|�	|||�}t
t|j|��}|S)z�encode bytes to base64 string.

        :arg source: byte string to encode.
        :returns: byte string containing encoded data.
        �source must be bytes, not %srGcss|]}t|�VqdSre)r7)rf�elemr@r@rAri�r/z,Base64Engine.encode_bytes.<locals>.<genexpr>)
r6rjrO�type�divmodrKr
r�iterrtrrrn)ryr<�chunks�tail�
next_value�gen�outr@r@rA�encode_bytes{s
zBase64Engine.encode_bytesccs�d}||krh|�}|�}|�}|d@V|d@d>|d?BV|d@d>|d?BV|d?V|d7}q|r�|�}|dkr�|d@V|d?Vn0|�}|d@V|d@d>|d?BV|d?Vd	S)
z>helper used by encode_bytes() to handle little-endian encodingr�?�rH�rG��Nr@�ryr�r�r�rg�v1�v2�v3r@r@rArw�s&




z!Base64Engine._encode_bytes_littleccs�d}||krh|�}|�}|�}|d?V|d@d>|d?BV|d@d>|d?BV|d@V|d7}q|r�|�}|dkr�|d?V|d@d>Vn4|�}|d?V|d@d>|d?BV|d@d>Vd	S)
z;helper used by encode_bytes() to handle big-endian encodingrrHrGr�r�r�r�r�Nr@r�r@r@rArs�s&




zBase64Engine._encode_bytes_bigc
Cs�t|t�stdt|�f��tt|�d�\}}|dkr>td��tt|j	|��}zt
|�|||��WSty�}z td|j
df��WYd}~n
d}~00dS)z�decode bytes from base64 string.

        :arg source: byte string to decode.
        :returns: byte string containing decoded data.
        r}r�r�z(input string length cannot be == 1 mod 4zinvalid character: %rrN)r6rjrOrr�rKrJrrrqrrv�KeyError�args)ryr<r�r�r�rQr@r@rA�decode_bytes�s
zBase64Engine.decode_bytesc	cs�d}||krh|�}|�}|�}|�}||d@d>BV|d?|d@d>BV|d?|d>BV|d7}q|r�|�}|�}||d@d>BV|dkr�|�}|d?|d@d>BVdS)	z>helper used by decode_bytes() to handle little-endian encodingrrGr�rHr�r�r�Nr@�	ryr�r�r�rgr�r�r�Zv4r@r@rArx�s"
z!Base64Engine._decode_bytes_littlec	cs�d}||krh|�}|�}|�}|�}|d>|d?BV|d@d>|d?BV|d@d>|BV|d7}q|r�|�}|�}|d>|d?BV|dkr�|�}|d@d>|d?BVdS)	z;helper used by decode_bytes() to handle big-endian encodingrrHr�r�rGr�r�Nr@r�r@r@rArus"
zBase64Engine._decode_bytes_bigcsBt�fdd�t|j�D��}|��fdd�t|j�D��t|�S)z2helper to generate set of valid last chars & bytesc3s|]\}}|�@s|VqdSrer@�rf�i�c��bitsr@rAriGr/z-Base64Engine.__make_padset.<locals>.<genexpr>c3s|]\}}|�@s|VqdSrer@r�r�r@rAriHr/)rkrprl�updaterc�	frozenset)ryr�Zpsetr@r�rAZ
__make_padsetEszBase64Engine.__make_padsetcCs|jr
dnd}||�|�fS)zDmask to clear padding bits, and valid last bytes (for strings 2 % 4)r��<�rr�_Base64Engine__make_padset�ryr�r@r@rA�	_padinfo2KszBase64Engine._padinfo2cCs|jr
dnd}||�|�fS)zDmask to clear padding bits, and valid last bytes (for strings 3 % 4)rG�0r�r�r@r@rA�	_padinfo3RszBase64Engine._padinfo3cCs�t|�d@}|dkr |j\}}n(|dkr4|j\}}n|s@d|fStd��|d}||vr`d|fSt|t�r�|j}||�|�|@}n"|�|�	|�|@�}t
r�t|g�}d|dd�|fS)ahelper to detect & clear invalid unused bits in last character.

        :arg source:
            encoded data (as ascii bytes or unicode).

        :returns:
            `(True, result)` if the string was repaired,
            `(False, source)` if the string was ok as-is.
        rGrHFzsource length must != 1 mod 4���TN)rKr�r�rJr6rrc�indexrnrqr
rj)ryr<r��maskZpadsetZlast�cmr@r@rA�check_repair_unusedYs&

z Base64Engine.check_repair_unusedcCs|�|�dS)Nr�)r��ryr<r@r@rA�
repair_unused�szBase64Engine.repair_unusedcs<t�t�stdt��f��t�fdd�|D��}|�|�S)z>encode byte string, first transposing source using offset listr}c3s|]}�|VqdSrer@�rfrPrWr@rAri�r/z7Base64Engine.encode_transposed_bytes.<locals>.<genexpr>)r6rjrOrrr�)ryr<�offsets�tmpr@rWrA�encode_transposed_bytes�s
z$Base64Engine.encode_transposed_bytescCs<|�|�}dgt|�}t||�D]\}}|||<q"t|�S)zGdecode byte string, then reverse transposition described by offset listN)r�rK�zipr)ryr<r�r��bufrP�charr@r@rA�decode_transposed_bytes�s


z$Base64Engine.decode_transposed_bytesc	Cs�t|t�stdt|�f��|j}|d}||d}t|�|krRtd|f��|j}d}z*|rf|nt|�D]}|d>||�}qnWn t	y�td|f��Yn0|r�|r�||L}n|d|>dM}|S)a�decode base64 string -> integer

        :arg source: base64 string to decode.
        :arg bits: number of bits in resulting integer.

        :raises ValueError:
            * if the string contains invalid base64 characters.
            * if the string is not long enough - it must be at least
              ``int(ceil(bits/6))`` in length.

        :returns:
            a integer in the range ``0 <= n < 2**bits``
        r}r�zsource must be %d charsrzinvalid character in string: %rr�)
r6rjrOrrrrKrJrq�reversedr�)	ryr<r�rr�pad�charsr|r�r�r@r@rA�_decode_int�s&


zBase64Engine._decode_intcCsht|t�stdt|�f��t|�dkr0td��tr<|d}z|�|�WStybtd��Yn0dS)z(decode single character -> 6 bit integerr}r�zsource must be exactly 1 byter�invalid characterN)	r6rjrOrrKrJr
rqr�r�r@r@rA�decode_int6�s
zBase64Engine.decode_int6cCs�t|t�stdt|�f��t|�dkr0td��|j}zF|jr\||d�||d�d>WS||d�||d�d>WSWnty�td��Yn0dS)	z'decodes 2 char string -> 12-bit integerr}rHzsource must be exactly 2 bytesr�rr�r�N�	r6rjrOrrKrJrqrrr��ryr<r|r@r@rA�decode_int12�s
"zBase64Engine.decode_int12cCs�t|t�stdt|�f��t|�dkr0td��|j}z�|jr|||d�||d�d>||d�d>||d	�d
>WS||d	�||d�d>||d�d>||d�d
>WSWnty�td��Yn0dS)
z'decodes 4 char string -> 24-bit integerr}r�zsource must be exactly 4 bytesrGrHr�r��r�r�Nr�r�r@r@rA�decode_int24�s&
����
zBase64Engine.decode_int24cCs|�|d�S)�&decode 5 char string -> 30 bit integer��r�r�r@r@rA�decode_int30�szBase64Engine.decode_int30cCs|�|d�S)z�decode 11 char base64 string -> 64-bit integer

        this format is used primarily by des-crypt & variants to encode
        the DES output value used as a checksum.
        rdr�r�r@r@rA�decode_int64szBase64Engine.decode_int64cs\|d}||7}|jr2t|ddd�}�|K�ntd|d�}tt|j�fdd�|D���S)z�encode integer into base64 format

        :arg value: non-negative integer to encode
        :arg bits: number of bits to encode

        :returns:
            a string of length ``int(ceil(bits/6.0))``.
        r�i����rc3s|]}�|?d@VqdS)r�Nr@r��rhr@rAri"r/z+Base64Engine._encode_int.<locals>.<genexpr>)rrrrrrn)ryrhr�r��itrr@r�rA�_encode_ints


�zBase64Engine._encode_intcCs<|dks|dkrtd��tr.|j||d�S|�|�SdS)z0encodes 6-bit integer -> single hash64 characterrr��value out of ranger�N)rJr
rlrn�ryrhr@r@rA�encode_int6(s
zBase64Engine.encode_int6cCsJ|dks|dkrtd��|d@|d?d@g}|jr:t|�}tt|j|��S)z'encodes 12-bit integer -> 2 char stringri�r�r�r��rJrrr�rrrn�ryrh�rawr@r@rA�encode_int121szBase64Engine.encode_int12cCs^|dks|dkrtd��|d@|d?d@|d?d@|d?d@g}|jrNt|�}tt|j|��S)z'encodes 24-bit integer -> 4 char stringri���r�r�r�r�r�r�r�r@r@rA�encode_int24:s�zBase64Engine.encode_int24cCs$|dks|dkrtd��|�|d�S)r�ri���?r�r��rJr�r�r@r@rA�encode_int30DszBase64Engine.encode_int30cCs$|dks|dkrtd��|�|d�S)z�encode 64-bit integer -> 11 char hash64 string

        this format is used primarily by des-crypt & variants to encode
        the DES output value used as a checksum.
        rl����r�rdr�r�r@r@rA�encode_int64JszBase64Engine.encode_int64)F)'�__name__�
__module__�__qualname__�__doc__rlrrrnrqrtrvr{�propertyrcr�rwrsr�rxrur�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r@r@r@rAr(�sJD
"
'+#*

)(		
r(cs4eZdZdZdZdd�Z�fdd�Zdd�Z�ZS)	r)z<Base64Engine which delays initialization until it's accessedNcOs||f|_dSre)�
_lazy_opts�ryr��kwdsr@r@rAr{\szLazyBase64Engine.__init__cs.|j\}}tt|�j|i|��|`t|_dSre)r��superr)r{r(�	__class__r��r�r@rA�
_lazy_init_s
zLazyBase64Engine._lazy_initcCs|�d�s|��t�||�S)N�_)�
startswithr��object�__getattribute__)ry�attrr@r@rAr�es
z!LazyBase64Engine.__getattribute__)	r�r�r�r�r�r{r�r��
__classcell__r@r@r�rAr)Xs
r)T)rr)N)Er�Z
__future__rrr�base64rrrrarrUZbinasciir	r
rrNZloggingZ	getLoggerr��logZpasslibrZpasslib.utils.compatr
rrrrrrrrrrrZpasslib.utils.decorr�__all__rrrrrrr!r r"r9ZB_NULLrVr4r3r#r&r'rCrMrLr$r%r_r`r�r(r)r*r+r,r@r@r@rA�<module>sV
8%
!	_

Zerion Mini Shell 1.0