U
    e]                     @   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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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   s4   zt | W n" tk
r.   td| Y nX 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&   6   s    

z1register_interface_if.<locals>.register_decoratorr
   )r)   r%   r&   r
   r(   r   register_interface_if5   s    r*   
from_bytesFc                 C   s$   |dkst |rt tt| dS )Nbig   )AssertionErrorintbinasciiZhexlify)data	byteorderZsignedr
   r
   r   int_from_bytesA   s    r3   to_bytesc                 C   s    |  |p|  d d pddS )N         r,   )r4   
bit_length)integerlengthr
   r
   r   int_to_bytesI   s     r;   c                 C   s:   d|  }|d krt |}n|d }t|||d@  S )Nz%x   r7   )lenr0   Z	unhexlifyzfill)r9   r:   Z
hex_stringnr
   r
   r   r;   N   s
    
c                   @   s   e Zd ZdS )InterfaceNotImplementedNr   r
   r
   r
   r   r@   W   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abstractpropertyrA   )r%   r#   methodZsigZactualr
   r
   r   r    a   s$    


   r    c                 C   s   |   S r   )r8   )xr
   r
   r   r8   w   s    r8   c                   @   s   e Zd Zdd ZdS )_DeprecatedValuec                 C   s   || _ || _|| _d S r   )r   messagewarning_class)r   r   rI   rJ   r
   r
   r   __init__|   s    z_DeprecatedValue.__init__N)r   r   r	   rK   r
   r
   r
   r   rH   {   s   rH   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   rK      s    z _ModuleWithDeprecations.__init__c                 C   s4   t | j|}t|tr0tj|j|jdd |j}|S Nr<   )
stacklevel)	r   rN   r   rH   warningswarnrI   rJ   r   r   attrobjr
   r
   r   __getattr__   s
    
z#_ModuleWithDeprecations.__getattr__c                 C   s   t | j|| d S r   )setattrrN   )r   rV   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 rQ   )	r   rN   r   rH   rS   rT   rI   rJ   delattrrU   r
   r
   r   __delattr__   s    
z#_ModuleWithDeprecations.__delattr__c                 C   s   dgt | j S rM   )dirrN   r   r
   r
   r   __dir__   s    z_ModuleWithDeprecations.__dir__N)r   r   r	   rK   rX   rZ   r\   r^   r
   r
   r
   r   rL      s
   rL   c                 C   s.   t j| }t|ts"t|t j|< t| ||S r   )sysmodulesr   rL   rH   )r   Zmodule_namerI   rJ   rP   r
   r
   r   
deprecated   s    

ra   c                    s(   d  t  fdd}t|S )Nz
_cached_{}c                    s0   t |  }|k	r|S | }t|  | |S r   )r   rY   )instancecacheresultZcached_namefuncsentinelr
   r   inner   s    zcached_property.<locals>.inner)r   objectr   )rf   rh   r
   re   r   cached_property   s    
rj   )F)N)N)$Z
__future__r   r   r   rD   r0   inspectr_   rS   UserWarningr   ZPersistentlyDeprecated2017ZPersistentlyDeprecated2018ZDeprecatedIn25ZDeprecatedIn27r   r   r   r'   r*   rC   r/   r+   r3   r;   	Exceptionr@   rA   Z
getargspecr    r8   ri   rH   rL   ra   rj   r
   r
   r
   r   <module>   s>   	



	
