a
    !f?                     @   st  d dl Z d dlZd dlZd dlmZ z d dlmZ d dlmZm	Z	 W n e
yV   Y n0 eeef edddZeeef edd	d
ZeedddZeedddZeeef edddZeeedddZeedddZeedddZededddZededdd Zh d!Zed"d#e d$ ejZeed%d&d'Zd(Zed)Z g d*Z!eed%d+d,Z"dS )-    N)Union)EllipticCurve)decode_dss_signatureencode_dss_signature)valuereturnc                 C   s.   t | tr| dS t | tr"| S tdd S )Nzutf-8zExpected a string value)
isinstancestrencodebytes	TypeError)r    r   J/var/www/html/python-backend/venv/lib/python3.9/site-packages/jwt/utils.pyforce_bytes   s
    


r   )inputr   c                 C   s6   t | }t|d }|dkr,|dd|  7 }t|S )N   r      =)r   lenbase64urlsafe_b64decode)r   Z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   )valr   c                 C   s0   | dk rt dt| }t|dkr(d}t|S )Nr   zMust be a positive integer    )
ValueErrorbytes_from_intr   r   )r   Z	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_bytesr   c                 C   s    dd| | f }t |dS )Nz%0*x   ascii)binasciia2b_hexr
   )r'   r(   Z
padded_hexr   r   r   number_to_bytes9   s    r-   )stringr   c                 C   s   t t| dS )N   )r#   r+   b2a_hex)r.   r   r   r   bytes_to_number>   s    r1   c                 C   s2   | }d}|dkr"|dL }|d7 }q| j |dddS )Nr         r!   F)signed)to_bytes)r   	remainingZbyte_lengthr   r   r   r   B   s    
r   r   )der_sigcurver   c                 C   s2   |j }|d d }t| \}}t||t|| S )N   r2   )key_sizer   r-   )r7   r8   num_bitsr(   rsr   r   r   der_to_raw_signatureM   s    r>   )raw_sigr8   r   c                 C   sX   |j }|d d }t| d| kr*tdt| d | }t| |d  }tt||S )Nr9   r2   r)   zInvalid signature)r:   r   r   r1   r   r   )r?   r8   r;   r(   r<   r=   r   r   r   raw_to_der_signatureV   s    r@   >   s   CERTIFICATE REQUESTs   CERTIFICATEs   DSA PRIVATE KEYs   NEW CERTIFICATE REQUESTs   X509 CRLs   DH PARAMETERSs   EC PRIVATE KEYs   TRUSTED CERTIFICATEs   RSA PRIVATE KEYs   OPENSSH PRIVATE KEYs   ENCRYPTED PRIVATE KEYs   PRIVATE KEYs
   PUBLIC KEYs   SSH2 ENCRYPTED PRIVATE KEYs   SSH2 PUBLIC KEYs   RSA PUBLIC KEYs   ----[- ]BEGIN (   |s,   )[- ]----?
.+??
----[- ]END \1[- ]----?
?)keyr   c                 C   s   t t| S N)bool_PEM_REsearchrB   r   r   r   is_pem_format   s    rH   s   -cert-v01@openssh.coms   \A(\S+)[ \t]+(\S+))s   ssh-ed25519s   ssh-rsas   ssh-dsss   ecdsa-sha2-nistp256s   ecdsa-sha2-nistp384s   ecdsa-sha2-nistp521c                    sP   t  fddtD rdS t }|rL|d}t|tt d  krLdS dS )Nc                 3   s   | ]}| v V  qd S rC   r   ).0Zstring_valuerG   r   r   	<genexpr>   r   zis_ssh_key.<locals>.<genexpr>Tr3   F)any_SSH_KEY_FORMATS_SSH_PUBKEY_RCmatchgroup_CERT_SUFFIXr   )rB   Zssh_pubkey_matchZkey_typer   rG   r   
is_ssh_key   s    

rQ   )#r   r+   retypingr   Z,cryptography.hazmat.primitives.asymmetric.ecr   Z/cryptography.hazmat.primitives.asymmetric.utilsr   r   ModuleNotFoundErrorr   r	   r   r   r   r#   r    r&   r-   r1   r   r>   r@   Z_PEMScompilejoinDOTALLrE   rD   rH   rP   rM   rL   rQ   r   r   r   r   <module>   s@   		


