+
    iv                    :   ^ RI H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 ^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*H+t+H,t,H-t-H.t.H/t/H0t0H1t1H2t2 ^ RI3H4t4H5t5 ^ RI6H7t7H8t8 ^ RI9H:t:H;t;H<t<H=t=H>t>H?t?H@t@HAtA ^ RIBHCtCHDtDHEtEHFtFHGtGHHtHHItI RtJ]	'       dh   ]:]<,          tL]/]1,          tM]7]8,          ]4,          ]5,          tN]L]M,          ]N,          tO]:]/,          ]7,          ]4,          tP]<]1,          ]8,          ]5,          tQ0 R#mtRR R ltS ! R R]4      tT ! R R]T4      tU ! R R]T4      tV]J'       d/    ! R R]T4      tW ! R R]T4      tX ! R R ]W4      tY ! R! R"]T4      tZR# R#   ]K d    RtJ Li ; i)$    )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_keyTFc                   V ^8  d   QhRR/# )   returnzdict[str, Algorithm] )formats   "0/usr/lib/python3/dist-packages/jwt/algorithms.py__annotate__rB   i   s       4     c                 *   R\        4       R\        \        P                  4      R\        \        P                  4      R\        \        P                  4      /p \
        '       Ed/   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ECAlgorithmRSAPSSAlgorithmOKPAlgorithm)default_algorithmss    rA   get_default_algorithmsra   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&& )?)?@)?)?@)?)?@	
& rC   c                     ] tR t^tR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tR# )	Algorithmz@
The interface for an algorithm used to sign and verify tokens.
c                    V ^8  d   QhRRRR/# )r=   bytestrbytesr>   r?   )r@   s   "rA   rB   Algorithm.__annotate__   s     5 55 5U 5rC   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NotImplementedErrorrZ   
isinstancetype
issubclassr   HashAlgorithmHashr   r[   rf   finalizedigest)selfre   ri   rs   s   &&  rA   compute_hash_digestAlgorithm.compute_hash_digest   s     4T2%% J8T**8V%9%9::[[_5FGFMM'"*++'*11344rC   c                    V ^8  d   QhRRRR/# )r=   keyr   r>   r?   )r@   s   "rA   rB   rg      s      s s rC   c                    R# )z
Performs necessary validation and conversions on the key and returns
the key value in the proper format for sign() and verify().
Nr?   rt   rx   s   &&rA   prepare_keyAlgorithm.prepare_key       rC   c               $    V ^8  d   QhRRRRRR/# )r=   msgrf   rx   r   r>   r?   )r@   s   "rA   rB   rg      s!       C E rC   c                    R# )zV
Returns a digital signature for the specified message
using the specified key value.
Nr?   rt   r   rx   s   &&&rA   signAlgorithm.sign   r}   rC   c               (    V ^8  d   QhRRRRRRRR/# )r=   r   rf   rx   r   sigr>   boolr?   )r@   s   "rA   rB   rg      s(      % c  $ rC   c                    R# )zb
Verifies that the specified digital signature is valid
for the specified message and key values.
Nr?   rt   r   rx   r   s   &&&&rA   verifyAlgorithm.verify   r}   rC   c                    V ^8  d   QhRRRR/# )r=   as_dictLiteral[True]r>   r   r?   )r@   s   "rA   rB   rg      s    ???7?rC   c                	    R # Nr?   key_objr   s   &&rA   to_jwkAlgorithm.to_jwk   s     =@rC   c                    V ^8  d   QhRRRR/# )r=   r   Literal[False]r>   strr?   )r@   s   "rA   rB   rg      s    DDDCDrC   c                	    R # r   r?   r   s   &&rA   r   r      s	     BErC   c                    V ^8  d   QhRRRR/# )r=   r   r   r>   JWKDict | strr?   )r@   s   "rA   rB   rg      s       - rC   c                    R# )z#
Serializes a given key into a JWK
Nr?   r   s   &&rA   r   r      r}   rC   c                    V ^8  d   QhRRRR/# )r=   jwkstr | JWKDictr>   r   r?   )r@   s   "rA   rB   rg      s      m  rC   c                    R# )z:
Deserializes a given key from JWK back into a key object
Nr?   r   s   &rA   from_jwkAlgorithm.from_jwk   r}   rC   r?   NF)__name__
__module____qualname____firstlineno____doc__ru   r   r{   r   r   r   staticmethodr   r   __static_attributes__r?   rC   rA   rc   rc      s    5,       ?    @D    E  
   rC   rc   c                  n    ] tR t^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# )rU   zN
Placeholder for use when no signing or verification
operations are required.
c                    V ^8  d   QhRRRR/# )r=   rx   z
str | Noner>   Noner?   )r@   s   "rA   rB   NoneAlgorithm.__annotate__   s      z d rC   c                	6    VR 8X  d   RpVe   \        R4      hV# ) Nz*When alg = "none", key value must be None.r   rz   s   &&rA   r{   NoneAlgorithm.prepare_key   s$    "9C?!"NOO
rC   c               $    V ^8  d   QhRRRRRR/# )r=   r   rf   rx   r   r>   r?   )r@   s   "rA   rB   r      s!       D U rC   c                	    R # )rC   r?   r   s   &&&rA   r   NoneAlgorithm.sign   s    rC   c               (    V ^8  d   QhRRRRRRRR/# )r=   r   rf   rx   r   r   r>   r   r?   )r@   s   "rA   rB   r      s(      % d  4 rC   c                	    R # r   r?   r   s   &&&&rA   r   NoneAlgorithm.verify   s    rC   c               $    V ^8  d   QhRRRRRR/# )r=   r   r   r   r   r>   r
   r?   )r@   s   "rA   rB   r      s!     $ $ $d $x $rC   c                	    \        4       hr   rl   r   s   &&rA   r   NoneAlgorithm.to_jwk       !##rC   c                    V ^8  d   QhRRRR/# )r=   r   r   r>   r
   r?   )r@   s   "rA   rB   r      s     $ $m $ $rC   c                	    \        4       hr   r   r   s   &rA   r   NoneAlgorithm.from_jwk   r   rC   r?   Nr   )r   r   r   r   r   r{   r   r   r   r   r   r   r?   rC   rA   rU   rU      s>    
 $ $ $ $rC   rU   c                  &   ] tR t^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tR# )rV   zZ
Performs signing and verification operations using HMAC
and the specified hash function.
zClassVar[HashlibHash]rW   rX   rY   c                    V ^8  d   QhRRRR/# )r=   ri   r   r>   r   r?   )r@   s   "rA   rB   HMACAlgorithm.__annotate__   s     ! ! ! !rC   c                	    Wn         R # r   ri   rt   ri   s   &&rA   __init__HMACAlgorithm.__init__   s     rC   c                    V ^8  d   QhRRRR/# )r=   rx   str | bytesr>   rf   r?   )r@   s   "rA   rB   r      s     	 	{ 	u 	rC   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   rt   rx   	key_bytess   && rA   r{   HMACAlgorithm.prepare_key   s;    $	##z)'<'<!9 
 rC   c               $    V ^8  d   QhRRRRRR/# )r=   r   r   r   r   r>   r   r?   )r@   s   "rA   rB   r     s$      '4	rC   c                	    R # r   r?   r   s   &&rA   r   HMACAlgorithm.to_jwk
       rC   c               $    V ^8  d   QhRRRRRR/# )r=   r   r   r   r   r>   r   r?   )r@   s   "rA   rB   r     s$      '5	rC   c                	    R # r   r?   r   s   &&rA   r   r     s     rC   c               $    V ^8  d   QhRRRRRR/# )r=   r   r   r   r   r>   r   r?   )r@   s   "rA   rB   r     s!     	# 	# 	#d 	#} 	#rC   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   && rA   r   r     sA     !+g"67>>@5

 J::c?"rC   c                    V ^8  d   QhRRRR/# )r=   r   r   r>   rf   r?   )r@   s   "rA   rB   r   #  s     * *m * *rC   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   )	rm   r   r   loadsdict
ValueErrorr   getr   )r   objs   & rA   r   HMACAlgorithm.from_jwk"  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RR/# )r=   r   rf   rx   r>   r?   )r@   s   "rA   rB   r   3  s!     : : :E :e :rC   c                	`    \         P                  ! W!V P                  4      P                  4       # r   )hmacnewri   rs   r   s   &&&rA   r   HMACAlgorithm.sign3  s     xx$--07799rC   c               (    V ^8  d   QhRRRRRRRR/# )r=   r   rf   rx   r   r>   r   r?   )r@   s   "rA   rB   r   6  s(     = =% =e =% =D =rC   c                	L    \         P                  ! W0P                  W4      4      # r   )r   compare_digestr   r   s   &&&&rA   r   HMACAlgorithm.verify6  s    ""3		#(;<<rC   r   Nr   )r   r   r   r   r   hashlibsha256rW   __annotations__sha384rX   sha512rY   r   r{   r   r   r   r   r   r   r   r?   rC   rA   rV   rV      s    
 %,NNF!2$+NNF!2$+NNF!2!	       	# 	# * * := =rC   rV   c                  &   ] 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tR# )r\   i<  zf
Performs signing and verification operations using
RSASSA-PKCS-v1_5 and the specified hash function.
$ClassVar[type[hashes.HashAlgorithm]]rW   rX   rY   c                    V ^8  d   QhRRRR/# r=   ri   ztype[hashes.HashAlgorithm]r>   r   r?   )r@   s   "rA   rB   RSAAlgorithm.__annotate__F       	% 	%%? 	%D 	%rC   c                	    Wn         R # r   r   r   s   &&rA   r   RSAAlgorithm.__init__F      $MrC   c                    V ^8  d   QhRRRR/# )r=   rx   zAllowedRSAKeys | str | bytesr>   AllowedRSAKeysr?   )r@   s   "rA   rB   r   I  s     	  	 #? 	 N 	 rC   c                	   \        V\        \        34      '       d   V# \        V\        \        34      '       g   \        R 4      h\        V4      p VP                  R4      '       d   \        \        \        V4      4      # \        \        \        VRR7      4      #   \         d?     \        \        \        T4      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.)rm   r-   r/   rf   r   	TypeErrorr   
startswithr   r;   r9   r   r:   r   r   r   s   && rA   r{   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&)CC&C""C&c               $    V ^8  d   QhRRRRRR/# )r=   r   r   r   r   r>   r   r?   )r@   s   "rA   rB   r   c  s$     	 	#	.;		rC   c                	    R # r   r?   r   s   &&rA   r   RSAAlgorithm.to_jwka       rC   c               $    V ^8  d   QhRRRRRR/# )r=   r   r   r   r   r>   r   r?   )r@   s   "rA   rB   r   i  s$     	 	#	.<		rC   c                	    R # r   r?   r   s   &&rA   r   r  g  r   rC   c               $    V ^8  d   QhRRRRRR/# )r=   r   r   r   r   r>   r   r?   )r@   s   "rA   rB   r   n  s!     $	' $	'N $	'T $	'm $	'rC   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)hasattrr  r   public_numbersr  r   r  r  r  r  dmp1dmq1iqmpr   r   r   )r   r   r   numberss   &&  rA   r   r  m  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#&rC   c                    V ^8  d   QhRRRR/# )r=   r   r   r>   r   r?   )r@   s   "rA   rB   r     s"     E	E E	E- E	EN E	ErC   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   r  zNot an RSA keyr  r  r  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  r  r  r  r  r  )r  r  r  r  r  )rm   r   r   r   r   r   r   r   anyallr0   r   r.   r4   r  r  r1   r2   r3   private_key
public_key)r   r   other_propspropprops_foundany_props_foundr  r  r  r  r  s   &          rA   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/# r=   r   rf   rx   r-   r>   r?   )r@   s   "rA   rB   r     s&     	F 	FE 	F 	F% 	FrC   c                	j    VP                  V\        P                  ! 4       V P                  4       4      # r   )r   r   PKCS1v15ri   r   s   &&&rA   r   RSAAlgorithm.sign  s$    88C!1!1!3T]]_EErC   c               (    V ^8  d   QhRRRRRRRR/# r=   r   rf   rx   r/   r   r>   r   r?   )r@   s   "rA   rB   r     s(     	 	e 	, 	U 	t 	rC   c                	     VP                  W1\        P                  ! 4       V P                  4       4       R #   \         d     R# i ; i)TF)r   r   r-  ri   r   r   s   &&&&rA   r   RSAAlgorithm.verify  s;    

3W%5%5%7I# s   48 AAr   Nr   )r   r   r   r   r   r   rW   r   rX   rY   r   r{   r   r   r   r   r   r   r   r?   rC   rA   r\   r\   <  s    	
 8>}}4D7=}}4D7=}}4D	%	 0 
		 
 
	 
		 
 
	 
$	' 
$	'L 
E	E 
E	EN	F	 	rC   r\   c                  &   ] 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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# )r]   i  zZ
Performs signing and verification operations using
ECDSA and the specified hash function
r   rW   rX   rY   c                    V ^8  d   QhRRRR/# r   r?   )r@   s   "rA   rB   ECAlgorithm.__annotate__  r   rC   c                	    Wn         R # r   r   r   s   &&rA   r   ECAlgorithm.__init__  r   rC   c                    V ^8  d   QhRRRR/# )r=   rx   zAllowedECKeys | str | bytesr>   AllowedECKeysr?   )r@   s   "rA   rB   r5    s     	 	#> 	= 	rC   c                	   \        V\        \        34      '       d   V# \        V\        \        34      '       g   \        R 4      h\        V4      p VP                  R4      '       d   \        V4      pM\        V4      p \        V\        \        34      '       g   \        R4      RhV#   \         d    \        TRR7      p LDi ; i)r   s   ecdsa-sha2-Nr   zcExpecting a EllipticCurvePrivateKey/EllipticCurvePublicKey. Wrong key provided for ECDSA algorithms)rm   r%   r'   rf   r   r  r   r  r;   r:   r   r9   r   )rt   rx   r   
crypto_keys   &&  rA   r{   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+ 5B+ +CCc               $    V ^8  d   QhRRRRRR/# )r=   r   rf   rx   r%   r>   r?   )r@   s   "rA   rB   r5    s"     	< 	<E 	<(? 	<E 	<rC   c                	~    VP                  V\        V P                  4       4      4      p\        W2P                  4      # r   )r   r   ri   r   curve)rt   r   rx   der_sigs   &&& rA   r   ECAlgorithm.sign  s,    hhsE$--/$:;G';;rC   c               (    V ^8  d   QhRRRRRRRR/# )r=   r   rf   rx   r9  r   r>   r   r?   )r@   s   "rA   rB   r5    s(     	 	e 	- 	e 	 	rC   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   r?  r   rm   r%   r$  r   r   ri   r   )rt   r   rx   r   r@  r$  s   &&&&  rA   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/# )r=   r   r9  r   r   r>   r   r?   )r@   s   "rA   rB   r5  )  s$     	 	"	-:		rC   c                	    R # r   r?   r   s   &&rA   r   ECAlgorithm.to_jwk'  r  rC   c               $    V ^8  d   QhRRRRRR/# )r=   r   r9  r   r   r>   r   r?   )r@   s   "rA   rB   r5  /  s$     	 	"	-;		rC   c                	    R # r   r?   r   s   &&rA   r   rG  -  r   rC   c               $    V ^8  d   QhRRRRRR/# )r=   r   r9  r   r   r>   r   r?   )r@   s   "rA   rB   r5  4  s!     )	' )	'M )	'D )	'] )	'rC   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  )rm   r%   r$  r  r'   r   r?  r!   r"   r#   r    r   rS  key_sizer   rU  r  private_valuer   r   )r   r   r  rR  r   s   &&   rA   r   rG  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 ts&"$$&}}55 &(&"$$&}}55 &(#C '#:;;,++-;;&}}55 &( C
 
zz#&rC   c                    V ^8  d   QhRRRR/# )r=   r   r   r>   r9  r?   )r@   s   "rA   rB   r5  `  s     G	 G	- G	M G	rC   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   rQ  zNot an Elliptic curve keyrS  rU  rR  rL  z)Coords should be 32 bytes for curve P-256rM  z)Coords should be 48 bytes for curve P-384rN  z)Coords should be 66 bytes for curve P-521rO  z-Coords should be 32 bytes for curve secp256k1rP  big)	byteorder)rS  rU  r?  r  z!D should be {} bytes for curve {})rm   r   r   r   r   r   r   r   r   lenr!   r"   r#   r    r(   int
from_bytesr$  r&   r#  )r   r   rS  rU  r?  	curve_objr  r  s   &       rA   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   Nr   )r   r   r   r   r   r   rW   r   rX   rY   r   r{   r   r   r   r   r   r   r   r?   rC   rA   r]   r]     s    	
 8>}}4D7=}}4D7=}}4D	%	<	<
	" 
		 
 
	 
		 
 
	 
)	' 
)	'V 
G	 
G	rC   r]   c                  2    ] tR tRtRtR R ltR R ltRtR# )	r^   i  z1
Performs a signature using RSASSA-PSS with MGF1
c               $    V ^8  d   QhRRRRRR/# r+  r?   )r@   s   "rA   rB   RSAPSSAlgorithm.__annotate__  s!     	 	E 	 	% 	rC   c           	     	    VP                  V\        P                  ! \        P                  ! V P	                  4       4      V P	                  4       P
                  R 7      V P	                  4       4      # )mgfsalt_length)r   r   PSSMGF1ri   digest_sizer   s   &&&rA   r   RSAPSSAlgorithm.sign  sN    88T]]_5 $ ; ;  rC   c               (    V ^8  d   QhRRRRRRRR/# r0  r?   )r@   s   "rA   rB   rc    s(     	 	e 	, 	U 	t 	rC   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)re  TF)r   r   rh  ri  ri   rj  r   r   s   &&&&rA   r   RSAPSSAlgorithm.verify  sh    

KK#LL9$(MMO$?$? MMO # s   A2A6 6BBr?   N)r   r   r   r   r   r   r   r   r?   rC   rA   r^   r^     s    			 	rC   r^   c                      ] tR tRtR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# )r_   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/# )r=   kwargsr   r>   r   r?   )r@   s   "rA   rB   OKPAlgorithm.__annotate__  s     	 	S 	T 	rC   c                	    R # r   r?   )rt   rq  s   &,rA   r   OKPAlgorithm.__init__  s    rC   c                    V ^8  d   QhRRRR/# )r=   rx   zAllowedOKPKeys | str | bytesr>   AllowedOKPKeysr?   )r@   s   "rA   rB   rr    s     	 	#? 	N 	rC   c                	   \        V\        \        34      '       d   \        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\        V\        \        \        \        34      '       g   \        R4      hV# )utf-8z-----BEGIN PUBLICz-----BEGIN PRIVATENr   :r      Nzssh-zcExpecting a EllipticCurvePrivateKey/EllipticCurvePublicKey. Wrong key provided for EdDSA algorithms)rm   rf   r   r   encoder:   r9   r;   r+   r,   r)   r*   r   )rt   rx   key_strr   s   &&  rA   r{   OKPAlgorithm.prepare_key  s    #s|,,1;C1G1G#**W-S3=c33G3GCJJw/S	&'1-i8C)W4.y4HCS\V+-i8C "$4o~V  &y  JrC   c               $    V ^8  d   QhRRRRRR/# )r=   r   r   rx   z#Ed25519PrivateKey | Ed448PrivateKeyr>   rf   r?   )r@   s   "rA   rB   rr    s$     	' 	'"	')L	'	'rC   c                v    \        V\        4      '       d   VP                  R4      MTpVP                  V4      # )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
rx  )rm   r   rz  r   )rt   r   rx   	msg_bytess   &&& rA   r   OKPAlgorithm.sign  s/     0:#s/C/C

7+I88I&&rC   c               (    V ^8  d   QhRRRRRRRR/# )r=   r   r   rx   rv  r   r>   r   r?   )r@   s   "rA   rB   rr    s,     	 	"	)7	>I		rC   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.
rx  TF)rm   r   rz  r+   r)   r$  r   r   )rt   r   rx   r   r  	sig_bytesr$  s   &&&&   rA   r   OKPAlgorithm.verify  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/# )r=   rx   rv  r   r   r>   r   r?   )r@   s   "rA   rB   rr    s$     	 		*7		rC   c                	    R # r   r?   rx   r   s   &&rA   r   OKPAlgorithm.to_jwk  r  rC   c               $    V ^8  d   QhRRRRRR/# )r=   rx   rv  r   r   r>   r   r?   )r@   s   "rA   rB   rr    s$     	 		*8		rC   c                	    R # r   r?   r  s   &&rA   r   r    r   rC   c               $    V ^8  d   QhRRRRRR/# )r=   rx   rv  r   r   r>   r   r?   )r@   s   "rA   rB   rr    s&     ,	A ,	A ,	A ,	A- ,	ArC   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)
)encodingr@   Ed25519Ed448rS  r   OKPrR  )r  r@   encryption_algorithmr  r  )rm   r,   r*   public_bytesr5   Rawr8   r   r   r   r   r   r+   r)   private_bytesr7   r6   r$  r   )rx   r   rS  rR  r   r  s   &&    rA   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?*!"?@@rC   c                    V ^8  d   QhRRRR/# )r=   r   r   r>   rv  r?   )r@   s   "rA   rB   rr  K  s      	H  	H-  	HN  	HrC   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 PairrR  r  r  rP  rS  zOKP should have "x" parameterr  zInvalid key parameter)rm   r   r   r   r   r   r   r   r   r,   from_public_bytesr*   r+   from_private_bytesr)   )r   r   r?  rS  r  errs   &     rA   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+ 6E+ :E+ E(+F6FFr?   Nr   )r   r   r   r   r   r   r{   r   r   r   r   r   r   r   r?   rC   rA   r_   r_     s    			.	'	4 
		 
 
	 
		 
 
	 
,	A 
,	A\ 
 	H 
 	HrC   r_   >   rL   rN   rP   rO   rT   rQ   rR   rS   rI   rJ   rK   rM   )[
__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.   r/   r0   r1   r2   r3   r4   ,cryptography.hazmat.primitives.serializationr5   r6   r7   r8   r9   r:   r;   rZ   ModuleNotFoundErrorr   r9  rv  AllowedKeysAllowedPrivateKeysAllowedPublicKeysrequires_cryptographyra   rc   rU   rV   r\   r]   r^   r_   r?   rC   rA   <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*F 	FF