Ë
    jjŸV  ã                   ó|  — 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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-m.Z.m/Z/m0Z0 ddl1m2Z2 ddl3m4Z4 dZ5 G d„ de4«      Z6 G d„ de4«      Z7 G d„ de4«      Z8 G d„ de4«      Z9y)é    N)ÚInvalidSignatureÚ
InvalidTag)Údefault_backend)Ú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Úis_pem_formatÚ
is_ssh_keyÚlong_to_base64é   )Úget_random_bytes)ÚKeyc                   óš   — 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_keyr.   ÚdecodeÚ
isinstanceÚdictÚ_process_jwkÚstrÚencodeÚbytesr   Ú
ValueErrorr   Ú	Exception©ÚselfÚkeyÚ	algorithmr=   Úes        úk/var/www/html/sergio/sergio-backend/venv/lib/python3.12/site-packages/jose/backends/cryptography_backend.pyÚ__init__zCryptographyECKey.__init__&   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Úktyr3   z0Incorrect key type. Expected: 'EC', Received: %sc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­w©N© ©Ú.0ÚkÚjwk_dicts     €rN   Ú	<genexpr>z1CryptographyECKey._process_jwk.<locals>.<genexpr>W   s   øè ø€ Ð<Ñ*; Q�1˜”=Ñ*;ùó   ƒ)ÚxÚyÚcrvz Mandatory parameters are missingr[   r\   )úP-256úP-384úP-521r]   Úd)r:   r   Úallr   r	   Ú	SECP256R1Ú	SECP384R1Ú	SECP521R1ÚEllipticCurvePublicNumbersÚEllipticCurvePrivateNumbersÚprivate_keyr=   Ú
public_key)rJ   rX   r[   r\   ÚcurveÚpublicra   Úprivates    `      rN   rC   zCryptographyECKey._process_jwkS   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ÐAó    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Úceilr?   Úkey_size©rJ   s    rN   Ú_sig_component_lengthz'CryptographyECKey._sig_component_lengthl   s)   € ô
 ”4—9‘9˜T×.Ñ.×7Ñ7¸#Ñ=Ó>Ó?Ð?rm   c                 óp   — t        |«      \  }}| j                  «       }t        ||«      t        ||«      z   S )z4Convert signature from DER encoding to RAW encoding.)r   rt   r   )rJ   Úder_signatureÚrÚsÚcomponent_lengths        rN   Ú_der_to_rawzCryptographyECKey._der_to_raws   s:   € ä# MÓ2‰ˆˆ1Ø×5Ñ5Ó7ÐÜ˜AÐ/Ó0´<ÀÐCSÓ3TÑTÐTrm   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)rt   Úlenro   rG   Ú
from_bytesr   )rJ   Úraw_signaturery   Úr_bytesÚs_bytesrw   rx   s          rN   Ú_raw_to_derzCryptographyECKey._raw_to_dery   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Ó)Ð)rm   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))r;   Údigest_sizer?   rj   rr   Ú	TypeErrorÚnameÚsignr	   ÚECDSArz   )rJ   ÚmsgÚ	signatures      rN   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ˆ	Ø×Ñ 	Ó*Ð*rm   c                 óÂ   — 	 | j                  |«      }| j                  j                  ||t        j                  | j                  «       «      «       y# t        $ r Y yw xY w)NTF)r‚   r?   Úverifyr	   r‰   r;   rH   )rJ   rŠ   Úsigr‹   s       rN   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 ©Nr,   ©r>   r?   rs   s    rN   Ú	is_publiczCryptographyECKey.is_public–   ó   € Ü�t×(Ñ(¨.Ó9Ð9rm   c                 óŽ   — | j                  «       r| S | j                  | j                  j                  «       | j                  «      S rS   ©r’   Ú	__class__r?   ri   r<   rs   s    rN   ri   zCryptographyECKey.public_key™   ó5   € Ø�>‰>ÔØˆKØ�~‰~˜d×/Ñ/×:Ñ:Ó<¸d¿o¹oÓNÐNrm   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’   r?   r,   r   ÚEncodingÚPEMÚPublicFormatÚSubjectPublicKeyInfor-   ÚPrivateFormatÚTraditionalOpenSSLÚNoEncryption)rJ   Úpems     rN   r.   zCryptographyECKey.to_pemž   s—   € Ø�>‰>ÔØ×#Ñ#×0Ñ0Ü&×/Ñ/×3Ñ3¼M×<VÑ<V×<kÑ<kð 1ó ˆCð ˆJØ×Ñ×-Ñ-Ü"×+Ñ+×/Ñ/Ü ×.Ñ.×AÑAÜ!.×!;Ñ!;Ó!=ð .ó 
ˆð
 ˆ
rm   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 )Nr^   r_   r`   )Ú	secp256r1Ú	secp384r1Ú	secp521r1é   r„   r3   )ÚsizeÚASCII)ÚalgrQ   r]   r[   r\   ra   )r’   r?   ri   rj   r‡   rr   r<   r$   Úpublic_numbersr[   r@   r\   Úprivate_numbersÚprivate_value)rJ   ri   r]   rr   Údatar°   s         rN   Ú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àˆrm   N)Ú__name__Ú
__module__Ú__qualname__r   r5   r7   r9   r   rO   rC   rt   rz   r‚   rˆ   r�   r’   ri   r.   r²   rT   rm   rN   r)   r)   !   s]   „ Ø�]‰]€FØ�]‰]€FØ�]‰]€Fà<Kó +FòZBò2@òUò
*ò+òò:òOò
órm   r)   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                 ó4  — |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«      s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)	Nr+   r,   r®   r-   r/   s   -----BEGIN CERTIFICATE-----r0   z'Unable to parse an RSA_JWK from key: %s)r   ÚRSAr   ÚRS256r5   ÚRS384r7   ÚRS512r9   r:   r;   r<   ÚRSA1_5ÚRSA_OAEPÚRSA_OAEP_256r
   r=   r>   r?   rA   rB   rC   rD   rE   rF   Ú
startswithÚ_process_certr   rG   r   rH   rI   s        rN   rO   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ˆÔ!ô �C˜Ô(¬W°SÐ:JÔ-KÔPWÐX[Ð]lÔPmØ #ˆ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   Å<"G> Æ G Ç*G;Ç8G> Ç:G;Ç;G> Ç>	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 )NrQ   r¹   z1Incorrect key type. Expected: 'RSA', Received: %srM   é   Únra   )ÚpÚqÚdpÚdqÚqic              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wrS   rT   rU   s     €rN   rY   z2CryptographyRSAKey._process_jwk.<locals>.<genexpr>  s   øè ø€ Ð7©, Q�1˜”=©,ùrZ   c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wrS   rT   rU   s     €rN   rY   z2CryptographyRSAKey._process_jwk.<locals>.<genexpr>  s   øè ø€ Ð?±,¨Q˜1 œ=±,ùrZ   z2Precomputed private key parameters are incomplete.rÅ   rÆ   rÇ   rÈ   rÉ   )r:   r   r   r   ÚRSAPublicNumbersri   r=   Úanyrb   Úrsa_recover_prime_factorsÚrsa_crt_dmp1Úrsa_crt_dmq1Úrsa_crt_iqmpÚRSAPrivateNumbersrh   )rJ   rX   rM   rÄ   rk   ra   Úextra_paramsrÅ   rÆ   rÇ   rÈ   rÉ   rl   s    `           rN   rC   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ÐCrm   c                 ób   — t        || j                  «       «      }|j                  «       | _        y rS   )r   r=   ri   r?   )rJ   rK   s     rN   rÁ   z CryptographyRSAKey._process_cert,  s&   € Ü'¨¨T×-FÑ-FÓ-HÓIˆØŸN™NÓ,ˆÕrm   c                 óº   — 	 | j                   j                  |t        j                  «       | j	                  «       «      }|S # t
        $ r}t        |«      ‚d }~ww xY wrS   )r?   rˆ   r
   ÚPKCS1v15r;   rH   r   )rJ   rŠ   r‹   rM   s       rN   rˆ   zCryptographyRSAKey.sign0  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Úwarnri   r?   r�   r
   rÖ   r;   r   )rJ   rŠ   rŽ   s      rN   r�   zCryptographyRSAKey.verify7  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‘   rs   s    rN   r’   zCryptographyRSAKey.is_publicA  r“   rm   c                 óŽ   — | j                  «       r| S | j                  | j                  j                  «       | j                  «      S rS   r•   rs   s    rN   ri   zCryptographyRSAKey.public_keyD  r—   rm   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Þ   rG   r?   r,   rž   rŸ   r¢   rÝ   r£   r-   r¤   )rJ   Ú
pem_formatÚfmtr¥   s       rN   r.   zCryptographyRSAKey.to_pemI  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ð /ó 
ð 	
rm   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­   rQ   rÄ   rM   )ra   rÅ   rÆ   rÇ   rÈ   rÉ   )r’   r?   ri   r<   r$   r®   rÄ   r@   rM   Úupdater¯   ra   rÅ   rÆ   Údmp1Údmq1Úiqmp)rJ   ri   r±   s      rN   r²   zCryptographyRSAKey.to_dict_  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ñô	ð ˆrm   c                 óŒ   — 	 | j                   j                  || j                  «      }|S # t        $ r}t	        |«      ‚d }~ww xY wrS   )r?   Úencryptr
   rH   r   )rJ   Úkey_dataÚwrapped_keyrM   s       rN   Úwrap_keyzCryptographyRSAKey.wrap_keyz  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rS   )r?   Údecryptr
   rH   r   )rJ   ré   Úunwrapped_keyrM   s       rN   Ú
unwrap_keyzCryptographyRSAKey.unwrap_key‚  sC   € ð	Ø ×-Ñ-×5Ñ5°kÀ4Ç<Á<ÓPˆMØ Ð øÜò 	Ü˜1“+Ðûð	ús   ‚'* ª	A³>¾A)rÝ   )r³   r´   rµ   r   r5   r7   r9   r
   rÖ   r½   ÚOAEPÚMGF1ÚSHA1r¾   r¿   r   rO   rC   rÁ   rˆ   r�   r’   ri   r.   r²   rê   rî   rT   rm   rN   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órm   r·   c                   ól  — 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ej<                  j>                  dz  ddœZ d„ Z!d„ Z"dd„Z#dd„Z$d	„ Z%d
„ Z&y)ÚCryptographyAESKeyNr„   é   )ÚCBCÚGCMc                 óÒ  — |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_PSEUDOr<   ÚMODESr:   Ú_modeÚKEY_128r}   ÚKEY_192ÚKEY_256ÚKEY_384ÚKEY_512Ú_key©rJ   rK   rL   s      rN   rO   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àˆ�	rm   c                 óL   — | j                   dt        | j                  «      dœ}|S )NÚoct©r­   rQ   rW   )r<   r    r  )rJ   r±   s     rN   r²   zCryptographyAESKey.to_dictÃ  s!   € Ø—‘¨uÔ;KÈDÏIÉIÓ;VÑWˆØˆrm   c                 óL  — t        |«      }	 | j                  j                  | j                  j                  t
        j                  j                  «      }t        |«      }| 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ö   rø   iðÿÿÿ©r2   )r!   ÚIV_BYTE_LENGTH_MODE_MAPr:   r  r‡   r   rý   Ú
block_sizer&   r   ÚAESGCMr  rç   r}   r   r   Ú	encryptorr   Úpadderrâ   ÚfinalizerH   r   )rJ   Ú
plain_textÚaadÚiv_byte_lengthÚivÚmodeÚcipherÚcipher_text_and_tagÚcipher_textÚauth_tagr  r  Úpadded_datarM   s                 rN   rç   zCryptographyAESKey.encryptÇ  sY  € Ü" :Ó.ˆ
ð	Ø!×9Ñ9×=Ñ=¸d¿j¹j¿o¹oÌzÏ~É~×OhÑOhÓiˆNÜ! .Ó1ˆ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<F
 Æ
	F#ÆFÆF#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‡   rG   r   r  r  rì   r   r   r   r   rý   r   Ú	decryptorrâ   r  r   r  ÚunpadderrH   )rJ   r  r  r  Útagr  r  r  r  r   Úpadded_plain_textr!  rM   s                rN   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 rS   )r!   r   r  r   )rJ   rè   r  s      rN   rê   zCryptographyAESKey.wrap_keyù  s'   € Ü  Ó*ˆÜ" 4§9¡9¨h¼Ó8IÓJˆØÐrm   c                 ó”   — t        |«      }	 t        | j                  |t        «       «      }|S # t        $ r}t        |«      ‚d }~ww xY wrS   )r!   r   r  r   r   r   )rJ   ré   r  Úcauses       rN   rî   zCryptographyAESKey.unwrap_keyþ  sJ   € Ü# KÓ0ˆð	"Ü'¨¯	©	°;ÄÓ@QÓRˆJð Ðøô ò 	"Ü˜5“/Ð!ûð	"ús   �. ®	A·AÁArS   )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ö   rõ   r  r   rý   r  r  rO   r²   rç   rì   rê   rî   rT   rm   rN   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ð$ '1§n¡n×&?Ñ&?À1Ñ&DÈWÑUÐòò,óó.ò6ó
rm   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«      }t        |«      st        |«      rt        d«      ‚|| _
        y )Nr+   z+Expecting a string- or bytes-formatted key.r/   zdThe specified key is an asymmetric key or x509 certificate and should not be used as an HMAC secret.)r   ÚHMACr   r<   ÚALG_MAPr:   Ú	_hash_algrA   rB   rC   r?   rD   rF   rE   r"   r#   r	  s      rN   rO   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ä˜Ô¤¨C¤Üð9óð ð
  ˆÕrm   c                 óØ   — |j                  d«      dk(  st        d|j                  d«      z  «      ‚|j                  d«      }|j                  d«      }t        |«      }t	        |«      }|S )NrQ   r  z1Incorrect key type. Expected: 'oct', Received: %srW   r/   )r:   r   rE   rF   r   )rJ   rX   rW   s      rN   rC   z CryptographyHMACKey._process_jwk'  se   € Ø�|‰|˜EÓ" eÒ+ÜÐNÐQY×Q]ÑQ]Ð^cÓQdÑdÓeÐeà�L‰L˜ÓˆØ�H‰H�WÓˆÜ�!‹HˆÜ˜QÓˆàˆrm   c                 óf   — | j                   dt        | j                  «      j                  d«      dœS )Nr  r¬   r  )r<   r    r?   r@   rs   s    rN   r²   zCryptographyHMACKey.to_dict2  s/   € à—?‘?ØÜ! $×"3Ñ"3Ó4×;Ñ;¸GÓDñ
ð 	
rm   c                 óÆ   — t        |«      }t        j                  | j                  | j                  t        «       ¬«      }|j                  |«       |j                  «       }|S )Nr  )r!   r   r:  r?   r<  r   râ   r  )rJ   rŠ   Úhr‹   s       rN   rˆ   zCryptographyHMACKey.sign9  sG   € Ü˜CÓ ˆÜ�I‰I�d×'Ñ'¨¯©ÄÓARÔSˆØ	�‰�ŒØ—J‘J“Lˆ	ØÐrm   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   r:  r?   r<  r   râ   r�   r   )rJ   rŠ   rŽ   r@  Úverifieds        rN   r�   zCryptographyHMACKey.verify@  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   r5   ÚHS384r7   ÚHS512r9   r;  rO   rC   r²   rˆ   r�   rT   rm   rN   r8  r8    sd   „ ñð
 ×Ñ  §¡£°*×2BÑ2BÀMÀFÇMÁMÃOÐU_×UeÑUeÐgtÐgm×gtÑgtÓgvÐw€Gò ò0	ò
òó
rm   r8  ):rp   rØ   Úcryptography.exceptionsr   r   Úcryptography.hazmat.backendsr   Ú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"   r#   r$   Ú r&   Úbaser'   Ú_bindingr)   r·   ró   r8  rT   rm   rN   Ú<module>rX     s•   ðÛ Û ç @Ý 8ß FÑ Fß FÑ Fß fß RÓ Rß ^Ñ ^Ý 8ß bÝ +Ý 7å "ß +÷÷ ñ õ Ý à€ôg˜ô gôT|˜ô |ô~z˜ô zôzC˜#õ Crm   