관리-도구
편집 파일: encrypt.cpython-39.pyc
a �����)g)������������������� ���@���s���d�dl�mZmZmZ�eZd�dlZd�dlZd�dlZd�dl Z d�dl Z d�dlmZ�d�dl mZ�d�dlmZmZ�d�dlmZ�d�dlmZmZ�d�dlmZ�d�ZZd �ZZzXd�dlZd�dlZd�d l m!Z!m"Z"�zd�dl#m$Z$�W�n�e%y����d�dl&m$Z$�Y�n0�dZW�n*�e'�y"�Z(�ze(ZW�Y�dZ([(n dZ([(0�0�zd�dl)Z)dZW�n*�e'�y^�Z(�ze(ZW�Y�dZ([(n dZ([(0�0�e��Z*d gZ+e�,��Z-dZ.e.ej/dfdd�Z0ddd�Z1G�dd��de2�Z3G�dd��de3�Z4G�dd��de3�Z5ddd�Z6ddd �Z7dS�) �����)�absolute_import�division�print_functionN)� namedtuple)� constants)�AnsibleError�AnsibleAssertionError)� text_type)�to_text�to_bytes)�DisplayF)� HasRawSalt� PrefixWrapper)�bcrypt64T� do_encrypt����c��������������������sX���t���t�std��t���f���|du�r0t����n t�|��d����fdd�t|��D���S�)a��Return a random password string of length containing only chars :kwarg length: The number of characters in the new password. Defaults to 20. :kwarg chars: The characters to choose from. The default is all ascii letters, ascii digits, and these symbols ``.,:-_`` z%s (%s) is not a text_typeN��c�����������������3���s���|�]}������V��qd�S��N)�choice)�.0Zdummy��charsZrandom_generator���9/usr/lib/python3.9/site-packages/ansible/utils/encrypt.py� <genexpr>A��������z"random_password.<locals>.<genexpr>) � isinstancer ���r����type�randomZSystemRandomZRandom�join�range)�lengthr���Zseedr���r���r����random_password3���s���� r"�������c�����������������C���s���t�jt�j�d�}t|�|d�S�)zhReturn a text string suitable for use as a salt for the hash functions we use to encrypt passwords. z./)r!���r���)�string� ascii_letters�digitsr"���)r!���Z salt_charsr���r���r����random_saltD���s����r'���c���������������� ���@���sh���e�Zd�Zedg�d��Zedddddd�eddd d dd�eddd ddd�edddddd�d�Zdd��ZdS�)�BaseHash�algo)�crypt_id� salt_size�implicit_rounds� salt_exact�implicit_ident�1r#���NFZ2b��������T�5����i�)��6i� �)Z md5_crypt�bcryptZsha256_cryptZsha512_cryptc�����������������C���s ���||�_�d�S�r���)� algorithm��selfr6���r���r���r����__init__V���s����zBaseHash.__init__)�__name__� __module__�__qualname__r���r)���� algorithmsr9���r���r���r���r���r(���M���s����r(���c�����������������������sF���e�Zd�Z��fdd�Zddd�Zdd��Zdd ��Zd d��Zdd ��Z���Z S�)� CryptHashc��������������������sj���t�t|���|��ts tdtd��tj�d�r4td��||�j vrLtd|�j ���tjddd��|�j |�|�_ d�S�) NzYcrypt.crypt cannot be used as the 'crypt' python library is not installed or is unusable.��orig_exc�darwinzKcrypt.crypt not supported on Mac OS X/Darwin, install passlib python module�+crypt.crypt does not support '%s' algorithmz�Encryption using the Python crypt module is deprecated. The Python crypt module is deprecated and will be removed from Python 3.13. Install the passlib library for continued encryption functionality.g\��(\@)�version)�superr>���r9���� HAS_CRYPTr����CRYPT_E�sys�platform� startswithr=���r6����displayZ deprecated� algo_datar7����� __class__r���r���r9���[���s���� �zCryptHash.__init__Nc�����������������C���s0���|���||�}|��|�}|��|�}|��||||�S�r���)�_salt�_rounds�_ident�_hash�r8����secret�saltr+����rounds�identr���r���r����hashq���s���� zCryptHash.hashc�����������������C���sr���|p |�j�j}|pt|�}t�d|�r,td��|�j�jrNt|�|�j�jkrNtd��n |�j�jsnt|�|�j�jkrntd��|S�)Nz[^./0-9A-Za-z]zinvalid characters in saltzinvalid salt size)rK���r+���r'����re�searchr���r-����len)r8���rT���r+����retr���r���r���rN���w���s���� zCryptHash._saltc�����������������C���s���||�j�jkrd�S�|S�d�S�r���)rK���r,���)r8���rU���r���r���r���rO�������s����zCryptHash._roundsc�����������������C���s���|s|�j�jS�|�jdkr|S�d�S��Nr5���)rK���r*���r6���)r8���rV���r���r���r���rP�������s ���� zCryptHash._identc����������� ��� ���C���s����d}|rd|�}|r |d|�7�}|d|�7�}zt���||�}d�}W�n,�tyl�}�zd�}|}W�Y�d�}~n d�}~0�0�|s�td|�j�|d��|S�)Nr���z$%sz $rounds=%drB���r?���)�crypt�OSErrorr���r6���) r8���rS���rT���rU���rV���Z saltstring�resultr@����er���r���r���rQ�������s$�����zCryptHash._hash)NNNN) r:���r;���r<���r9���rW���rN���rO���rP���rQ���� __classcell__r���r���rL���r���r>���Z���s��� r>���c�����������������������sF���e�Zd�Z��fdd�Zddd�Zdd��Zdd ��Zd d��Zdd ��Z���Z S�)�PasslibHashc��������������������sZ���t�t|���|��ts$td|�td��zttj|�|�_ W�n�t yT���td|���Y�n0�d�S�)Nz6passlib must be installed and usable to hash with '%s'r?���z'passlib does not support '%s' algorithm)rD���rb���r9����PASSLIB_AVAILABLEr���� PASSLIB_E�getattr�passlibrW���� crypt_algo� Exceptionr7���rL���r���r���r9�������s����zPasslibHash.__init__Nc�����������������C���s2���|���|�}|��|�}|��|�}|�j|||||d�S�)N�rT���r+���rU���rV���)�_clean_salt� _clean_rounds�_clean_identrQ���rR���r���r���r���rW�������s���� zPasslibHash.hashc�����������������C���s:���d�}|s(|�j�|�jv�r$|�j�|�j��jS�|S�|�j�dkr6|S�|S�r\���)r6���r=����getr.���)r8���rV���r[���r���r���r���rl�������s���� zPasslibHash._clean_identc�����������������C���s^���|sd�S�t�t|�jt�r|�jjn|�jt�r8t|ddd�}nt|ddd�}|�jdkrZt � |�}|S�)N�ascii�strict)�encoding�errorsr5���)� issubclassr���rg���r����wrappedr ���r���r ���r6���r���Z repair_unused)r8���rT���r[���r���r���r���rj�������s���� zPasslibHash._clean_saltc�����������������C���s.���|�j��|�j�}|r|S�|r&|jr&|jS�d�S�d�S�r���)r=���rm���r6���r,���)r8���rU���rK���r���r���r���rk�������s���� zPasslibHash._clean_roundsc����������� ��� ���C���s����i�}|r||d<�|r||d<�|r(||d<�|r4||d<�zZt�|�jd�r\|�jjf�i�|���|�}n0t�|�jd�r~|�jj|fi�|��}ntdtj���W�n0�ty��}�ztd|d ��W�Y�d�}~n d�}~0�0�|s�td |�j ���t |dd�S�) NrT���r+���rU���rV���rW����encryptz*installed passlib version %s not supportedzCould not hash the secret.r?���z"failed to hash with algorithm '%s'ro���)rq���)�hasattrrg���ZusingrW���rt���r���rf����__version__� ValueErrorr6���r ���) r8���rS���rT���r+���rU���rV���Zsettingsr_���r`���r���r���r���rQ�������s(����"zPasslibHash._hash)NNNN) r:���r;���r<���r9���rW���rl���rj���rk���rQ���ra���r���r���rL���r���rb�������s��� rb���c�����������������C���sH���t�rt|�j|�||||d�S�tr8t|�j|�||||d�S�tdtd��d�S�)Nri���zFUnable to encrypt nor hash, either crypt or passlib must be installed.r?���)rc���rb���rW���rE���r>���r���rF���)rS���r6���rT���r+���rU���rV���r���r���r����passlib_or_crypt ��s ����rx���c�����������������C���s���t�|�||||d�S�)N)r+���rT���rV���)rx���)r_���rt���r+���rT���rV���r���r���r���r�����s����)r#���)NNNN)NNN)8Z __future__r���r���r���r���Z __metaclass__Zmultiprocessingr���rX���r$���rG����collectionsr���Zansibler����CZansible.errorsr���r���Zansible.module_utils.sixr ���Zansible.module_utils._textr ���r���Zansible.utils.displayr���rd���rF���rE���rc���rf���Zpasslib.hashZpasslib.utils.handlersr ���r���Zpasslib.utils.binaryr����ImportErrorZ passlib.utilsrh���r`���r]���rJ����__all__�LockZ_LOCKZDEFAULT_PASSWORD_LENGTHZDEFAULT_PASSWORD_CHARSr"���r'����objectr(���r>���rb���rx���r���r���r���r���r����<module>���sR��� U[