
    `ib                       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mZmZ d dl	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-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 d dl5m6Z6m7Z7 d dl8m9Z9m:Z: d dl;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZC d dlDmEZEmFZFmGZGmHZHmIZImJZJmKZK e<e>fZLe1e3fZMe9e:e6e7fZNeLeMz   eNz   ZOe<e1e9e6fZPe>e3e:e7fZQe
s eR ejS        dd                    rd dlTZTeTjU        dk    rd dl	mVZV nd dlWmVZV d dlXmYZYmZZZ ee<e>f         Z[de\d<   ee1e3f         Z]de\d<   ee9e:e6e7f         Z^de\d<   ee[e]e^f         Z_de\d<   ee<e1e9e6f         Z`de\d<   ee>e3e:e7f         Zade\d<   dZbn# ec$ r dZbY nw xY wh d Zdd2d#Ze G d$ d%e          Zf G d& d'ef          Zg G d( d)ef          Zhebr: G d* d+ef          Zi G d, d-ef          Zj G d. d/ei          Zk G d0 d1ef          ZldS dS )3    )annotationsN)ABCabstractmethod)TYPE_CHECKINGAnyClassVarLiteralNoReturnUnion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_keySPHINX_BUILD )   
   )	TypeAlias)PrivateKeyTypesPublicKeyTypesrB   AllowedRSAKeysAllowedECKeysAllowedOKPKeysAllowedKeysAllowedPrivateKeysAllowedPublicKeysTF>   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)rS   rT   rU   rK   rV   rL   rN   rM   rP   rQ   rR   rO   )NoneAlgorithmHMACAlgorithmSHA256SHA384SHA512
has_cryptoupdateRSAAlgorithmECAlgorithmr#   r"   r$   r%   RSAPSSAlgorithmOKPAlgorithm)default_algorithmss    b/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/jwt/algorithms.pyget_default_algorithmsrk      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bytesrW   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NotImplementedErrorrc   
isinstancetype
issubclassr   HashAlgorithmHashr   rd   rq   finalizedigest)selfrp   rs   r}   s       rj   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4rl   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     rj   	<genexpr>z2Algorithm.check_crypto_key_type.<locals>.<genexpr>   s$      LLcS\LLLLLLrl   zExpected one of z, got: z. Invalid Key type for )rc   ro   
ValueErrorrw   	__class__r   r   )r~   r   valid_classesactual_class
self_classs        rj   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  		 	rl   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     rj   prepare_keyzAlgorithm.prepare_key         rl   msgc                    dS )zn
        Returns a digital signature for the specified message
        using the specified key value.
        Nr   r~   r   r   s      rj   signzAlgorithm.sign   r   rl   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       rj   verifyzAlgorithm.verify  r   rl   key_objas_dictLiteral[True]r   c                    d S r   r   r   r   s     rj   to_jwkzAlgorithm.to_jwk	  s     BErl   FLiteral[False]strc                    d S r   r   r   s     rj   r   zAlgorithm.to_jwk  s	    
 crl   JWKDict | strc                    dS )z3
        Serializes a given key into a JWK
        Nr   r   s     rj   r   zAlgorithm.to_jwk  r   rl   jwkstr | JWKDictc                    dS )zJ
        Deserializes a given key from JWK back into a key object
        Nr   r   s    rj   from_jwkzAlgorithm.from_jwk  r   rl   
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     rj   check_key_lengthzAlgorithm.check_key_length#  s	    
 trl   )rp   rq   rW   rq   )r   r   rW   r   )r   r   rW   r   )r   rq   r   r   rW   rq   )r   rq   r   r   r   rq   rW   r   )r   r   r   r   rW   r   F)r   r   r   r   rW   r   )r   r   r   r   rW   r   )r   r   rW   r   )r   r   rW   r   )r   
__module____qualname____doc__ro   __annotations__r   r   r   r   r   r   r   staticmethodr   r   r   r   rl   rj   rn   rn      s         
 ?CBBBB5 5 5 5,   .    ^    ^    ^ DDD ^ \ X E05    ^ \ X     ^ \
    ^ \
     rl   rn   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 )r^   zZ
    Placeholder for use when no signing or verification
    operations are required.
    r   r   rW   r   c                8    |dk    rd }|t          d          |S )Nr?   z*When alg = "none", key value must be None.r   r   s     rj   r   zNoneAlgorithm.prepare_key1  s)    "99C?!"NOOO
rl   r   rq   c                    dS )Nrl   r   r   s      rj   r   zNoneAlgorithm.sign:  s    srl   r   r   c                    dS )NFr   r   s       rj   r   zNoneAlgorithm.verify=  s    url   Fr   r   r   r
   c                    t                      r   rv   r   s     rj   r   zNoneAlgorithm.to_jwk@      !###rl   r   r   c                    t                      r   r   r   s    rj   r   zNoneAlgorithm.from_jwkD  r   rl   N)r   r   rW   r   )r   rq   r   r   rW   rq   )r   rq   r   r   r   rq   rW   r   r   )r   r   r   r   rW   r
   )r   r   rW   r
   )
r   r   r   r   r   r   r   r   r   r   r   rl   rj   r^   r^   +  s         
          $ $ $ $ \$ $ $ $ \$ $ $rl   r^   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 )/r_   zf
    Performs signing and verification operations using HMAC
    and the specified hash function.
    zClassVar[HashlibHash]r`   ra   rb   rs   r   rW   r   c                    || _         d S r   rs   r~   rs   s     rj   __init__zHMACAlgorithm.__init__S  s     rl   r   str | bytesrq   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      rj   r   zHMACAlgorithm.prepare_keyV  sM    $$	## 	z)'<'< 	!9  
 rl   r   r   r   r   c                    d S r   r   r   s     rj   r   zHMACAlgorithm.to_jwka  s    ILrl   Fr   r   c                    d S r   r   r   s     rj   r   zHMACAlgorithm.to_jwke  s    NQcrl   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      rj   r   zHMACAlgorithm.to_jwki  sO     "+g"6"677>>@@
 

  	#J:c??"rl   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   )	rw   r   r   loadsdictr   r   getr   )r   objs     rj   r   zHMACAlgorithm.from_jwku  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.)rs   digest_sizelennameupper)r~   r   
min_lengths      rj   r   zHMACAlgorithm.check_key_length  s|    ]]__0
s88j  -3s88 - -5?- -==??'--//- - - trl   r   c                \    t          j        ||| j                                                  S r   )hmacnewrs   r}   r   s      rj   r   zHMACAlgorithm.sign  s$    xS$-0077999rl   r   c                T    t          j        ||                     ||                    S r   )r   compare_digestr   r   s       rj   r   zHMACAlgorithm.verify  s#    "3		#s(;(;<<<rl   N)rs   r   rW   r   )r   r   rW   rq   )r   r   r   r   rW   r   r   )r   r   r   r   rW   r   )r   r   r   r   rW   r   )r   r   rW   rq   )r   rq   rW   r   )r   rq   r   rq   rW   rq   )r   rq   r   rq   r   rq   rW   r   )r   r   r   r   hashlibsha256r`   r   sha384ra   sha512rb   r   r   r   r   r   r   r   r   r   r   rl   rj   r_   r_   I  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	# 	# 	# 	# \	# * * * \* 	 	 	 	: : : := = = = = =rl   r_   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<   e	Z
dZded<   d+dZd,dZd-dZeed.d                        Zeed/d0d                        Zed/d1d            Zed2d"            Zd3d&Zd4d)Zd*S )5re   z~
        Performs signing and verification operations using
        RSASSA-PKCS-v1_5 and the specified hash function.
        $ClassVar[type[hashes.HashAlgorithm]]r`   ra   rb   i   zClassVar[int]_MIN_KEY_SIZErs   type[hashes.HashAlgorithm]rW   r   c                    || _         d S r   r   r   s     rj   r   zRSAAlgorithm.__init__  s    $DMMMrl   r   rE   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     rj   r   zRSAAlgorithm.check_key_length  sF    |d000-cl - -7;7I- - -
 4rl   AllowedRSAKeys | str | bytesc                   t          || j                  r|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.)rw   ro   rq   r   	TypeErrorr   
startswithr=   r   r   r1   r;   r/   r   r<   r   r   )r~   r   r   
public_keyprivate_keys        rj   r   zRSAAlgorithm.prepare_key  sj   #t566 
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 !:C 
E'8D"E""EEr   r   r   r   c                    d S r   r   r   s     rj   r   zRSAAlgorithm.to_jwk  s    PSPSrl   Fr   r   c                    d S r   r   r   s     rj   r   zRSAAlgorithm.to_jwk  s    UXUXrl   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       rj   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#&rl   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     rj   
<listcomp>z)RSAAlgorithm.from_jwk.<locals>.<listcomp>  s    CCCtts{CCCrl   z@RSA key must include all parameters if any are present besides dr   r   r  r  r  )r   r   r   r  r  r	  r  r  )rw   r   r   r   r   r   r   r   anyallr2   r   r0   r6   r   r   r3   r4   r5   r   r   )
r   other_propsprops_foundany_props_foundr  r
  r   r   r   r   s
            @rj   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   rq   r/   c                z    |                     |t          j                    |                                           }|S r   )r   r    PKCS1v15rs   r~   r   r   	signatures       rj   r   zRSAAlgorithm.signH  s.    "xxW-=-?-?QQIrl   r1   r   c                    	 |                     ||t          j                    |                                            dS # t          $ r Y dS w xY w)NTF)r   r    r  rs   r   r   s       rj   r   zRSAAlgorithm.verifyL  sW    

3W%5%7%7IIIt#   uus   ;? 
AAN)rs   r   rW   r   )r   rE   rW   r   )r   r   rW   rE   )r   rE   r   r   rW   r   r   )r   rE   r   r   rW   r   )r   rE   r   r   rW   r   )r   r   rW   rE   r   rq   r   r/   rW   rq   r   rq   r   r1   r   rq   rW   r   )r   r   r   r   r   r`   r   ra   rb   ALLOWED_RSA_KEY_TYPESro   r   r   r   r   r   r   r   r   r   r   r   rl   rj   re   re     sh        	 	
 8>}DDDD7=}DDDD7=}DDDD1'+++++	% 	% 	% 	%	 	 	 		  	  	  	 < 
	SSS 
 
S		XXXX 
 
X	$	' $	' $	' $	' 
$	'L 
E	E E	E E	E 
E	EN	 	 	 		 	 	 	 	 	rl   re   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<   e	Z
	 d(d)dZd*dZd+dZd,dZd-dZeed.d                        Zeed/d0d"                        Zed/d1d$            Zed2d'            ZdS )3rf   zr
        Performs signing and verification operations using
        ECDSA and the specified hash function
        r   r`   ra   rb   Nrs   r   expected_curvetype[EllipticCurve] | NonerW   r   c                "    || _         || _        d S r   )rs   r  )r~   rs   r  s      rj   r   zECAlgorithm.__init___  s    
 %DM"0Drl   r   rF   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  rw   curver   r   r   s     rj   _validate_curvezECAlgorithm._validate_curveg  sv    "*ci)<== %M	 M M"16M M M   rl   AllowedECKeys | str | bytesc                ~   t          || j                  r|                     |           |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   )rw   ro   r#  rq   r   r   r   r   r=   r<   r   r   r)   r   r;   r'   )r~   r   r   r   ec_public_keyr   ec_private_keys          rj   r   zECAlgorithm.prepare_keyr  sL   #t566 $$S)))
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   (A4C AD<;D<r   rq   r'   c                    |                     |t          |                                                     }t          ||j                  S r   )r   r!   rs   r   r"  )r~   r   r   der_sigs       rj   r   zECAlgorithm.sign  s7    hhsE$--//$:$:;;G';;;rl   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   rw   r'   r   r   r!   rs   r   )r~   r   r   r   r)  r   s         rj   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     rj   r   zECAlgorithm.to_jwk  s    ORsrl   Fr   r   c                    d S r   r   r   s     rj   r   zECAlgorithm.to_jwk  s    TWTWrl   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   )rw   r'   r   r  r)   r   r"  r#   r$   r%   r"   r   r6  r   r   r7  r   private_valuer   r   )r   r   r  r5  r   s        rj   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#&rl   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   r3  zNot an Elliptic curve keyr6  r7  r5  r.      z)Coords should be 32 bytes for curve P-256r/  0   z)Coords should be 48 bytes for curve P-384r0  B   z)Coords should be 66 bytes for curve P-521r1  z-Coords should be 32 bytes for curve secp256k1r2  big)	byteorder)r6  r7  r"  r   z!D should be {} bytes for curve {})rw   r   r   r   r   r   r   r   r   r   r#   r$   r%   r"   r*   int
from_bytesr   r(   r   )r   r   r6  r7  r"  	curve_objr  r   s           rj   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   )rs   r   r  r  rW   r   )r   rF   rW   r   )r   r$  rW   rF   )r   rq   r   r'   rW   rq   )r   rq   r   rF   r   rq   rW   r   )r   rF   r   r   rW   r   r   )r   rF   r   r   rW   r   )r   rF   r   r   rW   r   )r   r   rW   rF   )r   r   r   r   r   r`   r   ra   rb   ALLOWED_EC_KEY_TYPESro   r   r#  r   r   r   r   r   r   r   r   rl   rj   rf   rf   S  s^        	 	
 8>}DDDD7=}DDDD7=}DDDD0
 :>	1 	1 	1 	1 	1		 		 		 			& 	& 	& 	&>	< 	< 	< 	<
	 	 	 	" 
	RRR 
 
R		WWWW 
 
W	)	' )	' )	' )	' 
)	'V 
G	 G	 G	 
G	 G	 G	rl   rf   c                  "    e Zd ZdZddZddZdS )rg   zA
        Performs a signature using RSASSA-PSS with MGF1
        r   rq   r   r/   rW   c           	         |                     |t          j        t          j        |                                           |                                 j                  |                                           }|S )Nmgfsalt_length)r   r    PSSMGF1rs   r   r  s       rj   r   zRSAPSSAlgorithm.sign*  sd    "xxT]]__55 $ ;      I rl   r1   r   r   c           
        	 |                     ||t          j        t          j        |                                           |                                 j                  |                                            dS # t          $ r Y dS w xY w)NrE  TF)r   r    rH  rI  rs   r   r   r   s       rj   r   zRSAPSSAlgorithm.verify5  s    

K#L99$(MMOO$?   MMOO   t#   uus   A9A= =
B
BNr  r  )r   r   r   r   r   r   r   rl   rj   rg   rg   %  sF        	 			 		 		 			 	 	 	 	 	rl   rg   c                      e Zd ZdZe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 )*rh   z
        Performs signing and verification operations using EdDSA

        This class requires ``cryptography>=2.6`` to be installed.
        kwargsr   rW   r   c                    d S r   r   )r~   rL  s     rj   r   zOKPAlgorithm.__init__M  s    Drl   r   AllowedOKPKeys | str | bytesrG   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  rG   )rw   r   rq   r   r   encoder<   r;   r=   r   r   )r~   r   key_strr   
loaded_keys        rj   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5rl   r   r   #Ed25519PrivateKey | Ed448PrivateKeyrq   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
            rP  )rw   r   rR  r   )r~   r   r   	msg_bytesr  s        rj   r   zOKPAlgorithm.signf  s@     0:#s/C/CL

7+++I"xx	22Irl   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.
            rP  TF)rw   r   rR  r-   r+   r   r   r   )r~   r   r   r   rW  	sig_bytesr   s          rj   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     rj   r   zOKPAlgorithm.to_jwk  s    LOCrl   Fr   r   c                    d S r   r   r[  s     rj   r   zOKPAlgorithm.to_jwk  s    QTQTrl   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)r6  r   r5  )r^  r_  encryption_algorithm)r6  r   r   r5  r  )rw   r.   r,   public_bytesr7   Rawr:   r   r   r   r   r   r-   r+   private_bytesr9   r8   r   r   )r   r   r6  r5  r   r   s         rj   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??*!"?@@@rl   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   rb  zNot an Octet Key Pairr5  r`  ra  r2  r6  zOKP should have "x" parameterr   zInvalid key parameter)rw   r   r   r   r   r   r   r   r   r.   from_public_bytesr,   r-   from_private_bytesr+   )r   r   r"  r6  r   errs         rj   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)rL  r   rW   r   )r   rN  rW   rG   )r   r   r   rU  rW   rq   )r   r   r   rG   r   r   rW   r   )r   rG   r   r   rW   r   r   )r   rG   r   r   rW   r   )r   rG   r   r   rW   r   )r   r   rW   rG   )r   r   r   r   ALLOWED_OKP_KEY_TYPESro   r   r   r   r   r   r   r   r   r   rl   rj   rh   rh   D  s
       	 	 2	 	 	 		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rl   rh   )rW   rX   )m
__future__r   r   r   r   osabcr   r   typingr   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=   r  rB  rk  ALLOWED_KEY_TYPESALLOWED_PRIVATE_KEY_TYPESALLOWED_PUBLIC_KEY_TYPESr   getenvsysversion_inforB   typing_extensions/cryptography.hazmat.primitives.asymmetric.typesrC   rD   rE   r   rF   rG   rH   rI   rJ   rc   ModuleNotFoundErrorrequires_cryptographyrk   rn   r^   r_   re   rf   rg   rh   r   rl   rj   <module>r     s   " " " " " " "    				 # # # # # # # #	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ( ' ' ' ' ' ' ' ' ' ' ' ' '
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
iNNNNNNNN<<<<<<555555AAAAAA                                     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                  +L935KL	 	 447LL  		! 		   
YRY~r::;; 



w&&((((((( 433333	
 	
 	
 	
 	
 	
 	
 	
 %*-*E$FFFFF#(#%;;$
 	
 	
 	
 	
 %*/.P%
 	
 	
 	
 	
 "'~}n'T!UUUUU(-24EV)
 	
 	
 	
 	
 (-02BNR(
 	
 	
 	
 	
 JJ   JJJ       Di i i i i i i iX$ $ $ $ $I $ $ $<L= L= L= L= L=I L= L= L=^  N	Hw w w w wy w w wrP P P P Pi P P Pd    ,   >bH bH bH bH bHy bH bH bH bH bHYN	H N	Hs   D-F FF