o
    sh8                     @   s  d dl Z d dlZd dlZd dlmZmZ zd dlmZ d dlm	Z	m
Z
 W n	 ey-   Y nw deeef defddZd	eeef defd
dZd	edefddZdddedee defddZdeeef defddZdededefddZdedefddZdddedee defddZdedd defd!d"Zd#edd defd$d%Zh d&Zed'd(e d) ejZd*edefd+d,Zd-Z d*edefd.d/Z!dS )0    N)OptionalUnion)EllipticCurve)decode_dss_signatureencode_dss_signaturevaluereturnc                 C   s*   t | tr
| dS t | tr| S td)Nzutf-8zExpected a string value)
isinstancestrencodebytes	TypeError)r    r   ]/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/jwt/utils.pyforce_bytes   s
   


r   inputc                 C   s6   t | }t|d }|dkr|dd|  7 }t|S )N   r      =)r   lenbase64urlsafe_b64decode)r   input_bytesremr   r   r   base64url_decode   s
   
r   c                 C   s   t | ddS )Nr       )r   urlsafe_b64encodereplace)r   r   r   r   base64url_encode$   s   r   
bit_lengthvalr   c                C   s4   | dk rt dt| |d}t|dkrd}t|S )Nr   zMust be a positive integerr       )
ValueErrorbytes_from_intr   r   )r    r   	int_bytesr   r   r   to_base64url_uint(   s   r%   c                 C   s   t t| }tj|ddS )Nbig)	byteorder)r   r   int
from_bytes)r    datar   r   r   from_base64url_uint4   s   r+   num	num_bytesc                 C   s    dd| | f }t |dS )Nz%0*x   ascii)binasciia2b_hexr   )r,   r-   
padded_hexr   r   r   number_to_bytes9   s   r3   stringc                 C   s   t t| dS )N   )r(   r0   b2a_hex)r4   r   r   r   bytes_to_number>   s   r7   c                C   s,   |d u r|   }|d d }| j|dddS )N      r&   F)signed)r   to_bytes)r    r   byte_lengthr   r   r   r#   B   s   r#   der_sigcurver   c                 C   s2   |j }|d d }t| \}}t||t|| S )Nr8   r9   )key_sizer   r3   )r=   r>   num_bitsr-   rsr   r   r   der_to_raw_signatureJ   s   rC   raw_sigc                 C   sX   |j }|d d }t| d| krtdt| d | }t| |d  }tt||S )Nr8   r9   r.   zInvalid signature)r?   r   r"   r7   r   r   )rD   r>   r@   r-   rA   rB   r   r   r   raw_to_der_signatureS   s   rE   >      X509 CRL
   PUBLIC KEY   CERTIFICATE   PRIVATE KEY   DH PARAMETERS   EC PRIVATE KEY   RSA PUBLIC KEY   DSA PRIVATE KEY   RSA PRIVATE KEY   SSH2 PUBLIC KEY   CERTIFICATE REQUEST   OPENSSH PRIVATE KEY   TRUSTED CERTIFICATE   ENCRYPTED PRIVATE KEY   NEW CERTIFICATE REQUEST   SSH2 ENCRYPTED PRIVATE KEYs   ----[- ]BEGIN (   |s,   )[- ]----?
.+??
----[- ]END \1[- ]----?
?keyc                 C   s   t t| S N)bool_PEM_REsearchrW   r   r   r   is_pem_format~   s   r]   )s   ssh-ed25519s   ssh-rsas   ssh-dsss   ecdsa-sha2-nistp256s   ecdsa-sha2-nistp384s   ecdsa-sha2-nistp521c                 C   s
   |  tS rX   )
startswith_SSH_KEY_FORMATSr\   r   r   r   
is_ssh_key   s   
r`   )"r   r0   retypingr   r   ,cryptography.hazmat.primitives.asymmetric.ecr   /cryptography.hazmat.primitives.asymmetric.utilsr   r   ModuleNotFoundErrorr   r
   r   r   r   r(   r%   r+   r3   r7   r#   rC   rE   _PEMScompilejoinDOTALLrZ   rY   r]   r_   r`   r   r   r   r   <module>   s@    	  	

