+
    Ii                    8  a  0 t $ ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIH	t	H
t
 ^ RIHtHtHtHtHtHtHtHtHt ^RIHt ^RIHtHt ^RIHtHtHtHtHtH t H!t!H"t"H#t#  ^ RI$H%t%H&t& ^ R	I'H(t( ^ R
I)H*t* ^ RI+H,t, ^ RI-H.t.H/t/H0t0H1t1H2t2H3t3H4t4H5t5H6t6H7t7 ^ RI8H9t9H:t: ^ RI;H<t<H=t= ^ RI>H?t?H@t@HAtAHBtBHCtCHDtDHEtEHFtF ^ RIGHHtHHItIHJtJHKtKHLtLHMtMHNtN ]P                  R/8  d   ^ RIHPtP M^ RIQHPtP ]]?]A3,          tRR]SR&   ]]4]63,          tTR]SR&   ]]<]=]9]:3,          tUR]SR&   ]]R]T]U3,          tVR]SR&   ]]?]4]<]93,          tWR]SR&   ]]A]6]=]:3,          tXR]SR&   ]'       g    ]Y! ]P                  ! RR4      4      '       d	   ^ RI[H\t\H]t] Rt^0 R1mtaR R  ltb ! R! R"]	4      tc ! R# R$]c4      td ! R% R&]c4      te]^'       d/    ! R' R(]c4      tf ! R) R*]c4      tg ! R+ R,]f4      th ! R- R.]c4      tiR# R#   ]_ d0    ]P                  R08  d   ^ RIH`t` M^ RIQH`t` ]`tR]`tT]`tU]`tV]`tW]`tXRt^ Li ; i)2    )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)	TypeAliasr>   AllowedRSAKeysAllowedECKeysAllowedOKPKeysAllowedKeysAllowedPrivateKeysAllowedPublicKeysSPHINX_BUILD )PrivateKeyTypesPublicKeyTypesT)NeverFc                   V ^8  d   QhRR/# )   returnzdict[str, Algorithm] )formats   "wC:\Users\petid\OneDrive\Desktop\Maestro\MAESTRO CLAUDE\MAESTRO\maestro-backend\venv\Lib\site-packages\jwt/algorithms.py__annotate__rP      s       4     c                 \   R\        4       R\        \        P                  4      R\        \        P                  4      R\        \        P                  4      /p \
        '       EdH   V P                  R\        \        P                  4      R\        \        P                  4      R\        \        P                  4      R\        \        P                  \        4      R	\        \        P                  \        4      R
\        \        P                  \        4      R\        \        P                  \        4      R\        \        P                  \        4      R\        \        P                  4      R\        \        P                  4      R\        \        P                  4      R\        4       /4       V # )z=
Returns the algorithms that are implemented by the library.
noneHS256HS384HS512RS256RS384RS512ES256ES256KES384ES521ES512PS256PS384PS512EdDSA)NoneAlgorithmHMACAlgorithmSHA256SHA384SHA512
has_cryptoupdateRSAAlgorithmECAlgorithmr#   r"   r$   r%   RSAPSSAlgorithmOKPAlgorithm)default_algorithmss    rO   get_default_algorithmsro      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&&	 )?)?@)?)?@)?)?@	
& rQ   c                  ,   ] tR t^t$ RtRtR]R&   R R ltR R lt]	R	 R
 l4       t
]	R R l4       t]	R R l4       t]]]	R R l4       4       4       t]]]	RR R ll4       4       4       t]]	RR R ll4       4       t]]	R R l4       4       tR R ltRtR# )	Algorithmz@
The interface for an algorithm used to sign and verify tokens.
Nz$tuple[type[AllowedKeys], ...] | None_crypto_key_typesc                    V ^8  d   QhRRRR/# )rK   bytestrbytesrL   rM   )rN   s   "rO   rP   Algorithm.__annotate__   s     5 55 5U 5rQ   c                   \        V RR4      pVf   \        h\        '       d   \        V\        4      '       dp   \        V\        P                  4      '       dP   \        P                  ! V! 4       \        4       R7      pVP                  V4       \        VP                  4       4      # \        V! V4      P                  4       4      # )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NotImplementedErrorrh   
isinstancetype
issubclassr   HashAlgorithmHashr   ri   ru   finalizedigest)selfrt   rx   r   s   &&  rO   compute_hash_digestAlgorithm.compute_hash_digest   s     4T2%% J8T**8V%9%9::[[_5FGFMM'"*++'*11344rQ   c                    V ^8  d   QhRRRR/# )rK   keyz PublicKeyTypes | PrivateKeyTypesrL   NonerM   )rN   s   "rO   rP   rv      s      )I d rQ   c                ,   \         '       d   V P                  f   \        R4      h\        WP                  4      '       gT   R V P                   4       pVP                  P
                  pV P                  P
                  p\        RV RV RV 24      hR# )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   "   T F  qP                   x  K  	  R # 5iN)__name__).0clss   & rO   	<genexpr>2Algorithm.check_crypto_key_type.<locals>.<genexpr>   s     L5Kc\\5Ks   zExpected one of z, got: z. Invalid Key type for )rh   rr   
ValueErrorr|   	__class__r   r   )r   r   valid_classesactual_class
self_classs   &&   rO   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 	 7rQ   c                    V ^8  d   QhRRRR/# )rK   r   r   rL   rM   )rN   s   "rO   rP   rv      s      s s rQ   c                    R# )z
Performs necessary validation and conversions on the key and returns
the key value in the proper format for sign() and verify().
NrM   r   r   s   &&rO   prepare_keyAlgorithm.prepare_key       rQ   c               $    V ^8  d   QhRRRRRR/# )rK   msgru   r   r   rL   rM   )rN   s   "rO   rP   rv      s!       C E rQ   c                    R# )zV
Returns a digital signature for the specified message
using the specified key value.
NrM   r   r   r   s   &&&rO   signAlgorithm.sign   r   rQ   c               (    V ^8  d   QhRRRRRRRR/# )rK   r   ru   r   r   sigrL   boolrM   )rN   s   "rO   rP   rv      s(      % c  $ rQ   c                    R# )zb
Verifies that the specified digital signature is valid
for the specified message and key values.
NrM   r   r   r   r   s   &&&&rO   verifyAlgorithm.verify   r   rQ   c               $    V ^8  d   QhRRRRRR/# )rK   key_objr   as_dictLiteral[True]rL   r   rM   )rN   s   "rO   rP   rv      s    DDDmDDrQ   c                	    R # r   rM   r   r   s   &&rO   to_jwkAlgorithm.to_jwk   s	     BErQ   c               $    V ^8  d   QhRRRRRR/# )rK   r   r   r   Literal[False]rL   strrM   )rN   s   "rO   rP   rv      s$      -	rQ   c                	    R # r   rM   r   s   &&rO   r   r      s    
 rQ   c               $    V ^8  d   QhRRRRRR/# )rK   r   r   r   r   rL   JWKDict | strrM   )rN   s   "rO   rP   rv     s!       d } rQ   c                    R# )z#
Serializes a given key into a JWK
NrM   r   s   &&rO   r   r     r   rQ   c                    V ^8  d   QhRRRR/# )rK   jwkstr | JWKDictrL   r   rM   )rN   s   "rO   rP   rv     s      m  rQ   c                    R# )z:
Deserializes a given key from JWK back into a key object
NrM   r   s   &rO   from_jwkAlgorithm.from_jwk  r   rQ   c                    V ^8  d   QhRRRR/# )rK   r   r   rL   
str | NonerM   )rN   s   "rO   rP   rv     s      C J rQ   c                    R# )zv
Return a warning message if the key is below the minimum
recommended length for this algorithm, or None if adequate.
NrM   r   s   &&rO   check_key_lengthAlgorithm.check_key_length  s    
 rQ   rM   F)r   
__module____qualname____firstlineno____doc__rr   __annotations__r   r   r   r   r   r   r   staticmethodr   r   r   __static_attributes__rM   rQ   rO   rq   rq      s    
 ?C;B5,.       D    E      
   
 rQ   rq   c                  n    ] tR tRtRtR R ltR R ltR R lt]RR	 R
 ll4       t	]R R l4       t
RtR# )rc   i  zN
Placeholder for use when no signing or verification
operations are required.
c                    V ^8  d   QhRRRR/# )rK   r   r   rL   r   rM   )rN   s   "rO   rP   NoneAlgorithm.__annotate__   s      z d rQ   c                	6    VR 8X  d   RpVe   \        R4      hV# )rF   Nz*When alg = "none", key value must be None.r   r   s   &&rO   r   NoneAlgorithm.prepare_key   s$    "9C?!"NOO
rQ   c               $    V ^8  d   QhRRRRRR/# )rK   r   ru   r   r   rL   rM   )rN   s   "rO   rP   r   )  s!       D U rQ   c                	    R # )rQ   rM   r   s   &&&rO   r   NoneAlgorithm.sign)  s    rQ   c               (    V ^8  d   QhRRRRRRRR/# )rK   r   ru   r   r   r   rL   r   rM   )rN   s   "rO   rP   r   ,  s(      % d  4 rQ   c                	    R # r   rM   r   s   &&&&rO   r   NoneAlgorithm.verify,  s    rQ   c               $    V ^8  d   QhRRRRRR/# )rK   r   r   r   r   rL   r
   rM   )rN   s   "rO   rP   r   0  s!     $ $ $d $x $rQ   c                	    \        4       hr   r{   r   s   &&rO   r   NoneAlgorithm.to_jwk/      !##rQ   c                    V ^8  d   QhRRRR/# )rK   r   r   rL   r
   rM   )rN   s   "rO   rP   r   4  s     $ $m $ $rQ   c                	    \        4       hr   r   r   s   &rO   r   NoneAlgorithm.from_jwk3  r   rQ   rM   Nr   )r   r   r   r   r   r   r   r   r   r   r   r   rM   rQ   rO   rc   rc     s>    
 $ $ $ $rQ   rc   c                  2   ] tR tRt$ Rt]P                  tR]R&   ]P                  t
R]R&   ]P                  tR]R&   R R ltR	 R
 lt]]R R l4       4       t]]RR R ll4       4       t]RR R ll4       t]R R l4       tR R ltR R ltR R ltRtR# )rd   i8  zZ
Performs signing and verification operations using HMAC
and the specified hash function.
zClassVar[HashlibHash]re   rf   rg   c                    V ^8  d   QhRRRR/# )rK   rx   r   rL   r   rM   )rN   s   "rO   rP   HMACAlgorithm.__annotate__B  s     ! ! ! !rQ   c                	    Wn         R # r   rx   r   rx   s   &&rO   __init__HMACAlgorithm.__init__B  s     rQ   c                    V ^8  d   QhRRRR/# )rK   r   str | bytesrL   ru   rM   )rN   s   "rO   rP   r   E  s     	 	{ 	u 	rQ   c                	v    \        V4      p\        V4      '       g   \        V4      '       d   \        R 4      hV# )zdThe 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   && rO   r   HMACAlgorithm.prepare_keyE  s;    $	##z)'<'<!9 
 rQ   c               $    V ^8  d   QhRRRRRR/# )rK   r   r   r   r   rL   r   rM   )rN   s   "rO   rP   r   R  s    LLLmLLrQ   c                	    R # r   rM   r   s   &&rO   r   HMACAlgorithm.to_jwkP  s    ILrQ   c               $    V ^8  d   QhRRRRRR/# )rK   r   r   r   r   rL   r   rM   )rN   s   "rO   rP   r   V  s    QQQnQQrQ   c                	    R # r   rM   r   s   &&rO   r   r   T  s    NQrQ   c               $    V ^8  d   QhRRRRRR/# )rK   r   r   r   r   rL   r   rM   )rN   s   "rO   rP   r   Y  s!     	# 	# 	#d 	#} 	#rQ   c                	    R \        \        V 4      4      P                  4       RR/pV'       d   V# \        P                  ! V4      # )kktyoct)r   r   decodejsondumps)r   r   r   s   && rO   r   r   X  sA     !+g"67>>@5

 J::c?"rQ   c                    V ^8  d   QhRRRR/# )rK   r   r   rL   ru   rM   )rN   s   "rO   rP   r   e  s     * *m * *rQ   c                	8    \        V \        4      '       d   \        P                  ! V 4      pM\        V \        4      '       d   T pM\
        hVP                  R4      R8w  d   \        R4      h\        VR,          4      #   \
         d    \        R 4      Rhi ; i)Key is not valid JSONNr   r   zNot an HMAC keyr   )	r|   r   r   loadsdictr   r   getr   )r   objs   & rO   r   HMACAlgorithm.from_jwkd  s    	E#s###zz#C&&   775>U"!"344C))  	E!"9:D	Es   ,B B B Bc                    V ^8  d   QhRRRR/# )rK   r   ru   rL   r   rM   )rN   s   "rO   rP   r   u  s     	 	E 	j 	rQ   c                	    V P                  4       P                  p\        V4      V8  d<   R \        V4       RV RV P                  4       P                  P	                  4        R2# R# )z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.N)rx   digest_sizelennameupper)r   r   
min_lengths   && rO   r   HMACAlgorithm.check_key_lengthu  se    ]]_00
s8j "3s8* -55?L==?''--/0 1,- rQ   c               $    V ^8  d   QhRRRRRR/# )rK   r   ru   r   rL   rM   )rN   s   "rO   rP   r     s!     : : :E :e :rQ   c                	`    \         P                  ! W!V P                  4      P                  4       # r   )hmacnewrx   r   r   s   &&&rO   r   HMACAlgorithm.sign  s     xx$--07799rQ   c               (    V ^8  d   QhRRRRRRRR/# )rK   r   ru   r   r   rL   r   rM   )rN   s   "rO   rP   r     s(     = =% =e =% =D =rQ   c                	L    \         P                  ! W0P                  W4      4      # r   )r  compare_digestr   r   s   &&&&rO   r   HMACAlgorithm.verify  s    ""3		#(;<<rQ   r   Nr   )r   r   r   r   r   hashlibsha256re   r   sha384rf   sha512rg   r   r   r   r   r   r   r   r   r   r   rM   rQ   rO   rd   rd   8  s    
 %,NNF!2$+NNF!2$+NNF!2!	 L  LQ  Q	# 	# * * 	:= =rQ   rd   c                     ] tR tRt$ Rt]P                  tR]R&   ]P                  tR]R&   ]P                  t	R]R&   ]
! ]]],          R3,          ]! ]]]3,          4      4      tRtR	]R
&   R R ltR R ltR R lt]]R R l4       4       t]]RR R ll4       4       t]RR R ll4       t]R R l4       tR R ltR R ltRtR# ) rj   i  zf
Performs signing and verification operations using
RSASSA-PKCS-v1_5 and the specified hash function.
$ClassVar[type[hashes.HashAlgorithm]]re   rf   rg   .i   zClassVar[int]_MIN_KEY_SIZEc                    V ^8  d   QhRRRR/# )rK   rx   type[hashes.HashAlgorithm]rL   r   rM   )rN   s   "rO   rP   RSAAlgorithm.__annotate__  s     	% 	%%? 	%D 	%rQ   c                	    Wn         R # r   r   r   s   &&rO   r   RSAAlgorithm.__init__  s    $MrQ   c                    V ^8  d   QhRRRR/# )rK   r   r?   rL   r   rM   )rN   s   "rO   rP   r    s     	 	 	: 	rQ   c                	v    VP                   V P                  8  d   R VP                    RV P                   R2# R# )zThe RSA key is z; bits long, which is below the minimum recommended size of z bits. See NIST SP 800-131A.N)key_sizer  r   s   &&rO   r   RSAAlgorithm.check_key_length  sE    ||d000%cll^ 477;7I7I6J K,-
 rQ   c                    V ^8  d   QhRRRR/# )rK   r   zAllowedRSAKeys | str | bytesrL   r?   rM   )rN   s   "rO   rP   r    s     	  	 #? 	 N 	 rQ   c                	^   \        WP                  4      '       d   \        \        V4      # \        V\        \
        34      '       g   \        R 4      h\        V4      p VP                  R4      '       d-   \        V4      pV P                  V4       \        \        V4      # \        VRR7      pV P                  V4       \        \        V4      #   \         dR     \        T4      pT P                  T4       \        \        T4      u #   \        \         3 d    \#        R4      Rhi ; ii ; i)Expecting a PEM-formatted key.s   ssh-rsaNpasswordz(Could not parse the provided public key.)r|   rr   r   r?   ru   r   	TypeErrorr   
startswithr=   r   r1   r;   r/   r   r<   r   r   )r   r   r   
public_keyprivate_keys   &&   rO   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               $    V ^8  d   QhRRRRRR/# )rK   r   r?   r   r   rL   r   rM   )rN   s   "rO   rP   r    s    SSNS]SwSrQ   c                	    R # r   rM   r   s   &&rO   r   RSAAlgorithm.to_jwk  s    PSrQ   c               $    V ^8  d   QhRRRRRR/# )rK   r   r?   r   r   rL   r   rM   )rN   s   "rO   rP   r    s    XXNX^XPSXrQ   c                	    R # r   rM   r   s   &&rO   r   r0    s    UXrQ   c               $    V ^8  d   QhRRRRRR/# )rK   r   r?   r   r   rL   r   rM   )rN   s   "rO   rP   r    s!     $	' $	'N $	'T $	'm $	'rQ   c                	   R p\        V R4      '       EdE   V P                  4       pRRRR.R\        VP                  P                  4      P                  4       R\        VP                  P                  4      P                  4       R\        VP                  4      P                  4       R	\        VP                  4      P                  4       R
\        VP                  4      P                  4       R\        VP                  4      P                  4       R\        VP                  4      P                  4       R\        VP                  4      P                  4       /
pM{\        V R4      '       d_   V P                  4       pRRRR.R\        VP                  4      P                  4       R\        VP                  4      P                  4       /pM\        R4      hV'       d   V# \        P                  ! V4      # )Nprivate_numbersr   RSAkey_opsr   nedpqdpdqqir   Not a public or private key)hasattrr5  r   public_numbersr8  r   r9  r:  r;  r<  dmp1dmq1iqmpr   r   r   )r   r   r  numberss   &&  rO   r   r0    s   )-Cw 122!113 5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 5z*7995<<>*7995<<>	 &&CDD
zz#&rQ   c                    V ^8  d   QhRRRR/# )rK   r   r   rL   r?   rM   )rN   s   "rO   rP   r    s"     E	E E	E- E	EN E	ErQ   c                	    \        V \        4      '       d   \        P                  ! V 4      pM\        V \        4      '       d   T pM\
        hVP                  R4      R8w  d   \        R4      RhRV9   Ed   RV9   Ed   RV9   Ed   RV9   d   \        R	4      h. ROpV Uu. uF  q3V9   NK	  	  pp\        V4      pV'       d   \        V4      '       g   \        R4      Rh\        \        VR,          4      \        VR,          4      4      pV'       d   \        \        VR,          4      \        VR
,          4      \        VR,          4      \        VR,          4      \        VR,          4      \        VR,          4      VR7      pVP'                  4       # \        VR,          4      p\        VP                  WP                  4      w  r\        VV	V
\!        W4      \#        W4      \%        W4      VR7      pVP'                  4       # RV9   dB   RV9   d;   \        \        VR,          4      \        VR,          4      4      P)                  4       # \        R4      h  \
         d    \        R 4      Rhi ; iu upi )r   Nr   r6  zNot an RSA keyr:  r9  r8  othz5Unsupported RSA private key: > 2 primes not supportedr;  r<  r=  r>  r?  z@RSA key must include all parameters if any are present besides d)r:  r;  r<  rC  rD  rE  rB  r@  )r;  r<  r=  r>  r?  )r|   r   r   r   r   r   r   r   anyallr2   r   r0   r6   r8  r9  r3   r4   r5   r,  r+  )r   r  other_propspropprops_foundany_props_foundrB  rF  r:  r;  r<  s   &          rO   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   ,I I I "I6I3c               $    V ^8  d   QhRRRRRR/# rK   r   ru   r   r/   rL   rM   )rN   s   "rO   rP   r  :  s!     	 	E 	 	% 	rQ   c                	n    VP                  V\        P                  ! 4       V P                  4       4      pV# r   )r   r    PKCS1v15rx   r   r   r   	signatures   &&& rO   r   RSAAlgorithm.sign:  s)    "xxW-=-=-?QIrQ   c               (    V ^8  d   QhRRRRRRRR/# rK   r   ru   r   r1   r   rL   r   rM   )rN   s   "rO   rP   r  >  s(     	 	e 	, 	U 	t 	rQ   c                	     VP                  W1\        P                  ! 4       V P                  4       4       R #   \         d     R# i ; i)TF)r   r    rT  rx   r   r   s   &&&&rO   r   RSAAlgorithm.verify>  s;    

3W%5%5%7I# s   48 AAr   Nr   )r   r   r   r   r   r   re   r   rf   rg   r   tupler}   rB   r   r   r/   r1   rr   r  r   r   r   r   r   r   r   r   r   r   rM   rQ   rO   rj   rj     s    	
 8>}}4D7=}}4D7=}}4D ${#S()U=,678
 (,}+	%		 < 
	S 
 
S		X 
 
X	$	' 
$	'L 
E	E 
E	EN		 	rQ   rj   c                     ] tR tRt$ Rt]P                  tR]R&   ]P                  tR]R&   ]P                  t	R]R&   ]
! ]]],          R3,          ]! ]]]3,          4      4      tRR	 R
 lltR R ltR R ltR R ltR R lt]]R R l4       4       t]]RR R ll4       4       t]RR R ll4       t]R R l4       tRtR# )rk   iE  zZ
Performs signing and verification operations using
ECDSA and the specified hash function
r  re   rf   rg   .Nc               $    V ^8  d   QhRRRRRR/# )rK   rx   r  expected_curveztype[EllipticCurve] | NonerL   r   rM   )rN   s   "rO   rP   ECAlgorithm.__annotate__T  s(     	1 	10	1 7	1 		1rQ   c                	    Wn         W n        R # r   )rx   r_  )r   rx   r_  s   &&&rO   r   ECAlgorithm.__init__T  s    
 %M"0rQ   c                    V ^8  d   QhRRRR/# )rK   r   r@   rL   r   rM   )rN   s   "rO   rP   r`  \  s     		 		} 		 		rQ   c                    V P                   f   R# \        VP                  V P                   4      '       g;   \        RVP                  P                   RV P                   P                   R24      hR# )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_  r|   curver   r  r   s   &&rO   _validate_curveECAlgorithm._validate_curve\  sj    ""*cii)<)<==%'		'7 8"116677KM  >rQ   c                    V ^8  d   QhRRRR/# )rK   r   zAllowedECKeys | str | bytesrL   r@   rM   )rN   s   "rO   rP   r`  g  s     	& 	&#> 	&= 	&rQ   c                	L   \        WP                  4      '       d$   \        \        V4      pV P	                  V4       V# \        V\
        \        34      '       g   \        R 4      h\        V4      p VP                  R4      '       d   \        V4      pM\        V4      pV P                  V4       \        \        V4      pV P	                  V4       V#   \         dE    \        TRR7      pT P                  T4       \        \         T4      pT P	                  T4       Tu # i ; i)r&  s   ecdsa-sha2-Nr'  )r|   rr   r   r@   rf  ru   r   r)  r   r*  r=   r<   r   r)   r   r;   r'   )r   r   ec_keyr   r+  ec_public_keyr,  ec_private_keys   &&      rO   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   2A!C AD#"D#c               $    V ^8  d   QhRRRRRR/# )rK   r   ru   r   r'   rL   rM   )rN   s   "rO   rP   r`    s"     	< 	<E 	<(? 	<E 	<rQ   c                	~    VP                  V\        V P                  4       4      4      p\        W2P                  4      # r   )r   r!   rx   r   re  )r   r   r   der_sigs   &&& rO   r   ECAlgorithm.sign  s,    hhsE$--/$:;G';;rQ   c               (    V ^8  d   QhRRRRRRRR/# )rK   r   ru   r   r@   r   rL   r   rM   )rN   s   "rO   rP   r`    s(     	 	e 	- 	e 	 	rQ   c                	    \        W2P                  4      p \        T\        4      '       d   TP                  4       MTpTP                  YA\        T P                  4       4      4       R#   \         d     R # i ; i  \         d     R # i ; i)FT)
r   re  r   r|   r'   r+  r   r!   rx   r   )r   r   r   r   rp  r+  s   &&&&  rO   r   ECAlgorithm.verify  s    .sII>	 "#'>?? NN$ 
 !!'dmmo0FG   $ s#   A+ AA= +A:9A:=BBc               $    V ^8  d   QhRRRRRR/# )rK   r   r@   r   r   rL   r   rM   )rN   s   "rO   rP   r`    s    RRMRMRgRrQ   c                	    R # r   rM   r   s   &&rO   r   ECAlgorithm.to_jwk  s    ORrQ   c               $    V ^8  d   QhRRRRRR/# )rK   r   r@   r   r   rL   r   rM   )rN   s   "rO   rP   r`    s    WWMWNWsWrQ   c                	    R # r   rM   r   s   &&rO   r   rw    s    TWrQ   c               $    V ^8  d   QhRRRRRR/# )rK   r   r@   r   r   rL   r   rM   )rN   s   "rO   rP   r`    s!     )	' )	'M )	'D )	'] )	'rQ   c                	   \        V \        4      '       d    V P                  4       P                  4       pM2\        V \        4      '       d   V P                  4       pM\        R 4      h\        V P                  \        4      '       d   RpM\        V P                  \        4      '       d   RpM^\        V P                  \        4      '       d   RpM;\        V P                  \        4      '       d   RpM\        RV P                   24      hRRRVR	\        VP                  V P                  P                  R
7      P                  4       R\        VP                  V P                  P                  R
7      P                  4       /p\        V \        4      '       dK   \        V P!                  4       P"                  V P                  P                  R
7      P                  4       VR&   V'       d   V# \$        P&                  ! V4      # )r@  P-256P-384P-521	secp256k1Invalid curve: r   ECcrvx)
bit_lengthyr:  )r|   r'   r+  rB  r)   r   re  r#   r$   r%   r"   r   r  r"  r   r  r5  private_valuer   r   )r   r   rB  r  r  s   &&   rO   r   rw    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 ts&"$$&}}55 &(&"$$&}}55 &(#C '#:;;,++-;;&}}55 &( C
 
zz#&rQ   c                    V ^8  d   QhRRRR/# )rK   r   r   rL   r@   rM   )rN   s   "rO   rP   r`    s     G	 G	- G	M G	rQ   c                	    \        V \        4      '       d   \        P                  ! V 4      pM\        V \        4      '       d   T pM\
        hVP                  R4      R8w  d   \        R4      RhRV9  g   RV9  d   \        R4      Rh\        VP                  R4      4      p\        VP                  R4      4      pVP                  R4      pVR8X  d<   \        V4      \        V4      u;8X  d   ^ 8X  d   M M\        4       pM\        R	4      RhVR
8X  d<   \        V4      \        V4      u;8X  d   ^08X  d   M M\        4       pM\        R4      RhVR8X  d<   \        V4      \        V4      u;8X  d   ^B8X  d   M M\        4       pM[\        R4      RhVR8X  d;   \        V4      \        V4      u;8X  d   ^ 8X  d   M M\        4       pM\        R4      h\        RV 24      h\        \        P!                  VRR7      \        P!                  VRR7      VR7      pRV9  d   VP#                  4       # \        VP                  R4      4      p\        V4      \        V4      8w  d   \        R\        V4      V4      h\%        \        P!                  VRR7      V4      P'                  4       #   \
         d    \        R 4      Rhi ; i)r   Nr   r  zNot an Elliptic curve keyr  r  r  r|  z)Coords should be 32 bytes for curve P-256r}  z)Coords should be 48 bytes for curve P-384r~  z)Coords should be 66 bytes for curve P-521r  z-Coords should be 32 bytes for curve secp256k1r  big)	byteorder)r  r  re  r:  z!D should be {} bytes for curve {})r|   r   r   r   r   r   r   r   r   r  r#   r$   r%   r"   r*   int
from_bytesr+  r(   r,  )r   r  r  r  re  	curve_objrB  r:  s   &       rO   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+ +K)r_  rx   r   r   )r   r   r   r   r   r   re   r   rf   rg   r   r\  r}   rB   r   r   r'   r)   rr   r   rf  r   r   r   r   r   r   r   r   rM   rQ   rO   rk   rk   E  s    	
 8>}}4D7=}}4D7=}}4D ${#S()U24JJKL

	1			&@	<
	" 
	R 
 
R		W 
 
W	)	' 
)	'V 
G	 
G	rQ   rk   c                  2    ] tR tRtRtR R ltR R ltRtR# )	rl   i  z1
Performs a signature using RSASSA-PSS with MGF1
c               $    V ^8  d   QhRRRRRR/# rR  rM   )rN   s   "rO   rP   RSAPSSAlgorithm.__annotate__   s!     		 		E 		 		% 		rQ   c           	     	    VP                  V\        P                  ! \        P                  ! V P	                  4       4      V P	                  4       P
                  R 7      V P	                  4       4      pV# )mgfsalt_length)r   r    PSSMGF1rx   r  rU  s   &&& rO   r   RSAPSSAlgorithm.sign   sS    "xxT]]_5 $ ; ;  I rQ   c               (    V ^8  d   QhRRRRRRRR/# rY  rM   )rN   s   "rO   rP   r  +  s(     	 	e 	, 	U 	t 	rQ   c           
     	    VP                  VV\        P                  ! \        P                  ! V P	                  4       4      V P	                  4       P
                  R 7      V P	                  4       4       R#   \         d     R# i ; i)r  TF)r   r    r  r  rx   r  r   r   s   &&&&rO   r   RSAPSSAlgorithm.verify+  sh    

KK#LL9$(MMO$?$? MMO # s   A2A6 6BBrM   N)r   r   r   r   r   r   r   r   rM   rQ   rO   rl   rl     s    				 	rQ   rl   c            
         ] tR tRtRt]! ]]],          R3,          ]	! ]
]]]]3,          4      4      tR R ltR R ltR R	 ltR
 R lt]]R R l4       4       t]]RR R ll4       4       t]RR R ll4       t]R R l4       tRtR# )rm   i:  zv
Performs signing and verification operations using EdDSA

This class requires ``cryptography>=2.6`` to be installed.
.c                    V ^8  d   QhRRRR/# )rK   kwargsr   rL   r   rM   )rN   s   "rO   rP   OKPAlgorithm.__annotate__M  s     	 	S 	T 	rQ   c                	    R # r   rM   )r   r  s   &,rO   r   OKPAlgorithm.__init__M  s    rQ   c                    V ^8  d   QhRRRR/# )rK   r   zAllowedOKPKeys | str | bytesrL   rA   rM   )rN   s   "rO   rP   r  P  s     	6 	6#? 	6N 	6rQ   c                	   \        V\        \        34      '       g   V P                  V4       V# \        V\        4      '       d   VP	                  R 4      MTp\        V\        4      '       d   VP                  R 4      MTpRV9   d   \        V4      pM:RV9   d   \        VRR7      pM%VR,          R8X  d   \        V4      pM\        R4      hV P                  V4       \        RV4      # )	utf-8z-----BEGIN PUBLICz-----BEGIN PRIVATENr'  :r      Nzssh-r@  rA   )r|   r   ru   r   r   encoder<   r;   r=   r   r   )r   r   key_strr   
loaded_keys   &&   rO   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
'0;
%&CDD &&z2(*55rQ   c               $    V ^8  d   QhRRRRRR/# )rK   r   r   r   z#Ed25519PrivateKey | Ed448PrivateKeyrL   ru   rM   )rN   s   "rO   rP   r  f  s$     	 	"	)L		rQ   c                z    \        V\        4      '       d   VP                  R4      MTpVP                  V4      pV# )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
r  )r|   r   r  r   )r   r   r   	msg_bytesrV  s   &&&  rO   r   OKPAlgorithm.signf  s4     0:#s/C/C

7+I"xx	2IrQ   c               (    V ^8  d   QhRRRRRRRR/# )rK   r   r   r   rA   r   rL   r   rM   )rN   s   "rO   rP   r  t  s,     	 	"	)7	>I		rQ   c                N    \        V\        4      '       d   VP                  R4      MTp\        V\        4      '       d   VP                  R4      MTp\        V\        \        34      '       d   VP                  4       MTpVP                  WT4       R#   \         d     R# i ; i)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.
r  TF)r|   r   r  r-   r+   r+  r   r   )r   r   r   r   r  	sig_bytesr+  s   &&&&   rO   r   OKPAlgorithm.verifyt  s    3=c33G3GCJJw/S	3=c33G3GCJJw/S	 "#(9?'KLL NN$ 
 !!)7# s   BB B$#B$c               $    V ^8  d   QhRRRRRR/# )rK   r   rA   r   r   rL   r   rM   )rN   s   "rO   rP   r    s    OOOO7OrQ   c                	    R # r   rM   r   r   s   &&rO   r   OKPAlgorithm.to_jwk  s    LOrQ   c               $    V ^8  d   QhRRRRRR/# )rK   r   rA   r   r   rL   r   rM   )rN   s   "rO   rP   r    s    TTTTCTrQ   c                	    R # r   rM   r  s   &&rO   r   r    s    QTrQ   c               $    V ^8  d   QhRRRRRR/# )rK   r   rA   r   r   rL   r   rM   )rN   s   "rO   rP   r    s&     ,	A ,	A ,	A ,	A- ,	ArQ   c                	   \        V \        \        34      '       d   V P                  \        P
                  \        P
                  R 7      p\        V \        4      '       d   RMRpR\        \        V4      4      P                  4       RRRV/pV'       d   V# \        P                  ! V4      # \        V \        \        34      '       d   V P                  \        P
                  \        P
                  \!        4       R7      pV P#                  4       P                  \        P
                  \        P
                  R 7      p\        V \        4      '       d   RMRpR\        \        V4      4      P                  4       R\        \        V4      4      P                  4       RRRV/pV'       d   V# \        P                  ! V4      # \%        R	4      h)
)encodingrN   Ed25519Ed448r  r   OKPr  )r  rN   encryption_algorithmr:  r@  )r|   r.   r,   public_bytesr7   Rawr:   r   r   r   r   r   r-   r+   private_bytesr9   r8   r+  r   )r   r   r  r  r  r:  s   &&    rO   r   r    sy   # 0.ABB$$%\\'++ %  $.c3C#D#Di' )+a.9@@B53 J::c?*# 1?CDD%%%\\(,,)5 &  NN$11%\\'++ 2 
 $.c3D#E#Ei7)+a.9@@B)+a.9@@B53	 J::c?*!"?@@rQ   c                    V ^8  d   QhRRRR/# )rK   r   r   rL   rA   rM   )rN   s   "rO   rP   r    s      	H  	H-  	HN  	HrQ   c                	    \        V \        4      '       d   \        P                  ! V 4      pM\        V \        4      '       d   T pM\
        hVP                  R4      R8w  d   \        R4      hVP                  R4      pVR8w  d   VR8w  d   \        RV 24      hR	V9  d   \        R
4      h\        VP                  R	4      4      p RV9  d4   VR8X  d   \        P                  ! V4      # \        P                  ! V4      # \        VP                  R4      4      pVR8X  d   \        P                  ! V4      # \        P                  ! V4      #   \
         d    \        R 4      Rhi ; i  \
         d   p\        R4      ThRp?ii ; i)r   Nr   r  zNot an Octet Key Pairr  r  r  r  r  zOKP should have "x" parameterr:  zInvalid key parameter)r|   r   r   r   r   r   r   r   r   r.   from_public_bytesr,   r-   from_private_bytesr+   )r   r  re  r  r:  errs   &     rO   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+ 6E+ :E+ E(+F6FFrM   Nr   )r   r   r   r   r   r   r\  r}   rB   r   r   r-   r.   r+   r,   rr   r   r   r   r   r   r   r   r   r   rM   rQ   rO   rm   rm   :  s    	 !${#S()%$#"$

		6,		4 
	O 
 
O		T 
 
T	,	A 
,	A\ 
 	H 
 	HrQ   rm   )   
   )r     >   rZ   r\   r^   r]   rb   r_   r`   ra   rW   rX   rY   r[   )j__conditional_annotations__
__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.rsar/   r0   r1   r2   r3   r4   r5   r6   ,cryptography.hazmat.primitives.serializationr7   r8   r9   r:   r;   r<   r=   version_infor>   typing_extensionsr?   r   r@   rA   rB   rC   rD   r   getenv/cryptography.hazmat.primitives.asymmetric.typesrG   rH   rh   ModuleNotFoundErrorrI   requires_cryptographyro   rq   rc   rd   rj   rk   rl   rm   )r  s   @rO   <module>r     s7   " "    	 
 #
 
 
 ( '
 
 
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   "C4G# G# 6
G# #3HH