
    #	hv                       S SK Jr  S SKrS SKrS SKrS SKJrJr  S SKJ	r	J
r
JrJrJrJrJr  SSKJr  SSKJrJr  SSKJrJrJrJrJrJrJrJrJr   S S	KJ r J!r!  S S
K"J#r#  S SK$J%r%  S SK&J'r'  S SK(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2  S SK3J4r4J5r5  S SK6J7r7J8r8  S SK9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArA  S SKBJCrCJDrDJErEJFrFJGrGJHrHJIrI  SrJ\	(       a3  \:\<-  rL\/\1-  rM\7\8-  \4-  \5-  rN\L\M-  \N-  rO\:\/-  \7-  \4-  rP\<\1-  \8-  \5-  rQ1 SkrRS$S jrS " S S\5      rT " S S\T5      rU " S S\T5      rV\J(       a-   " S S\T5      rW " S S\T5      rX " S  S!\W5      rY " S" S#\T5      rZgg! \K a    SrJ Nf = f)%    )annotationsN)ABCabstractmethod)TYPE_CHECKINGAnyClassVarLiteralNoReturncastoverload   InvalidKeyError)HashlibHashJWKDict)	base64url_decodebase64url_encodeder_to_raw_signatureforce_bytesfrom_base64url_uintis_pem_format
is_ssh_keyraw_to_der_signatureto_base64url_uint)InvalidSignatureUnsupportedAlgorithm)default_backend)hashes)padding)
ECDSA	SECP256K1	SECP256R1	SECP384R1	SECP521R1EllipticCurveEllipticCurvePrivateKeyEllipticCurvePrivateNumbersEllipticCurvePublicKeyEllipticCurvePublicNumbers)Ed448PrivateKeyEd448PublicKey)Ed25519PrivateKeyEd25519PublicKey)RSAPrivateKeyRSAPrivateNumbersRSAPublicKeyRSAPublicNumbersrsa_crt_dmp1rsa_crt_dmq1rsa_crt_iqmprsa_recover_prime_factors)EncodingNoEncryptionPrivateFormatPublicFormatload_pem_private_keyload_pem_public_keyload_ssh_public_keyTF>   ES256ES384ES512ES521EdDSAPS256PS384PS512RS256RS384RS512ES256Kc                    [        5       [        [        R                  5      [        [        R                  5      [        [        R                  5      S.n [
        (       Ga#  U R                  [        [        R                  5      [        [        R                  5      [        [        R                  5      [        [        R                  5      [        [        R                  5      [        [        R                  5      [        [        R                  5      [        [        R                  5      [        [        R                  5      [        [        R                  5      [        [        R                  5      [        5       S.5        U $ )z=
Returns the algorithms that are implemented by the library.
)noneHS256HS384HS512)rE   rF   rG   r=   rH   r>   r@   r?   rB   rC   rD   rA   )NoneAlgorithmHMACAlgorithmSHA256SHA384SHA512
has_cryptoupdateRSAAlgorithmECAlgorithmRSAPSSAlgorithmOKPAlgorithm)default_algorithmss    @/var/www/html/env/lib/python3.13/site-packages/jwt/algorithms.pyget_default_algorithmsr[   i   s   
 }334}334}334	 z!!%l&9&9:%l&9&9:%l&9&9:$[%7%78%k&8&89$[%7%78$[%7%78$&& ))?)?@()?)?@()?)?@%	
&     c                      \ rS rSrSrSS jr\SS j5       r\SS j5       r\SS j5       r	\
\\SS j5       5       5       r\
\\SSS jj5       5       5       r\\SSS	 jj5       5       r\\SS
 j5       5       rSrg)	Algorithm   z@
The interface for an algorithm used to sign and verify tokens.
c                   [        U SS5      nUc  [        e[        (       a  [        U[        5      (       ak  [        U[        R                  5      (       aL  [        R                  " U" 5       [        5       S9nUR                  U5        [        UR                  5       5      $ [        U" U5      R                  5       5      $ )z
Compute a hash digest using the specified algorithm's hash algorithm.

If there is no hash algorithm, raises a NotImplementedError.
hash_algN)backend)getattrNotImplementedErrorrS   
isinstancetype
issubclassr   HashAlgorithmHashr   rT   bytesfinalizedigest)selfbytestrra   rl   s       rZ   compute_hash_digestAlgorithm.compute_hash_digest   s     4T2%% J8T**8V%9%9::[[_5FGFMM'"*++'*11344r\   c                    g)z
Performs necessary validation and conversions on the key and returns
the key value in the proper format for sign() and verify().
N rm   keys     rZ   prepare_keyAlgorithm.prepare_key       r\   c                    g)zV
Returns a digital signature for the specified message
using the specified key value.
Nrr   rm   msgrt   s      rZ   signAlgorithm.sign   rw   r\   c                    g)zb
Verifies that the specified digital signature is valid
for the specified message and key values.
Nrr   rm   rz   rt   sigs       rZ   verifyAlgorithm.verify   rw   r\   c                    g Nrr   key_objas_dicts     rZ   to_jwkAlgorithm.to_jwk   s     =@r\   c                    g r   rr   r   s     rZ   r   r      s	     BEr\   c                    g)z#
Serializes a given key into a JWK
Nrr   r   s     rZ   r   r      rw   r\   c                    g)z:
Deserializes a given key from JWK back into a key object
Nrr   jwks    rZ   from_jwkAlgorithm.from_jwk   rw   r\   rr   N)rn   rj   returnrj   )rt   r   r   r   )rz   rj   rt   r   r   rj   )rz   rj   rt   r   r   rj   r   bool)r   Literal[True]r   r   F)r   Literal[False]r   str)r   r   r   JWKDict | str)r   str | JWKDictr   r   )__name__
__module____qualname____firstlineno____doc__ro   r   ru   r{   r   r   staticmethodr   r   __static_attributes__rr   r\   rZ   r^   r^      s    5,       ?    @D    E  
   r\   r^   c                  b    \ rS rSrSrS
S jrSS jrSS jr\SSS jj5       r	\SS j5       r
Srg	)rN      zN
Placeholder for use when no signing or verification
operations are required.
c                2    US:X  a  S nUb  [        S5      eU$ )N z*When alg = "none", key value must be None.r   rs   s     rZ   ru   NoneAlgorithm.prepare_key   s$    "9C?!"NOO
r\   c                    g)Nr\   rr   ry   s      rZ   r{   NoneAlgorithm.sign   s    r\   c                    g)NFrr   r~   s       rZ   r   NoneAlgorithm.verify   s    r\   c                    [        5       er   rd   r   s     rZ   r   NoneAlgorithm.to_jwk       !##r\   c                    [        5       er   r   r   s    rZ   r   NoneAlgorithm.from_jwk   r   r\   rr   N)rt   z
str | Noner   None)rz   rj   rt   r   r   rj   )rz   rj   rt   r   r   rj   r   r   r   )r   r   r   r   r   r
   )r   r   r   r
   )r   r   r   r   r   ru   r{   r   r   r   r   r   rr   r\   rZ   rN   rN      s>    
 $ $ $ $r\   rN   c                  ,   \ rS rSr% Sr\R                  rS\S'   \R                  r
S\S'   \R                  rS\S'   SS jrSS jr\\      SS	 j5       5       r\\ S     SS
 jj5       5       r\SSS jj5       r\SS j5       rSS jrSS jrSrg)rO      zZ
Performs signing and verification operations using HMAC
and the specified hash function.
zClassVar[HashlibHash]rP   rQ   rR   c                    Xl         g r   ra   rm   ra   s     rZ   __init__HMACAlgorithm.__init__   s     r\   c                r    [        U5      n[        U5      (       d  [        U5      (       a  [        S5      eU$ )NzdThe specified key is an asymmetric key or x509 certificate and should not be used as an HMAC secret.)r   r   r   r   rm   rt   	key_bytess      rZ   ru   HMACAlgorithm.prepare_key   s;    $	##z)'<'<!9 
 r\   c                    g r   rr   r   s     rZ   r   HMACAlgorithm.to_jwk
       r\   c                    g r   rr   r   s     rZ   r   r     s     r\   c                    [        [        U 5      5      R                  5       SS.nU(       a  U$ [        R                  " U5      $ )Noct)kkty)r   r   decodejsondumps)r   r   r   s      rZ   r   r     s<     "+g"67>>@

 J::c?"r\   c                (    [        U [        5      (       a  [        R                  " U 5      nO[        U [        5      (       a  U nO[
        eUR                  S5      S:w  a  [        S5      e[        US   5      $ ! [
         a    [        S5      S ef = f)NKey is not valid JSONr   r   zNot an HMAC keyr   )	re   r   r   loadsdict
ValueErrorr   getr   )r   objs     rZ   r   HMACAlgorithm.from_jwk"  s    	E#s###zz#C&&   775>U"!"344C))  	E!"9:D	Es   +A: A: A: :Bc                `    [         R                  " X!U R                  5      R                  5       $ r   )hmacnewra   rl   ry   s      rZ   r{   HMACAlgorithm.sign3  s     xx$--07799r\   c                L    [         R                  " X0R                  X5      5      $ r   )r   compare_digestr{   r~   s       rZ   r   HMACAlgorithm.verify6  s    ""3		#(;<<r\   r   N)ra   r   r   r   )rt   str | bytesr   rj   )r   r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   rj   )rz   rj   rt   rj   r   rj   )rz   rj   rt   rj   r   rj   r   r   )r   r   r   r   r   hashlibsha256rP   __annotations__sha384rQ   sha512rR   r   ru   r   r   r   r   r{   r   r   rr   r\   rZ   rO   rO      s    
 %,NNF!2$+NNF!2$+NNF!2!	 '4	   8='5	   	# 	# * * :=r\   rO   c                  ,   \ rS rSr% Sr\R                  rS\S'   \R                  rS\S'   \R                  r	S\S'   SS jr
SS jr\\      SS	 j5       5       r\\ S     SS
 jj5       5       r\SSS jj5       r\SS j5       rSS jrSS jrSrg)rU   i<  zf
Performs signing and verification operations using
RSASSA-PKCS-v1_5 and the specified hash function.
$ClassVar[type[hashes.HashAlgorithm]]rP   rQ   rR   c                    Xl         g r   r   r   s     rZ   r   RSAAlgorithm.__init__F      $Mr\   c                   [        U[        [        45      (       a  U$ [        U[        [        45      (       d  [        S5      e[        U5      n UR                  S5      (       a  [        [        [        U5      5      $ [        [        [        US S95      $ ! [         a=     [        [        [        U5      5      s $ ! [        [        4 a    [        S5      S ef = ff = f)NExpecting a PEM-formatted key.s   ssh-rsapasswordz(Could not parse the provided public key.)re   r.   r0   rj   r   	TypeErrorr   
startswithr   r<   r:   r   r;   r   r   r   s      rZ   ru   RSAAlgorithm.prepare_keyI  s    #|<==
cE3<00 @AA#C(I ''
33.A).LMM%';IPT'U     .A).LMM"$89  )B   s*   .B ?B 
C"B=:C=CCc                    g r   rr   r   s     rZ   r   RSAAlgorithm.to_jwka       r\   c                    g r   rr   r   s     rZ   r   r   g  r   r\   c                   S n[        U S5      (       Ga;  U R                  5       nSS/[        UR                  R                  5      R                  5       [        UR                  R                  5      R                  5       [        UR                  5      R                  5       [        UR                  5      R                  5       [        UR                  5      R                  5       [        UR                  5      R                  5       [        UR                  5      R                  5       [        UR                  5      R                  5       S.
nOw[        U S5      (       a[  U R                  5       nSS/[        UR                  5      R                  5       [        UR                  5      R                  5       S.nO[        S5      eU(       a  U$ [        R                  " U5      $ )Nprivate_numbersRSAr{   )
r   key_opsnedpqdpdqqir   )r   r   r   r   Not a public or private key)hasattrr   r   public_numbersr   r   r   r   r   r   dmp1dmq1iqmpr   r   r   )r   r   r   numberss       rZ   r   r   m  sh   )-Cw 122!113 ! &x*7+A+A+C+CDKKM*7+A+A+C+CDKKM*7995<<>*7995<<>*7995<<>+GLL9@@B+GLL9@@B+GLL9@@B (++!002 ! (z*7995<<>*7995<<>	 &&CDD
zz#&r\   c                z    [        U [        5      (       a  [        R                  " U 5      nO[        U [        5      (       a  U nO[
        eUR                  S5      S:w  a  [        S5      S eSU;   Gaa  SU;   GaZ  SU;   GaS  SU;   a  [        S	5      e/ S
QnU Vs/ s H  o3U;   PM	     nn[        U5      nU(       a  [        U5      (       d  [        S5      S e[        [        US   5      [        US   5      5      nU(       ag  [        [        US   5      [        US   5      [        US   5      [        US   5      [        US   5      [        US   5      US9nUR'                  5       $ [        US   5      n[        UR                  XR                  5      u  p[        UU	U
[!        X5      [#        X5      [%        X5      US9nUR'                  5       $ SU;   a8  SU;   a2  [        [        US   5      [        US   5      5      R)                  5       $ [        S5      e! [
         a    [        S5      S ef = fs  snf )Nr   r   r   zNot an RSA keyr   r   r   othz5Unsupported RSA private key: > 2 primes not supported)r   r   r   r   r   z@RSA key must include all parameters if any are present besides dr   r   r   r   r   )r   r   r   r   r   r   r   r   )re   r   r   r   r   r   r   r   anyallr1   r   r/   r5   r   r   r2   r3   r4   private_key
public_key)r   r   other_propspropprops_foundany_props_foundr   r   r   r   r   s              rZ   r   RSAAlgorithm.from_jwk  s8   Ic3''**S/CT**C$$ wwu~&%&67TAczcSjSCZC<)O  ;7BC{ts{{C"%k"2"3{+;+;)Z  "2'C1'C1"
 #/-c#h7-c#h7-c#h70T;0T;0T;'5G2 **,, ,CH5A4&((!-=-=DA 0)!/)!/)!/'5G **,,s
''C1'C1 *,
 &&CDD{  I%&=>DHI Ds   +H H H H8H5c                j    UR                  U[        R                  " 5       U R                  5       5      $ r   )r{   r   PKCS1v15ra   ry   s      rZ   r{   RSAAlgorithm.sign  s$    88C!1!1!3T]]_EEr\   c                     UR                  X1[        R                  " 5       U R                  5       5        g! [         a     gf = f)NTF)r   r   r	  ra   r   r~   s       rZ   r   RSAAlgorithm.verify  s;    

3W%5%5%7I# s   47 
AAr   Nra   ztype[hashes.HashAlgorithm]r   r   )rt   zAllowedRSAKeys | str | bytesr   AllowedRSAKeys)r   r  r   r   r   r   r   )r   r  r   r   r   r   )r   r  r   r   r   r   )r   r   r   r  rz   rj   rt   r.   r   rj   rz   rj   rt   r0   r   rj   r   r   )r   r   r   r   r   r   rP   r   rQ   rR   r   ru   r   r   r   r   r{   r   r   rr   r\   rZ   rU   rU   <  s    	
 8>}}4D7=}}4D7=}}4D	%	 0 
		#	.;		 
 
	 
	?D	#	.<		 
 
	 
$	' 
$	'L 
E	E 
E	EN	F	r\   rU   c                  ,   \ rS rSr% Sr\R                  rS\S'   \R                  rS\S'   \R                  r	S\S'   SS jr
SS jrSS	 jrSS
 jr\\      SS j5       5       r\\ S     SS jj5       5       r\SSS jj5       r\SS j5       rSrg)rV   i  zZ
Performs signing and verification operations using
ECDSA and the specified hash function
r   rP   rQ   rR   c                    Xl         g r   r   r   s     rZ   r   ECAlgorithm.__init__  r   r\   c                   [        U[        [        45      (       a  U$ [        U[        [        45      (       d  [        S5      e[        U5      n UR                  S5      (       a  [        U5      nO[        U5      n [        U[        [        45      (       d  [        S5      S eU$ ! [         a    [        US S9n N?f = f)Nr   s   ecdsa-sha2-r   zcExpecting a EllipticCurvePrivateKey/EllipticCurvePublicKey. Wrong key provided for ECDSA algorithms)re   r&   r(   rj   r   r   r   r   r<   r;   r   r:   r   )rm   rt   r   
crypto_keys       rZ   ru   ECAlgorithm.prepare_key  s    # 79OPQQ
cE3<00 @AA#C(I
L''77!4Y!?J!4Y!?J
 46LM  &y   L1)dK
Ls   !B' 2B' 'B>=B>c                ~    UR                  U[        U R                  5       5      5      n[        X2R                  5      $ r   )r{   r    ra   r   curve)rm   rz   rt   der_sigs       rZ   r{   ECAlgorithm.sign  s,    hhsE$--/$:;G';;r\   c                    [        X2R                  5      n [        U[        5      (       a  UR                  5       OUnUR                  XA[        U R                  5       5      5        g! [         a     gf = f! [         a     gf = f)NFT)
r   r  r   re   r&   r  r   r    ra   r   )rm   rz   rt   r   r  r  s         rZ   r   ECAlgorithm.verify  s    .sII>	 "#'>?? NN$ 
 !!'dmmo0FG   $ s#   A) AA9 )
A65A69
BBc                    g r   rr   r   s     rZ   r   ECAlgorithm.to_jwk'  r   r\   c                    g r   rr   r   s     rZ   r   r  -  r   r\   c                   [        U [        5      (       a  U R                  5       R                  5       nO1[        U [        5      (       a  U R                  5       nO[        S5      e[        U R                  [        5      (       a  SnO~[        U R                  [        5      (       a  SnO\[        U R                  [        5      (       a  SnO:[        U R                  [        5      (       a  SnO[        SU R                   35      eSU[        UR                  U R                  R                  S9R                  5       [        UR                  U R                  R                  S9R                  5       S	.n[        U [        5      (       aG  [        U R!                  5       R"                  U R                  R                  S9R                  5       US
'   U(       a  U$ [$        R&                  " U5      $ )Nr   P-256P-384P-521	secp256k1Invalid curve: EC)
bit_length)r   crvxyr   )re   r&   r  r   r(   r   r  r"   r#   r$   r!   r   r)  key_sizer   r*  r   private_valuer   r   )r   r   r   r(  r   s        rZ   r   r  3  s{   '#:;;!(!3!3!5!D!D!FG%;<<!(!7!7!9%&CDD'--33GMM955GMM955GMM955!%&GHH &"$$&}}55 &(&"$$&}}55 &(#C '#:;;,++-;;&}}55 &( C
 
zz#&r\   c                L    [        U [        5      (       a  [        R                  " U 5      nO[        U [        5      (       a  U nO[
        eUR                  S5      S:w  a  [        S5      S eSU;  d  SU;  a  [        S5      S e[        UR                  S5      5      n[        UR                  S5      5      nUR                  S5      nUS:X  a9  [        U5      [        U5      s=:X  a  S	:X  a  O  O[        5       nO[        S
5      S eUS:X  a9  [        U5      [        U5      s=:X  a  S:X  a  O  O[        5       nO[        S5      S eUS:X  a9  [        U5      [        U5      s=:X  a  S:X  a  O  O[        5       nOX[        S5      S eUS:X  a8  [        U5      [        U5      s=:X  a  S	:X  a  O  O[        5       nO[        S5      e[        SU 35      e[        [        R!                  USS9[        R!                  USS9US9nSU;  a  UR#                  5       $ [        UR                  S5      5      n[        U5      [        U5      :w  a  [        S[        U5      U5      e[%        [        R!                  USS9U5      R'                  5       $ ! [
         a    [        S5      S ef = f)Nr   r   r&  zNot an Elliptic curve keyr)  r*  r(  r!      z)Coords should be 32 bytes for curve P-256r"  0   z)Coords should be 48 bytes for curve P-384r#  B   z)Coords should be 66 bytes for curve P-521r$  z-Coords should be 32 bytes for curve secp256k1r%  big)	byteorder)r)  r*  r  r   z!D should be {} bytes for curve {})re   r   r   r   r   r   r   r   r   lenr"   r#   r$   r!   r)   int
from_bytesr  r'   r  )r   r   r)  r*  r  	curve_objr   r   s           rZ   r   ECAlgorithm.from_jwk_  sd   Ic3''**S/CT**C$$ wwu~%%&ABL#~C%&ABL .A .AGGENE q6SV)r) )I)C  '!q6SV)r) )I)C  '!q6SV)r) )I)C  +%q6SV)r) )I)G  &w&?@@7..e.4..e.4N #~%0022 .A1vQ%7Q  /qE2Nkm{  I%&=>DHIs   +J J J J#r   Nr  )rt   zAllowedECKeys | str | bytesr   AllowedECKeys)rz   rj   rt   r&   r   rj   )rz   rj   rt   r8  r   rj   r   r   )r   r8  r   r   r   r   r   )r   r8  r   r   r   r   )r   r8  r   r   r   r   )r   r   r   r8  )r   r   r   r   r   r   rP   r   rQ   rR   r   ru   r{   r   r   r   r   r   r   rr   r\   rZ   rV   rV     s    	
 8>}}4D7=}}4D7=}}4D	%	<	<
	" 
		"	-:		 
 
	 
	>C	"	-;		 
 
	 
)	' 
)	'V 
G	 
G	r\   rV   c                  ,    \ rS rSrSrSS jrSS jrSrg)	rW   i  z1
Performs a signature using RSASSA-PSS with MGF1
c           	         UR                  U[        R                  " [        R                  " U R	                  5       5      U R	                  5       R
                  S9U R	                  5       5      $ )Nmgfsalt_length)r{   r   PSSMGF1ra   digest_sizery   s      rZ   r{   RSAPSSAlgorithm.sign  sN    88T]]_5 $ ; ;  r\   c           
         UR                  UU[        R                  " [        R                  " U R	                  5       5      U R	                  5       R
                  S9U R	                  5       5        g! [         a     gf = f)Nr;  TF)r   r   r>  r?  ra   r@  r   r~   s       rZ   r   RSAPSSAlgorithm.verify  sh    

KK#LL9$(MMO$?$? MMO # s   A/A2 2
A?>A?rr   Nr  r  )r   r   r   r   r   r{   r   r   rr   r\   rZ   rW   rW     s    			r\   rW   c                      \ rS rSrSrSS jrSS jr      SS jr        SS jr\	\
      SS j5       5       r\	\
 S     SS jj5       5       r\
SSS	 jj5       r\
SS
 j5       rSrg)rX   i  zv
Performs signing and verification operations using EdDSA

This class requires ``cryptography>=2.6`` to be installed.
c                    g r   rr   )rm   kwargss     rZ   r   OKPAlgorithm.__init__  s    r\   c                   [        U[        [        45      (       a  [        U[        5      (       a  UR                  S5      OUn[        U[        5      (       a  UR	                  S5      OUnSU;   a  [        U5      nO%SU;   a  [        US S9nOUSS S:X  a  [        U5      n[        U[        [        [        [        45      (       d  [        S5      eU$ )	Nutf-8z-----BEGIN PUBLICz-----BEGIN PRIVATEr   r      zssh-zcExpecting a EllipticCurvePrivateKey/EllipticCurvePublicKey. Wrong key provided for EdDSA algorithms)re   rj   r   r   encoder;   r:   r<   r,   r-   r*   r+   r   )rm   rt   key_strr   s       rZ   ru   OKPAlgorithm.prepare_key  s    #s|,,1;C1G1G#**W-S3=c33G3GCJJw/S	&'1-i8C)W4.y4HCQq\V+-i8C "$4o~V  &y  Jr\   c                t    [        U[        5      (       a  UR                  S5      OUnUR                  U5      $ )a  
Sign a message ``msg`` using the EdDSA private key ``key``
:param str|bytes msg: Message to sign
:param Ed25519PrivateKey}Ed448PrivateKey key: A :class:`.Ed25519PrivateKey`
    or :class:`.Ed448PrivateKey` isinstance
:return bytes signature: The signature, as bytes
rI  )re   r   rK  r{   )rm   rz   rt   	msg_bytess       rZ   r{   OKPAlgorithm.sign  s/     0:#s/C/C

7+I88I&&r\   c                B    [        U[        5      (       a  UR                  S5      OUn[        U[        5      (       a  UR                  S5      OUn[        U[        [        45      (       a  UR                  5       OUnUR                  XT5        g! [         a     gf = f)ap  
Verify a given ``msg`` against a signature ``sig`` using the EdDSA key ``key``

:param str|bytes sig: EdDSA signature to check ``msg`` against
:param str|bytes msg: Message to sign
:param Ed25519PrivateKey|Ed25519PublicKey|Ed448PrivateKey|Ed448PublicKey key:
    A private or public EdDSA key instance
:return bool verified: True if signature is valid, False if not.
rI  TF)re   r   rK  r,   r*   r  r   r   )rm   rz   rt   r   rO  	sig_bytesr  s          rZ   r   OKPAlgorithm.verify  s    3=c33G3GCJJw/S	3=c33G3GCJJw/S	 "#(9?'KLL NN$ 
 !!)7# s   BB 
BBc                    g r   rr   rt   r   s     rZ   r   OKPAlgorithm.to_jwk  r   r\   c                    g r   rr   rU  s     rZ   r   rV    r   r\   c                t   [        U [        [        45      (       a  U R                  [        R
                  [        R
                  S9n[        U [        5      (       a  SOSn[        [        U5      5      R                  5       SUS.nU(       a  U$ [        R                  " U5      $ [        U [        [        45      (       a  U R                  [        R
                  [        R
                  [!        5       S9nU R#                  5       R                  [        R
                  [        R
                  S9n[        U [        5      (       a  SOSn[        [        U5      5      R                  5       [        [        U5      5      R                  5       SUS.nU(       a  U$ [        R                  " U5      $ [%        S5      e)	N)encodingformatEd25519Ed448OKP)r)  r   r(  )rY  rZ  encryption_algorithm)r)  r   r   r(  r   )re   r-   r+   public_bytesr6   Rawr9   r   r   r   r   r   r,   r*   private_bytesr8   r7   r  r   )rt   r   r)  r(  r   r   s         rZ   r   rV    sh   # 0.ABB$$%\\'++ %  $.c3C#D#Di' *+a.9@@B  J::c?*# 1?CDD%%%\\(,,)5 &  NN$11%\\'++ 2 
 $.c3D#E#Ei7)+a.9@@B)+a.9@@B 	 J::c?*!"?@@r\   c                    [        U [        5      (       a  [        R                  " U 5      nO[        U [        5      (       a  U nO[
        eUR                  S5      S:w  a  [        S5      eUR                  S5      nUS:w  a  US:w  a  [        SU 35      eS	U;  a  [        S
5      e[        UR                  S	5      5      n SU;  a2  US:X  a  [        R                  " U5      $ [        R                  " U5      $ [        UR                  S5      5      nUS:X  a  [        R                  " U5      $ [        R                  " U5      $ ! [
         a    [        S5      S ef = f! [
         a  n[        S5      UeS nAff = f)Nr   r   r]  zNot an Octet Key Pairr(  r[  r\  r%  r)  zOKP should have "x" parameterr   zInvalid key parameter)re   r   r   r   r   r   r   r   r   r-   from_public_bytesr+   r,   from_private_bytesr*   )r   r   r  r)  r   errs         rZ   r   OKPAlgorithm.from_jwkJ  s`   Ic3''**S/CT**C$$ wwu~&%&=>>GGENE	!ew&6%w&?@@#~%&EFF .A
Hc>	)/AA!DD);;A>>$SWWS\2I%,??BB&99!<<-  I%&=>DHI.  H%&=>CGHs@   +E E E !E! %E! ;5E! 1E! E!
E<+E77E<rr   N)rF  r   r   r   )rt   zAllowedOKPKeys | str | bytesr   AllowedOKPKeys)rz   r   rt   z#Ed25519PrivateKey | Ed448PrivateKeyr   rj   )rz   r   rt   rg  r   r   r   r   )rt   rg  r   r   r   r   r   )rt   rg  r   r   r   r   )rt   rg  r   r   r   r   )r   r   r   rg  )r   r   r   r   r   r   ru   r{   r   r   r   r   r   r   rr   r\   rZ   rX   rX     s    			.	'"	')L	'	'	"	)7	>I		4 
			*7		 
 
	 
	;@		*8		 
 
	 
,	A 
,	A\ 
 	H 
 	Hr\   rX   )r   zdict[str, Algorithm])[
__future__r   r   r   r   abcr   r   typingr   r   r   r	   r
   r   r   
exceptionsr   typesr   r   utilsr   r   r   r   r   r   r   r   r   cryptography.exceptionsr   r   cryptography.hazmat.backendsr   cryptography.hazmat.primitivesr   )cryptography.hazmat.primitives.asymmetricr   ,cryptography.hazmat.primitives.asymmetric.ecr    r!   r"   r#   r$   r%   r&   r'   r(   r)   /cryptography.hazmat.primitives.asymmetric.ed448r*   r+   1cryptography.hazmat.primitives.asymmetric.ed25519r,   r-   -cryptography.hazmat.primitives.asymmetric.rsar.   r/   r0   r1   r2   r3   r4   r5   ,cryptography.hazmat.primitives.serializationr6   r7   r8   r9   r:   r;   r<   rS   ModuleNotFoundErrorr  r8  rg  AllowedKeysAllowedPrivateKeysAllowedPublicKeysrequires_cryptographyr[   r^   rN   rO   rU   rV   rW   rX   rr   r\   rZ   <module>r|     s   "    # R R R ' '
 
 
/N<5A  	 	 	   J
 "\1N+.DDM,,>O  !=0>AK//2CCoU  	--0@@>Q 
  DF FR$I $<E=I E=P hy hTAi AF, <dHy dH[ k  Js   A*E E E 