
    1
i                       U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZm	Z	 d dl
mZmZmZmZmZmZmZmZmZ ddlmZ ddlmZmZ ddlmZmZmZmZmZmZm Z m!Z!m"Z" 	 d d	l#m$Z$m%Z% d d
l&m'Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z8m9Z9 d dl:m;Z;m<Z< d dl=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZE d dlFmGZGmHZHmIZImJZJmKZKmLZLmMZM ejN        dk    rd dl
mOZO nd dlPmOZO ee>e@f         ZQdeRd<   ee3e5f         ZSdeRd<   ee;e<e8e9f         ZTdeRd<   eeQeSeTf         ZUdeRd<   ee>e3e;e8f         ZVdeRd<   ee@e5e<e9f         ZWdeRd<   es eX ejY        dd                    rd dlZm[Z[m\Z\ dZ]n1# e^$ r) ejN        dk    rd d l
m_Z_ nd d lPm_Z_ e_ZQe_ZSe_ZTe_ZUe_ZVe_ZWd!Z]Y nw xY wh d"Z`d4d%Za G d& d'e          Zb G d( d)eb          Zc G d* d+eb          Zde]r: G d, d-eb          Ze G d. d/eb          Zf G d0 d1ee          Zg G d2 d3eb          ZhdS dS )5    )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ES256Kreturndict[str, Algorithm]c                 X   t                      t          t          j                  t          t          j                  t          t          j                  d} t
          rI|                     t          t          j                  t          t          j                  t          t          j                  t          t          j        t                    t          t          j        t                    t          t          j        t                    t          t          j        t                    t          t          j        t                    t          t          j                  t          t          j                  t          t          j                  t                      d           | S )zE
    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    C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\jwt/algorithms.pyget_default_algorithmsrn      s(   
 }344}344}344	0 0  
!!%l&9::%l&9::%l&9::$[%7CC%k&8)DD$[%7CC$[%7CC$&	  ))?@@()?@@()?@@% 	
 	
 	
&     c                  H   e Zd ZU dZdZded<   d$dZd%dZed&d            Z	ed'd            Z
ed(d            Zeeed)d                                    Zeee	 d*d+d                                    Zeed*d,d                        Zeed-d!                        Zd.d#ZdS )/	AlgorithmzH
    The interface for an algorithm used to sign and verify tokens.
    Nz$tuple[type[AllowedKeys], ...] | None_crypto_key_typesbytestrbytesrZ   c                   t          | dd          }|t          t          rt          |t                    rzt          |t          j                  r`t          j         |            t                                }|
                    |           t          |                                          S t           ||                                                    S )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NotImplementedErrorrf   
isinstancetype
issubclassr    HashAlgorithmHashr   rg   rt   finalizedigest)selfrs   rv   r   s       rm   compute_hash_digestzAlgorithm.compute_hash_digest   s     4T22%% 		58T**		5 8V%9::		5
 [_5F5FGGGFMM'"""**+++'**1133444ro   key PublicKeyTypes | PrivateKeyTypesNonec                    t           r| j        t          d          t          || j                  sAd | j        D             }|j        j        }| j        j        }t          d| d| d|           dS )ac  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  $   K   | ]}|j         V  d S N)__name__).0clss     rm   	<genexpr>z2Algorithm.check_crypto_key_type.<locals>.<genexpr>   s$      LLcS\LLLLLLro   zExpected one of z, got: z. Invalid Key type for )rf   rr   
ValueErrorrz   	__class__r   r   )r   r   valid_classesactual_class
self_classs        rm   check_crypto_key_typezAlgorithm.check_crypto_key_type   s      	T3;z   #t566 	LLT5KLLLM=1L0J!j=jjjj^hjj  		 	ro   r   c                    dS )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     rm   prepare_keyzAlgorithm.prepare_key         ro   msgc                    dS )zn
        Returns a digital signature for the specified message
        using the specified key value.
        Nr   r   r   r   s      rm   signzAlgorithm.sign   r   ro   sigboolc                    dS )zz
        Verifies that the specified digital signature is valid
        for the specified message and key values.
        Nr   r   r   r   r   s       rm   verifyzAlgorithm.verify   r   ro   key_objas_dictLiteral[True]r   c                    d S r   r   r   r   s     rm   to_jwkzAlgorithm.to_jwk   s     BEro   FLiteral[False]strc                    d S r   r   r   s     rm   r   zAlgorithm.to_jwk   s	    
 cro   JWKDict | strc                    dS )z3
        Serializes a given key into a JWK
        Nr   r   s     rm   r   zAlgorithm.to_jwk  r   ro   jwkstr | JWKDictc                    dS )zJ
        Deserializes a given key from JWK back into a key object
        Nr   r   s    rm   from_jwkzAlgorithm.from_jwk  r   ro   
str | Nonec                    dS )z
        Return a warning message if the key is below the minimum
        recommended length for this algorithm, or None if adequate.
        Nr   r   s     rm   check_key_lengthzAlgorithm.check_key_length  s	    
 tro   )rs   rt   rZ   rt   )r   r   rZ   r   )r   r   rZ   r   )r   rt   r   r   rZ   rt   )r   rt   r   r   r   rt   rZ   r   )r   r   r   r   rZ   r   F)r   r   r   r   rZ   r   )r   r   r   r   rZ   r   )r   r   rZ   r   )r   r   rZ   r   )r   
__module____qualname____doc__rr   __annotations__r   r   r   r   r   r   r   staticmethodr   r   r   r   ro   rm   rq   rq      s         
 ?CBBBB5 5 5 5,   .    ^    ^    ^ DDD ^ \ X E05    ^ \ X     ^ \
    ^ \
     ro   rq   c                  \    e Zd ZdZddZdd	ZddZeddd            Zedd            Z	dS )ra   zZ
    Placeholder for use when no signing or verification
    operations are required.
    r   r   rZ   r   c                8    |dk    rd }|t          d          |S )NrI   z*When alg = "none", key value must be None.r   r   s     rm   r   zNoneAlgorithm.prepare_key   s)    "99C?!"NOOO
ro   r   rt   c                    dS )Nro   r   r   s      rm   r   zNoneAlgorithm.sign)  s    sro   r   r   c                    dS )NFr   r   s       rm   r   zNoneAlgorithm.verify,  s    uro   Fr   r   r   r
   c                    t                      r   ry   r   s     rm   r   zNoneAlgorithm.to_jwk/      !###ro   r   r   c                    t                      r   r   r   s    rm   r   zNoneAlgorithm.from_jwk3  r   ro   N)r   r   rZ   r   )r   rt   r   r   rZ   rt   )r   rt   r   r   r   rt   rZ   r   r   )r   r   r   r   rZ   r
   )r   r   rZ   r
   )
r   r   r   r   r   r   r   r   r   r   r   ro   rm   ra   ra     s         
          $ $ $ $ \$ $ $ $ \$ $ $ro   ra   c                     e Zd ZU dZej        Zded<   ej        Z	ded<   ej
        Zded<   d%d
Zd&dZeed'd                        Zeed(d)d                        Zed(d*d            Zed+d            Zd,dZd-d!Zd.d#Zd$S )/rb   zf
    Performs signing and verification operations using HMAC
    and the specified hash function.
    zClassVar[HashlibHash]rc   rd   re   rv   r   rZ   r   c                    || _         d S r   rv   r   rv   s     rm   __init__zHMACAlgorithm.__init__B  s     ro   r   str | bytesrt   c                ~    t          |          }t          |          st          |          rt          d          |S )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      rm   r   zHMACAlgorithm.prepare_keyE  sM    $$	## 	z)'<'< 	!9  
 ro   r   r   r   r   c                    d S r   r   r   s     rm   r   zHMACAlgorithm.to_jwkP  s    ILro   Fr   r   c                    d S r   r   r   s     rm   r   zHMACAlgorithm.to_jwkT  s    NQcro   r   r   c                    t          t          |                                                     dd}|r|S t          j        |          S )Noct)kkty)r   r   decodejsondumps)r   r   r   s      rm   r   zHMACAlgorithm.to_jwkX  sO     "+g"6"677>>@@
 

  	#J:c??"ro   r   r   c                N   	 t          | t                    rt          j        |           }nt          | t                    r| }nt
          n# t
          $ r t          d          d w xY w|                    d          dk    rt          d          t          |d                   S )NKey is not valid JSONr   r   zNot an HMAC keyr   )	rz   r   r   loadsdictr   r   getr   )r   objs     rm   r   zHMACAlgorithm.from_jwkd  s    	E#s## !#z#C&& !   	E 	E 	E!"9::D	E 775>>U""!"3444C)))   A	A A'r   c                    |                                  j        }t          |          |k     rBdt          |           d| d|                                  j                                         dS d S )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.)rv   digest_sizelennameupper)r   r   
min_lengths      rm   r   zHMACAlgorithm.check_key_lengthu  s|    ]]__0
s88j  -3s88 - -5?- -==??'--//- - - tro   r   c                \    t          j        ||| j                                                  S r   )hmacnewrv   r   r   s      rm   r   zHMACAlgorithm.sign  s$    xS$-0077999ro   r   c                T    t          j        ||                     ||                    S r   )r   compare_digestr   r   s       rm   r   zHMACAlgorithm.verify  s#    "3		#s(;(;<<<ro   N)rv   r   rZ   r   )r   r   rZ   rt   )r   r   r   r   rZ   r   r   )r   r   r   r   rZ   r   )r   r   r   r   rZ   r   )r   r   rZ   rt   )r   rt   rZ   r   )r   rt   r   rt   rZ   rt   )r   rt   r   rt   r   rt   rZ   r   )r   r   r   r   hashlibsha256rc   r   sha384rd   sha512re   r   r   r   r   r   r   r   r   r   r   ro   rm   rb   rb   8  sG         
 %,NF2222$+NF2222$+NF2222! ! ! !	 	 	 	 LLL \ XLQQQQ \ XQ	# 	# 	# 	# \	# * * * \* 	 	 	 	: : : := = = = = =ro   rb   c                  l   e Zd ZU dZej        Zded<   ej        Zded<   ej        Zded<    e	e
ee         df          eeeef                             ZdZded	<   d,dZd-dZd.dZeed/d                        Zeed0d1d                        Zed0d2d             Zed3d#            Zd4d'Zd5d*Zd+S )6rh   z~
        Performs signing and verification operations using
        RSASSA-PKCS-v1_5 and the specified hash function.
        $ClassVar[type[hashes.HashAlgorithm]]rc   rd   re   .i   zClassVar[int]_MIN_KEY_SIZErv   type[hashes.HashAlgorithm]rZ   r   c                    || _         d S r   r   r   s     rm   r   zRSAAlgorithm.__init__  s    $DMMMro   r   rB   r   c                L    |j         | j        k     rd|j          d| j         dS d S )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     rm   r   zRSAAlgorithm.check_key_length  sF    |d000-cl - -7;7I- - -
 4ro   AllowedRSAKeys | str | bytesc                   t          || j                  rt          t          |          S t          |t          t
          f          st          d          t          |          }	 |                    d          r9t          |          }| 
                    |           t          t          |          S t          |d           }| 
                    |           t          t          |          S # t          $ rb 	 t          |          }| 
                    |           t          t          |          cY S # t          t           f$ r t#          d          d w xY ww xY w)NExpecting a PEM-formatted key.s   ssh-rsapasswordz(Could not parse the provided public key.)rz   rr   r   rB   rt   r   	TypeErrorr   
startswithr>   r   r2   r<   r0   r   r=   r   r   )r   r   r   
public_keyprivate_keys        rm   r   zRSAAlgorithm.prepare_key  su   #t566 1NC000cE3<00 B @AAA#C((I ''
33 	<1DY1O1OJ..z:::j9993G!D4 4 4K ..{;;;{;;;       !4Y!?!?J..z:::j99999"$89      )B    s+   &AC/ 4:C/ /
E:8D52E5"EEr   r   r   r   c                    d S r   r   r   s     rm   r   zRSAAlgorithm.to_jwk  s    PSPSro   Fr   r   c                    d S r   r   r   s     rm   r   zRSAAlgorithm.to_jwk  s    UXUXro   r   r   c                   d }t          | d          rM|                                 }ddgt          |j        j                                                  t          |j        j                                                  t          |j                                                  t          |j                                                  t          |j	                                                  t          |j
                                                  t          |j                                                  t          |j                                                  d
}nt          | d          re|                                 }ddgt          |j                                                  t          |j                                                  d}nt          d          |r|S t          j        |          S )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       rm   r   zRSAAlgorithm.to_jwk  s   )-Cw 122 E!1133 ! &x*7+A+CDDKKMM*7+A+CDDKKMM*7955<<>>*7955<<>>*7955<<>>+GL99@@BB+GL99@@BB+GL99@@BB  (++ E!0022 ! (z*7955<<>>*7955<<>>	  &&CDDD '
z#&ro   r   r   c                >  	 	 t          | t                    rt          j        |           	nt          | t                    r| 	nt
          n# t
          $ r t          d          d w xY w	                    d          dk    rt          d          d d	v rd	v rd	v rd	v rt          d	          g d
}	fd|D             }t          |          }|rt          |          st          d          d t          t          	d                   t          	d                             }|rt          t          	d                   t          	d                   t          	d                   t          	d                   t          	d                   t          	d                   |          }nst          	d                   }t          |j        ||j                  \  }}t          |||t!          ||          t#          ||          t%          ||          |          }|                                S d	v rLd	v rHt          t          	d                   t          	d                                                             S t          d          )Nr   r   r   zNot an RSA keyr  r   r   othz5Unsupported RSA private key: > 2 primes not supported)r  r  r  r  r  c                    g | ]}|v S r   r   )r   propr   s     rm   
<listcomp>z)RSAAlgorithm.from_jwk.<locals>.<listcomp>	  s    CCCtts{CCCro   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  )rz   r   r   r   r   r   r   r   anyallr3   r   r1   r7   r   r   r4   r5   r6   r   r   )
r   other_propsprops_foundany_props_foundr	  r  r  r  r  r   s
            @rm   r   zRSAAlgorithm.from_jwk  s   Ic3'' %*S//CCT** %CC$$ I I I%&=>>DHI wwu~~&&%&677TAczzcSjjSCZZC<<)O   ;::CCCC{CCC"%k"2"2"  3{+;+;  )Z   "2'C11'C11" "
 # /-c#h77-c#h77-c#h770T;;0T;;0T;;'5  GG ,CH55A4&(!^-= DAq 0)!Q//)!Q//)!Q//'5  G **,,,s

''C11'C11  *,,
 &&CDDDs   A	A A(r   rt   r0   c                z    |                     |t          j                    |                                           }|S r   )r   r!   PKCS1v15rv   r   r   r   	signatures       rm   r   zRSAAlgorithm.sign:  s.    "xxW-=-?-?QQIro   r2   r   c                    	 |                     ||t          j                    |                                            dS # t          $ r Y dS w xY w)NTF)r   r!   r  rv   r   r   s       rm   r   zRSAAlgorithm.verify>  sW    

3W%5%7%7IIIt#   uus   ;? 
AAN)rv   r   rZ   r   )r   rB   rZ   r   )r   r   rZ   rB   )r   rB   r   r   rZ   r   r   )r   rB   r   r   rZ   r   )r   rB   r   r   rZ   r   )r   r   rZ   rB   r   rt   r   r0   rZ   rt   r   rt   r   r2   r   rt   rZ   r   )r   r   r   r   r    rc   r   rd   re   r   tupler{   rE   r   r   r0   r2   rr   r   r   r   r   r   r   r   r   r   r   r   ro   rm   rh   rh     s        	 	
 8>}DDDD7=}DDDD7=}DDDD D${#S()HU=,6788
 
 (,++++	% 	% 	% 	%	 	 	 		  	  	  	 < 
	SSS 
 
S		XXXX 
 
X	$	' $	' $	' $	' 
$	'L 
E	E E	E E	E 
E	EN	 	 	 		 	 	 	 	 	ro   rh   c                  b   e Zd ZU dZej        Zded<   ej        Zded<   ej        Zded<    e	e
ee         df          eeeef                             Z	 d)d*dZd+dZd,dZd-dZd.dZeed/d                        Zeed0d1d#                        Zed0d2d%            Zed3d(            ZdS )4ri   zr
        Performs signing and verification operations using
        ECDSA and the specified hash function
        r   rc   rd   re   .Nrv   r   expected_curvetype[EllipticCurve] | NonerZ   r   c                "    || _         || _        d S r   )rv   r!  )r   rv   r!  s      rm   r   zECAlgorithm.__init__T  s    
 %DM"0Dro   r   rC   c                    | j         dS t          |j        | j                   s*t          d|j        j         d| j         j         d          dS )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!  rz   curver   r   r   s     rm   _validate_curvezECAlgorithm._validate_curve\  sv    "*ci)<== %M	 M M"16M M M   ro   AllowedECKeys | str | bytesc                   t          || j                  r,t          t          |          }|                     |           |S t          |t
          t          f          st          d          t          |          }	 |	                    d          rt          |          }nt          |          }|                     |           t          t          |          }|                     |           |S # t          $ rU t          |d           }|                     |           t          t           |          }|                     |           |cY S w xY w)Nr   s   ecdsa-sha2-r   )rz   rr   r   rC   r&  rt   r   r   r   r   r>   r=   r   r*   r   r<   r(   )r   r   ec_keyr   r   ec_public_keyr   ec_private_keys           rm   r   zECAlgorithm.prepare_keyg  s[   #t566 mS11$$V,,,cE3<00 B @AAA#C((I
&''77 @1DY1O1OJJ!4Y!?!?J **:666 $%;Z H H$$]333$$ & & &29tLLL**;777!%&={!K!K$$^444%%%%&s   =A4C2 2AEEr   rt   r(   c                    |                     |t          |                                                     }t          ||j                  S r   )r   r"   rv   r   r%  )r   r   r   der_sigs       rm   r   zECAlgorithm.sign  s7    hhsE$--//$:$:;;G';;;ro   r   r   c                <   	 t          ||j                  }n# t          $ r Y dS w xY w	 t          |t                    r|                                n|}|                    ||t          |                                                      dS # t          $ r Y dS w xY w)NFT)
r   r%  r   rz   r(   r   r   r"   rv   r   )r   r   r   r   r-  r   s         rm   r   zECAlgorithm.verify  s    .sCI>>   uu	 "#'>??CNN$$$ 
 !!'3dmmoo0F0FGGGt#   uus    
&&A!B 
BBr   r   r   r   c                    d S r   r   r   s     rm   r   zECAlgorithm.to_jwk  s    ORsro   Fr   r   c                    d S r   r   r   s     rm   r   zECAlgorithm.to_jwk  s    TWTWro   r   c                   t          | t                    r'|                                                                 }n9t          | t                    r|                                 }nt          d          t          | j        t                    rd}nnt          | j        t                    rd}nQt          | j        t                    rd}n4t          | j        t                    rd}nt          d| j                   d|t          |j        | j        j                                                  t          |j        | j        j                                                  d	}t          | t                    rGt          |                                 j        | j        j                                                  |d
<   |r|S t%          j        |          S )Nr  P-256P-384P-521	secp256k1Invalid curve: EC)
bit_length)r   crvxyr  )rz   r(   r   r	  r*   r   r%  r$   r%   r&   r#   r   r:  r   r   r;  r   private_valuer   r   )r   r   r	  r9  r   s        rm   r   zECAlgorithm.to_jwk  s   '#:;; E!(!3!3!5!5!D!D!F!FG%;<< E!(!7!7!9!9%&CDDD'-33 	IGM955 IGM955 IGM955 I!%&G&G&GHHH &"$&}5   &((&"$&}5   &((# #C '#:;; ,++--;&}5   &(( C
  '
z#&ro   r   r   c                   	 t          | t                    rt          j        |           }nt          | t                    r| }nt
          n# t
          $ r t          d          d w xY w|                    d          dk    rt          d          d d|vsd|vrt          d          d t          |                    d                    }t          |                    d                    }|                    d          }|dk    rJt          |          t          |          cxk    rd	k    rn nt                      }nt          d
          d |dk    rIt          |          t          |          cxk    rdk    rn nt                      }nt          d          d |dk    rIt          |          t          |          cxk    rdk    rn nt                      }npt          d          d |dk    rHt          |          t          |          cxk    rd	k    rn nt                      }n!t          d          t          d|           t          t                              |d          t                              |d          |          }d|vr|                                S t          |                    d                    }t          |          t          |          k    rt          dt          |          |          t%          t                              |d          |                                          S )Nr   r   r7  zNot an Elliptic curve keyr:  r;  r9  r2      z)Coords should be 32 bytes for curve P-256r3  0   z)Coords should be 48 bytes for curve P-384r4  B   z)Coords should be 66 bytes for curve P-521r5  z-Coords should be 32 bytes for curve secp256k1r6  big)	byteorder)r:  r;  r%  r  z!D should be {} bytes for curve {})rz   r   r   r   r   r   r   r   r   r   r$   r%   r&   r#   r+   int
from_bytesr   r)   r   )r   r   r:  r;  r%  	curve_objr	  r  s           rm   r   zECAlgorithm.from_jwk  sg   Ic3'' %*S//CCT** %CC$$ I I I%&=>>DHI wwu~~%%%&ABBL#~~C%&ABBL ..A ..AGGENNE q66SVV))))r))))) )II)C   '!!q66SVV))))r))))) )II)C   '!!q66SVV))))r))))) )II)C   +%%q66SVV))))r))))) )II)G   &&?&?&?@@@7..e.44..e.44  N #~~%00222 ..A1vvQ%7Q   /qE22N kmmr   r   )rv   r   r!  r"  rZ   r   )r   rC   rZ   r   )r   r'  rZ   rC   )r   rt   r   r(   rZ   rt   )r   rt   r   rC   r   rt   rZ   r   )r   rC   r   r   rZ   r   r   )r   rC   r   r   rZ   r   )r   rC   r   r   rZ   r   )r   r   rZ   rC   )r   r   r   r   r    rc   r   rd   re   r   r  r{   rE   r   r   r(   r*   rr   r   r&  r   r   r   r   r   r   r   r   ro   rm   ri   ri   E  s        	 	
 8>}DDDD7=}DDDD7=}DDDD D${#S()HU24JJKLL
 
 :>	1 	1 	1 	1 	1		 		 		 			& 	& 	& 	&@	< 	< 	< 	<
	 	 	 	" 
	RRR 
 
R		WWWW 
 
W	)	' )	' )	' )	' 
)	'V 
G	 G	 G	 
G	 G	 G	ro   ri   c                  "    e Zd ZdZddZddZdS )rj   zA
        Performs a signature using RSASSA-PSS with MGF1
        r   rt   r   r0   rZ   c           	         |                     |t          j        t          j        |                                           |                                 j                  |                                           }|S )Nmgfsalt_length)r   r!   PSSMGF1rv   r   r  s       rm   r   zRSAPSSAlgorithm.sign   sd    "xxT]]__55 $ ;      I ro   r2   r   r   c           
        	 |                     ||t          j        t          j        |                                           |                                 j                  |                                            dS # t          $ r Y dS w xY w)NrH  TF)r   r!   rK  rL  rv   r   r   r   s       rm   r   zRSAPSSAlgorithm.verify+  s    

K#L99$(MMOO$?   MMOO   t#   uus   A9A= =
B
BNr  r  )r   r   r   r   r   r   r   ro   rm   rj   rj     sF        	 			 		 		 			 	 	 	 	 	ro   rj   c            
         e Zd ZdZ eeee         df          ee	e
eeef                             Zd"dZd#dZd$dZd%dZeed&d                        Zeed'd(d                        Zed'd)d            Zed*d             Zd!S )+rk   z
        Performs signing and verification operations using EdDSA

        This class requires ``cryptography>=2.6`` to be installed.
        .kwargsr   rZ   r   c                    d S r   r   )r   rO  s     rm   r   zOKPAlgorithm.__init__M  s    Dro   r   AllowedOKPKeys | str | bytesrD   c                   t          |t          t          f          s|                     |           |S t          |t                    r|                    d          n|}t          |t                    r|                    d          n|}d|v rt          |          }nCd|v rt          |d           }n-|dd         dk    rt          |          }nt          d          |                     |           t          d	|          S )
Nutf-8z-----BEGIN PUBLICz-----BEGIN PRIVATEr   r      zssh-r  rD   )rz   r   rt   r   r   encoder=   r<   r>   r   r   )r   r   key_strr   
loaded_keys        rm   r   zOKPAlgorithm.prepare_keyP  s   cC<00 **3///
-7U-C-CLcjj)))G/9#s/C/CL

7+++I #g--0;;

%001)dKKK

1''0;;

%&CDDD &&z222(*555ro   r   r   #Ed25519PrivateKey | Ed448PrivateKeyrt   c                    t          |t                    r|                    d          n|}|                    |          }|S )aS  
            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  )rz   r   rU  r   )r   r   r   	msg_bytesr  s        rm   r   zOKPAlgorithm.signf  s@     0:#s/C/CL

7+++I"xx	22Iro   r   r   c                j   	 t          |t                    r|                    d          n|}t          |t                    r|                    d          n|}t          |t          t          f          r|                                n|}|                    ||           dS # t          $ r Y dS w xY w)a  
            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)rz   r   rU  r.   r,   r   r   r   )r   r   r   r   rZ  	sig_bytesr   s          rm   r   zOKPAlgorithm.verifyt  s    3=c33G3GPCJJw///S	3=c33G3GPCJJw///S	 "#(9?'KLLCNN$$$ 
 !!)Y777t#   uus   B B$ $
B21B2r   r   r   c                    d S r   r   r   r   s     rm   r   zOKPAlgorithm.to_jwk  s    LOCro   Fr   r   c                    d S r   r   r^  s     rm   r   zOKPAlgorithm.to_jwk  s    QTQTro   r   c                   t          | t          t          f          r|                     t          j        t          j                  }t          | t                    rdnd}t          t          |                    	                                d|d}|r|S t          j        |          S t          | t          t          f          r|                     t          j        t          j        t!                                }|                                                     t          j        t          j                  }t          | t                    rdnd}t          t          |                    	                                t          t          |                    	                                d|d}|r|S t          j        |          S t%          d          )	N)encodingformatEd25519Ed448OKP)r:  r   r9  )ra  rb  encryption_algorithm)r:  r  r   r9  r  )rz   r/   r-   public_bytesr8   Rawr;   r   r   r   r   r   r.   r,   private_bytesr:   r9   r   r   )r   r   r:  r9  r   r  s         rm   r   zOKPAlgorithm.to_jwk  s   # 0.ABB +$$%\'+ %   $.c3C#D#DQii' *+a..99@@BB    +J:c??*# 1?CDD +%%%\(,)5 &   NN$$11%\'+ 2  
 $.c3D#E#ERii7)+a..99@@BB)+a..99@@BB 	   +J:c??*!"?@@@ro   r   r   c                >   	 t          | t                    rt          j        |           }nt          | t                    r| }nt
          n# t
          $ r t          d          d w xY w|                    d          dk    rt          d          |                    d          }|dk    r|dk    rt          d|           d	|vrt          d
          t          |                    d	                    }	 d|vr.|dk    rt          j
        |          S t          j
        |          S t          |                    d                    }|dk    rt          j        |          S t          j        |          S # t
          $ r}t          d          |d }~ww xY w)Nr   r   re  zNot an Octet Key Pairr9  rc  rd  r6  r:  zOKP should have "x" parameterr  zInvalid key parameter)rz   r   r   r   r   r   r   r   r   r/   from_public_bytesr-   r.   from_private_bytesr,   )r   r   r%  r:  r  errs         rm   r   zOKPAlgorithm.from_jwk  s   Ic3'' %*S//CCT** %CC$$ I I I%&=>>DHI wwu~~&&%&=>>>GGENNE	!!ew&6&6%&?&?&?@@@#~~%&EFFF ..A
Hc>>	))/A!DDD);A>>>$SWWS\\22I%%,?BBB&9!<<< H H H%&=>>CGHs6   A	A A';E= E= -;E= )E= =
FFFN)rO  r   rZ   r   )r   rQ  rZ   rD   )r   r   r   rX  rZ   rt   )r   r   r   rD   r   r   rZ   r   )r   rD   r   r   rZ   r   r   )r   rD   r   r   rZ   r   )r   rD   r   r   rZ   r   )r   r   rZ   rD   )r   r   r   r   r   r  r{   rE   r   r   r.   r/   r,   r-   rr   r   r   r   r   r   r   r   r   r   ro   rm   rk   rk   :  sP       	 	 !D${#S()H%$#"$ 

 

	 	 	 		6 	6 	6 	6,	 	 	 		 	 	 	4 
	OOO 
 
O		TTTT 
 
T	,	A ,	A ,	A ,	A 
,	A\ 
 	H  	H  	H 
 	H  	H  	Hro   rk   )rZ   r[   )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   rf   ModuleNotFoundErrorrM   requires_cryptographyrn   rq   ra   rb   rh   ri   rj   rk   r   ro   rm   <module>r     s   " " " " " " "    				 



 # # # # # # # #
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 ( ' ' ' ' ' ' ' ' ' ' ' ' '
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
VNNNNNNNN<<<<<<555555AAAAAA                                     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                  7""$$$$$$$ 	0///// !&m\&A BNBBBB$%<>T%TUMUUUU %+_nL!N     #>=.#PQKQQQQ$).0A?R%     $),.>N$      
YRY~r::;; 
	
 	
 	
 	
 	
 	
 	
 	

 JJ   
7""       ++++++NMNKJJJ       Di i i i i i i iX$ $ $ $ $I $ $ $<L= L= L= L= L=I L= L= L=^  _	Hz z z z zy z z zxT T T T Ti T T Tl    ,   >lH lH lH lH lHy lH lH lH lH lHg_	H _	Hs   DE' '+FF