
    dd?                        d dl Z d dlZd dlZd dlmZ 	 d dlmZ d dlmZm	Z	 deeef   defdZdeeef   defd	Zdedefd
ZdedefdZdeeef   defdZdededefdZdedefdZdedefdZdedddefdZdedddefdZh dZ ej2                  ddj5                  e      z   dz   ej6                        ZdedefdZd Z ej2                  d!      Z g d"Z!dedefd#Z"y# e
$ r Y w xY w)$    N)Union)EllipticCurve)decode_dss_signatureencode_dss_signaturevaluereturnc                 ~    t        | t              r| j                  d      S t        | t              r| S t	        d      )Nzutf-8zExpected a string value)
isinstancestrencodebytes	TypeError)r   s    +/usr/lib/python3/dist-packages/jwt/utils.pyforce_bytesr      s6    %||G$$	E5	!122    inputc                 ~    t        |       }t        |      dz  }|dkD  r|dd|z
  z  z  }t        j                  |      S )N   r      =)r   lenbase64urlsafe_b64decode)r   input_bytesrems      r   base64url_decoder      sF    e$K
k
Q
C
Qwtq3w''##K00r   c                 L    t        j                  |       j                  dd      S )Nr   r   )r   urlsafe_b64encodereplace)r   s    r   base64url_encoder   $   s     ##E*224==r   valc                 n    | 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_bytess     r   to_base64url_uintr&   (   s;    
Qw566s#I
9~	I&&r   c                 X    t        t        |             }t        j                  |d      S )Nbig)	byteorder)r   r   int
from_bytes)r    datas     r   from_base64url_uintr-   4   s$    K,-D>>$%>00r   num	num_bytesc                 ^    dd|z  | fz  }t        j                  |j                  d            S )Nz%0*x   ascii)binasciia2b_hexr   )r.   r/   
padded_hexs      r   number_to_bytesr6   9   s1    1y=#..JJ--g677r   stringc                 @    t        t        j                  |       d      S )N   )r*   r3   b2a_hex)r7   s    r   bytes_to_numberr;   >   s    x',,r   c                 \    | }d}|dk7  r|dz  }|dz  }|dk7  r| j                  |dd      S )Nr         r(   F)signed)to_bytes)r    	remainingbyte_lengths      r   r$   r$   B   sF    IK
q.a	q q. <<U5<99r   der_sigcurver   c                 x    |j                   }|dz   dz  }t        |       \  }}t        ||      t        ||      z   S )N   r=   )key_sizer   r6   )rC   rD   num_bitsr/   rss         r   der_to_raw_signaturerK   M   s@    ~~HA!#I(DAq1i(?1i+HHHr   raw_sigc                     |j                   }|dz   dz  }t        |       d|z  k7  rt        d      t        | d |       }t        | |d        }t	        t        ||            S )NrF   r=   r1   zInvalid signature)rG   r   r#   r;   r   r   )rL   rD   rH   r/   rI   rJ   s         r   raw_to_der_signaturerN   V   sj    ~~HA!#I
7|q9}$,--
+,A	
+,A%a+,,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                 >    t        t        j                  |             S N)bool_PEM_REsearch)r`   s    r   is_pem_formatrf      s    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                      t         fdt        D              ryt        j                         }|r,|j	                  d      }t
        |t        t
               d  k(  ryy)Nc              3   &   K   | ]  }|v  
 y wrb    ).0string_valuer`   s     r   	<genexpr>zis_ssh_key.<locals>.<genexpr>   s     
D<<3
Ds   Tr>   F)any_SSH_KEY_FORMATS_SSH_PUBKEY_RCmatchgroup_CERT_SUFFIXr   )r`   ssh_pubkey_matchkey_types   `  r   
is_ssh_keyru      sW    

D3C
DD%++C0#))!,8S%6$6$899r   )#r   r3   retypingr   ,cryptography.hazmat.primitives.asymmetric.ecr   /cryptography.hazmat.primitives.asymmetric.utilsr   r   ModuleNotFoundErrorr   r   r   r   r   r*   r&   r-   r6   r;   r$   rK   rN   _PEMScompilejoinDOTALLrd   rc   rf   rr   ro   rn   ru   ri   r   r   <module>r      s     	 	J3uUCZ( 3U 31E%*- 1% 1>E >e >	'3 	'5 	'1U5#:. 13 1
8 8 8 8
-E -c -: : :I% I IE I
-% 
- 
-E 
-	& "**
ii!!
 II%u % %
 (23 
E 
d 
M  		s   C& &C.-C.