U
    ʹh                     @   s  d Z ddlZddlZddlZddlmZ dd Zejdk rddlZdd Z	d	d
 Z
ejdk srejdk sre dkrdd Zdd Zdd Zndd Zdd Zdd Zdd Zdd Zdd Zd)ddZn@d d
 Z
d!d Z	d"d Zd#d Zd$d ZejZd%d Zd*d&dZd'd( ZdS )+zD
Common functions for providing cross-python version compatibility.
    N)integer_typesc                 C   s   | | }t |tr|S t|S )z1Take index'th byte from string, return as integer)
isinstancer   ord)stringindexval r   3./venv/lib/python3.8/site-packages/ecdsa/_compat.pystr_idx_as_int
   s    
r
   )   r   c                 C   s   t | S )#Cast the input into array of bytes.)bufferZbuffer_objectr   r   r	   normalise_bytes   s    r   c                 C   s   | S Nr   )retr   r   r	   hmac_compat   s    r   )      )r   r      ZJavac                 C   s   t dd| S ),Removes all whitespace from passed in string\s+ )resubtextr   r   r	   remove_whitespace#   s    r   c                 C   s   t | S r   )strr   r   r   r	   compat26_str'   s    r    c                 C   s   | dkrdS t t| d S )Nr   r   )lenbinr   r   r   r	   
bit_length*   s    r#   c                 C   s   t jdd| t jdS r   r   r   )flagsr   r   UNICODEr   r   r   r	   r   1   s    c                 C   s   | S r   r   r   r   r   r	   r    5   s    c                 C   s   |   S z8Return number of bits necessary to represent an integer.r#   r   r   r   r	   r#   8   s    c                 C   s   t t| S r   )binasciib2a_hexr    r   r   r   r	   r+   <   s    r+   c              
   C   sD   zt t| W S  tk
r> } ztd| W 5 d }~X Y nX d S )Nbase16 error: %s	bytearrayr*   a2b_hex	Exception
ValueErrorr   er   r   r	   r/   ?   s    r/   c                 C   sJ   | sdS |dkrt t| dS |dkr>t t| ddd dS tddS )zConvert bytes to an int.r   big   littleNz(Only 'big' and 'little' endian supported)intr+   r1   )r   	byteorderr   r   r	   bytes_to_intE   s    r:   r4   c                    st   |dkrt  }|dkr>t fddttd|d dD S |dkrht fddtd|d dD S td	dS )
z Return number converted to bytesNr4   c                 3   s   | ]} |? d @ V  qdS    Nr   .0ir   r   r	   	<genexpr>T   s    zint_to_bytes.<locals>.<genexpr>r      r6   c                 3   s   | ]} |? d @ V  qdS r;   r   r=   r   r   r	   r@   X   s    z'Only 'big' or 'little' endian supported)byte_lengthr.   reversedranger1   r   lengthr9   r   r   r	   int_to_bytesO   s    rG   c                 C   s   | S r   r   )datar   r   r	   r   _   s    c                 C   s   t | dS )r   B)
memoryviewcastr   r   r   r	   r   b   s    c                 C   s   | S r   r   r   r   r   r	   r    f   s    c                 C   s   t jdd| t jdS r$   r&   r   r   r   r	   r   i   s    c              
   C   sJ   zt tt | dW S  tk
rD } ztd| W 5 d }~X Y nX d S )Nasciir,   r-   r2   r   r   r	   r/   m   s    c                 C   s   |   S r(   r)   r   r   r   r	   r#   y   s    c                 C   s4   |dkrt | }t| ts"t| } t| j||dS )zConvert integer to bytes.N)rF   r9   )rB   r   r8   r.   to_bytesrE   r   r   r	   rG   }   s
    
c                 C   s   t | }|d d S )z9Return number of bytes necessary to represent an integer.r   rA   r)   )r   rF   r   r   r	   rB      s    rB   )Nr4   )Nr4   )__doc__sysr   r*   Zsixr   r
   version_infoplatformr   r   systemr   r    r#   r+   r/   r:   rG   r8   
from_bytesrB   r   r   r   r	   <module>   sD   



	

