o
    i'e?                     @   s  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
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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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ed,Z g d-Z!d(edefd.d/Z"dS )0    N)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   )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base64Zurlsafe_b64decode)r   Zinput_bytesZ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| }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)binasciiZa2b_hexr
   )r$   r%   Z
padded_hexr   r   r   number_to_bytes9   s   r)   stringc                 C   s   t t| dS )N   )r    r(   Zb2a_hex)r*   r   r   r   bytes_to_number>   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   B   s   r   der_sigcurver   c                 C   s2   |j }|d d }t| \}}t||t|| S )N   r-   )key_sizer   r)   )r0   r1   num_bitsr%   rsr   r   r   der_to_raw_signatureM   s   r7   raw_sigc                 C   sX   |j }|d d }t| d| krtdt| d | }t| |d  }tt||S )Nr2   r-   r&   zInvalid signature)r3   r   r   r,   r   r   )r8   r1   r4   r%   r5   r6   r   r   r   raw_to_der_signatureV   s   r9   >   s   RSA PRIVATE KEYs   CERTIFICATE REQUESTs   RSA PUBLIC KEYs   TRUSTED CERTIFICATEs   OPENSSH PRIVATE KEYs   PRIVATE KEYs   CERTIFICATEs   SSH2 ENCRYPTED PRIVATE KEYs   DSA PRIVATE KEYs   EC PRIVATE KEYs   DH PARAMETERSs   SSH2 PUBLIC KEYs   ENCRYPTED PRIVATE KEYs
   PUBLIC KEYs   X509 CRLs   NEW CERTIFICATE REQUESTs   ----[- ]BEGIN (   |s,   )[- ]----?
.+??
----[- ]END \1[- ]----?
?keyc                 C   s   t t| S N)bool_PEM_REsearchr;   r   r   r   is_pem_format   s   rA   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 r<   r   ).0Zstring_valuer@   r   r   	<genexpr>   s    zis_ssh_key.<locals>.<genexpr>Tr.   F)any_SSH_KEY_FORMATS_SSH_PUBKEY_RCmatchgroup_CERT_SUFFIXr   )r;   Zssh_pubkey_matchZkey_typer   r@   r   
is_ssh_key   s   

rJ   )#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)   r,   r   r7   r9   Z_PEMScompilejoinDOTALLr>   r=   rA   rI   rF   rE   rJ   r   r   r   r   <module>   sD    		


