U
    *}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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
   6/tmp/pip-unpacked-wheel-x36vw73o/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&   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t |rt tt| dS )Nbig   )AssertionErrorintbinasciihexlify)data	byteordersignedr
   r
   r   int_from_bytesB   s    r5   to_bytesc                 C   s    |  |p|  d d pddS )N         r,   )r6   
bit_length)integerlengthr
   r
   r   int_to_bytesK   s     r=   c                 C   s:   d|  }|d krt |}n|d }t|||d@  S )Nz%x   r9   )lenr0   	unhexlifyzfill)r;   r<   Z
hex_stringnr
   r
   r   r=   S   s
    
c                   @   s   e Zd ZdS )InterfaceNotImplementedNr   r
   r
   r
   r   rC   \   s   rC   	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__hasattrrC   r   r   r   abcabstractpropertyrD   )r%   r#   methodsig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   rM   rN   r
   r
   r   __init__y   s    z_DeprecatedValue.__init__N)r   r   r	   rO   r
   r
   r
   r   rL   x   s   rL   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   rO      s    z _ModuleWithDeprecations.__init__c                 C   s4   t | j|}t|tr0tj|j|jdd |j}|S Nr>   )
stacklevel)	r   rR   r   rL   warningswarnrM   rN   r   r   attrobjr
   r
   r   __getattr__   s
    
z#_ModuleWithDeprecations.__getattr__c                 C   s   t | j|| d S r   )setattrrR   )r   rZ   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 rU   )	r   rR   r   rL   rW   rX   rM   rN   delattrrY   r
   r
   r   __delattr__   s    
z#_ModuleWithDeprecations.__delattr__c                 C   s   dgt | j S rQ   )dirrR   r   r
   r
   r   __dir__   s    z_ModuleWithDeprecations.__dir__N)r   r   r	   rO   r\   r^   r`   rb   r
   r
   r
   r   rP      s
   rP   c                 C   s.   t j| }t|ts"t|t j|< t| ||S r   )sysmodulesr   rP   rL   )r   module_namerM   rN   rT   r
   r
   r   
deprecated   s    

rf   c                    s(   d  t  fdd}t|S )Nz
_cached_{}c                    s0   t |  }|k	r|S | }t|  | |S r   )r   r]   )instancecacheresultZcached_namefuncsentinelr
   r   inner   s    zcached_property.<locals>.inner)r   objectr   )rk   rm   r
   rj   r   cached_property   s    
ro   )F)N)N)!
__future__r   r   r   rG   r0   inspectrc   rW   UserWarningr   ZPersistentlyDeprecated2017ZPersistentlyDeprecated2019r   r   r   r'   r*   rF   r/   r+   r5   r=   	ExceptionrC   rD   
getargspecr    rn   rL   rP   rf   ro   r
   r
   r
   r   <module>   s8   	

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