o
    7b                     @   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/   eZ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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edefddZdededefddZd ede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 ed+Z!g d,Z"d'edefd-d.Z#dS )/    N)Any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   +/usr/lib/python3/dist-packages/jwt/utils.pyforce_bytes   s
   


r   inputc                 C   sB   t | tr
| d} t| d }|dkr| dd|  7 } t| S )Nascii   r      =)r	   r
   r   lenbase64Zurlsafe_b64decode)r   Zremr   r   r   base64url_decode   s   


r   c                 C   s   t | ddS )Nr       )r   Zurlsafe_b64encodereplace)r   r   r   r   base64url_encode%   s   r   valc                 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r
| d} t| }tj|ddS )Nr   big)	byteorder)r	   r
   r   r   int
from_bytes)r   datar   r   r   from_base64url_uint5   s   

r%   num	num_bytesc                 C   s    dd| | f }t |dS )Nz%0*x   r   )binasciiZa2b_hexr   )r&   r'   Z
padded_hexr   r   r   number_to_bytes=   s   r*   stringc                 C   s   t t| dS )N   )r"   r)   Zb2a_hex)r+   r   r   r   bytes_to_numberB   s   r-   c                 C   s8   | }d}|dkr|dL }|d7 }|dks| j |dddS )Nr         r    F)Zsigned)to_bytes)r   Z	remainingZbyte_lengthr   r   r   r   F   s   r   der_sigcurvec                 C   s2   |j }|d d }t| \}}t||t|| S )N   r.   )key_sizer   r*   )r1   r2   num_bitsr'   rsr   r   r   der_to_raw_signatureQ   s   r8   raw_sigc                 C   sT   |j }|d d }t| d| krtdt| d | }t| |d  }t||S )Nr3   r.   r(   zInvalid signature)r4   r   r   r-   r   )r9   r2   r5   r'   r6   r7   r   r   r   raw_to_der_signatureZ   s   
r:   >      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rL   r   r   r   is_pem_format   s   rR   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 }|r&|d}t|tt d  kr&dS dS )Nc                 3   s    | ]}| v V  qd S rM   r   ).0Zstring_valuerQ   r   r   	<genexpr>   s    zis_ssh_key.<locals>.<genexpr>Tr/   F)any_SSH_KEY_FORMATS_SSH_PUBKEY_RCmatchgroup_CERT_SUFFIXr   )rL   Zssh_pubkey_matchZkey_typer   rQ   r   
is_ssh_key   s   

r[   )$r   r)   retypingr   r   Z,cryptography.hazmat.primitives.asymmetric.ecr   Z/cryptography.hazmat.primitives.asymmetric.utilsr   r   ModuleNotFoundErrorr
   r   r   r   r   r"   r   r%   r*   r-   r   r8   r:   Z_PEMScompilejoinDOTALLrO   rN   rR   rZ   rW   rV   r[   r   r   r   r   <module>   sD    		


