o
    "“i8  ã                   @   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   úI/var/www/html/premium_crap/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@    ÿ	  	ÿþú

