Ë
    %V.jëX  ã                   óz  — d dl Z d dlZd dlmZmZ d dlmZ d dlmZ d dl	m
Z
mZmZ d dlmZmZmZ d dlmZmZ d dlmZmZmZmZ d d	lmZmZmZ d d
l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* ddl+m,Z,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2 da3d„ Z4 G d„ de2«      Z5 G d„ de2«      Z6 G d„ de2«      Z7 G d„ de2«      Z8y)é    N)ÚInvalidSignatureÚ
InvalidTag)Údefault_backend)ÚBinding)ÚhashesÚhmacÚserialization)ÚecÚpaddingÚrsa)Údecode_dss_signatureÚencode_dss_signature)ÚCipherÚaeadÚ
algorithmsÚmodes)ÚInvalidUnwrapÚaes_key_unwrapÚaes_key_wrap)ÚPKCS7)Úload_pem_private_keyÚload_pem_public_key)Úint_to_bytes)Úload_pem_x509_certificateé   )Ú
ALGORITHMS)ÚJWEErrorÚJWKError)Úbase64_to_longÚbase64url_decodeÚbase64url_encodeÚensure_binaryÚlong_to_base64é   )ÚKeyc                 óì   — t         €
t        «       a t         j                  j                  d| «      }t         j                  j                  || «       t         j                  j                  || «      dd }|S )aK  
    Get random bytes

    Currently, Cryptography returns OS random bytes. If you want OpenSSL
    generated random bytes, you'll have to switch the RAND engine after
    initializing the OpenSSL backend
    Args:
        num_bytes (int): Number of random bytes to generate and return
    Returns:
        bytes: Random bytes
    Nzchar[])Ú_bindingr   ÚffiÚnewÚlibÚ
RAND_bytesÚbuffer)Ú	num_bytesÚbufÚ
rand_bytess      údC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\jose/backends/cryptography_backend.pyÚget_random_bytesr1      s\   € ô ÐÜ“9ˆä
�,‰,×
Ñ
˜8 YÓ
/€CÜ‡L�L×Ñ˜C Ô+Ü—‘×$Ñ$ S¨)Ó4±QÐ7€JØÐó    c                   óš   — e Zd Zej                  Zej
                  Zej                  Zefd„Zd„ Z	d„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zd	„ Zd
„ Zd„ Zy)ÚCryptographyECKeyc                 ó^  — |t         j                  vrt        d|z  «      ‚t         j                  | j                  t         j
                  | j                  t         j                  | j                  ij                  |«      | _
        || _        || _        t        |d«      st        |d«      r|| _        y t        |d«      r|j                  «       j!                  d«      }t#        |t$        «      r| j'                  |«      | _        y t#        |t(        «      r|j+                  d«      }t#        |t,        «      r$	 	 t/        || j                  «       «      }|| _        y t        d|z  «      ‚# t0        $ r t3        |d | j                  «       ¬«      }Y Œ=w xY w# t4        $ r}t        |«      ‚d }~ww xY w)Nú*hash_alg: %s is not a valid hash algorithmÚpublic_bytesÚprivate_bytesÚto_pemúutf-8©ÚpasswordÚbackendz%Unable to parse an ECKey from key: %s)r   ÚECr   ÚES256ÚSHA256ÚES384ÚSHA384ÚES512ÚSHA512ÚgetÚhash_algÚ
_algorithmÚcryptography_backendÚhasattrÚprepared_keyr9   ÚdecodeÚ
isinstanceÚdictÚ_process_jwkÚstrÚencodeÚbytesr   Ú
ValueErrorr   Ú	Exception©ÚselfÚkeyÚ	algorithmrH   Úes        r0   Ú__init__zCryptographyECKey.__init__5   sw  € ØœJŸM™MÑ)ÜÐGÈ)ÑSÓTÐTô ×Ñ˜dŸk™kÜ×Ñ˜dŸk™kÜ×Ñ˜dŸk™kð
÷ ‰#ˆi‹.ð	 	Œð
 $ˆŒà$8ˆÔ!ä�3˜Ô'¬7°3¸Ô+HØ #ˆDÔØä�3˜Ô!à—*‘*“,×%Ñ% gÓ.ˆCä�cœ4Ô Ø $× 1Ñ 1°#Ó 6ˆDÔØä�cœ3ÔØ—*‘*˜WÓ%ˆCä�cœ5Ô!ð"ðhÜ-¨c°4×3LÑ3LÓ3NÓO�Cð !$ˆDÔØäÐ>ÀÑDÓEÐEøô "ò hÜ.¨s¸TÈ4×KdÑKdÓKfÔg’Cðhûäò "Ü˜q“kÐ!ûð"ús0   Ä8E( Å(%FÆF ÆFÆF Æ	F,ÆF'Æ'F,c                 ó”  ‡— ‰j                  d«      dk(  st        d‰j                  d«      z  «      ‚t        ˆfd„dD «       «      st        d«      ‚t        ‰j                  d«      «      }t        ‰j                  d«      «      }t        j
                  t        j                  t        j                  d	œ‰d
      }t	        j                  || |«       «      }d‰v rOt        ‰j                  d«      «      }t	        j                  ||«      }|j                  | j                  «       «      S |j                  | j                  «       «      S )NÚktyr>   z0Incorrect key type. Expected: 'EC', Received: %sc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­w©N© ©Ú.0ÚkÚjwk_dicts     €r0   Ú	<genexpr>z1CryptographyECKey._process_jwk.<locals>.<genexpr>f   s   øè ø€ Ð<Ñ*; Q�1˜”=Ñ*;ùó   ƒ)ÚxÚyÚcrvz Mandatory parameters are missingre   rf   )úP-256úP-384úP-521rg   Úd)rE   r   Úallr   r
   Ú	SECP256R1Ú	SECP384R1Ú	SECP521R1ÚEllipticCurvePublicNumbersÚEllipticCurvePrivateNumbersÚprivate_keyrH   Ú
public_key)rU   rb   re   rf   ÚcurveÚpublicrk   Úprivates    `      r0   rN   zCryptographyECKey._process_jwkb   s  ø€ Ø�|‰|˜EÓ" dÒ*ÜÐMÐPX×P\ÑP\Ð]bÓPcÑcÓdÐdäÓ<Ñ*;Ó<Ô<ÜÐ=Ó>Ð>ä˜8Ÿ<™<¨Ó,Ó-ˆÜ˜8Ÿ<™<¨Ó,Ó-ˆä—\‘\Ü—\‘\Ü—\‘\ñ
ð �5‰/ñ	ˆô ×.Ñ.¨q°!±U³WÓ=ˆà�(‰?Ü˜xŸ|™|¨CÓ0Ó1ˆAÜ×4Ñ4°Q¸Ó?ˆGà×&Ñ& t×'@Ñ'@Ó'BÓCÐCà×$Ñ$ T×%>Ñ%>Ó%@ÓAÐAr2   c                 ól   — t        t        j                  | j                  j                  dz  «      «      S )z¦Determine the correct serialization length for an encoded signature component.

        This is the number of bytes required to encode the maximum key value.
        g       @)ÚintÚmathÚceilrJ   Úkey_size©rU   s    r0   Ú_sig_component_lengthz'CryptographyECKey._sig_component_length{   s)   € ô
 ”4—9‘9˜T×.Ñ.×7Ñ7¸#Ñ=Ó>Ó?Ð?r2   c                 óp   — t        |«      \  }}| j                  «       }t        ||«      t        ||«      z   S )z4Convert signature from DER encoding to RAW encoding.)r   r}   r   )rU   Úder_signatureÚrÚsÚcomponent_lengths        r0   Ú_der_to_rawzCryptographyECKey._der_to_raw‚   s:   € ä# MÓ2‰ˆˆ1Ø×5Ñ5Ó7ÐÜ˜AÐ/Ó0´<ÀÐCSÓ3TÑTÐTr2   c                 óð   — | j                  «       }t        |«      t        d|z  «      k7  rt        d«      ‚|d| }||d }t        j	                  |d«      }t        j	                  |d«      }t        ||«      S )z4Convert signature from RAW encoding to DER encoding.r   zInvalid signatureNÚbig)r}   Úlenrx   rR   Ú
from_bytesr   )rU   Úraw_signaturer‚   Úr_bytesÚs_bytesr€   r�   s          r0   Ú_raw_to_derzCryptographyECKey._raw_to_derˆ   s~   € à×5Ñ5Ó7ÐÜˆ}Ó¤ QÐ)9Ñ%9Ó!:Ò:ÜÐ0Ó1Ð1àÐ 1Ð!1Ð2ˆØÐ 0Ð 1Ð2ˆÜ�N‰N˜7 EÓ*ˆÜ�N‰N˜7 EÓ*ˆÜ# A qÓ)Ð)r2   c                 óœ  — | j                   j                  dz  | j                  j                  j                  kD  rEt        d| j                  j                  j                  d| j                   j                  z  fz  «      ‚| j                  j                  |t        j                  | j                  «       «      «      }| j                  |«      S )Né   z1this curve (%s) is too short for your digest (%d))rF   Údigest_sizerJ   rt   r{   Ú	TypeErrorÚnameÚsignr
   ÚECDSArƒ   )rU   ÚmsgÚ	signatures      r0   r‘   zCryptographyECKey.sign”   s¦   € Ø�=‰=×$Ñ$ qÑ(¨4×+<Ñ+<×+BÑ+B×+KÑ+KÒKÜð'Ø*.×*;Ñ*;×*AÑ*A×*FÑ*FÈÈDÏMÉM×LeÑLeÑHeÐ)fñgóð ð ×%Ñ%×*Ñ*¨3´·±¸¿¹»Ó0IÓJˆ	Ø×Ñ 	Ó*Ð*r2   c                 óÂ   — 	 | j                  |«      }| j                  j                  ||t        j                  | j                  «       «      «       y# t        $ r Y yw xY w)NTF)r‹   rJ   Úverifyr
   r’   rF   rS   )rU   r“   Úsigr”   s       r0   r–   zCryptographyECKey.verify�   sS   € ð	Ø×(Ñ(¨Ó-ˆIØ×Ñ×$Ñ$ Y°´R·X±X¸d¿m¹m»oÓ5NÔOØøÜò 	Ùð	ús   ‚AA Á	AÁAc                 ó.   — t        | j                  d«      S ©Nr7   ©rI   rJ   r|   s    r0   Ú	is_publiczCryptographyECKey.is_public¥   ó   € Ü�t×(Ñ(¨.Ó9Ð9r2   c                 óŽ   — | j                  «       r| S | j                  | j                  j                  «       | j                  «      S r]   ©r›   Ú	__class__rJ   rs   rG   r|   s    r0   rs   zCryptographyECKey.public_key¨   ó5   € Ø�>‰>ÔØˆKØ�~‰~˜d×/Ñ/×:Ñ:Ó<¸d¿o¹oÓNÐNr2   c                 ó„  — | j                  «       rO| j                  j                  t        j                  j
                  t        j                  j                  ¬«      }|S | j                  j                  t        j                  j
                  t        j                  j                  t        j                  «       ¬«      }|S )N©ÚencodingÚformat©r£   r¤   Úencryption_algorithm)r›   rJ   r7   r	   ÚEncodingÚPEMÚPublicFormatÚSubjectPublicKeyInfor8   ÚPrivateFormatÚTraditionalOpenSSLÚNoEncryption)rU   Úpems     r0   r9   zCryptographyECKey.to_pem­   s—   € Ø�>‰>ÔØ×#Ñ#×0Ñ0Ü&×/Ñ/×3Ñ3¼M×<VÑ<V×<kÑ<kð 1ó ˆCð ˆJØ×Ñ×-Ñ-Ü"×+Ñ+×/Ñ/Ü ×.Ñ.×AÑAÜ!.×!;Ñ!;Ó!=ð .ó 
ˆð
 ˆ
r2   c                 ó   — | j                  «       s| j                  j                  «       }n| j                  }ddddœ| j                  j                  j                     }| j                  j                  j
                  dz   dz  }| j                  d|t        |j                  «       j                  |¬«      j                  d	«      t        |j                  «       j                  |¬«      j                  d	«      d
œ}| j                  «       sC| j                  j                  «       j                  }t        ||¬«      j                  d	«      |d<   |S )Nrh   ri   rj   )Ú	secp256r1Ú	secp384r1Ú	secp521r1é   r�   r>   )ÚsizeÚASCII)Úalgr[   rg   re   rf   rk   )r›   rJ   rs   rt   r�   r{   rG   r#   Úpublic_numbersre   rK   rf   Úprivate_numbersÚprivate_value)rU   rs   rg   r{   Údatar¹   s         r0   Úto_dictzCryptographyECKey.to_dictº   s"  € Ø�~‰~ÔØ×*Ñ*×5Ñ5Ó7‰Jà×*Ñ*ˆJð !Ø Ø ñ
ð ×
Ñ
×
!Ñ
!×
&Ñ
&ñ	(ˆð ×%Ñ%×+Ñ+×4Ñ4°qÑ8¸QÑ>ˆð —?‘?ØØÜ 
× 9Ñ 9Ó ;× =Ñ =ÀHÔM×TÑTÐU\Ó]Ü 
× 9Ñ 9Ó ;× =Ñ =ÀHÔM×TÑTÐU\Ó]ñ
ˆð �~‰~ÔØ ×-Ñ-×=Ñ=Ó?×MÑMˆMÜ& }¸8ÔD×KÑKÈGÓTˆD�‰Iàˆr2   N)Ú__name__Ú
__module__Ú__qualname__r   r@   rB   rD   r   rY   rN   r}   rƒ   r‹   r‘   r–   r›   rs   r9   r»   r^   r2   r0   r4   r4   0   s]   „ Ø�]‰]€FØ�]‰]€FØ�]‰]€Fà<Kó +FòZBò2@òUò
*ò+òò:òOò
ór2   r4   c                   óÆ  — e Zd Zej                  Zej
                  Zej                  Z ej                  «       Z	 ej                   ej                   ej                  «       «       ej                  «       d«      Z ej                   ej                   ej                  «       «       ej                  «       d«      Zefd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdd	„Zd
„ Zd„ Zd„ Zy)ÚCryptographyRSAKeyNc                 ó  — |t         j                  vrt        d|z  «      ‚t         j                  | j                  t         j
                  | j                  t         j                  | j                  ij                  |«      | _
        || _        t         j                  | j                  t         j                  | j                  t         j                  | j                  ij                  |«      | _        || _        t#        |d«      rt#        |d«      r|| _        y t'        |t(        «      r| j+                  |«      | _        y t'        |t,        «      r|j/                  d«      }t'        |t0        «      rE	 |j3                  d«      r| j5                  |«       y 	 t7        || j!                  «       «      | _        y t        d|z  «      ‚# t8        $ r$ t;        |d | j!                  «       ¬«      | _        Y y w xY w# t<        $ r}t        |«      ‚d }~ww xY w)Nr6   r7   r·   r:   ó   -----BEGIN CERTIFICATE-----r;   z'Unable to parse an RSA_JWK from key: %s)r   ÚRSAr   ÚRS256r@   ÚRS384rB   ÚRS512rD   rE   rF   rG   ÚRSA1_5ÚRSA_OAEPÚRSA_OAEP_256r   rH   rI   rJ   rL   rM   rN   rO   rP   rQ   Ú
startswithÚ_process_certr   rR   r   rS   rT   s        r0   rY   zCryptographyRSAKey.__init__ã   sÆ  € ØœJŸN™NÑ*ÜÐGÈ)ÑSÓTÐTô ×Ñ˜dŸk™kÜ×Ñ˜dŸk™kÜ×Ñ˜dŸk™kð
÷ ‰#ˆi‹.ð	 	Œð
 $ˆŒô ×Ñ˜tŸ{™{Ü×Ñ §¡Ü×#Ñ# T×%6Ñ%6ð
÷ ‰#ˆi‹.ð	 	Œð %9ˆÔ!ô �3˜Ô'¬G°CÐ9IÔ,JØ #ˆDÔØä�cœ4Ô Ø $× 1Ñ 1°#Ó 6ˆDÔØä�cœ3ÔØ—*‘*˜WÓ%ˆCä�cœ5Ô!ð
"Ø—>‘>Ð"@ÔAØ×&Ñ& sÔ+ØðvÜ(;¸CÀ×AZÑAZÓA\Ó(]�DÔ%ð
 äÐ@À3ÑFÓGÐGøô "ò vÜ(<¸SÈ4ÐY]×YrÑYrÓYtÔ(u�DÕ%ð ð	vûäò "Ü˜q“kÐ!ûð"ús6   Å0"G2 ÆG Ç*G/Ç,G2 Ç.G/Ç/G2 Ç2	HÇ;HÈHc           	      óž  ‡— ‰j                  d«      dk(  st        d‰j                  d«      z  «      ‚t        ‰j                  dd«      «      }t        ‰j                  d«      «      }t        j                  ||«      }d‰vr|j                  | j                  «       «      S t        ‰j                  d«      «      }g d¢}t        ˆfd	„|D «       «      rft        ˆfd
„|D «       «      st        d«      ‚t        ‰d   «      }t        ‰d   «      }t        ‰d   «      }	t        ‰d   «      }
t        ‰d   «      }n\t        j                  |||«      \  }}t        j                  ||«      }	t        j                  ||«      }
t        j                  ||«      }t        j                  ||||	|
||«      }|j                  | j                  «       «      S )Nr[   rÃ   z1Incorrect key type. Expected: 'RSA', Received: %srX   é   Únrk   )ÚpÚqÚdpÚdqÚqic              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr]   r^   r_   s     €r0   rc   z2CryptographyRSAKey._process_jwk.<locals>.<genexpr>"  s   øè ø€ Ð7©, Q�1˜”=©,ùrd   c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr]   r^   r_   s     €r0   rc   z2CryptographyRSAKey._process_jwk.<locals>.<genexpr>$  s   øè ø€ Ð?±,¨Q˜1 œ=±,ùrd   z2Precomputed private key parameters are incomplete.rÏ   rÐ   rÑ   rÒ   rÓ   )rE   r   r   r   ÚRSAPublicNumbersrs   rH   Úanyrl   Úrsa_recover_prime_factorsÚrsa_crt_dmp1Úrsa_crt_dmq1Úrsa_crt_iqmpÚRSAPrivateNumbersrr   )rU   rb   rX   rÎ   ru   rk   Úextra_paramsrÏ   rÐ   rÑ   rÒ   rÓ   rv   s    `           r0   rN   zCryptographyRSAKey._process_jwk  sž  ø€ Ø�|‰|˜EÓ" eÒ+ÜÐNÐQY×Q]ÑQ]Ð^cÓQdÑdÓeÐeä˜8Ÿ<™<¨¨SÓ1Ó2ˆÜ˜8Ÿ<™<¨Ó,Ó-ˆÜ×%Ñ% a¨Ó+ˆà�hÑØ×$Ñ$ T×%>Ñ%>Ó%@ÓAÐAô ˜xŸ|™|¨CÓ0Ó1ˆAâ7ˆLäÓ7©,Ó7Ô7äÓ?±,Ó?Ô?ô #Ð#WÓXÐXä" 8¨C¡=Ó1�Ü" 8¨C¡=Ó1�Ü# H¨T¡NÓ3�Ü# H¨T¡NÓ3�Ü# H¨T¡NÓ3‘ô ×4Ñ4°Q¸¸1Ó=‘��1Ü×%Ñ% a¨Ó+�Ü×%Ñ% a¨Ó+�Ü×%Ñ% a¨Ó+�ä×+Ñ+¨A¨q°!°R¸¸RÀÓHˆGà×&Ñ& t×'@Ñ'@Ó'BÓCÐCr2   c                 ób   — t        || j                  «       «      }|j                  «       | _        y r]   )r   rH   rs   rJ   )rU   rV   s     r0   rË   z CryptographyRSAKey._process_cert;  s&   € Ü'¨¨T×-FÑ-FÓ-HÓIˆØŸN™NÓ,ˆÕr2   c                 óº   — 	 | j                   j                  |t        j                  «       | j	                  «       «      }|S # t
        $ r}t        |«      ‚d }~ww xY wr]   )rJ   r‘   r   ÚPKCS1v15rF   rS   r   )rU   r“   r”   rX   s       r0   r‘   zCryptographyRSAKey.sign?  sT   € ð	Ø×)Ñ)×.Ñ.¨s´G×4DÑ4DÓ4FÈÏÉËÓXˆIð Ðøô ò 	Ü˜1“+Ðûð	ús   ‚=A Á	AÁ
AÁAc                 ó  — | j                  «       st        j                  d«       	 | j                  «       j                  j                  ||t        j                  «       | j                  «       «       y# t        $ r Y yw xY w)NzKAttempting to verify a message with a private key. This is not recommended.TF)
r›   ÚwarningsÚwarnrs   rJ   r–   r   rà   rF   r   )rU   r“   r—   s      r0   r–   zCryptographyRSAKey.verifyF  sg   € Ø�~‰~ÔÜ�M‰MÐjÔkð	Ø�O‰OÓ×*Ñ*×1Ñ1°#°s¼G×<LÑ<LÓ<NÐPT×P]ÑP]ÓP_Ô`ØøÜò 	Ùð	ús   §AA4 Á4	B Á?B c                 ó.   — t        | j                  d«      S r™   rš   r|   s    r0   r›   zCryptographyRSAKey.is_publicP  rœ   r2   c                 óŽ   — | j                  «       r| S | j                  | j                  j                  «       | j                  «      S r]   rž   r|   s    r0   rs   zCryptographyRSAKey.public_keyS  r    r2   c                 óX  — | j                  «       r…|dk(  rt        j                  j                  }n.|dk(  rt        j                  j                  }nt        d|z  «      ‚| j                  j                  t        j                  j                  |¬«      }|S |dk(  rt        j                  j                  }n.|dk(  rt        j                  j                  }nt        d|z  «      ‚| j                  j                  t        j                  j                  |t        j                  «       ¬«      S )NÚPKCS8ÚPKCS1zInvalid format specified: %rr¢   r¥   )r›   r	   r©   rª   rè   rR   rJ   r7   r§   r¨   r«   rç   r¬   r8   r­   )rU   Ú
pem_formatÚfmtr®   s       r0   r9   zCryptographyRSAKey.to_pemX  sú   € Ø�>‰>ÔØ˜WÒ$Ü#×0Ñ0×EÑE‘Ø˜wÒ&Ü#×0Ñ0×6Ñ6‘ä Ð!?À*Ñ!LÓMÐMØ×#Ñ#×0Ñ0¼-×:PÑ:P×:TÑ:TÐ]`Ð0ÓaˆCØˆJà˜Ò Ü×-Ñ-×3Ñ3‰CØ˜7Ò"Ü×-Ñ-×@Ñ@‰CäÐ;¸jÑHÓIÐIà× Ñ ×.Ñ.Ü"×+Ñ+×/Ñ/¸ÔR_×RlÑRlÓRnð /ó 
ð 	
r2   c                 ó`  — | j                  «       s| j                  j                  «       }n| j                  }| j                  dt	        |j                  «       j                  «      j                  d«      t	        |j                  «       j                  «      j                  d«      dœ}| j                  «       �st|j                  t	        | j                  j                  «       j                  «      j                  d«      t	        | j                  j                  «       j                  «      j                  d«      t	        | j                  j                  «       j                  «      j                  d«      t	        | j                  j                  «       j                  «      j                  d«      t	        | j                  j                  «       j                  «      j                  d«      t	        | j                  j                  «       j                   «      j                  d«      dœ«       |S )NrÃ   rµ   )r¶   r[   rÎ   rX   )rk   rÏ   rÐ   rÑ   rÒ   rÓ   )r›   rJ   rs   rG   r#   r·   rÎ   rK   rX   Úupdater¸   rk   rÏ   rÐ   Údmp1Údmq1Úiqmp)rU   rs   rº   s      r0   r»   zCryptographyRSAKey.to_dictn  sœ  € Ø�~‰~ÔØ×*Ñ*×5Ñ5Ó7‰Jà×*Ñ*ˆJð —?‘?ØÜ 
× 9Ñ 9Ó ;× =Ñ =Ó>×EÑEÀgÓNÜ 
× 9Ñ 9Ó ;× =Ñ =Ó>×EÑEÀgÓNñ	
ˆð �~‰~ÕØ�K‰Kä'¨×(9Ñ(9×(IÑ(IÓ(K×(MÑ(MÓN×UÑUÐV]Ó^Ü'¨×(9Ñ(9×(IÑ(IÓ(K×(MÑ(MÓN×UÑUÐV]Ó^Ü'¨×(9Ñ(9×(IÑ(IÓ(K×(MÑ(MÓN×UÑUÐV]Ó^Ü(¨×):Ñ):×)JÑ)JÓ)L×)QÑ)QÓR×YÑYÐZaÓbÜ(¨×):Ñ):×)JÑ)JÓ)L×)QÑ)QÓR×YÑYÐZaÓbÜ(¨×):Ñ):×)JÑ)JÓ)L×)QÑ)QÓR×YÑYÐZaÓbñô	ð ˆr2   c                 óŒ   — 	 | j                   j                  || j                  «      }|S # t        $ r}t	        |«      ‚d }~ww xY wr]   )rJ   Úencryptr   rS   r   )rU   Úkey_dataÚwrapped_keyrX   s       r0   Úwrap_keyzCryptographyRSAKey.wrap_key‰  sG   € ð	Ø×+Ñ+×3Ñ3°H¸d¿l¹lÓKˆKð Ðøô ò 	Ü˜1“+Ðûð	ús   ‚&* ª	A³>¾Ac                 óŒ   — 	 | j                   j                  || j                  «      }|S # t        $ r}t	        |«      ‚d }~ww xY wr]   )rJ   Údecryptr   rS   r   )rU   ró   Úunwrapped_keyrX   s       r0   Ú
unwrap_keyzCryptographyRSAKey.unwrap_key‘  sC   € ð	Ø ×-Ñ-×5Ñ5°kÀ4Ç<Á<ÓPˆMØ Ð øÜò 	Ü˜1“+Ðûð	ús   ‚'* ª	A³>¾A)rç   )r¼   r½   r¾   r   r@   rB   rD   r   rà   rÇ   ÚOAEPÚMGF1ÚSHA1rÈ   rÉ   r   rY   rN   rË   r‘   r–   r›   rs   r9   r»   rô   rø   r^   r2   r0   rÀ   rÀ   Ú   sË   „ Ø�]‰]€FØ�]‰]€FØ�]‰]€FàˆW×ÑÓ€FØˆw�|‰|˜L˜GŸL™L¨¨¯©«Ó7¸¸¿¹»ÈÓM€HØ�7—<‘<  §¡¨]¨V¯]©]«_Ó =¸}¸v¿}¹}»ÐPTÓU€Là<Kó -Hò^'DòR-òòò:òOó

ò,ò6ór2   rÀ   c                   ó4  — e Zd Zej                  ej
                  ej                  ej                  fZej                  ej                  ej                  ej                  fZej                  ej                  ej                   ej"                  ej$                  fZej(                  fZej,                  fZej                  ej                  ej                   fZej                  ej4                  ej                  ej4                  ej                  ej4                  ej"                  ej6                  ej(                  ej6                  ej,                  ej6                  ej                  ej6                  ej                  ej6                  ej$                  ej6                  ej
                  ej4                  ej                  ej4                  ej                  ej4                  ej                  dej                  dej                   diZd„ Zd„ Zdd„Zd	d„Z d„ Z!d„ Z"y)
ÚCryptographyAESKeyNc                 óÒ  — |t         j                  vrt        d|z  «      ‚|t         j                  j	                  t         j
                  «      vrt        d|z  «      ‚|| _        | j                  j                  | j                  «      | _	        || j                  v rt        |«      dk7  rt        d|› �«      ‚|| j                  v rt        |«      dk7  rt        d|› �«      ‚|| j                  v rt        |«      dk7  rt        d|› �«      ‚|| j                  v rt        |«      d	k7  rt        d
|› �«      ‚|| j                  v rt        |«      dk7  rt        d|› �«      ‚|| _        y )Nz%s is not a valid AES algorithmz%s is not a supported algorithmé   zKey must be 128 bit for alg é   zKey must be 192 bit for alg é    zKey must be 256 bit for alg é0   zKey must be 384 bit for alg é@   zKey must be 512 bit for alg )r   ÚAESr   Ú	SUPPORTEDÚunionÚ
AES_PSEUDOrG   ÚMODESrE   Ú_modeÚKEY_128r†   ÚKEY_192ÚKEY_256ÚKEY_384ÚKEY_512Ú_key)rU   rV   rW   s      r0   rY   zCryptographyAESKey.__init__º  sB  € ØœJŸN™NÑ*ÜÐ<¸yÑHÓIÐIØœJ×0Ñ0×6Ñ6´z×7LÑ7LÓMÑMÜÐ<¸yÑHÓIÐIà#ˆŒØ—Z‘Z—^‘^ D§O¡OÓ4ˆŒ
à˜Ÿ™Ñ$¬¨S«°RªÜÐ9¸)¸ÐEÓFÐFØ˜$Ÿ,™,Ñ&¬3¨s«8°rª>ÜÐ9¸)¸ÐEÓFÐFØ˜$Ÿ,™,Ñ&¬3¨s«8°rª>ÜÐ9¸)¸ÐEÓFÐFØ˜$Ÿ,™,Ñ&¬3¨s«8°rª>ÜÐ9¸)¸ÐEÓFÐFØ˜$Ÿ,™,Ñ&¬3¨s«8°rª>ÜÐ9¸)¸ÐEÓFÐFàˆ�	r2   c                 óL   — | j                   dt        | j                  «      dœ}|S )NÚoct©r¶   r[   ra   )rG   r!   r  )rU   rº   s     r0   r»   zCryptographyAESKey.to_dictÐ  s!   € Ø—‘¨uÔ;KÈDÏIÉIÓ;VÑWˆØˆr2   c                 óò  — t        |«      }	 t        t        j                  j                  dz  «      }| j                  |«      }|j                  dk(  rIt        j                  | j                  «      }|j                  |||«      }|d t        |«      dz
   }|dd  }n¼t        t        j                  | j                  «      |t        «       ¬«      }|j                  «       }	t        t        j                  j                  «      j!                  «       }
|
j#                  |«      }||
j%                  «       z  }|	j#                  |«      |	j%                  «       z   }d }|||fS # t&        $ r}t)        |«      ‚d }~ww xY w)Nr�   ÚGCMrÿ   iðÿÿÿ©r=   )r"   r1   r   r  Ú
block_sizer	  r�   r   ÚAESGCMr  rñ   r†   r   r   Ú	encryptorr   Úpadderrì   ÚfinalizerS   r   )rU   Ú
plain_textÚaadÚivÚmodeÚcipherÚcipher_text_and_tagÚcipher_textÚauth_tagr  r  Úpadded_datarX   s                r0   rñ   zCryptographyAESKey.encryptÔ  s>  € Ü" :Ó.ˆ
ð	Ü!¤*§.¡.×";Ñ";¸qÑ"@ÓAˆBØ—:‘:˜b“>ˆDØ�y‰y˜EÒ!ÜŸ™ T§Y¡YÓ/�Ø&,§n¡n°R¸ÀSÓ&IÐ#Ø1Ð2Q´CÐ8KÓ4LÈrÑ4QÐR�Ø.¨s¨tÐ4‘ä¤
§¡¨t¯y©yÓ 9¸4ÌÓIZÔ[�Ø"×,Ñ,Ó.�	ÜœzŸ~™~×8Ñ8Ó9×@Ñ@ÓB�Ø$Ÿm™m¨JÓ7�Ø˜vŸ™Ó0Ñ0�Ø'×.Ñ.¨{Ó;¸i×>PÑ>PÓ>RÑR�Ø�Ø�{ HÐ,Ð,øÜò 	Ü˜1“+Ðûð	ús   �EE Å	E6Å&E1Å1E6c                 óâ  — t        |«      }	 t        |«      }| j                  |«      }|j                  dk(  rG|€t        d«      ‚t	        j
                  | j                  «      }||z   }	 |j                  |||«      }|S t        t        j                  | j                  «      |t        «       ¬«      }|j                  «       }	|	j                  |«      }
|
|	j!                  «       z  }
t#        t        j                  j$                  «      j'                  «       }|j                  |
«      }||j!                  «       z  }|S # t        $ r t        d«      ‚w xY w# t(        $ r}t        |«      ‚d }~ww xY w)Nr  ztag cannot be NonezInvalid JWE Auth Tagr  )r"   r	  r�   rR   r   r  r  rö   r   r   r   r   r  r   Ú	decryptorrì   r  r   r  ÚunpadderrS   )rU   r!  r  r  Útagr  r  r   r  r%  Úpadded_plain_textr&  rX   s                r0   rö   zCryptographyAESKey.decryptê  sR  € Ü# KÓ0ˆð	Ü˜rÓ"ˆBØ—:‘:˜b“>ˆDØ�y‰y˜EÒ!Ø�;Ü$Ð%9Ó:Ð:ÜŸ™ T§Y¡YÓ/�Ø&1°CÑ&7Ð#ð;Ø!'§¡°Ð4GÈÓ!M�Jð Ðô  ¤
§¡¨t¯y©yÓ 9¸4ÌÓIZÔ[�Ø"×,Ñ,Ó.�	Ø$-×$4Ñ$4°[Ó$AÐ!Ø! Y×%7Ñ%7Ó%9Ñ9Ð!Ü ¤§¡×!:Ñ!:Ó;×DÑDÓF�Ø%Ÿ_™_Ð->Ó?�
Ø˜h×/Ñ/Ó1Ñ1�
àÐøô "ò ;Ü"Ð#9Ó:Ð:ð;ûô ò 	Ü˜1“+Ðûð	ús7   �AE Á*D= Á=E Á?B=E Ä=EÅE Å	E.ÅE)Å)E.c                 óZ   — t        |«      }t        | j                  |t        «       «      }|S r]   )r"   r   r  r   )rU   rò   r!  s      r0   rô   zCryptographyAESKey.wrap_key  s'   € Ü  Ó*ˆÜ" 4§9¡9¨h¼Ó8IÓJˆØÐr2   c                 ó”   — t        |«      }	 t        | j                  |t        «       «      }|S # t        $ r}t        |«      ‚d }~ww xY wr]   )r"   r   r  r   r   r   )rU   ró   r  Úcauses       r0   rø   zCryptographyAESKey.unwrap_key
  sJ   € Ü# KÓ0ˆð	"Ü'¨¯	©	°;ÄÓ@QÓRˆJð Ðøô ò 	"Ü˜5“/Ð!ûð	"ús   �. ®	A·AÁAr]   )NNN)#r¼   r½   r¾   r   ÚA128GCMÚ	A128GCMKWÚA128KWÚA128CBCr
  ÚA192GCMÚ	A192GCMKWÚA192KWÚA192CBCr  ÚA256GCMÚ	A256GCMKWÚA256KWÚA128CBC_HS256ÚA256CBCr  ÚA192CBC_HS384r  ÚA256CBC_HS512r  ÚAES_KW_ALGSr   r  ÚCBCr  rY   r»   rñ   rö   rô   rø   r^   r2   r0   rý   rý   ™  sº  „ Ø×!Ñ! :×#7Ñ#7¸×9JÑ9JÈJ×L^ÑL^Ð_€GØ×!Ñ! :×#7Ñ#7¸×9JÑ9JÈJ×L^ÑL^Ð_€Gà×ÑØ×ÑØ×ÑØ× Ñ Ø×Ñð€Gð ×'Ñ'Ð)€GØ×'Ñ'Ð)€Gà×$Ñ$ j×&7Ñ&7¸×9JÑ9JÐK€Kð 	×Ñ˜EŸI™IØ×Ñ˜EŸI™IØ×Ñ˜EŸI™IØ× Ñ  %§)¡)Ø× Ñ  %§)¡)Ø× Ñ  %§)¡)Ø×Ñ˜EŸI™IØ×Ñ˜EŸI™IØ×Ñ˜EŸI™IØ×Ñ˜eŸi™iØ×Ñ˜eŸi™iØ×Ñ˜eŸi™iØ×Ñ˜4Ø×Ñ˜4Ø×Ñ˜4ð€Eò$ò,óó,ò6ó
r2   rý   c                   óÔ   — e Zd ZdZej
                   ej                  «       ej                   ej                  «       ej                   ej                  «       iZd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚCryptographyHMACKeyzf
    Performs signing and verification operations using HMAC
    and the specified hash function.
    c                 óÎ  ‡— |t         j                  vrt        d|z  «      ‚|| _        | j                  j                  |«      | _        t        ‰t        «      r| j                  ‰«      | _
        y t        ‰t        «      st        ‰t        «      st        d«      ‚t        ‰t        «      r‰j                  d«      Šg d¢}t        ˆfd„|D «       «      rt        d«      ‚‰| _
        y )Nr6   z+Expecting a string- or bytes-formatted key.r:   )s   -----BEGIN PUBLIC KEY-----s   -----BEGIN RSA PUBLIC KEY-----rÂ   s   ssh-rsac              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr]   r^   )r`   Ústring_valuerV   s     €r0   rc   z/CryptographyHMACKey.__init__.<locals>.<genexpr>2  s   øè ø€ ÐG± |ˆ|˜sÔ"±ùrd   zdThe specified key is an asymmetric key or x509 certificate and should not be used as an HMAC secret.)r   ÚHMACr   rG   ÚALG_MAPrE   Ú	_hash_algrL   rM   rN   rJ   rO   rQ   rP   r×   )rU   rV   rW   Úinvalid_stringss    `  r0   rY   zCryptographyHMACKey.__init__  sÇ   ø€ ØœJŸO™OÑ+ÜÐGÈ)ÑSÓTÐTØ#ˆŒØŸ™×)Ñ)¨)Ó4ˆŒä�cœ4Ô Ø $× 1Ñ 1°#Ó 6ˆDÔØä˜#œsÔ#¬J°s¼EÔ,BÜÐHÓIÐIä�cœ3ÔØ—*‘*˜WÓ%ˆCò
ˆô ÓG±ÓGÔGÜð9óð ð
  ˆÕr2   c                 óØ   — |j                  d«      dk(  st        d|j                  d«      z  «      ‚|j                  d«      }|j                  d«      }t        |«      }t	        |«      }|S )Nr[   r  z1Incorrect key type. Expected: 'oct', Received: %sra   r:   )rE   r   rP   rQ   r    )rU   rb   ra   s      r0   rN   z CryptographyHMACKey._process_jwk:  se   € Ø�|‰|˜EÓ" eÒ+ÜÐNÐQY×Q]ÑQ]Ð^cÓQdÑdÓeÐeà�L‰L˜ÓˆØ�H‰H�WÓˆÜ�!‹HˆÜ˜QÓˆàˆr2   c                 óf   — | j                   dt        | j                  «      j                  d«      dœS )Nr  rµ   r  )rG   r!   rJ   rK   r|   s    r0   r»   zCryptographyHMACKey.to_dictE  s/   € à—?‘?ØÜ! $×"3Ñ"3Ó4×;Ñ;¸GÓDñ
ð 	
r2   c                 óÆ   — t        |«      }t        j                  | j                  | j                  t        «       ¬«      }|j                  |«       |j                  «       }|S )Nr  )r"   r   rB  rJ   rD  r   rì   r  )rU   r“   Úhr”   s       r0   r‘   zCryptographyHMACKey.signL  sG   € Ü˜CÓ ˆÜ�I‰I�d×'Ñ'¨¯©ÄÓARÔSˆØ	�‰�ŒØ—J‘J“Lˆ	ØÐr2   c                 ó  — t        |«      }t        |«      }t        j                  | j                  | j                  t        «       ¬«      }|j                  |«       	 |j                  |«       d}|S # t        $ r d}Y |S w xY w)Nr  TF)	r"   r   rB  rJ   rD  r   rì   r–   r   )rU   r“   r—   rI  Úverifieds        r0   r–   zCryptographyHMACKey.verifyS  sw   € Ü˜CÓ ˆÜ˜CÓ ˆÜ�I‰I�d×'Ñ'¨¯©ÄÓARÔSˆØ	�‰�Œð	Ø�H‰H�SŒMØˆHð ˆøô  ò 	Ø‰HØˆð	ús   ÁA2 Á2BÂ BN)r¼   r½   r¾   Ú__doc__r   ÚHS256r   r@   ÚHS384rB   ÚHS512rD   rC  rY   rN   r»   r‘   r–   r^   r2   r0   r>  r>    sd   „ ñð
 ×Ñ  §¡£°*×2BÑ2BÀMÀFÇMÁMÃOÐU_×UeÑUeÐgtÐgm×gtÑgtÓgvÐw€Gò ò>	ò
òó
r2   r>  )9ry   râ   Úcryptography.exceptionsr   r   Úcryptography.hazmat.backendsr   Ú,cryptography.hazmat.bindings.openssl.bindingr   Úcryptography.hazmat.primitivesr   r   r	   Ú)cryptography.hazmat.primitives.asymmetricr
   r   r   Ú/cryptography.hazmat.primitives.asymmetric.utilsr   r   Ú&cryptography.hazmat.primitives.ciphersr   r   r   r   Ú&cryptography.hazmat.primitives.keywrapr   r   r   Ú&cryptography.hazmat.primitives.paddingr   Ú,cryptography.hazmat.primitives.serializationr   r   Úcryptography.utilsr   Úcryptography.x509r   Ú	constantsr   Ú
exceptionsr   r   Úutilsr   r    r!   r"   r#   Úbaser%   r'   r1   r4   rÀ   rý   r>  r^   r2   r0   Ú<module>r`     s�   ðÛ Û ç @Ý 8Ý @ß FÑ Fß FÑ Fß fß RÓ Rß ^Ñ ^Ý 8ß bÝ +Ý 7å "ß +ß eÕ eÝ à€òô.g˜ô gôT|˜ô |ô~w˜ô wôtJ˜#õ Jr2   