B
    f]                 @   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	   1lib/python3.7/site-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   yt | W n" tk
r.   td| Y nX d S )Nz{} must be bytes-like)
memoryviewr   r   )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>)property)r   r	   )r   r
   read_only_property)   s    r   c                s    fdd}|S )Nc                s   t  |   |  | S )N)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 )N)r   r   )r   )r   	predicater	   r
   r   6   s    

z1register_interface_if.<locals>.register_decoratorr	   )r    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	byteordersignedr	   r	   r
   int_from_bytesA   s    r+   to_bytesc             C   s    |  |p|  d d pddS )N         r#   )r,   
bit_length)integerlengthr	   r	   r
   int_to_bytesI   s    r3   c             C   s:   d|  }|d krt |}n|d }t|||d@  S )Nz%x   r/   )lenr'   Z	unhexlifyzfill)r1   r2   Z
hex_stringnr	   r	   r
   r3   N   s
    
c               @   s   e Zd ZdS )InterfaceNotImplementedN)r   r   r   r	   r	   r	   r
   r8   W   s   r8   	signaturec             C   sz   xt| j D ]j}t||s&td||tt| |tjr:qtt| |}tt||}||krtd||||qW d S )Nz{} is missing a {!r} methodzK{}.{}'s signature differs from the expected. Expected: {!r}. Received: {!r})	__abstractmethods__hasattrr8   r   r   r   abcabstractpropertyr9   )r   r   methodZsigZactualr	   r	   r
   r   a   s    
r   c             C   s   |   S )N)r0   )xr	   r	   r
   r0   w   s    r0   c               @   s   e Zd Zdd ZdS )_DeprecatedValuec             C   s   || _ || _|| _d S )N)r   messagewarning_class)r   r   rA   rB   r	   r	   r
   __init__|   s    z_DeprecatedValue.__init__N)r   r   r   rC   r	   r	   r	   r
   r@   {   s   r@   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
   rC      s    z _ModuleWithDeprecations.__init__c             C   s4   t | j|}t|tr0tj|j|jdd |j}|S )Nr4   )
stacklevel)	r   rE   r   r@   warningswarnrA   rB   r   )r   attrobjr	   r	   r
   __getattr__   s
    
z#_ModuleWithDeprecations.__getattr__c             C   s   t | j|| d S )N)setattrrE   )r   rK   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 )Nr4   )rH   )	r   rE   r   r@   rI   rJ   rA   rB   delattr)r   rK   rL   r	   r	   r
   __delattr__   s    
z#_ModuleWithDeprecations.__delattr__c             C   s   dgt | j S )NrE   )dirrE   )r   r	   r	   r
   __dir__   s    z_ModuleWithDeprecations.__dir__N)r   r   r   rC   rM   rO   rQ   rS   r	   r	   r	   r
   rD      s
   rD   c             C   s.   t j| }t|ts"t|t j|< t| ||S )N)sysmodulesr   rD   r@   )r   Zmodule_namerA   rB   rG   r	   r	   r
   
deprecated   s    

rV   c                s(   d  t  fdd}t|S )Nz
_cached_{}c                s0   t |  }|k	r|S | }t|  | |S )N)r   rN   )instancecacheresult)cached_namefuncsentinelr	   r
   inner   s    zcached_property.<locals>.inner)r   objectr   )r[   r]   r	   )rZ   r[   r\   r
   cached_property   s    
r_   )F)N)N)$Z
__future__r   r   r   r<   r'   inspectrT   rI   UserWarningr   ZPersistentlyDeprecated2017ZPersistentlyDeprecated2018ZDeprecatedIn25ZDeprecatedIn27r   r   r   r   r!   r;   r&   r"   r+   r3   	Exceptionr8   r9   Z
getargspecr   r0   r^   r@   rD   rV   r_   r	   r	   r	   r
   <module>   s>   	



	
