§
    YøÁiëX  ã                   ó”  — 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¦  «        Z8dS )é    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                             d| ¦  «        }t           j                             || ¦  «         t           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      úl/var/www/html/jarvis.com/web/backend/venv/lib/python3.11/site-packages/jose/backends/cryptography_backend.pyÚget_random_bytesr1      sh   € õ ÐÝ‘9”9ˆå
Œ,×
Ò
˜8 YÑ
/Ô
/€CÝ„L×Ò˜C Ñ+Ô+Ð+Ý”×$Ò$ S¨)Ñ4Ô4°Q°Q°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dS )ÚCryptographyECKeyc                 óÄ  — |t           j        vrt          d|z  ¦  «        ‚t           j        | j        t           j        | j        t           j        | j        i 	                    |¦  «        | _
        || _        || _        t          |d¦  «        st          |d¦  «        r	|| _        d S t          |d¦  «        r'|                     ¦   «                              d¦  «        }t#          |t$          ¦  «        r|                      |¦  «        | _        d S t#          |t(          ¦  «        r|                     d¦  «        }t#          |t,          ¦  «        r„	 	 t/          ||                      ¦   «         ¦  «        }n4# t0          $ r' t3          |d |                      ¦   «         ¬¦  «        }Y nw xY wn!# t4          $ r}t          |¦  «        ‚d }~ww xY w|| _        d S t          d|z  ¦  «        ‚)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   sæ  € Ø�JœMÐ)Ð)ÝÐGÈ)ÑSÑTÔTÐTõ Ô˜dœkÝÔ˜dœkÝÔ˜dœkð
÷ Š#ˆi‰.Œ.ð	 	Œð
 $ˆŒà$8ˆÔ!å�3˜Ñ'Ô'ð 	­7°3¸Ñ+HÔ+Hð 	Ø #ˆDÔØˆFå�3˜Ñ!Ô!ð 	/à—*’*‘,”,×%Ò% gÑ.Ô.ˆCå�c�4Ñ Ô ð 	Ø $× 1Ò 1°#Ñ 6Ô 6ˆDÔØˆFå�c�3ÑÔð 	&Ø—*’*˜WÑ%Ô%ˆCå�c�5Ñ!Ô!ð 	ð"ðhÝ-¨c°4×3LÒ3LÑ3NÔ3NÑOÔO�C�CøÝ!ð hð hð hÝ.¨s¸TÈ4×KdÒKdÑKfÔKfÐgÑgÔg�C�C�Cðhøøøøøåð "ð "ð "Ý˜q‘k”kÐ!øøøøð"øøøð !$ˆDÔØˆFåÐ>ÀÑDÑEÔEÐEs6   Å"E1 Å0F& Å1.F"ÆF& Æ!F"Æ"F& Æ&
GÆ0F?Æ?Gc                 ó
  ‡— ‰                      d¦  «        dk    s%t          d‰                      d¦  «        z  ¦  «        ‚t          ˆfd„dD ¦   «         ¦  «        st          d¦  «        ‚t          ‰                      d¦  «        ¦  «        }t          ‰                      d¦  «        ¦  «        }t          j        t          j        t          j        d	œ‰d
                  }t	          j        || |¦   «         ¦  «        }d‰v r^t          ‰                      d¦  «        ¦  «        }t	          j	        ||¦  «        }| 
                    |                      ¦   «         ¦  «        S |                     |                      ¦   «         ¦  «        S )NÚktyr>   z0Incorrect key type. Expected: 'EC', Received: %sc              3   ó    •K  — | ]}|‰v V — Œ	d S ©N© ©Ú.0ÚkÚjwk_dicts     €r0   ú	<genexpr>z1CryptographyECKey._process_jwk.<locals>.<genexpr>f   s'   øè è € Ð<Ð< Q�1˜�=Ð<Ð<Ð<Ð<Ð<Ð<r2   )ÚxÚyÚcrvz Mandatory parameters are missingrd   re   )úP-256úP-384úP-521rf   Úd)rE   r   Úallr   r
   Ú	SECP256R1Ú	SECP384R1Ú	SECP521R1ÚEllipticCurvePublicNumbersÚEllipticCurvePrivateNumbersÚprivate_keyrH   Ú
public_key)rU   rb   rd   re   ÚcurveÚpublicrj   Úprivates    `      r0   rN   zCryptographyECKey._process_jwkb   s^  ø€ Ø�|Š|˜EÑ"Ô" dÒ*Ð*ÝÐMÐPX×P\ÒP\Ð]bÑPcÔPcÑcÑdÔdÐdåÐ<Ð<Ð<Ð<Ð*;Ð<Ñ<Ô<Ñ<Ô<ð 	?ÝÐ=Ñ>Ô>Ð>å˜8Ÿ<š<¨Ñ,Ô,Ñ-Ô-ˆÝ˜8Ÿ<š<¨Ñ,Ô,Ñ-Ô-ˆå”\Ý”\Ý”\ð
ð 
ð �5Œ/ô	ˆõ Ô.¨q°!°U°U±W´WÑ=Ô=ˆà�(ˆ?ˆ?Ý˜xŸ|š|¨CÑ0Ô0Ñ1Ô1ˆAÝÔ4°Q¸Ñ?Ô?ˆGà×&Ò& t×'@Ò'@Ñ'BÔ'BÑCÔCÐCà×$Ò$ T×%>Ò%>Ñ%@Ô%@ÑAÔAÐAr2   c                 ó^   — 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˜TÔ.Ô7¸#Ñ=Ñ>Ô>Ñ?Ô?Ð?r2   c                 ó�   — t          |¦  «        \  }}|                      ¦   «         }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‚   sF   € å# MÑ2Ô2‰ˆˆ1Ø×5Ò5Ñ7Ô7ÐÝ˜AÐ/Ñ0Ô0µ<ÀÐCSÑ3TÔ3TÑTÐTr2   c                 óB  — |                       ¦   «         }t          |¦  «        t          d|z  ¦  «        k    rt          d¦  «        ‚|d|…         }||d…         }t                               |d¦  «        }t                               |d¦  «        }t          ||¦  «        S )z4Convert signature from RAW encoding to DER encoding.r   zInvalid signatureNÚbig)r|   Úlenrw   rR   Ú
from_bytesr   )rU   Úraw_signaturer�   Úr_bytesÚs_bytesr   r€   s          r0   Ú_raw_to_derzCryptographyECKey._raw_to_derˆ   sœ   € à×5Ò5Ñ7Ô7ÐÝˆ}ÑÔ¥ QÐ)9Ñ%9Ñ!:Ô!:Ò:Ð:ÝÐ0Ñ1Ô1Ð1àÐ 1Ð!1Ð 1Ô2ˆØÐ 0Ð 1Ð 1Ô2ˆÝ�NŠN˜7 EÑ*Ô*ˆÝ�NŠN˜7 EÑ*Ô*ˆÝ# A qÑ)Ô)Ð)r2   c                 óN  — | j         j        dz  | j        j        j        k    r0t          d| j        j        j        d| j         j        z  fz  ¦  «        ‚| j                             |t          j	        |                       ¦   «         ¦  «        ¦  «        }|  
                    |¦  «        S )Né   z1this curve (%s) is too short for your digest (%d))rF   Údigest_sizerJ   rs   rz   Ú	TypeErrorÚnameÚsignr
   ÚECDSAr‚   )rU   ÚmsgÚ	signatures      r0   r�   zCryptographyECKey.sign”   s˜   € ØŒ=Ô$ qÑ(¨4Ô+<Ô+BÔ+KÒKÐKÝð'Ø*.Ô*;Ô*AÔ*FÈÈDÌMÔLeÑHeÐ)fñgñô ð ð Ô%×*Ò*¨3µ´¸¿º¹¼Ñ0IÔ0IÑJÔJˆ	Ø×Ò 	Ñ*Ô*Ð*r2   c                 óÔ   — 	 |                       |¦  «        }| j                             ||t          j        |                      ¦   «         ¦  «        ¦  «         dS # t          $ r Y dS w xY w)NTF)rŠ   rJ   Úverifyr
   r‘   rF   rS   )rU   r’   Úsigr“   s       r0   r•   zCryptographyECKey.verify�   sn   € ð	Ø×(Ò(¨Ñ-Ô-ˆIØÔ×$Ò$ Y°µR´X¸d¿mºm¹o¼oÑ5NÔ5NÑOÔOÐOØ�4øÝð 	ð 	ð 	Ø�5�5ð	øøøs   ‚AA Á
A'Á&A'c                 ó,   — t          | j        d¦  «        S ©Nr7   ©rI   rJ   r{   s    r0   Ú	is_publiczCryptographyECKey.is_public¥   ó   € Ý�tÔ(¨.Ñ9Ô9Ð9r2   c                 ó’   — |                       ¦   «         r| S |                      | j                             ¦   «         | j        ¦  «        S r]   ©rš   Ú	__class__rJ   rr   rG   r{   s    r0   rr   zCryptographyECKey.public_key¨   ó>   € Ø�>Š>ÑÔð 	ØˆKØ�~Š~˜dÔ/×:Ò:Ñ<Ô<¸d¼oÑNÔNÐNr2   c                 ó>  — |                       ¦   «         r<| j                             t          j        j        t          j        j        ¬¦  «        }|S | 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½MÔ<VÔ<kð 1ñ ô ˆCð ˆJØÔ×-Ò-Ý"Ô+Ô/Ý Ô.ÔAÝ!.Ô!;Ñ!=Ô!=ð .ñ 
ô 
ˆð
 ˆ
r2   c                 ó„  — |                       ¦   «         s| j                             ¦   «         }n| j        }ddddœ| j        j        j                 }| j        j        j        dz   dz  }| j        d|t          |                     ¦   «         j	        |¬¦  «         
                    d	¦  «        t          |                     ¦   «         j        |¬¦  «         
                    d	¦  «        d
œ}|                       ¦   «         sE| j                             ¦   «         j        }t          ||¬¦  «         
                    d	¦  «        |d<   |S )Nrg   rh   ri   )Ú	secp256r1Ú	secp384r1Ú	secp521r1é   rŒ   r>   )ÚsizeÚASCII)Úalgr[   rf   rd   re   rj   )rš   rJ   rr   rs   r�   rz   rG   r#   Úpublic_numbersrd   rK   re   Úprivate_numbersÚprivate_value)rU   rr   rf   rz   Údatar¸   s         r0   Úto_dictzCryptographyECKey.to_dictº   s@  € Ø�~Š~ÑÔð 	+ØÔ*×5Ò5Ñ7Ô7ˆJˆJàÔ*ˆJð !Ø Ø ð
ð 
ð Ô
Ô
!Ô
&ô	(ˆð Ô%Ô+Ô4°qÑ8¸QÑ>ˆð ”?ØØÝ 
× 9Ò 9Ñ ;Ô ;Ô =ÀHÐMÑMÔM×TÒTÐU\Ñ]Ô]Ý 
× 9Ò 9Ñ ;Ô ;Ô =ÀHÐMÑMÔM×TÒTÐU\Ñ]Ô]ð
ð 
ˆð �~Š~ÑÔð 	UØ Ô-×=Ò=Ñ?Ô?ÔMˆMÝ& }¸8ÐDÑDÔD×KÒKÈGÑTÔTˆD�‰Iàˆr2   N)Ú__name__Ú
__module__Ú__qualname__r   r@   rB   rD   r   rY   rN   r|   r‚   rŠ   r�   r•   rš   rr   r9   rº   r^   r2   r0   r4   r4   0   sç   € € € € € ØŒ]€FØŒ]€FØŒ]€Fà<Kð +Fð +Fð +Fð +FðZBð Bð Bð2@ð @ð @ðUð Uð Uð
*ð 
*ð 
*ð+ð +ð +ðð ð ð:ð :ð :ðOð Oð 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dS )ÚCryptographyRSAKeyNc                 óN  — |t           j        vrt          d|z  ¦  «        ‚t           j        | j        t           j        | j        t           j        | j        i 	                    |¦  «        | _
        || _        t           j        | j        t           j        | j        t           j        | j        i 	                    |¦  «        | _        || _        t#          |d¦  «        rt#          |d¦  «        r	|| _        d S t'          |t(          ¦  «        r|                      |¦  «        | _        d S t'          |t,          ¦  «        r|                     d¦  «        }t'          |t0          ¦  «        r³	 |                     d¦  «        r|                      |¦  «         d S 	 t7          ||                      ¦   «         ¦  «        | _        n9# t8          $ r, t;          |d |                      ¦   «         ¬¦  «        | _        Y nw xY wn!# t<          $ r}t          |¦  «        ‚d }~ww xY wd S t          d|z  ¦  «        ‚)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Ð*Ð*ÝÐGÈ)ÑSÑTÔTÐTõ Ô˜dœkÝÔ˜dœkÝÔ˜dœkð
÷ Š#ˆi‰.Œ.ð	 	Œð
 $ˆŒõ Ô˜tœ{ÝÔ ¤ÝÔ# TÔ%6ð
÷ Š#ˆi‰.Œ.ð	 	Œð %9ˆÔ!õ �3˜Ñ'Ô'ð 	­G°CÐ9IÑ,JÔ,Jð 	Ø #ˆDÔØˆFå�c�4Ñ Ô ð 	Ø $× 1Ò 1°#Ñ 6Ô 6ˆDÔØˆFå�c�3ÑÔð 	&Ø—*’*˜WÑ%Ô%ˆCå�c�5Ñ!Ô!ð 	ð
"Ø—>’>Ð"@ÑAÔAð Ø×&Ò& sÑ+Ô+Ð+Ø�FðvÝ(;¸CÀ×AZÒAZÑA\ÔA\Ñ(]Ô(]�DÔ%Ð%øÝ!ð vð vð vÝ(<¸SÈ4ÐY]×YrÒYrÑYtÔYtÐ(uÑ(uÔ(u�DÔ%Ð%Ð%ðvøøøøøåð "ð "ð "Ý˜q‘k”kÐ!øøøøð"øøøàˆFåÐ@À3ÑFÑGÔGÐGs<   Å#*G2 Æ'F8 Æ7G2 Æ83G.Ç+G2 Ç-G.Ç.G2 Ç2
HÇ<HÈHc           	      óf  ‡— ‰                      d¦  «        dk    s%t          d‰                      d¦  «        z  ¦  «        ‚t          ‰                      dd¦  «        ¦  «        }t          ‰                      d¦  «        ¦  «        }t          j        ||¦  «        }d‰vr'|                     |                      ¦   «         ¦  «        S t          ‰                      d¦  «        ¦  «        }g d¢}t          ˆfd	„|D ¦   «         ¦  «        r”t          ˆfd
„|D ¦   «         ¦  «        st          d¦  «        ‚t          ‰d         ¦  «        }t          ‰d         ¦  «        }t          ‰d         ¦  «        }	t          ‰d         ¦  «        }
t          ‰d         ¦  «        }nXt          j	        |||¦  «        \  }}t          j
        ||¦  «        }	t          j        ||¦  «        }
t          j        ||¦  «        }t          j        ||||	|
||¦  «        }|                     |                      ¦   «         ¦  «        S )Nr[   rÂ   z1Incorrect key type. Expected: 'RSA', Received: %srX   é   Únrj   )ÚpÚqÚdpÚdqÚqic              3   ó    •K  — | ]}|‰v V — Œ	d S r]   r^   r_   s     €r0   rc   z2CryptographyRSAKey._process_jwk.<locals>.<genexpr>"  s'   øè è € Ð7Ð7 Q�1˜�=Ð7Ð7Ð7Ð7Ð7Ð7r2   c              3   ó    •K  — | ]}|‰v V — Œ	d S r]   r^   r_   s     €r0   rc   z2CryptographyRSAKey._process_jwk.<locals>.<genexpr>$  s'   øè è € Ð?Ð?¨Q˜1 ˜=Ð?Ð?Ð?Ð?Ð?Ð?r2   z2Precomputed private key parameters are incomplete.rÎ   rÏ   rÐ   rÑ   rÒ   )rE   r   r   r   ÚRSAPublicNumbersrr   rH   Úanyrk   Úrsa_recover_prime_factorsÚrsa_crt_dmp1Úrsa_crt_dmq1Úrsa_crt_iqmpÚRSAPrivateNumbersrq   )rU   rb   rX   rÍ   rt   rj   Úextra_paramsrÎ   rÏ   rÐ   rÑ   rÒ   ru   s    `           r0   rN   zCryptographyRSAKey._process_jwk  s  ø€ Ø�|Š|˜EÑ"Ô" eÒ+Ð+ÝÐNÐQY×Q]ÒQ]Ð^cÑQdÔQdÑdÑeÔeÐeå˜8Ÿ<š<¨¨SÑ1Ô1Ñ2Ô2ˆÝ˜8Ÿ<š<¨Ñ,Ô,Ñ-Ô-ˆÝÔ% a¨Ñ+Ô+ˆà�hÐÐØ×$Ò$ T×%>Ò%>Ñ%@Ô%@ÑAÔAÐAõ ˜xŸ|š|¨CÑ0Ô0Ñ1Ô1ˆAà7Ð7Ð7ˆLåÐ7Ð7Ð7Ð7¨,Ð7Ñ7Ô7Ñ7Ô7ð ,åÐ?Ð?Ð?Ð?°,Ð?Ñ?Ô?Ñ?Ô?ð Yõ #Ð#WÑXÔXÐXå" 8¨C¤=Ñ1Ô1�Ý" 8¨C¤=Ñ1Ô1�Ý# H¨T¤NÑ3Ô3�Ý# H¨T¤NÑ3Ô3�Ý# H¨T¤NÑ3Ô3��õ Ô4°Q¸¸1Ñ=Ô=‘��1ÝÔ% a¨Ñ+Ô+�ÝÔ% a¨Ñ+Ô+�ÝÔ% a¨Ñ+Ô+�åÔ+¨A¨q°!°R¸¸RÀÑHÔHˆGà×&Ò& t×'@Ò'@Ñ'BÔ'BÑCÔCÐCr2   c                 ó|   — t          ||                      ¦   «         ¦  «        }|                     ¦   «         | _        d S r]   )r   rH   rr   rJ   )rU   rV   s     r0   rÊ   z CryptographyRSAKey._process_cert;  s5   € Ý'¨¨T×-FÒ-FÑ-HÔ-HÑIÔIˆØŸNšNÑ,Ô,ˆÔÐÐr2   c                 óÊ   — 	 | j                              |t          j        ¦   «         |                      ¦   «         ¦  «        }n!# t
          $ r}t          |¦  «        ‚d }~ww xY w|S r]   )rJ   r�   r   ÚPKCS1v15rF   rS   r   )rU   r’   r“   rX   s       r0   r�   zCryptographyRSAKey.sign?  se   € ð	ØÔ)×.Ò.¨sµGÔ4DÑ4FÔ4FÈÏÊÉÌÑXÔXˆIˆIøÝð 	ð 	ð 	Ý˜1‘+”+Ðøøøøð	øøøàÐs   ‚?A Á
A ÁAÁA c                 ó  — |                       ¦   «         st          j        d¦  «         	 |                      ¦   «         j                             ||t          j        ¦   «         |                      ¦   «         ¦  «         dS # t          $ r Y dS w xY w)NzKAttempting to verify a message with a private key. This is not recommended.TF)
rš   ÚwarningsÚwarnrr   rJ   r•   r   rß   rF   r   )rU   r’   r–   s      r0   r•   zCryptographyRSAKey.verifyF  s�   € Ø�~Š~ÑÔð 	lÝŒMÐjÑkÔkÐkð	Ø�OŠOÑÔÔ*×1Ò1°#°s½GÔ<LÑ<NÔ<NÐPT×P]ÒP]ÑP_ÔP_Ñ`Ô`Ð`Ø�4øÝð 	ð 	ð 	Ø�5�5ð	øøøs   ªAA> Á>
BÂBc                 ó,   — t          | j        d¦  «        S r˜   r™   r{   s    r0   rš   zCryptographyRSAKey.is_publicP  r›   r2   c                 ó’   — |                       ¦   «         r| S |                      | j                             ¦   «         | j        ¦  «        S r]   r�   r{   s    r0   rr   zCryptographyRSAKey.public_keyS  rŸ   r2   ÚPKCS8c                 ó  — |                       ¦   «         ro|dk    rt          j        j        }n*|dk    rt          j        j        }nt          d|z  ¦  «        ‚| j                             t          j        j	        |¬¦  «        }|S |dk    rt          j
        j        }n*|dk    rt          j
        j        }nt          d|z  ¦  «        ‚| j                             t          j        j	        |t          j        ¦   «         ¬¦  «        S )Nrå   Ú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ÔE��Ø˜wÒ&Ð&Ý#Ô0Ô6��å Ð!?À*Ñ!LÑMÔMÐMØÔ#×0Ò0½-Ô:PÔ:TÐ]`Ð0ÑaÔaˆCØˆJà˜Ò Ð ÝÔ-Ô3ˆCˆCØ˜7Ò"Ð"ÝÔ-Ô@ˆCˆCåÐ;¸jÑHÑIÔIÐIàÔ ×.Ò.Ý"Ô+Ô/¸ÕR_ÔRlÑRnÔRnð /ñ 
ô 
ð 	
r2   c                 ó–  — |                       ¦   «         s| j                             ¦   «         }n| j        }| j        dt	          |                     ¦   «         j        ¦  «                             d¦  «        t	          |                     ¦   «         j        ¦  «                             d¦  «        dœ}|                       ¦   «         �s„| 	                    t	          | j         
                    ¦   «         j        ¦  «                             d¦  «        t	          | j         
                    ¦   «         j        ¦  «                             d¦  «        t	          | j         
                    ¦   «         j        ¦  «                             d¦  «        t	          | j         
                    ¦   «         j        ¦  «                             d¦  «        t	          | j         
                    ¦   «         j        ¦  «                             d¦  «        t	          | j         
                    ¦   «         j        ¦  «                             d¦  «        dœ¦  «         |S )NrÂ   r´   )rµ   r[   rÍ   rX   )rj   rÎ   rÏ   rÐ   rÑ   rÒ   )rš   rJ   rr   rG   r#   r¶   rÍ   rK   rX   Úupdater·   rj   rÎ   rÏ   Údmp1Údmq1Úiqmp)rU   rr   r¹   s      r0   rº   zCryptographyRSAKey.to_dictn  sÛ  € Ø�~Š~ÑÔð 	+ØÔ*×5Ò5Ñ7Ô7ˆJˆJàÔ*ˆJð ”?ØÝ 
× 9Ò 9Ñ ;Ô ;Ô =Ñ>Ô>×EÒEÀgÑNÔNÝ 
× 9Ò 9Ñ ;Ô ;Ô =Ñ>Ô>×EÒEÀgÑNÔNð	
ð 
ˆð �~Š~ÑÔñ 
	Ø�KŠKå'¨Ô(9×(IÒ(IÑ(KÔ(KÔ(MÑNÔN×UÒUÐV]Ñ^Ô^Ý'¨Ô(9×(IÒ(IÑ(KÔ(KÔ(MÑNÔN×UÒUÐV]Ñ^Ô^Ý'¨Ô(9×(IÒ(IÑ(KÔ(KÔ(MÑNÔN×UÒUÐV]Ñ^Ô^Ý(¨Ô):×)JÒ)JÑ)LÔ)LÔ)QÑRÔR×YÒYÐZaÑbÔbÝ(¨Ô):×)JÒ)JÑ)LÔ)LÔ)QÑRÔR×YÒYÐZaÑbÔbÝ(¨Ô):×)JÒ)JÑ)LÔ)LÔ)QÑRÔR×YÒYÐZaÑbÔbðð ñ	ô 	ð 	ð ˆr2   c                 óŒ   — 	 | j                              || j        ¦  «        }n!# t          $ r}t	          |¦  «        ‚d }~ww xY w|S r]   )rJ   Úencryptr   rS   r   )rU   Úkey_dataÚwrapped_keyrX   s       r0   Úwrap_keyzCryptographyRSAKey.wrap_key‰  sV   € ð	ØÔ+×3Ò3°H¸d¼lÑKÔKˆKˆKøÝð 	ð 	ð 	Ý˜1‘+”+Ðøøøøð	øøøð Ðs   ‚ # £
A­<¼Ac                 óŠ   — 	 | 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‘  sR   € ð	Ø Ô-×5Ò5°kÀ4Ä<ÑPÔ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š   rr   r9   rº   ró   r÷   r^   r2   r0   r¿   r¿   Ú   sZ  € € € € € ØŒ]€FØŒ]€FØŒ]€FàˆWÔÑÔ€FØˆwŒ|˜L˜GœL¨¨¬©¬Ñ7Ô7¸¸¼¹¼ÈÑMÔM€HØ�7”<  ¤¨]¨V¬]©_¬_Ñ =Ô =¸}¸v¼}¹¼ÐPTÑUÔU€Là<Kð -Hð -Hð -Hð -Hð^'Dð 'Dð 'DðR-ð -ð -ðð ð ðð ð ð:ð :ð :ðOð Oð Oð

ð 
ð 
ð 
ð,ð ð ð6ð ð ðð ð ð ð r2   r¿   c                   ót  — 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j        ej	        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej
        ej        ej        ej        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"dS )
ÚCryptographyAESKeyNc                 óð  — |t           j        vrt          d|z  ¦  «        ‚|t           j                             t           j        ¦  «        vrt          d|z  ¦  «        ‚|| _        | j                             | j        ¦  «        | _	        || j
        v r%t          |¦  «        dk    rt          d|› �¦  «        ‚|| j        v r%t          |¦  «        dk    rt          d|› �¦  «        ‚|| j        v r%t          |¦  «        dk    rt          d|› �¦  «        ‚|| j        v r%t          |¦  «        d	k    rt          d
|› �¦  «        ‚|| j        v r%t          |¦  «        dk    rt          d|› �¦  «        ‚|| _        d S )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__º  sy  € Ø�JœNÐ*Ð*ÝÐ<¸yÑHÑIÔIÐIØ�JÔ0×6Ò6µzÔ7LÑMÔMÐMÐMÝÐ<¸yÑHÑIÔIÐIà#ˆŒØ”Z—^’^ D¤OÑ4Ô4ˆŒ
à˜œÐ$Ð$­¨S©¬°Rª¨ÝÐE¸)ÐEÐEÑFÔFÐFØ˜$œ,Ð&Ð&­3¨s©8¬8°rª>¨>ÝÐE¸)ÐEÐEÑFÔFÐFØ˜$œ,Ð&Ð&­3¨s©8¬8°rª>¨>ÝÐE¸)ÐEÐEÑFÔFÐFØ˜$œ,Ð&Ð&­3¨s©8¬8°rª>¨>ÝÐE¸)ÐEÐEÑFÔFÐFØ˜$œ,Ð&Ð&­3¨s©8¬8°rª>¨>ÝÐE¸)ÐEÐEÑFÔFÐFàˆŒ	ˆ	ˆ	r2   c                 ó@   — | 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Ñ;VÔ;VÐWÐWˆØˆr2   c                 ó<  — t          |¦  «        }	 t          t          j        j        dz  ¦  «        }|                      |¦  «        }|j        dk    rUt          j        | j	        ¦  «        }| 
                    |||¦  «        }|d t          |¦  «        dz
  …         }|dd …         }nÑt          t          j        | j	        ¦  «        |t          ¦   «         ¬¦  «        }|                     ¦   «         }	t          t          j        j        ¦  «                             ¦   «         }
|
                     |¦  «        }||
                     ¦   «         z  }|	                     |¦  «        |	                     ¦   «         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Ô  sw  € Ý" :Ñ.Ô.ˆ
ð	Ý!¥*¤.Ô";¸qÑ"@ÑAÔAˆBØ—:’:˜b‘>”>ˆDØŒy˜EÒ!Ð!Ýœ T¤YÑ/Ô/�Ø&,§n¢n°R¸ÀSÑ&IÔ&IÐ#Ø1Ð2QµCÐ8KÑ4LÔ4LÈrÑ4QÐ2QÔR�Ø.¨s¨t¨tÔ4��å¥
¤¨t¬yÑ 9Ô 9¸4ÍÑIZÔIZÐ[Ñ[Ô[�Ø"×,Ò,Ñ.Ô.�	Ý�zœ~Ô8Ñ9Ô9×@Ò@ÑBÔB�Ø$Ÿmšm¨JÑ7Ô7�Ø˜vŸšÑ0Ô0Ñ0�Ø'×.Ò.¨{Ñ;Ô;¸i×>PÒ>PÑ>RÔ>RÑR�Ø�Ø�{ HÐ,Ð,øÝð 	ð 	ð 	Ý˜1‘+”+Ðøøøøð	øøøs   ‘E+E= Å=
FÆFÆFc                 ó2  — t          |¦  «        }	 t          |¦  «        }|                      |¦  «        }|j        dk    re|€t          d¦  «        ‚t	          j        | j        ¦  «        }||z   }	 |                     |||¦  «        }nî# t          $ r t          d¦  «        ‚w xY wt          t          j        | j        ¦  «        |t          ¦   «         ¬¦  «        }|                     ¦   «         }	|	                     |¦  «        }
|
|	                     ¦   «         z  }
t#          t          j        j        ¦  «                             ¦   «         }|                     |
¦  «        }||                     ¦   «         z  }|S # 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ê  s�  € Ý# KÑ0Ô0ˆð	Ý˜rÑ"Ô"ˆBØ—:’:˜b‘>”>ˆDØŒy˜EÒ!Ð!Ø�;Ý$Ð%9Ñ:Ô:Ð:Ýœ T¤YÑ/Ô/�Ø&1°CÑ&7Ð#ð;Ø!'§¢°Ð4GÈÑ!MÔ!M�J�JøÝ!ð ;ð ;ð ;Ý"Ð#9Ñ:Ô:Ð:ð;øøøõ  ¥
¤¨t¬yÑ 9Ô 9¸4ÍÑIZÔIZÐ[Ñ[Ô[�Ø"×,Ò,Ñ.Ô.�	Ø$-×$4Ò$4°[Ñ$AÔ$AÐ!Ø! Y×%7Ò%7Ñ%9Ô%9Ñ9Ð!Ý ¥¤Ô!:Ñ;Ô;×DÒDÑFÔF�Ø%Ÿ_š_Ð->Ñ?Ô?�
Ø˜h×/Ò/Ñ1Ô1Ñ1�
àÐøÝð 	ð 	ð 	Ý˜1‘+”+Ðøøøøð	øøøs1   ‘AE8 Á0B ÂE8 ÂB"Â"CE8 Å8
FÆFÆFc                 óh   — t          |¦  «        }t          | j        |t          ¦   «         ¦  «        }|S r]   )r"   r   r  r   )rU   rñ   r   s      r0   ró   zCryptographyAESKey.wrap_key  s.   € Ý  Ñ*Ô*ˆÝ" 4¤9¨h½Ñ8IÔ8IÑJÔJˆØÐr2   c                 ó®   — t          |¦  «        }	 t          | j        |t          ¦   «         ¦  «        }n!# t          $ r}t          |¦  «        ‚d }~ww xY w|S r]   )r"   r   r  r   r   r   )rU   rò   r  Úcauses       r0   r÷   zCryptographyAESKey.unwrap_key
  s`   € Ý# KÑ0Ô0ˆð	"Ý'¨¬	°;ÅÑ@QÔ@QÑRÔRˆJˆJøÝð 	"ð 	"ð 	"Ý˜5‘/”/Ð!øøøøð	"øøøàÐs   ‘"4 ´
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¸Ô9JÈJÔL^Ð_€GØÔ! :Ô#7¸Ô9JÈJÔL^Ð_€GàÔØÔØÔØÔ ØÔð€Gð Ô'Ð)€GØÔ'Ð)€GàÔ$ jÔ&7¸Ô9JÐK€Kð 	Ô˜EœIØÔ˜EœIØÔ˜EœIØÔ  %¤)ØÔ  %¤)ØÔ  %¤)ØÔ˜EœIØÔ˜EœIØÔ˜EœIØÔ˜eœiØÔ˜eœiØÔ˜eœ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dS )ÚCryptographyHMACKeyzf
    Performs signing and verification operations using HMAC
    and the specified hash function.
    c                 ó&  ‡— |t           j        vrt          d|z  ¦  «        ‚|| _        | j                             |¦  «        | _        t          ‰t          ¦  «        r|  	                    ‰¦  «        | _
        d S t          ‰t          ¦  «        s$t          ‰t          ¦  «        st          d¦  «        ‚t          ‰t          ¦  «        r‰                     d¦  «        Šg d¢}t          ˆfd„|D ¦   «         ¦  «        rt          d¦  «        ‚‰| _
        d S )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 V — Œ	d S r]   r^   )r`   Ústring_valuerV   s     €r0   rc   z/CryptographyHMACKey.__init__.<locals>.<genexpr>2  s(   øè è € ÐGÐG |ˆ|˜sÐ"ÐGÐGÐGÐGÐGÐGr2   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Ð+Ð+ÝÐGÈ)ÑSÑTÔTÐTØ#ˆŒØœ×)Ò)¨)Ñ4Ô4ˆŒå�c�4Ñ Ô ð 	Ø $× 1Ò 1°#Ñ 6Ô 6ˆDÔØˆFå˜#�sÑ#Ô#ð 	J­J°s½EÑ,BÔ,Bð 	JÝÐHÑIÔIÐIå�c�3ÑÔð 	&Ø—*’*˜WÑ%Ô%ˆCð
ð 
ð 
ˆõ ÐGÐGÐGÐG°ÐGÑGÔGÑGÔGð 	Ýð9ñô ð ð
  ˆÔÐÐr2   c                 ó  — |                      d¦  «        dk    s%t          d|                      d¦  «        z  ¦  «        ‚|                      d¦  «        }|                     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:  s|   € Ø�|Š|˜EÑ"Ô" eÒ+Ð+ÝÐNÐQY×Q]ÒQ]Ð^cÑQdÔQdÑdÑeÔeÐeà�LŠL˜ÑÔˆØ�HŠH�WÑÔˆÝ�!‰HŒHˆÝ˜QÑÔˆàˆr2   c                 ób   — | j         dt          | j        ¦  «                             d¦  «        dœS )Nr  r´   r  )rG   r!   rJ   rK   r{   s    r0   rº   zCryptographyHMACKey.to_dictE  s5   € à”?ØÝ! $Ô"3Ñ4Ô4×;Ò;¸GÑDÔDð
ð 
ð 	
r2   c                 óÐ   — t          |¦  «        }t          j        | j        | j        t          ¦   «         ¬¦  «        }|                     |¦  «         |                     ¦   «         }|S )Nr  )r"   r   rA  rJ   rC  r   rë   r  )rU   r’   Úhr“   s       r0   r�   zCryptographyHMACKey.signL  sR   € Ý˜CÑ Ô ˆÝŒI�dÔ'¨¬ÅÑARÔARÐSÑSÔSˆØ	�Š�‰ŒˆØ—J’J‘L”Lˆ	ØÐr2   c                 ó  — t          |¦  «        }t          |¦  «        }t          j        | j        | j        t          ¦   «         ¬¦  «        }|                     |¦  «         	 |                     |¦  «         d}n# t          $ r d}Y nw xY w|S )Nr  TF)	r"   r   rA  rJ   rC  r   rë   r•   r   )rU   r’   r–   rH  Úverifieds        r0   r•   zCryptographyHMACKey.verifyS  s�   € Ý˜CÑ Ô ˆÝ˜CÑ Ô ˆÝŒI�dÔ'¨¬ÅÑARÔARÐSÑSÔSˆØ	�Š�‰Œˆð	Ø�HŠH�S‰MŒMˆMØˆHˆHøÝð 	ð 	ð 	ØˆHˆHˆHð	øøøàˆs   Á"A: Á:B	ÂB	N)r»   r¼   r½   Ú__doc__r   ÚHS256r   r@   ÚHS384rB   ÚHS512rD   rB  rY   rN   rº   r�   r•   r^   r2   r0   r=  r=    s¤   € € € € € ðð ð
 Ô  ¤¡¤°*Ô2BÀMÀFÄMÁOÄOÐU_ÔUeÐgtÐgmÔgtÑgvÔgvÐw€Gð ð  ð  ð>	ð 	ð 	ð
ð 
ð 
ðð ð ð
ð 
ð 
ð 
ð 
r2   r=  )9rx   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Ð 8Ð 8Ð 8Ð 8Ð 8Ø @Ð @Ð @Ð @Ð @Ð @Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ fÐ fÐ fÐ fÐ fÐ fÐ fÐ fØ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø bÐ bÐ bÐ bÐ bÐ bÐ bÐ bØ +Ð +Ð +Ð +Ð +Ð +Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7à "Ð "Ð "Ð "Ð "Ð "Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ø eÐ eÐ eÐ eÐ eÐ eÐ eÐ eÐ eÐ eÐ eÐ eÐ eÐ eØ Ð Ð Ð Ð Ð à€ðð ð ð.gð gð gð gð g˜ñ gô gð gðT|ð |ð |ð |ð |˜ñ |ô |ð |ð~wð wð wð wð w˜ñ wô wð wðtJð Jð Jð Jð J˜#ñ Jô Jð Jð Jð Jr2   