
    i                       % S SK Jr  S SKrS SK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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/J0r0J1r1J2r2J3r3J4r4J5r5J6r6  S SK7J8r8J9r9  S SK:J;r;J<r<  S SK=J>r>J?r?J@r@JArAJBrBJCrCJDrDJErE  S SKFJGrGJHrHJIrIJJrJJKrKJLrLJMrM  \R                  S:  a  S SK
JOrO  OS SKPJOrO  \\>\@4   rQS\RS'   \\3\54   rSS\RS'   \\;\<\8\94   rTS\RS'   \\Q\S\T4   rUS\RS'   \\>\3\;\84   rVS\RS'   \\@\5\<\94   rWS\RS'   \(       d  \X" \R                  " SS5      5      (       a  S SKZJ[r[J\r\  Sr]1 S"kr`S2S# jra " S$ S%\5      rb " S& S'\b5      rc " S( S)\b5      rd\](       a-   " S* S+\b5      re " S, S-\b5      rf " S. S/\e5      rg " S0 S1\b5      rhgg! \^ a.    \R                  S:  a  S S K
J_r_  OS S KPJ_r_  \_rQ\_rS\_rT\_rU\_rV\_rWS!r] Nf = f)3    )annotationsN)ABCabstractmethod)	TYPE_CHECKINGAnyClassVarLiteralNoReturnUnioncastget_args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_key)   
   )	TypeAliasrA   AllowedRSAKeysAllowedECKeysAllowedOKPKeysAllowedKeysAllowedPrivateKeysAllowedPublicKeysSPHINX_BUILD )PrivateKeyTypesPublicKeyTypesT)r?      )NeverF>   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)rV   rW   rX   rN   rY   rO   rQ   rP   rS   rT   rU   rR   )NoneAlgorithmHMACAlgorithmSHA256SHA384SHA512
has_cryptoupdateRSAAlgorithmECAlgorithmr$   r#   r%   r&   RSAPSSAlgorithmOKPAlgorithm)default_algorithmss    Y/home/maestro/MAESTRO/maestro-backend/venv/lib/python3.13/site-packages/jwt/algorithms.pyget_default_algorithmsrl      s   
 }334}334}334	0 z!!%l&9&9:%l&9&9:%l&9&9:$[%7%7C%k&8&8)D$[%7%7C$[%7%7C$&&	 ))?)?@()?)?@()?)?@%	
&     c                  "   \ rS rSr% SrSrS\S'   SS j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S jrSrg)	Algorithm   z@
The interface for an algorithm used to sign and verify tokens.
Nz$tuple[type[AllowedKeys], ...] | None_crypto_key_typesc                   [        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NotImplementedErrorrd   
isinstancetype
issubclassr    HashAlgorithmHashr   re   bytesfinalizedigest)selfbytestrrs   r~   s       rk   compute_hash_digestAlgorithm.compute_hash_digest   s     4T2%% J8T**8V%9%9::[[_5FGFMM'"*++'*11344rm   c                $   [         (       a  U R                  c  [        S5      e[        XR                  5      (       dS  S U R                   5       nUR                  R
                  nU R                  R
                  n[        SU SU SU 35      eg)a3  Check that the key belongs to the right cryptographic family.

Note that this method only works when ``cryptography`` is installed.

:param key: Potentially a cryptography key
:type key: :py:data:`PublicKeyTypes <cryptography.hazmat.primitives.asymmetric.types.PublicKeyTypes>` | :py:data:`PrivateKeyTypes <cryptography.hazmat.primitives.asymmetric.types.PrivateKeyTypes>`
:raises ValueError: if ``cryptography`` is not installed, or this method is called by a non-cryptography algorithm
:raises InvalidKeyError: if the key doesn't match the expected key classes
NzhThis method requires the cryptography library, and should only be used by cryptography-based algorithms.c              3  8   #    U  H  oR                   v   M     g 7fN)__name__).0clss     rk   	<genexpr>2Algorithm.check_crypto_key_type.<locals>.<genexpr>   s     L5Kc\\5Ks   zExpected one of z, got: z. Invalid Key type for )rd   rq   
ValueErrorrw   	__class__r   r   )r   keyvalid_classesactual_class
self_classs        rk   check_crypto_key_typeAlgorithm.check_crypto_key_type   s     zT33;z  #5566LT5K5KLM==11L00J!"=/F]^h]ij 	 7rm   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 r   r   s     rk   prepare_keyAlgorithm.prepare_key       rm   c                    g)zV
Returns a digital signature for the specified message
using the specified key value.
Nr   r   msgr   s      rk   signAlgorithm.sign   r   rm   c                    g)zb
Verifies that the specified digital signature is valid
for the specified message and key values.
Nr   r   r   r   sigs       rk   verifyAlgorithm.verify   r   rm   c                    g r   r   key_objas_dicts     rk   to_jwkAlgorithm.to_jwk   s	     BErm   c                    g r   r   r   s     rk   r   r      s    
 rm   c                    g)z#
Serializes a given key into a JWK
Nr   r   s     rk   r   r     r   rm   c                    g)z:
Deserializes a given key from JWK back into a key object
Nr   jwks    rk   from_jwkAlgorithm.from_jwk  r   rm   c                    g)zv
Return a warning message if the key is below the minimum
recommended length for this algorithm, or None if adequate.
Nr   r   s     rk   check_key_lengthAlgorithm.check_key_length  s    
 rm   r   )r   r|   returnr|   )r   z PublicKeyTypes | PrivateKeyTypesr   None)r   r   r   r   )r   r|   r   r   r   r|   )r   r|   r   r   r   r|   r   bool)r   r   r   Literal[True]r   r   F)r   r   r   Literal[False]r   str)r   r   r   r   r   JWKDict | str)r   str | JWKDictr   r   )r   r   r   
str | None)r   
__module____qualname____firstlineno____doc__rq   __annotations__r   r   r   r   r   r   r   staticmethodr   r   r   __static_attributes__r   rm   rk   ro   ro      s    
 ?C;B5,.       D    E05-	      
   
rm   ro   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	)r_   i  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$ )NrI   z*When alg = "none", key value must be None.r   r   s     rk   r   NoneAlgorithm.prepare_key   s$    "9C?!"NOO
rm   c                    g)Nrm   r   r   s      rk   r   NoneAlgorithm.sign)  s    rm   c                    g)NFr   r   s       rk   r   NoneAlgorithm.verify,  s    rm   c                    [        5       er   rv   r   s     rk   r   NoneAlgorithm.to_jwk/      !##rm   c                    [        5       er   r   r   s    rk   r   NoneAlgorithm.from_jwk3  r   rm   r   N)r   r   r   r   )r   r|   r   r   r   r|   )r   r|   r   r   r   r|   r   r   r   )r   r   r   r   r   r
   )r   r   r   r
   )r   r   r   r   r   r   r   r   r   r   r   r   r   rm   rk   r_   r_     s>    
 $ $ $ $rm   r_   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S jrSrg)r`   i8  zZ
Performs signing and verification operations using HMAC
and the specified hash function.
zClassVar[HashlibHash]ra   rb   rc   c                    Xl         g r   rs   r   rs   s     rk   __init__HMACAlgorithm.__init__B  s     rm   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   )r   r   	key_bytess      rk   r   HMACAlgorithm.prepare_keyE  s;    $	##z)'<'<!9 
 rm   c                    g r   r   r   s     rk   r   HMACAlgorithm.to_jwkP  s    ILrm   c                    g r   r   r   s     rk   r   r   T  s    NQrm   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      rk   r   r   X  s<     "+g"67>>@

 J::c?"rm   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   )	rw   r   r   loadsdictr   r   getr   )r   objs     rk   r   HMACAlgorithm.from_jwkd  s    	E#s###zz#C&&   775>U"!"344C))  	E!"9:D	Es   +A: A: A: :Bc                    U R                  5       R                  n[        U5      U:  a;  S[        U5       SU SU R                  5       R                  R	                  5        S3$ g )NzThe HMAC key is z> bytes long, which is below the minimum recommended length of z bytes for z. See RFC 7518 Section 3.2.)rs   digest_sizelennameupper)r   r   
min_lengths      rk   r   HMACAlgorithm.check_key_lengthu  se    ]]_00
s8j "3s8* -55?L==?''--/0 1,- rm   c                `    [         R                  " X!U R                  5      R                  5       $ r   )hmacnewrs   r~   r   s      rk   r   HMACAlgorithm.sign  s     xx$--07799rm   c                L    [         R                  " X0R                  X5      5      $ r   )r   compare_digestr   r   s       rk   r   HMACAlgorithm.verify  s    ""3		#(;<<rm   r   N)rs   r   r   r   )r   str | bytesr   r|   )r   r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r|   )r   r|   r   r   )r   r|   r   r|   r   r|   )r   r|   r   r|   r   r|   r   r   )r   r   r   r   r   hashlibsha256ra   r   sha384rb   sha512rc   r   r   r   r   r   r   r   r   r   r   r   rm   rk   r`   r`   8  s    
 %,NNF!2$+NNF!2$+NNF!2!	 L  LQ  Q	# 	# * * 	:=rm   r`   c                  d   \ rS rSr% Sr\R                  rS\S'   \R                  rS\S'   \R                  r	S\S'   \
" \\\   S4   \" \\\4   5      5      rSrS	\S
'   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S jrSS jrSrg) rf   i  zf
Performs signing and verification operations using
RSASSA-PKCS-v1_5 and the specified hash function.
$ClassVar[type[hashes.HashAlgorithm]]ra   rb   rc   .i   zClassVar[int]_MIN_KEY_SIZEc                    Xl         g r   r   r   s     rk   r   RSAAlgorithm.__init__  s    $Mrm   c                r    UR                   U R                  :  a  SUR                    SU R                   S3$ g )NzThe RSA key is z; bits long, which is below the minimum recommended size of z bits. See NIST SP 800-131A.)key_sizer   r   s     rk   r   RSAAlgorithm.check_key_length  sE    ||d000%cll^ 477;7I7I6J K,-
 rm   c                N   [        XR                  5      (       a  [        [        U5      $ [        U[        [
        45      (       d  [        S5      e[        U5      n UR                  S5      (       a,  [        U5      nU R                  U5        [        [        U5      $ [        US S9nU R                  U5        [        [        U5      $ ! [         aP     [        U5      nU R                  U5        [        [        U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.)rw   rq   r   rB   r|   r   	TypeErrorr   
startswithr>   r   r2   r<   r0   r   r=   r   r   )r   r   r   
public_keyprivate_keys        rk   r   RSAAlgorithm.prepare_key  s   #5566NC00cE3<00 @AA#C(I ''
331DY1OJ..z:j993G!D4K ..{;{;;   !4Y!?J..z:j99"$89  )B   s+   AC
 *C
 

D$+D D$D  D$c                    g r   r   r   s     rk   r   RSAAlgorithm.to_jwk  s    PSrm   c                    g r   r   r   s     rk   r   r    s    UXrm   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       rk   r   r    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#&rm   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  )rw   r   r   r   r   r   r   r   anyallr3   r   r1   r7   r  r  r4   r5   r6   r  r  )r   r   other_propspropprops_foundany_props_foundr   r$  r  r  r  s              rk   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                n    UR                  U[        R                  " 5       U R                  5       5      nU$ r   )r   r!   PKCS1v15rs   r   r   r   	signatures       rk   r   RSAAlgorithm.sign:  s)    "xxW-=-=-?QIrm   c                     UR                  X1[        R                  " 5       U R                  5       5        g! [         a     gf = f)NTF)r   r!   r/  rs   r   r   s       rk   r   RSAAlgorithm.verify>  s;    

3W%5%5%7I# s   47 
AAr   N)rs   type[hashes.HashAlgorithm]r   r   )r   rB   r   r   )r   zAllowedRSAKeys | str | bytesr   rB   )r   rB   r   r   r   r   r   )r   rB   r   r   r   r   )r   rB   r   r   r   r   )r   r   r   rB   r   r|   r   r0   r   r|   r   r|   r   r2   r   r|   r   r   )r   r   r   r   r   r    ra   r   rb   rc   r   tuplerx   rE   r   r   r0   r2   rq   r   r   r   r   r   r   r   r   r   r   r   r   rm   rk   rf   rf     s    	
 8>}}4D7=}}4D7=}}4D ${#S()U=,678
 (,}+	%		 < 
	S 
 
S		X 
 
X	$	' 
$	'L 
E	E 
E	EN		rm   rf   c                  f   \ rS rSr% Sr\R                  rS\S'   \R                  rS\S'   \R                  r	S\S'   \
" \\\   S4   \" \\\4   5      5      r S     SS	 jj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)rg   iE  zZ
Performs signing and verification operations using
ECDSA and the specified hash function
r   ra   rb   rc   .Nc                    Xl         X l        g r   )rs   expected_curve)r   rs   r;  s      rk   r   ECAlgorithm.__init__T  s    
 %M"0rm   c                    U R                   c  g[        UR                  U R                   5      (       d:  [        SUR                  R                   SU R                   R                   S35      eg)z9Validate that the key's curve matches the expected curve.NzThe key's curve 'z%' does not match the expected curve 'z' for this algorithm)r;  rw   curver   r   r   s     rk   _validate_curveECAlgorithm._validate_curve\  sj    ""*cii)<)<==%'		'7 8"116677KM  >rm   c                >   [        XR                  5      (       a#  [        [        U5      nU R	                  U5        U$ [        U[
        [        45      (       d  [        S5      e[        U5      n UR                  S5      (       a  [        U5      nO[        U5      nU R                  U5        [        [        U5      nU R	                  U5        U$ ! [         aA    [        US S9nU R                  U5        [        [         U5      nU R	                  U5        Us $ f = f)Nr  s   ecdsa-sha2-r  )rw   rq   r   rC   r?  r|   r   r
  r   r  r>   r=   r   r*   r   r<   r(   )r   r   ec_keyr   r  ec_public_keyr  ec_private_keys           rk   r   ECAlgorithm.prepare_keyg  s    #5566mS1$$V,cE3<00 @AA#C(I
&''771DY1OJ!4Y!?J **:6 $%;Z H$$]3$$ &29tL**;7!%&={!K$$^4%%&s   0A C ADDc                ~    UR                  U[        U R                  5       5      5      n[        X2R                  5      $ r   )r   r"   rs   r   r>  )r   r   r   der_sigs       rk   r   ECAlgorithm.sign  s,    hhsE$--/$:;G';;rm   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   rw   r(   r  r   r"   rs   r   )r   r   r   r   rG  r  s         rk   r   ECAlgorithm.verify  s    .sII>	 "#'>?? NN$ 
 !!'dmmo0FG   $ s#   A) AA9 )
A65A69
BBc                    g r   r   r   s     rk   r   ECAlgorithm.to_jwk  s    ORrm   c                    g r   r   r   s     rk   r   rL    s    TWrm   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  )rw   r(   r  r   r*   r   r>  r$   r%   r&   r#   r   rW  r  r   rX  r  private_valuer   r   )r   r   r   rV  r   s        rk   r   rL    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#&rm   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   rT  zNot an Elliptic curve keyrW  rX  rV  rO      z)Coords should be 32 bytes for curve P-256rP  0   z)Coords should be 48 bytes for curve P-384rQ  B   z)Coords should be 66 bytes for curve P-521rR  z-Coords should be 32 bytes for curve secp256k1rS  big)	byteorder)rW  rX  r>  r  z!D should be {} bytes for curve {})rw   r   r   r   r   r   r   r   r   r   r$   r%   r&   r#   r+   int
from_bytesr  r)   r  )r   r   rW  rX  r>  	curve_objr   r  s           rk   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;  rs   r   )rs   r5  r;  ztype[EllipticCurve] | Noner   r   )r   rC   r   r   )r   zAllowedECKeys | str | bytesr   rC   )r   r|   r   r(   r   r|   )r   r|   r   rC   r   r|   r   r   )r   rC   r   r   r   r   r   )r   rC   r   r   r   r   )r   rC   r   r   r   r   )r   r   r   rC   )r   r   r   r   r   r    ra   r   rb   rc   r   r8  rx   rE   r   r   r(   r*   rq   r   r?  r   r   r   r   r   r   r   r   r   rm   rk   rg   rg   E  s    	
 8>}}4D7=}}4D7=}}4D ${#S()U24JJKL
 :>	10	1 7	1 		1			&@	<
	" 
	R 
 
R		W 
 
W	)	' 
)	'V 
G	 
G	rm   rg   c                  ,    \ rS rSrSrSS jrSS jrSrg)	rh   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U$ )Nmgfsalt_length)r   r!   PSSMGF1rs   r   r0  s       rk   r   RSAPSSAlgorithm.sign   sS    "xxT]]_5 $ ; ;  I rm   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)Nrf  TF)r   r!   ri  rj  rs   r   r   r   s       rk   r   RSAPSSAlgorithm.verify+  sh    

KK#LL9$(MMO$?$? MMO # s   A/A2 2
A?>A?r   Nr6  r7  )r   r   r   r   r   r   r   r   r   rm   rk   rh   rh     s    				rm   rh   c            
         \ rS rSrSr\" \\\   S4   \	" \
\\\\4   5      5      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)ri   i:  zv
Performs signing and verification operations using EdDSA

This class requires ``cryptography>=2.6`` to be installed.
.c                    g r   r   )r   kwargss     rk   r   OKPAlgorithm.__init__M  s    rm   c                   [        U[        [        45      (       d  U R                  U5        U$ [        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O1SU;   a  [        US S9nO USS S:X  a  [        U5      nO[        S5      eU R                  U5        [        S	U5      $ )
Nutf-8z-----BEGIN PUBLICz-----BEGIN PRIVATEr  r      zssh-r  rD   )rw   r   r|   r   r   encoder=   r<   r>   r   r   )r   r   key_strr   
loaded_keys        rk   r   OKPAlgorithm.prepare_keyP  s    cC<00**3/
-7U-C-Ccjj)G/9#s/C/C

7+I #g-0;
%01)dK
1'0;
%&CDD &&z2(*55rm   c                x    [        U[        5      (       a  UR                  S5      OUnUR                  U5      nU$ )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
rs  )rw   r   ru  r   )r   r   r   	msg_bytesr1  s        rk   r   OKPAlgorithm.signf  s4     0:#s/C/C

7+I"xx	2Irm   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.
rs  TF)rw   r   ru  r.   r,   r  r   r   )r   r   r   r   rz  	sig_bytesr  s          rk   r   OKPAlgorithm.verifyt  s    3=c33G3GCJJw/S	3=c33G3GCJJw/S	 "#(9?'KLL NN$ 
 !!)7# s   BB 
BBc                    g r   r   r   r   s     rk   r   OKPAlgorithm.to_jwk  s    LOrm   c                    g r   r   r  s     rk   r   r    s    QTrm   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)rW  r   rV  )r  r  encryption_algorithm)rW  r  r   rV  r  )rw   r/   r-   public_bytesr8   Rawr;   r   r   r   r   r   r.   r,   private_bytesr:   r9   r  r   )r   r   rW  rV  r   r  s         rk   r   r    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?*!"?@@rm   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 PairrV  r  r  rS  rW  zOKP should have "x" parameterr  zInvalid key parameter)rw   r   r   r   r   r   r   r   r   r/   from_public_bytesr-   r.   from_private_bytesr,   )r   r   r>  rW  r  errs         rk   r   OKPAlgorithm.from_jwk  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<r   N)rp  r   r   r   )r   zAllowedOKPKeys | str | bytesr   rD   )r   r   r   z#Ed25519PrivateKey | Ed448PrivateKeyr   r|   )r   r   r   rD   r   r   r   r   )r   rD   r   r   r   r   r   )r   rD   r   r   r   r   )r   rD   r   r   r   r   )r   r   r   rD   )r   r   r   r   r   r   r8  rx   rE   r   r   r.   r/   r,   r-   rq   r   r   r   r   r   r   r   r   r   r   rm   rk   ri   ri   :  s    	 !${#S()%$#"$

		6,	"	)L			"	)7	>I		4 
	O 
 
O		T 
 
T	,	A 
,	A\ 
 	H 
 	Hrm   ri   )r   zdict[str, Algorithm])i
__future__r   r   r   r   ossysabcr   r   typingr   r   r   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.rsar0   r1   r2   r3   r4   r5   r6   r7   ,cryptography.hazmat.primitives.serializationr8   r9   r:   r;   r<   r=   r>   version_inforA   typing_extensionsrB   r   rC   rD   rE   rF   rG   r   getenv/cryptography.hazmat.primitives.asymmetric.typesrJ   rK   rd   ModuleNotFoundErrorrM   requires_cryptographyrl   ro   r_   r`   rf   rg   rh   ri   r   rm   rk   <module>r     s3   "    	 
 #
 
 
 ( '
 
 
VN<5A  	 	 	   7"$ 	0 !&m\&A BNIB$%<>T%TUM9U %+_nL!NI  #>=.#PQKQ$).0A?R%	  $),.>N$y  RYY~r:;;	

 J   Di iX$I $<L=I L=^ zy zxTi Tl, >lHy lHg u  
7" +NMNKJs   DG 1G54G5