3
ãde™  ã               @   s¢  d dl Z d dlZd dlZd dlmZmZ y d dlmZ d dlm	Z	m
Z
 W n ek
r`   eZY nX 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eedœdd„Zeeedœdd„Zd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/hZejd0d1jeƒ d2 ejƒZeed3œd4d5„Zd6Z ejd7ƒZ!d8d9d:d;d<d=gZ"eed3œd>d?„Z#dS )@é    N)ÚAnyÚUnion)ÚEllipticCurve)Údecode_dss_signatureÚencode_dss_signature)ÚvalueÚreturnc             C   s.   t | tƒr| jdƒS t | tƒr"| S tdƒ‚d S )Nzutf-8zExpected a string value)Ú
isinstanceÚstrÚencodeÚbytesÚ	TypeError)r   © r   ú@/var/www/agendate/envp3/lib/python3.6/site-packages/jwt/utils.pyÚforce_bytes   s
    


r   )Úinputr   c             C   sB   t | tƒr| jdƒ} t| ƒd }|dkr8| dd|  7 } tj| ƒS )NÚasciié   r   ó   =)r	   r
   r   ÚlenÚbase64Úurlsafe_b64decode)r   Úremr   r   r   Úbase64url_decode   s    

r   c             C   s   t j| ƒj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   Ú	int_bytesr   r   r   Úto_base64url_uint)   s    r#   c             C   s*   t | tƒr| j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_bytesr   c             C   s    dd| | f }t j|jdƒƒS )Nz%0*xé   r   )ÚbinasciiÚa2b_hexr   )r*   r+   Z
padded_hexr   r   r   Únumber_to_bytes=   s    r/   )Ústringr   c             C   s   t tj| ƒdƒS )Né   )r&   r-   Úb2a_hex)r0   r   r   r   Úbytes_to_numberB   s    r3   c             C   s6   | }d}x|dkr$|dL }|d7 }q
W | j |ddd�S )Nr   é   é   r$   F)Úsigned)Úto_bytes)r   Ú	remainingZbyte_lengthr   r   r   r!   F   s    
r!   )Úder_sigÚcurver   c             C   s2   |j }|d d }t| ƒ\}}t||ƒt||ƒ S )Né   r4   )Úkey_sizer   r/   )r9   r:   Únum_bitsr+   ÚrÚsr   r   r   Úder_to_raw_signatureQ   s    r@   )Úraw_sigr:   r   c             C   sT   |j }|d d }t| ƒd| kr*tdƒ‚t| d |… ƒ}t| |d … ƒ}t||ƒS )Nr;   r4   r,   zInvalid signature)r<   r   r    r3   r   )rA   r:   r=   r+   r>   r?   r   r   r   Úraw_to_der_signatureZ   s    rB   s   CERTIFICATEs   TRUSTED CERTIFICATEs   PRIVATE KEYs
   PUBLIC KEYs   ENCRYPTED PRIVATE KEYs   OPENSSH PRIVATE KEYs   DSA PRIVATE KEYs   RSA PRIVATE KEYs   RSA PUBLIC KEYs   EC PRIVATE KEYs   DH PARAMETERSs   NEW CERTIFICATE REQUESTs   CERTIFICATE REQUESTs   SSH2 PUBLIC KEYs   SSH2 ENCRYPTED PRIVATE KEYs   X509 CRLs   ----[- ]BEGIN (ó   |s,   )[- ]----?
.+??
----[- ]END \1[- ]----?
?)Úkeyr   c             C   s   t tj| ƒƒS )N)ÚboolÚ_PEM_REÚsearch)rD   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jˆ ƒ}|rL|jdƒ}t|ttƒ d … krLdS dS )Nc             3   s   | ]}|ˆ kV  qd S )Nr   )Ú.0Zstring_value)rD   r   r   ú	<genexpr>—   s    zis_ssh_key.<locals>.<genexpr>Tr5   F)ÚanyÚ_SSH_KEY_FORMATSÚ_SSH_PUBKEY_RCÚmatchÚgroupÚ_CERT_SUFFIXr   )rD   Zssh_pubkey_matchZkey_typer   )rD   r   Ú
is_ssh_key–   s    

rQ   )$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/   r3   r!   r@   rB   Z_PEMSÚcompileÚjoinÚDOTALLrF   rE   rH   rP   rM   rL   rQ   r   r   r   r   Ú<module>   s`   
		
