a
     `                     @   s  d dl mZmZmZ d dlZd dlZd dlZd dlZd dlZG dd de	Z
e
Ze
Zdd Zdd Zd	d
 Zdd Zdd ZeedrejZn
d$ddZeedrd%ddZn
d&ddZG dd deZeedrejZnejZdd ZG dd deZG dd deZd d! Zd"d# Z dS )'    )absolute_importdivisionprint_functionNc                   @   s   e Zd ZdS )CryptographyDeprecationWarningN__name__
__module____qualname__ r
   r
   4/usr/lib/python3/dist-packages/cryptography/utils.pyr      s   r   c                 C   s   t |tstd| d S )Nz{} must be bytes)
isinstancebytes	TypeErrorformatnamevaluer
   r
   r   _check_bytes   s    
r   c                 C   s2   zt | W n  ty,   td| Y n0 d S )Nz{} must be bytes-like)
memoryviewr   r   r   r
   r
   r   _check_byteslike    s    r   c                    s   t  fddS )Nc                    s
   t |  S N)getattrselfr   r
   r   <lambda>(       z$read_only_property.<locals>.<lambda>)propertyr   r
   r   r   read_only_property'   s    r   c                    s    fdd}|S )Nc                    s   t  |   |  | S r   verify_interfaceregisterklassifacer
   r   register_decorator,   s    

z.register_interface.<locals>.register_decoratorr
   )r%   r&   r
   r$   r   register_interface+   s    r'   c                    s    fdd}|S )Nc                    s   rt  |   |  | S r   r   r"   r%   	predicater
   r   r&   5   s    

z1register_interface_if.<locals>.register_decoratorr
   )r)   r%   r&   r
   r(   r   register_interface_if4   s    r*   
from_bytesFc                 C   s$   |dksJ |rJ t t| dS )Nbig   )intbinasciiZhexlify)data	byteorderZsignedr
   r
   r   int_from_bytesB   s    r2   to_bytesc                 C   s    |  |p|  d d pddS )N         r,   )r3   
bit_length)integerlengthr
   r
   r   int_to_bytesK   s    r:   c                 C   s:   d|  }|d u rt |}n|d }t|||d@  S )Nz%x   r6   )lenr/   Z	unhexlifyzfill)r8   r9   Z
hex_stringnr
   r
   r   r:   S   s
    
c                   @   s   e Zd ZdS )InterfaceNotImplementedNr   r
   r
   r
   r   r?   \   s   r?   	signaturec                 C   sv   | j D ]j}t||s$td||tt| |tjr8qtt| |}tt||}||krtd||||qd S )Nz{} is missing a {!r} methodzK{}.{}'s signature differs from the expected. Expected: {!r}. Received: {!r})	__abstractmethods__hasattrr?   r   r   r   abcabstractpropertyr@   )r%   r#   methodZsigZactualr
   r
   r   r    f   s    


r    c                   @   s   e Zd Zdd ZdS )_DeprecatedValuec                 C   s   || _ || _|| _d S r   )r   messagewarning_class)r   r   rG   rH   r
   r
   r   __init__y   s    z_DeprecatedValue.__init__N)r   r   r	   rI   r
   r
   r
   r   rF   x   s   rF   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )_ModuleWithDeprecationsc                 C   s   || j d< d S N_module)__dict__)r   moduler
   r
   r   rI      s    z _ModuleWithDeprecations.__init__c                 C   s4   t | j|}t|tr0tj|j|jdd |j}|S Nr;   )
stacklevel)	r   rL   r   rF   warningswarnrG   rH   r   r   attrobjr
   r
   r   __getattr__   s
    
z#_ModuleWithDeprecations.__getattr__c                 C   s   t | j|| d S r   )setattrrL   )r   rT   r   r
   r
   r   __setattr__   s    z#_ModuleWithDeprecations.__setattr__c                 C   s:   t | j|}t|tr*tj|j|jdd t| j| d S rO   )	r   rL   r   rF   rQ   rR   rG   rH   delattrrS   r
   r
   r   __delattr__   s    
z#_ModuleWithDeprecations.__delattr__c                 C   s   dgt | j S rK   )dirrL   r   r
   r
   r   __dir__   s    z_ModuleWithDeprecations.__dir__N)r   r   r	   rI   rV   rX   rZ   r\   r
   r
   r
   r   rJ      s
   rJ   c                 C   s.   t j| }t|ts"t|t j|< t| ||S r   )sysmodulesr   rJ   rF   )r   Zmodule_namerG   rH   rN   r
   r
   r   
deprecated   s    

r_   c                    s(   d  t  fdd}t|S )Nz
_cached_{}c                    s0   t |  }|ur|S | }t|  | |S r   )r   rW   )instancecacheresultZcached_namefuncsentinelr
   r   inner   s    zcached_property.<locals>.inner)r   objectr   )rd   rf   r
   rc   r   cached_property   s    
rh   )F)N)N)!Z
__future__r   r   r   rC   r/   inspectr]   rQ   UserWarningr   ZPersistentlyDeprecated2017ZPersistentlyDeprecated2019r   r   r   r'   r*   rB   r.   r+   r2   r:   	Exceptionr?   r@   Z
getargspecr    rg   rF   rJ   r_   rh   r
   r
   r
   r   <module>   s8   	




	
