§
    HŠtj¾z  ã                   ó¼  — d Z ddlmZmZmZ ddlmZmZmZ	m
Z ddlmZmZmZ ddlZ ej        e¦  «        ZddlmZ ddlmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z# ddl$m%Z% g d	¢Z& e!d
¦  «        Z' e!d¦  «        Z( e!d¦  «        Z) e!d¦  «        Z*e' e!d¦  «        z   Z+ e!d¦  «        Z, e!d¦  «        Z- e!d¦  «        Z. e ed¦  «        ¦  «        Z/dZ0dZ1dZ2 e3 ee/¦  «        ¦  «        Z4d)d„Z5d„ Z6d„ Z7dZ8dZ9dZ:d„ Z;d„ Z<d„ Z
 e5ddd œ¦  «        Z=e2d!z  Z>d"„ Z G d#„ d$e?¦  «        Z@ G d%„ d&e@¦  «        ZA eAe)¦  «        ZB eAe)d'¬(¦  «        ZC eAe*d'¬(¦  «        ZDdS )*zC
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_decoder	   r   ÚBase64EngineÚLazyBase64EngineÚh64Úh64bigÚbcrypt64z@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/z@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./z@./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzz@./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ú=Ú0123456789abcdefABCDEFÚ0123456789ABCDEFÚ0123456789abcdefé   ó    ó    ó   =c                 ó`  — |€t           dd…         }nFt          |t          ¦  «        rt          |¦  «        dk    sJ ‚t	          t          |¦  «        ¦  «        }|                      ¦   «         D ]¨\  }}t          |t          ¦  «        rt          |¦  «        }t          |t          ¦  «        rd|cxk    rdk     sn J ‚t          |t          ¦  «        r|                     d¦  «        }t          |t          ¦  «        rt          |¦  «        dk    sJ ‚|||<   Œ©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éÿ   r   r2   Úasciié   )Ú_TRANSLATE_SOURCEÚ
isinstanceÚbytesÚlenÚlistr   Úitemsr   ÚordÚintr   ÚencodeÚB_EMPTYÚjoin)ÚmappingÚsourceÚtargetÚkÚvs        úR/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/passlib/utils/binary.pyr$   r$   n   s  € ð €~Ý" 1 1 1Ô%ˆˆå˜&¥%Ñ(Ô(Ð?­S°©[¬[¸CÒ-?Ð-?Ð-?Ð?Ý•o fÑ-Ô-Ñ.Ô.ˆØ—’‘”ð ð ‰ˆˆ1Ý�aÕ/Ñ0Ô0ð 	Ý�A‘”ˆAÝ˜!�SÑ!Ô!Ð2 a¨1 l l¢l l¨s¢l l l l lÐ2Ý�a�Ñ!Ô!ð 	"Ø—’˜Ñ!Ô!ˆAÝ˜!�UÑ#Ô#Ð3­¨A©¬°!ª¨¨Ð3Øˆˆq‰	ˆ	Ý�<Š<˜ÑÔÐr3   c                 óP   — t          | ¦  «                             t          ¦  «        S )zr
    encode using shortened base64 format which omits padding & whitespace.
    uses default ``+/`` altchars.
    )r
   ÚrstripÚ_BASE64_STRIP©Údatas    rJ   r'   r'   �   s    € õ
 �dÑÔ×"Ò"¥=Ñ1Ô1Ð1r3   c                 ó¾  — t          | t          ¦  «        rA	 |                      d¦  «        } n*# t          $ r t	          t          d¦  «        ¦  «        ‚w xY wt          | ¦  «        dz  }|dk    rn1|dk    r| t          z  } n |dk    r| t          z  } nt          d¦  «        ‚	 t          | ¦  «        S # t          $ r!}t	          t          |¦  «        ¦  «        ‚d}~ww xY w)zq
    decode from shortened base64 format which omits padding & whitespace.
    uses default ``+/`` altchars.
    r8   ú4string argument should contain only ASCII charactersé   r   é   zinvalid base64 inputN)r;   r   rB   ÚUnicodeEncodeErrorr   Ú
ValueErrorr=   Ú_BASE64_PAD2Ú_BASE64_PAD1r   Ú_BinAsciiErrorÚ	TypeError)rO   ÚoffÚerrs      rJ   r(   r(   –   s   € õ
 �$�Ñ Ô ð eð	eØ—;’;˜wÑ'Ô'ˆDˆDøÝ!ð 	eð 	eð 	eÝ ¥Ð,bÑ!cÔ!cÑdÔdÐdð	eøøøå
ˆd‰)Œ)�a‰-€CØ
ˆa‚x€xØØ	�ŠˆØ•ÑˆˆØ	�ŠˆØ•ÑˆˆåÐ/Ñ0Ô0Ð0ð-Ý˜$ÑÔÐøÝð -ð -ð -Ý�Y s™^œ^Ñ,Ô,Ð,øøøøð-øøøs!   —- ­'AÂ"B1 Â1
CÂ;CÃCs   =
s   ==c                 óH   — t          | ¦  «                             dd¦  «        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'   ÚreplacerN   s    rJ   r%   r%   ¹   s"   € õ �tÑÔ×$Ò$ T¨4Ñ0Ô0Ð0r3   c                 óô   — t          | t          ¦  «        rA	 |                      d¦  «        } n*# t          $ r t	          t          d¦  «        ¦  «        ‚w xY wt          |                      dd¦  «        ¦  «        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.
    r8   rQ   r^   r]   )r;   r   rB   rT   r   rU   r(   r_   rN   s    rJ   r&   r&   Â   s‚   € õ �$�Ñ Ô ð eð	eØ—;’;˜wÑ'Ô'ˆDˆDøÝ!ð 	eð 	eð 	eÝ ¥Ð,bÑ!cÔ!cÑdÔdÐdð	eøøøå�t—|’| D¨$Ñ/Ô/Ñ0Ô0Ð0s	   —- ­'Ac                 ój   — t          t          | ¦  «                             t          ¦  «        ¦  «        S )zh
    wrapper around :func:`base64.b32encode` which strips padding,
    and returns a native string.
    )r   Ú
_b32encoderL   ÚB_EQUAL)rF   s    rJ   r	   r	   Õ   s(   € õ � FÑ+Ô+×2Ò2µ7Ñ;Ô;Ñ<Ô<Ð<r3   ÚBÚO)Ú8Ú0é   c                 óø   — t          | t          ¦  «        r|                      d¦  «        } |                      t          ¦  «        } t          | ¦  «        dz  }|r| t          d| …         z  } t          | d¦  «        S )z„
    wrapper around :func:`base64.b32decode`
    which handles common mistyped chars.
    padding optional, ignored if present.
    r8   é   NT)r;   r   rB   Ú	translateÚ_b32_translater=   Ú_b32_decode_padÚ
_b32decode)rF   Ú	remainders     rJ   r   r   å   s{   € õ �&�'Ñ"Ô"ð (Ø—’˜wÑ'Ô'ˆØ×Ò�nÑ-Ô-€Fõ �F‘”˜cÑ!€IØð /Ø•/ + I : +Ô.Ñ.ˆõ �f˜dÑ#Ô#Ð#r3   c                   óþ   — e Zd ZdZdZdZdZdZdZdZ	dd„Z
ed„ ¦   «         Zd„ Zd„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zed„ ¦   «         Zed„ ¦   «         Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$d„ Z%d„ Z&dS ) r)   ac  Provides 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.
    NFc                 óR  — t          |t          ¦  «        r|                     d¦  «        }n*t          |t          ¦  «        st	          j        |d¦  «        ‚t          |¦  «        dk    rt          d¦  «        ‚t          t          |¦  «        ¦  «        dk    rt          d¦  «        ‚|| _	        |j
        | _        t          d„ t          |¦  «        D ¦   «         ¦  «        }|j
        | _        || _        |r| j        | _        | j        | _        d S | j        | _        | j        | _        d S )Núlatin-1Úcharmapé@   z'charmap must be 64 characters in lengthz-charmap must not contain duplicate charactersc              3   ó$   K  — | ]\  }}||fV — Œd S ©N© )Ú.0ÚidxÚvalues      rJ   ú	<genexpr>z(Base64Engine.__init__.<locals>.<genexpr>]  s*   è è € ÐHÐH¡z s¨E�u˜c�lÐHÐHÐHÐHÐHÐHr3   )r;   r   rB   r<   r   ÚExpectedStringErrorr=   rU   ÚsetÚbytemapÚ__getitem__Ú	_encode64ÚdictÚ	enumerateÚ	_decode64ÚbigÚ_encode_bytes_bigÚ_encode_bytesÚ_decode_bytes_bigÚ_decode_bytesÚ_encode_bytes_littleÚ_decode_bytes_little)Úselfrs   r„   Úlookups       rJ   Ú__init__zBase64Engine.__init__Q  s  € å�g�wÑ'Ô'ð 	>Ø—n’n YÑ/Ô/ˆGˆGÝ˜G¥UÑ+Ô+ð 	>ÝÔ)¨'°9Ñ=Ô=Ð=Ýˆw‰<Œ<˜2ÒÐÝÐFÑGÔGÐGÝ�s�7‰|Œ|ÑÔ Ò"Ð"ÝÐLÑMÔMÐMØˆŒØ Ô,ˆŒÝÐHÐHµY¸wÑ5GÔ5GÐHÑHÔHÑHÔHˆØÔ+ˆŒð ˆŒØð 	;Ø!%Ô!7ˆDÔØ!%Ô!7ˆDÔÐÐà!%Ô!:ˆDÔØ!%Ô!:ˆDÔÐÐr3   c                 ó6   — | j                              d¦  «        S )zcharmap as unicoderr   )r~   Údecode)r‹   s    rJ   rs   zBase64Engine.charmaps  s   € ð Œ|×"Ò" 9Ñ-Ô-Ð-r3   c                 óš  — t          |t          ¦  «        st          dt          |¦  «        ›�¦  «        ‚t	          t          |¦  «        d¦  «        \  }}t          rt          t          |¦  «        ¦  «        }nt          d„ |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 rR   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S rv   )r@   )rx   Úelems     rJ   r{   z,Base64Engine.encode_bytes.<locals>.<genexpr>‡  s(   è è € Ð#AÐ#A°$¥C¨¡I¤IÐ#AÐ#AÐ#AÐ#AÐ#AÐ#Ar3   )r;   r<   rY   ÚtypeÚdivmodr=   r   r   Úiterr†   r   r   r€   )r‹   rF   ÚchunksÚtailÚ
next_valueÚgenÚouts          rJ   Úencode_byteszBase64Engine.encode_bytes{  s¼   € õ ˜&¥%Ñ(Ô(ð 	NÝ�)½dÀ6¹l¼l¸lÐLÑMÔMÐMÝ�c &™kœk¨1Ñ-Ô-‰ˆ�Ýð 	BÝ#¥D¨¡L¤LÑ1Ô1ˆJˆJå#Ð#AÐ#A¸&Ð#AÑ#AÔ#AÑAÔAˆJØ× Ò  ¨V°TÑ:Ô:ˆÝ�d 4¤>°3Ñ7Ô7Ñ8Ô8ˆð
 ˆ
r3   c              #   óp  K  — d}||k     rW |¦   «         } |¦   «         } |¦   «         }|dz  V — |dz  dz  |dz	  z  V — |dz  dz  |dz	  z  V — |dz	  V — |dz  }||k     °W|rR |¦   «         }|dk    r|dz  V — |dz	  V — d	S |dk    sJ ‚ |¦   «         }|dz  V — |dz  dz  |dz	  z  V — |dz	  V — d	S d	S )
z>helper used by encode_bytes() to handle little-endian encodingr   é?   é   rS   é   rR   é   r9   Nrw   ©r‹   r™   r—   r˜   ry   Úv1Úv2Úv3s           rJ   r‰   z!Base64Engine._encode_bytes_little�  s8  è è € ð ˆØ�FŠlˆlØ�‘”ˆBØ�‘”ˆBØ�‘”ˆBØ�t‘)ˆOˆOˆOØ˜‘I ‘> B¨¡EÑ*Ð*Ð*Ð*Ø˜‘I ‘> B¨¡EÑ*Ð*Ð*Ð*Ø�a‘%ˆKˆKˆKØ�1‰HˆCð �FŠlˆlð ð 	Ø�‘”ˆBØ�qŠyˆyà˜4‘i���Ø˜!‘e�����à˜q’y�y�y�yà�Z‘\”\�Ø˜4‘i���Ø˜T™	 A‘~¨¨A©Ñ.Ð.Ð.Ð.Ø˜!‘e�����ð	ð 	r3   c              #   ó|  K  — d}||k     rW |¦   «         } |¦   «         } |¦   «         }|dz	  V — |dz  dz  |dz	  z  V — |dz  dz  |dz	  z  V — |dz  V — |dz  }||k     °W|rX |¦   «         }|dk    r|dz	  V — |dz  dz  V — d	S |dk    sJ ‚ |¦   «         }|dz	  V — |dz  dz  |dz	  z  V — |dz  dz  V — d	S d	S )
z;helper used by encode_bytes() to handle big-endian encodingr   rS   rR   r¡   rŸ   r    rž   r9   Nrw   r¢   s           rJ   r…   zBase64Engine._encode_bytes_big·  sJ  è è € ð ˆØ�FŠlˆlØ�‘”ˆBØ�‘”ˆBØ�‘”ˆBØ�a‘%ˆKˆKˆKØ�t‘G˜a‘< " a¡%Ñ(Ð(Ð(Ð(Ø�t‘G˜a‘< " a¡%Ñ(Ð(Ð(Ð(Ø�t‘)ˆOˆOˆOØ�1‰HˆCð �FŠlˆlð ð 	%Ø�‘”ˆBØ�qŠyˆyà˜!‘e���Ø˜$‘w ‘lÐ"Ð"Ð"Ð"Ð"à˜q’y�y�y�yà�Z‘\”\�Ø˜!‘e���Ø˜4™ !‘| b¨!¡eÑ,Ð,Ð,Ð,Ø˜4™ !‘|Ð$Ð$Ð$Ð$Ð$ð	%ð 	%r3   c                 óÀ  — t          |t          ¦  «        st          dt          |¦  «        ›�¦  «        ‚t	          t          |¦  «        d¦  «        \  }}|dk    rt          d¦  «        ‚t          t          | j	        |¦  «        ¦  «        }	 t          |                      |||¦  «        ¦  «        S # t          $ r"}t          d|j        d         ›�¦  «        ‚d}~ww xY w)z�decode bytes from base64 string.

        :arg source: byte string to decode.
        :returns: byte string containing decoded data.
        r‘   r¡   r9   z(input string length cannot be == 1 mod 4zinvalid character: r   N)r;   r<   rY   r”   r•   r=   rU   r   r   rƒ   r   rˆ   ÚKeyErrorÚargs)r‹   rF   r—   r˜   r™   r[   s         rJ   Údecode_byteszBase64Engine.decode_bytesâ  sâ   € õ ˜&¥%Ñ(Ô(ð 	NÝ�)½dÀ6¹l¼l¸lÐLÑMÔMÐMõ
 �c &™kœk¨1Ñ-Ô-‰ˆ�Ø�1Š9ˆ9åÐGÑHÔHÐHÝ¥ T¤^°VÑ <Ô <Ñ=Ô=ˆ
ð	GÝ# D×$6Ò$6°zÀ6È4Ñ$PÔ$PÑQÔQÐQøÝð 	Gð 	Gð 	GÝ�*¸¼À¼¸ÐEÑFÔFÐFøøøøð	Gøøøs   Â#B1 Â1
CÂ;CÃCc              #   ób  K  — d}||k     r] |¦   «         } |¦   «         } |¦   «         } |¦   «         }||dz  dz  z  V — |dz	  |dz  dz  z  V — |dz	  |dz  z  V — |dz  }||k     °]|rC |¦   «         } |¦   «         }||dz  dz  z  V — |dk    r |¦   «         }|dz	  |dz  dz  z  V — dS dS dS )	z>helper used by decode_bytes() to handle little-endian encodingr   rR   r    rS   rŸ   r¡   r9   Nrw   ©	r‹   r™   r—   r˜   ry   r£   r¤   r¥   Úv4s	            rJ   rŠ   z!Base64Engine._decode_bytes_littleø  s&  è è € ð ˆØ�FŠlˆlØ�‘”ˆBØ�‘”ˆBØ�‘”ˆBØ�‘”ˆBØ˜˜c™ a™Ñ(Ð(Ð(Ð(Ø�q‘5˜b 3™h¨1™_Ñ-Ð-Ð-Ð-Ø�q‘5˜R ™UÑ#Ð#Ð#Ð#Ø�1‰HˆCð �FŠlˆlð ð 		2à�‘”ˆBØ�‘”ˆBØ˜˜c™ a™Ñ(Ð(Ð(Ð(à�qŠyˆyà�Z‘\”\�Ø˜1‘u " s¡(¨q¡Ñ1Ð1Ð1Ð1Ð1Ð1ð		2ð 		2ð ˆyr3   c              #   ób  K  — d}||k     r] |¦   «         } |¦   «         } |¦   «         } |¦   «         }|dz  |dz	  z  V — |dz  dz  |dz	  z  V — |dz  dz  |z  V — |dz  }||k     °]|rC |¦   «         } |¦   «         }|dz  |dz	  z  V — |dk    r |¦   «         }|dz  dz  |dz	  z  V — dS dS dS )	z;helper used by decode_bytes() to handle big-endian encodingr   rS   r¡   rŸ   rR   r    r9   Nrw   r¬   s	            rJ   r‡   zBase64Engine._decode_bytes_big  s&  è è € ð ˆØ�FŠlˆlØ�‘”ˆBØ�‘”ˆBØ�‘”ˆBØ�‘”ˆBØ�q‘5˜R ™UÑ#Ð#Ð#Ð#Ø�s‘F˜Q‘; 2 q¡5Ñ)Ð)Ð)Ð)Ø�s‘F˜Q‘; "Ñ$Ð$Ð$Ð$Ø�1‰HˆCð �FŠlˆlð ð 		.à�‘”ˆBØ�‘”ˆBØ�q‘5˜R ™UÑ#Ð#Ð#Ð#à�qŠyˆyà�Z‘\”\�Ø˜3™ ‘{ r¨1¡uÑ-Ð-Ð-Ð-Ð-Ð-ð		.ð 		.ð ˆyr3   c                 óâ   ‡— t          ˆfd„t          | j        ¦  «        D ¦   «         ¦  «        }|                     ˆfd„t          | j        ¦  «        D ¦   «         ¦  «         t          |¦  «        S )z2helper to generate set of valid last chars & bytesc              3   ó,   •K  — | ]\  }}|‰z  °
|V — Œd S rv   rw   ©rx   ÚiÚcÚbitss      €rJ   r{   z-Base64Engine.__make_padset.<locals>.<genexpr>G  s0   øè è € ÐHÐH™˜˜1¸qÀ4¹xÐH�1ÐHÐHÐHÐHÐHÐHr3   c              3   ó,   •K  — | ]\  }}|‰z  °
|V — Œd S rv   rw   r±   s      €rJ   r{   z-Base64Engine.__make_padset.<locals>.<genexpr>H  s0   øè è € ÐIÐI™#˜!˜AÀÀDÁÐI�AÐIÐIÐIÐIÐIÐIr3   )r}   r‚   r~   Úupdaters   Ú	frozenset)r‹   r´   Úpsets    ` rJ   Ú__make_padsetzBase64Engine.__make_padsetE  sl   ø€ åÐHÐHÐHÐH¥	¨$¬,Ñ 7Ô 7ÐHÑHÔHÑHÔHˆØ�ŠÐIÐIÐIÐI¥¨4¬<Ñ!8Ô!8ÐIÑIÔIÑIÔIÐIÝ˜‰ŒÐr3   c                 óH   — | j         rdnd}| |                      |¦  «        fS )zDmask to clear padding bits, and valid last bytes (for strings 2 % 4)rŸ   é<   ©r„   Ú_Base64Engine__make_padset©r‹   r´   s     rJ   Ú	_padinfo2zBase64Engine._padinfo2K  s/   € ð ”XÐ*ˆrˆr EˆØˆu�d×(Ò(¨Ñ.Ô.Ð.Ð.r3   c                 óH   — | j         rdnd}| |                      |¦  «        fS )zDmask to clear padding bits, and valid last bytes (for strings 3 % 4)rR   é0   r¼   r¾   s     rJ   Ú	_padinfo3zBase64Engine._padinfo3R  s/   € ð ”HÐ(ˆqˆq 4ˆØˆu�d×(Ò(¨Ñ.Ô.Ð.Ð.r3   c                 ó  — t          |¦  «        dz  }|dk    r| j        \  }}n&|dk    r| j        \  }}n|sd|fS t          d¦  «        ‚|d         }||v rd|fS t	          |t
          ¦  «        r4| j        }||                     |¦  «        |z           }||v s
J d¦   «         ‚nP|                      |  	                    |¦  «        |z  ¦  «        }||v s
J d¦   «         ‚t          rt          |g¦  «        }d|dd…         |z   fS )	a  helper 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.
        rR   rS   Fzsource length must != 1 mod 4éÿÿÿÿz%failed to generate valid padding charTN)r=   r¿   rÂ   rU   r;   r   rs   Úindexr€   rƒ   r   r<   )r‹   rF   r˜   ÚmaskÚpadsetÚlastÚcms          rJ   Úcheck_repair_unusedz Base64Engine.check_repair_unusedY  s-  € õ �6‰{Œ{˜Q‰ˆØ�1Š9ˆ9Øœ>‰LˆD�&�&Ø�QŠYˆYØœ>‰LˆD�&�&Øð 	>Ø˜&�=Ð åÐ<Ñ=Ô=Ð=ð �bŒzˆØ�6ˆ>ˆ>Ø˜&�=Ð õ �f�gÑ&Ô&ð 
	%Ø”ˆBØ�b—h’h˜t‘n”n tÑ+Ô,ˆDØ˜6�>�>�>Ð#J‘>”>�>�>ð —>’> $§.¢.°Ñ"6Ô"6¸Ñ"=Ñ>Ô>ˆDØ˜6�>�>�>Ð#J‘>”>�>Ýð %Ý˜d˜V‘}”}�Ø�V˜C˜R˜C”[ 4Ñ'Ð'Ð'r3   c                 ó8   — |                       |¦  «        d         S )Nr9   )rÊ   ©r‹   rF   s     rJ   Úrepair_unusedzBase64Engine.repair_unused‚  s   € Ø×'Ò'¨Ñ/Ô/°Ô2Ð2r3   c                 óÌ   ‡— t          ‰t          ¦  «        st          dt          ‰¦  «        ›�¦  «        ‚t	          ˆfd„|D ¦   «         ¦  «        }|                      |¦  «        S )z>encode byte string, first transposing source using offset listr‘   c              3   ó(   •K  — | ]}‰|         V — Œd S rv   rw   )rx   rZ   rF   s     €rJ   r{   z7Base64Engine.encode_transposed_bytes.<locals>.<genexpr>˜  s'   øè è € Ð=Ð=¨c˜f SœkÐ=Ð=Ð=Ð=Ð=Ð=r3   )r;   r<   rY   r”   r   rœ   )r‹   rF   ÚoffsetsÚtmps    `  rJ   Úencode_transposed_bytesz$Base64Engine.encode_transposed_bytes”  sg   ø€ å˜&¥%Ñ(Ô(ð 	NÝ�)½dÀ6¹l¼l¸lÐLÑMÔMÐMÝÐ=Ð=Ð=Ð=°WÐ=Ñ=Ô=Ñ=Ô=ˆØ× Ò  Ñ%Ô%Ð%r3   c                 ó¦   — |                       |¦  «        }dgt          |¦  «        z  }t          ||¦  «        D ]
\  }}|||<   Œt          |¦  «        S )zGdecode byte string, then reverse transposition described by offset listN)rª   r=   Úzipr   )r‹   rF   rÐ   rÑ   ÚbufrZ   Úchars          rJ   Údecode_transposed_bytesz$Base64Engine.decode_transposed_bytes›  s_   € ð
 ×Ò Ñ'Ô'ˆØˆf•s˜7‘|”|Ñ#ˆÝ˜W cÑ*Ô*ð 	ð 	‰IˆC�ØˆC�‰HˆHÝ˜sÑ#Ô#Ð#r3   c                 ó²  — t          |t          ¦  «        st          dt          |¦  «        ›�¦  «        ‚| j        }| dz  }||z   dz  }t          |¦  «        |k    rt          d|fz  ¦  «        ‚| j        }d}	 |r|nt          |¦  «        D ]}|dz   ||¦  «        z   }Œn # t          $ r t          d|›�¦  «        ‚w xY w|r|r||z  }n|d|z  dz
  z  }|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    zsource must be %d charsr   zinvalid character in string: r9   )
r;   r<   rY   r”   r„   r=   rU   rƒ   Úreversedr¨   )	r‹   rF   r´   r„   ÚpadÚcharsr�   r›   r³   s	            rJ   Ú_decode_intzBase64Engine._decode_int©  s-  € õ ˜&¥%Ñ(Ô(ð 	NÝ�)½dÀ6¹l¼l¸lÐLÑMÔMÐMØŒhˆØˆe�a‰iˆØ�c‘˜1‘ˆÝˆv‰;Œ;˜%ÒÐÝÐ6¸%¸ÑAÑBÔBÐBØ”ˆØˆð	GØ"Ð8�V�V­°Ñ(8Ô(8ð +ð +�Ø˜A‘v  ¨¡¤Ñ*��ð+øåð 	Gð 	Gð 	GÝ�*À!À!ÐEÑFÔFÐFð	Gøøøàð 	#àð #Ø˜‘��à˜˜4™ ‘{Ñ"�Øˆ
s   Á:'B" Â"B?c                 ó2  — t          |t          ¦  «        st          dt          |¦  «        ›�¦  «        ‚t	          |¦  «        dk    rt          d¦  «        ‚t          r|d         }	 |                      |¦  «        S # t          $ r t          d¦  «        ‚w xY w)z(decode single character -> 6 bit integerr‘   r9   zsource must be exactly 1 byter   úinvalid character)	r;   r<   rY   r”   r=   rU   r   rƒ   r¨   rÌ   s     rJ   Údecode_int6zBase64Engine.decode_int6Ñ  s¢   € å˜&¥%Ñ(Ô(ð 	NÝ�)½dÀ6¹l¼l¸lÐLÑMÔMÐMÝˆv‰;Œ;˜!ÒÐÝÐ<Ñ=Ô=Ð=Ýð 	à˜A”YˆFð	2Ø—>’> &Ñ)Ô)Ð)øÝð 	2ð 	2ð 	2ÝÐ0Ñ1Ô1Ð1ð	2øøøs   Á'A< Á<Bc                 óž  — t          |t          ¦  «        st          dt          |¦  «        ›�¦  «        ‚t	          |¦  «        dk    rt          d¦  «        ‚| j        }	 | j        r& ||d         ¦  «         ||d         ¦  «        dz  z   S  ||d         ¦  «         ||d         ¦  «        dz  z   S # t          $ r t          d¦  «        ‚w xY w)z'decodes 2 char string -> 12-bit integerr‘   rS   zsource must be exactly 2 bytesr9   r   r    rÞ   ©	r;   r<   rY   r”   r=   rU   rƒ   r„   r¨   ©r‹   rF   r�   s      rJ   Údecode_int12zBase64Engine.decode_int12ß  sé   € å˜&¥%Ñ(Ô(ð 	NÝ�)½dÀ6¹l¼l¸lÐLÑMÔMÐMÝˆv‰;Œ;˜!ÒÐÝÐ=Ñ>Ô>Ð>Ø”ˆð	2ØŒxð BØ�v˜f QœiÑ(Ô(¨F¨F°6¸!´9Ñ,=Ô,=¸qÑ,@ÑAÐAà�v˜f QœiÑ(Ô(¨F¨F°6¸!´9Ñ,=Ô,=¸qÑ,@ÑAÐAøÝð 	2ð 	2ð 	2ÝÐ0Ñ1Ô1Ð1ð	2øøøs   Á,B2 Â%B2 Â2Cc                 óF  — t          |t          ¦  «        st          dt          |¦  «        ›�¦  «        ‚t	          |¦  «        dk    rt          d¦  «        ‚| j        }	 | j        rP ||d         ¦  «         ||d         ¦  «        dz  z    ||d         ¦  «        dz  z    ||d	         ¦  «        d
z  z   S  ||d	         ¦  «         ||d         ¦  «        dz  z    ||d         ¦  «        dz  z    ||d         ¦  «        d
z  z   S # t          $ r t          d¦  «        ‚w xY w)z'decodes 4 char string -> 24-bit integerr‘   r¡   zsource must be exactly 4 bytesrR   rS   r    r9   é   r   é   rÞ   rá   râ   s      rJ   Údecode_int24zBase64Engine.decode_int24î  s_  € å˜&¥%Ñ(Ô(ð 	NÝ�)½dÀ6¹l¼l¸lÐLÑMÔMÐMÝˆv‰;Œ;˜!ÒÐÝÐ=Ñ>Ô>Ð>Ø”ˆð	2ØŒxð IØ�v˜f QœiÑ(Ô(¨F¨F°6¸!´9Ñ,=Ô,=¸qÑ,@ÑAØ˜˜v aœyÑ)Ô)¨2Ñ-ñ/Ø28°&¸À¼Ñ2CÔ2CÀRÑ2GñIð Ið �v˜f QœiÑ(Ô(¨F¨F°6¸!´9Ñ,=Ô,=¸qÑ,@ÑAØ˜˜v aœyÑ)Ô)¨2Ñ-ñ/Ø28°&¸À¼Ñ2CÔ2CÀRÑ2GñIð Iøåð 	2ð 	2ð 	2ÝÐ0Ñ1Ô1Ð1ð	2øøøs   ÁAD Â6AD ÄD c                 ó.   — |                       |d¦  «        S )ú&decode 5 char string -> 30 bit integeré   ©rÜ   rÌ   s     rJ   Údecode_int30zBase64Engine.decode_int30ÿ  s   € à×Ò ¨Ñ+Ô+Ð+r3   c                 ó.   — |                       |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.
        rt   rë   rÌ   s     rJ   Údecode_int64zBase64Engine.decode_int64  s   € ð ×Ò ¨Ñ+Ô+Ð+r3   c                 óú   ‡— ‰dk    s
J d¦   «         ‚| dz  }||z  }| j         rt          |dz
  dd¦  «        }‰|z  Šnt          d|d¦  «        }t          t          | j        ˆfd„|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   zcaller did not sanitize inputr    iúÿÿÿc              3   ó(   •K  — | ]}‰|z	  d z  V — ŒdS )rž   Nrw   )rx   rZ   rz   s     €rJ   r{   z+Base64Engine._encode_int.<locals>.<genexpr>"  s,   øè è € Ð DÐ D¸ %¨¡*°Ñ!4Ð DÐ DÐ DÐ DÐ DÐ Dr3   )r„   r   r   r   r€   )r‹   rz   r´   rÚ   Úitrs    `   rJ   Ú_encode_intzBase64Engine._encode_int  s¦   ø€ ð ˜ŠzˆzˆzÐ:‰zŒzˆzØˆe�a‰iˆØ�‰ˆØŒ8ð 	%Ý˜˜a™  RÑ(Ô(ˆCà�c‰MˆEˆEå˜˜D !Ñ$Ô$ˆCå�t D¤NØ DÐ DÐ DÐ DÀÐ DÑ DÔ Dñ Fô  Fñ Gô Gð 	Gr3   c                 ó”   — |dk     s|dk    rt          d¦  «        ‚t          r| j        ||dz   …         S |                      |¦  «        S )z0encodes 6-bit integer -> single hash64 characterr   rž   úvalue out of ranger9   )rU   r   r~   r€   ©r‹   rz   s     rJ   Úencode_int6zBase64Engine.encode_int6(  sQ   € à�1Š9ˆ9˜ š
˜
ÝÐ1Ñ2Ô2Ð2Ýð 	)Ø”<  e¨A¡g Ô.Ð.à—>’> %Ñ(Ô(Ð(r3   c                 óÂ   — |dk     s|dk    rt          d¦  «        ‚|dz  |dz	  dz  g}| j        rt          |¦  «        }t          t	          | j        |¦  «        ¦  «        S )z'encodes 12-bit integer -> 2 char stringr   iÿ  rô   rž   r    ©rU   r„   rÙ   r   r   r€   ©r‹   rz   Úraws      rJ   Úencode_int12zBase64Engine.encode_int121  sh   € à�1Š9ˆ9˜ š˜ÝÐ1Ñ2Ô2Ð2Ø�t‰|˜e Q™h¨$Ñ.Ð/ˆØŒ8ð 	 Ý˜3‘-”-ˆCÝ�t D¤N°CÑ8Ô8Ñ9Ô9Ð9r3   c                 óÞ   — |dk     s|dk    rt          d¦  «        ‚|dz  |dz	  dz  |dz	  dz  |dz	  dz  g}| j        rt          |¦  «        }t          t	          | j        |¦  «        ¦  «        S )z'encodes 24-bit integer -> 4 char stringr   iÿÿÿ rô   rž   r    rå   ræ   rø   rù   s      rJ   Úencode_int24zBase64Engine.encode_int24:  sƒ   € à�1Š9ˆ9˜ Ò(Ð(ÝÐ1Ñ2Ô2Ð2Ø�t‰|˜e Q™h¨$Ñ.Ø�r‘	˜TÑ! E¨2¡I°Ñ#5ð7ˆàŒ8ð 	 Ý˜3‘-”-ˆCÝ�t D¤N°CÑ8Ô8Ñ9Ô9Ð9r3   c                 ód   — |dk     s|dk    rt          d¦  «        ‚|                      |d¦  «        S )ré   r   iÿÿÿ?rô   rê   ©rU   rò   rõ   s     rJ   Úencode_int30zBase64Engine.encode_int30D  s:   € à�1Š9ˆ9˜ 
Ò*Ð*ÝÐ1Ñ2Ô2Ð2Ø×Ò  rÑ*Ô*Ð*r3   c                 ód   — |dk     s|dk    rt          d¦  «        ‚|                      |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.
        r   l   ÿÿÿÿ rô   rt   rÿ   rõ   s     rJ   Úencode_int64zBase64Engine.encode_int64J  s=   € ð �1Š9ˆ9˜Ð 2Ò2Ð2ÝÐ1Ñ2Ô2Ð2Ø×Ò  rÑ*Ô*Ð*r3   )F)'Ú__name__Ú
__module__Ú__qualname__Ú__doc__r~   r„   r€   rƒ   r†   rˆ   r�   Úpropertyrs   rœ   r‰   r…   rª   rŠ   r‡   r½   r   r¿   rÂ   rÊ   rÍ   rÒ   r×   rÜ   rß   rã   rç   rì   rî   rò   rö   rû   rý   r   r  rw   r3   rJ   r)   r)   ý   s  € € € € € ð>ð >ðH €GØ
€Cð €IØ€Ið €MØ€Mð
;ð ;ð ;ð ;ðD ð.ð .ñ „Xð.ðð ð ð*%ð %ð %ðN%%ð %%ð %%ðVGð Gð Gð,!2ð !2ð !2ðF!.ð !.ð !.ðTð ð ð ð/ð /ñ Ôð/ð ð/ð /ñ Ôð/ð'(ð '(ð '(ðR3ð 3ð 3ð$&ð &ð &ð	$ð 	$ð 	$ð"ð "ð "ðP2ð 2ð 2ð2ð 2ð 2ð2ð 2ð 2ð",ð ,ð ,ð,ð ,ð ,ðGð Gð Gð4)ð )ð )ð:ð :ð :ð:ð :ð :ð+ð +ð +ð+ð +ð +ð +ð +r3   r)   c                   ó2   ‡ — e Zd ZdZdZd„ Zˆ fd„Zd„ Zˆ xZS )r*   z<Base64Engine which delays initialization until it's accessedNc                 ó   — ||f| _         d S rv   )Ú
_lazy_opts)r‹   r©   Úkwdss      rJ   r�   zLazyBase64Engine.__init__\  s   € Ø ˜,ˆŒˆˆr3   c                 óx   •— | j         \  }} t          t          | ¦  «        j        |i |¤Ž | ` t          | _        d S rv   )r
  Úsuperr*   r�   r)   Ú	__class__)r‹   r©   r  r  s      €rJ   Ú
_lazy_initzLazyBase64Engine._lazy_init_  sA   ø€ Ø”_‰
ˆˆdØ.�Õ Ñ%Ô%Ô.°Ð=¸Ð=Ð=Ð=ØˆOÝ%ˆŒˆˆr3   c                 óŠ   — |                      d¦  «        s|                      ¦   «          t                               | |¦  «        S )NÚ_)Ú
startswithr  ÚobjectÚ__getattribute__)r‹   Úattrs     rJ   r  z!LazyBase64Engine.__getattribute__e  s<   € Ø�Š˜sÑ#Ô#ð 	Ø�OŠOÑÔÐÝ×&Ò& t¨TÑ2Ô2Ð2r3   )	r  r  r  r  r
  r�   r  r  Ú__classcell__)r  s   @rJ   r*   r*   X  sa   ø€ € € € € ØFÐFØ€Jð'ð 'ð 'ð&ð &ð &ð &ð &ð3ð 3ð 3ð 3ð 3ð 3ð 3r3   r*   T)r„   rv   )Er  Ú
__future__r   r   r   Úbase64r   r   r   rn   r	   rb   Úbinasciir
   r   r   rX   ÚloggingÚ	getLoggerr  ÚlogÚpasslibr   Úpasslib.utils.compatr   r   r   r   r   r   r   r   r   r   r   r   Úpasslib.utils.decorr   Ú__all__r   r   r   r   r   r    r"   r!   r#   rC   ÚB_NULLrc   r>   r:   r$   r'   r(   rM   rW   rV   r%   r&   rl   rm   r  r)   r*   r+   r,   r-   rw   r3   rJ   ú<module>r"     sŠ  ððð ð AÐ @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @ðð ð ð ð ð ð ð ð ð ð ð ð EÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ €€€Ø€gÔ˜Ñ!Ô!€ð Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 2Ð 1Ð 1Ð 1Ð 1Ð 1ðð ð €ðJ ˆqÐSÑTÔT€ð ˆqÐSÑTÔT€
ð ˆqÐSÑTÔT€ð ˆqÐSÑTÔT€ð # Q Q s¡V¤VÑ+Ð ð ˆAÐ&Ñ'Ô'€	ð �!Ð&Ñ'Ô'€ð �!Ð&Ñ'Ô'€ð #Ð" 6 6¨#¡;¤;Ñ/Ô/€ð €Ø	€Ø
€ð �D˜˜¨Ñ9Ô9Ñ:Ô:Ð ð ð  ð  ð  ðB2ð 2ð 2ð-ð -ð -ð8 €Ø€Ø€ð
1ð 1ð 1ð1ð 1ð 1ð&=ð =ð =ð *Ð)°¸#Ð*>Ð*>Ñ?Ô?€ð ˜A‘+€ð$ð $ð $ð0U	+ð U	+ð U	+ð U	+ð U	+�6ñ U	+ô U	+ð U	+ðv3ð 3ð 3ð 3ð 3�|ñ 3ô 3ð 3ð, Ð�|Ñ$Ô$€Ø	Ð	˜,¨DÐ	1Ñ	1Ô	1€ØÐ˜L¨dÐ3Ñ3Ô3€€€r3   