o
    0³´j™  ã                   @   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Úbase64Úurlsafe_b64decode)r   Ú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   Ú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   Ú	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   )ÚbinasciiÚa2b_hexr   )r*   r+   Ú
padded_hexr   r   r   Únumber_to_bytes=   s   r0   Ústringc                 C   s   t t | ¡dƒS )Né   )r&   r-   Úb2a_hex)r1   r   r   r   Úbytes_to_numberB   s   r4   c                 C   s8   | }d}|dkr|dL }|d7 }|dks| j |ddd�S )Nr   é   é   r$   F)Úsigned)Úto_bytes)r   Ú	remainingÚbyte_lengthr   r   r   r!   F   s   þr!   Úder_sigÚcurvec                 C   s2   |j }|d d }t| ƒ\}}t||ƒt||ƒ S )Né   r5   )Úkey_sizer   r0   )r;   r<   Únum_bitsr+   ÚrÚsr   r   r   Úder_to_raw_signatureQ   s   rB   Úraw_sigc                 C   sT   |j }|d d }t| ƒd| krtdƒ‚t| d |… ƒ}t| |d … ƒ}t||ƒS )Nr=   r5   r,   zInvalid signature)r>   r   r    r4   r   )rC   r<   r?   r+   r@   rA   r   r   r   Úraw_to_der_signatureZ   s   
rD   >   ó   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©rV   r   r   r   Úis_pem_format…   s   r\   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 rW   r   )Ú.0Ústring_valuer[   r   r   Ú	<genexpr>—   s   € zis_ssh_key.<locals>.<genexpr>Tr6   F)ÚanyÚ_SSH_KEY_FORMATSÚ_SSH_PUBKEY_RCÚmatchÚgroupÚ_CERT_SUFFIXr   )rV   Ússh_pubkey_matchÚkey_typer   r[   r   Ú
is_ssh_key–   s   

rh   )$r   r-   ÚreÚtypingr   r   Ú,cryptography.hazmat.primitives.asymmetric.ecr   Ú/cryptography.hazmat.primitives.asymmetric.utilsr   r   ÚModuleNotFoundErrorr
   r   r   r   r   r&   r#   r)   r0   r4   r!   rB   rD   Ú_PEMSÚcompileÚjoinÚDOTALLrY   rX   r\   re   rb   ra   rh   r   r   r   r   Ú<module>   sD    ÿ		ÿþú


