관리-도구
편집 파일: binary.cpython-39.opt-1.pyc
a ����f�Wc�z����������������������@���s���d�Z�ddlmZmZmZ�ddlmZmZmZ m Z�ddlm Z mZmZ�ddlZe�e�ZddlmZ�ddlmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#�ddl$m%Z%�g�d �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)��ZG�d*d+��d+e?�Z@G�d,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_decoder���r����Base64Engine�LazyBase64Engine�h64�h64big�bcrypt64z@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/z@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./z@./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzz@./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789�=Z0123456789abcdefABCDEFZ0123456789ABCDEFZ0123456789abcdef������������������=c�����������������C���sl���|du�rt�dd��}ntt|��}|����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#���n���s���� r#���c�����������������C���s���t�|���t�S�)zr encode using shortened base64 format which omits padding & whitespace. uses default ``+/`` altchars. )r ����rstrip� _BASE64_STRIP��datar@���r@���rA���r&�������s����r&���c�������������� ���C���s����t�|�t�r8z|��d�}�W�n�ty6���ttd���Y�n0�t|��d@�}|dkrNn,|dkr`|�t7�}�n|dkrr|�t7�}�ntd��z t |��W�S��t y��}�ztt|���W�Y�d}~n d}~0�0�dS�)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)r6���r���r8����UnicodeEncodeErrorr���� ValueError�len�_BASE64_PAD2�_BASE64_PAD1r ����_BinAsciiError� TypeError)rE����off�errr@���r@���rA���r'�������s"���� r'���s���= s���==c�����������������C���s���t�|���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&����replacerD���r@���r@���rA���r$�������s����r$���c�����������������C���sH���t�|�t�r8z|��d�}�W�n�ty6���ttd���Y�n0�t|��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. r2���rF���rS���rR���)r6���r���r8���rI���r���rJ���r'���rT���rD���r@���r@���rA���r%�������s���� r%���c�����������������C���s���t�t|���t��S�)zh wrapper around :func:`base64.b32encode` which strips padding, and returns a native string. )r���� _b32encoderB����B_EQUAL�r<���r@���r@���rA���r�������s����r����B�O)�8�0����c�����������������C���sJ���t�|�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)r6���r���r8���� translate�_b32_translaterK����_b32_decode_pad� _b32decode)r<���Z remainderr@���r@���rA���r�������s���� r���c�������������������@���s��e�Zd�ZdZdZdZdZdZdZdZ d:dd�Z edd���Zdd ��Z d d��Zdd ��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(���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�����������������C���s����t�|t�r|�d�}nt�|t�s,t�|d��t|�dkr@td��tt|��dkrXtd��||�_ |j |�_tdd��t |�D���}|j |�_||�_|r�|�j|�_|�j|�_n|�j|�_|�j|�_d�S�)N�latin-1�charmap�@���z'charmap must be 64 characters in lengthz-charmap must not contain duplicate charactersc�����������������s���s���|�]\}}||fV��qd�S��Nr@���)�.0�idx�valuer@���r@���rA���� <genexpr>]��r/���z(Base64Engine.__init__.<locals>.<genexpr>)r6���r���r8����bytesr���ZExpectedStringErrorrK���rJ����set�bytemap�__getitem__� _encode64�dict� enumerate� _decode64�big�_encode_bytes_big� _encode_bytes�_decode_bytes_big� _decode_bytes�_encode_bytes_little�_decode_bytes_little)�selfrc���rr����lookupr@���r@���rA����__init__Q��s$���� zBase64Engine.__init__c�����������������C���s���|�j��d�S�)zcharmap as unicoderb���)rl����decode)ry���r@���r@���rA���rc���s��s����zBase64Engine.charmapc�����������������C���st���t�|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 %srG���c�����������������s���s���|�]}t�|�V��qd�S�re���)r7���)rf����elemr@���r@���rA���ri������r/���z,Base64Engine.encode_bytes.<locals>.<genexpr>) r6���rj���rO����type�divmodrK���r ���r����iterrt���r���r���rn���)ry���r<����chunks�tail� next_value�gen�outr@���r@���rA����encode_bytes{��s���� zBase64Engine.encode_bytesc�����������������c���s����d}||k�rh|��}|��}|��}|d@�V��|d@�d>�|d?�B�V��|d@�d>�|d?�B�V��|d?�V��|d7�}q|r�|��}|dkr�|d@�V��|d?�V��n0|��}|d@�V��|d@�d>�|d?�B�V��|d?�V��d S�) z>helper used by encode_bytes() to handle little-endian encodingr����?�������rH�������rG�����������Nr@����ry���r����r����r����rg����v1�v2�v3r@���r@���rA���rw������s&���� z!Base64Engine._encode_bytes_littlec�����������������c���s����d}||k�rh|��}|��}|��}|d?�V��|d@�d>�|d?�B�V��|d@�d>�|d?�B�V��|d@�V��|d7�}q|r�|��}|dkr�|d?�V��|d@�d>�V��n4|��}|d?�V��|d@�d>�|d?�B�V��|d@�d>�V��d S�) z;helper used by encode_bytes() to handle big-endian encodingr���rH���rG���r����r����r����r����r����Nr@���r����r@���r@���rA���rs������s&���� zBase64Engine._encode_bytes_bigc�������������� ���C���s����t�|t�stdt|�f���tt|�d�\}}|dkr>td��tt|�j |��}zt |��|||��W�S��ty��}�z td|j d�f���W�Y�d}~n d}~0�0�dS�)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: %rr���N)r6���rj���rO���r���r����rK���rJ���r���r���rq���r���rv����KeyError�args)ry���r<���r����r����r����rQ���r@���r@���rA����decode_bytes���s���� zBase64Engine.decode_bytesc����������� ������c���s����d}||k�rh|��}|��}|��}|��}||d@�d>�B�V��|d?�|d@�d>�B�V��|d?�|d>�B�V��|d7�}q|r�|��}|��}||d@�d>�B�V��|dkr�|��}|d?�|d@�d>�B�V��dS�) z>helper used by decode_bytes() to handle little-endian encodingr���rG���r����rH���r����r����r����Nr@���� ry���r����r����r����rg���r����r����r����Zv4r@���r@���rA���rx������s"���� z!Base64Engine._decode_bytes_littlec����������� ������c���s����d}||k�rh|��}|��}|��}|��}|d>�|d?�B�V��|d@�d>�|d?�B�V��|d@�d>�|B�V��|d7�}q|r�|��}|��}|d>�|d?�B�V��|dkr�|��}|d@�d>�|d?�B�V��dS�) z;helper used by decode_bytes() to handle big-endian encodingr���rH���r����r����rG���r����r����Nr@���r����r@���r@���rA���ru�����s"���� zBase64Engine._decode_bytes_bigc��������������������sB���t���fdd�t|�j�D���}|���fdd�t|�j�D����t|�S�)z2helper to generate set of valid last chars & bytesc�����������������3���s���|�]\}}|��@�s|V��qd�S�re���r@����rf����i�c��bitsr@���rA���ri���G��r/���z-Base64Engine.__make_padset.<locals>.<genexpr>c�����������������3���s���|�]\}}|��@�s|V��qd�S�re���r@���r����r����r@���rA���ri���H��r/���)rk���rp���rl����updaterc���� frozenset)ry���r����Zpsetr@���r����rA���Z __make_padsetE��s����zBase64Engine.__make_padsetc�����������������C���s���|�j�r dnd}|�|��|�fS�)zDmask to clear padding bits, and valid last bytes (for strings 2 % 4)r�����<����rr����_Base64Engine__make_padset�ry���r����r@���r@���rA���� _padinfo2K��s����zBase64Engine._padinfo2c�����������������C���s���|�j�r dnd}|�|��|�fS�)zDmask to clear padding bits, and valid last bytes (for strings 3 % 4)rG����0���r����r����r@���r@���rA���� _padinfo3R��s����zBase64Engine._padinfo3c�����������������C���s����t�|�d@�}|dkr |�j\}}n(|dkr4|�j\}}n|s@d|fS�td��|d�}||v�r`d|fS�t|t�r�|�j}||�|�|@��}n"|��|�� |�|@��}t r�t|g�}d|dd��|�fS�)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. rG���rH���Fzsource length must != 1 mod 4���TN)rK���r����r����rJ���r6���r���rc����indexrn���rq���r ���rj���)ry���r<���r�����maskZpadsetZlast�cmr@���r@���rA����check_repair_unusedY��s&���� z Base64Engine.check_repair_unusedc�����������������C���s���|���|�d�S�)Nr����)r�����ry���r<���r@���r@���rA���� repair_unused���s����zBase64Engine.repair_unusedc��������������������s<���t���t�stdt���f���t��fdd�|D���}|��|�S�)z>encode byte string, first transposing source using offset listr}���c�����������������3���s���|�]}��|�V��qd�S�re���r@����rf���rP���rW���r@���rA���ri������r/���z7Base64Engine.encode_transposed_bytes.<locals>.<genexpr>)r6���rj���rO���r���r���r����)ry���r<����offsets�tmpr@���rW���rA����encode_transposed_bytes���s���� z$Base64Engine.encode_transposed_bytesc�����������������C���s<���|���|�}dgt|��}t||�D�]\}}|||<�q"t|�S�)zGdecode byte string, then reverse transposition described by offset listN)r����rK����zipr���)ry���r<���r����r�����bufrP����charr@���r@���rA����decode_transposed_bytes���s ���� z$Base64Engine.decode_transposed_bytesc����������� ������C���s����t�|t�stdt|�f���|�j}|�d�}||�d�}t|�|krRtd|f���|�j}d}z*|rf|nt|�D�]}|d>�||��}qnW�n �t y����td|f���Y�n0�|r�|r�||L�}n|d|>�d�M�}|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 charsr���zinvalid character in string: %rr����) r6���rj���rO���r���rr���rK���rJ���rq����reversedr����) ry���r<���r����rr����pad�charsr|���r����r����r@���r@���rA����_decode_int���s&���� zBase64Engine._decode_intc�����������������C���sh���t�|t�stdt|�f���t|�dkr0td��tr<|d�}z|��|�W�S��tyb���td��Y�n0�dS�)z(decode single character -> 6 bit integerr}���r����zsource must be exactly 1 byter����invalid characterN) r6���rj���rO���r���rK���rJ���r ���rq���r����r����r@���r@���rA����decode_int6���s���� zBase64Engine.decode_int6c�����������������C���s����t�|t�stdt|�f���t|�dkr0td��|�j}zF|�jr\||d��||d��d>��W�S�||d��||d��d>��W�S�W�n�ty����td��Y�n0�dS�) z'decodes 2 char string -> 12-bit integerr}���rH���zsource must be exactly 2 bytesr����r���r����r����N� r6���rj���rO���r���rK���rJ���rq���rr���r�����ry���r<���r|���r@���r@���rA����decode_int12���s���� "zBase64Engine.decode_int12c�����������������C���s����t�|t�stdt|�f���t|�dkr0td��|�j}z�|�jr|||d��||d��d>��||d��d>��||d ��d >��W�S�||d ��||d��d>��||d��d>��||d��d >��W�S�W�n�ty����td��Y�n0�dS�) z'decodes 4 char string -> 24-bit integerr}���r����zsource must be exactly 4 bytesrG���rH���r����r��������r�������r����Nr����r����r@���r@���rA����decode_int24���s&���� ���� zBase64Engine.decode_int24c�����������������C���s���|���|d�S�)�&decode 5 char string -> 30 bit integer�����r����r����r@���r@���rA����decode_int30���s����zBase64Engine.decode_int30c�����������������C���s���|���|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. rd���r����r����r@���r@���rA����decode_int64��s����zBase64Engine.decode_int64c��������������������s\���|�d�}||7�}|�j�r2t|d�dd�}��|K���ntd|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����r���c�����������������3���s���|�]}��|?�d�@�V��qdS�)r����Nr@���r�����rh���r@���rA���ri���"��r/���z+Base64Engine._encode_int.<locals>.<genexpr>)rr���r���r���r���rn���)ry���rh���r����r�����itrr@���r����rA����_encode_int��s���� �zBase64Engine._encode_intc�����������������C���s<���|dk�s|dkrt�d��tr.|�j||d���S�|��|�S�dS�)z0encodes 6-bit integer -> single hash64 characterr���r�����value out of ranger����N)rJ���r ���rl���rn����ry���rh���r@���r@���rA����encode_int6(��s ����zBase64Engine.encode_int6c�����������������C���sJ���|dk�s|dkrt�d��|d@�|d?�d@�g}|�jr:t|�}tt|�j|��S�)z'encodes 12-bit integer -> 2 char stringr���i���r����r����r�����rJ���rr���r����r���r���rn����ry���rh����rawr@���r@���rA����encode_int121��s����zBase64Engine.encode_int12c�����������������C���s^���|dk�s|dkrt�d��|d@�|d?�d@�|d?�d@�|d?�d@�g}|�jrNt|�}tt|�j|��S�)z'encodes 24-bit integer -> 4 char stringr���i����r����r����r����r����r����r����r����r@���r@���rA����encode_int24:��s�����zBase64Engine.encode_int24c�����������������C���s$���|dk�s|dkrt�d��|��|d�S�)r����r���i���?r����r�����rJ���r����r����r@���r@���rA����encode_int30D��s����zBase64Engine.encode_int30c�����������������C���s$���|dk�s|dkrt�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����rd���r����r����r@���r@���rA����encode_int64J��s����zBase64Engine.encode_int64)F)'�__name__� __module__�__qualname__�__doc__rl���rr���rn���rq���rt���rv���r{����propertyrc���r����rw���rs���r����rx���ru���r����r���r����r����r����r����r����r����r����r����r����r����r����r����r����r����r����r����r����r����r@���r@���r@���rA���r(�������sJ���D " '+#* )( r(���c�����������������������s4���e�Zd�ZdZdZdd��Z��fdd�Zdd��Z���ZS�) r)���z<Base64Engine which delays initialization until it's accessedNc�����������������O���s���||f|�_�d�S�re���)� _lazy_opts�ry���r�����kwdsr@���r@���rA���r{���\��s����zLazyBase64Engine.__init__c��������������������s.���|�j�\}}tt|��j|i�|���|�`�t|�_d�S�re���)r�����superr)���r{���r(���� __class__r�����r����r@���rA���� _lazy_init_��s���� zLazyBase64Engine._lazy_initc�����������������C���s���|��d�s|�����t�|�|�S�)N�_)� startswithr�����object�__getattribute__)ry����attrr@���r@���rA���r����e��s���� z!LazyBase64Engine.__getattribute__) r����r����r����r����r����r{���r����r����� __classcell__r@���r@���r����rA���r)���X��s ���r)���T)rr���)N)Er����Z __future__r���r���r����base64r���r���r���ra���r���rU���Zbinasciir ���r ���r���rN���ZloggingZ getLoggerr�����logZpasslibr���Zpasslib.utils.compatr ���r���r���r���r���r���r���r���r���r���r���r���Zpasslib.utils.decorr����__all__r���r���r���r���r���r���r!���r ���r"���r9���ZB_NULLrV���r4���r3���r#���r&���r'���rC���rM���rL���r$���r%���r_���r`���r����r(���r)���r*���r+���r,���r@���r@���r@���rA����<module>���sV��� 8% ! ����_