§
    tŠtjŸ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¦  «        Z9dS )é    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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_keyr.   ÚdecodeÚ
isinstanceÚdictÚ_process_jwkÚstrÚencodeÚbytesr   Ú
ValueErrorr   Ú	Exception©ÚselfÚkeyÚ	algorithmr=   Úes        ú`/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/jose/backends/cryptography_backend.pyÚ__init__zCryptographyECKey.__init__&   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Úktyr3   z0Incorrect key type. Expected: 'EC', Received: %sc              3   ó    •K  — | ]}|‰v V — Œ	d S ©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Ô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ÐArZ   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Úceilr?   Úkey_size©rJ   s    rN   Ú_sig_component_lengthz'CryptographyECKey._sig_component_lengthl   s'   € õ
 •4”9˜TÔ.Ô7¸#Ñ=Ñ>Ô>Ñ?Ô?Ð?rZ   c                 ó�   — t          |¦  «        \  }}|                      ¦   «         }t          ||¦  «        t          ||¦  «        z   S )z4Convert signature from DER encoding to RAW encoding.)r   rs   r   )rJ   Úder_signatureÚrÚsÚcomponent_lengths        rN   Ú_der_to_rawzCryptographyECKey._der_to_raws   sF   € å# MÑ2Ô2‰ˆˆ1Ø×5Ò5Ñ7Ô7ÐÝ˜AÐ/Ñ0Ô0µ<ÀÐCSÑ3TÔ3TÑTÐTrZ   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)rs   Úlenrn   rG   Ú
from_bytesr   )rJ   Úraw_signaturerx   Úr_bytesÚs_bytesrv   rw   s          rN   Ú_raw_to_derzCryptographyECKey._raw_to_dery   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Ñ)Ô)Ð)rZ   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))r;   Údigest_sizer?   rj   rq   Ú	TypeErrorÚnameÚsignr	   ÚECDSAry   )rJ   ÚmsgÚ	signatures      rN   r‡   zCryptographyECKey.sign…   s˜   € ØŒ=Ô$ qÑ(¨4Ô+<Ô+BÔ+KÒKÐKÝð'Ø*.Ô*;Ô*AÔ*FÈÈDÌMÔLeÑHeÐ)fñgñô ð ð Ô%×*Ò*¨3µ´¸¿º¹¼Ñ0IÔ0IÑJÔJˆ	Ø×Ò 	Ñ*Ô*Ð*rZ   c                 óÔ   — 	 |                       |¦  «        }| j                             ||t          j        |                      ¦   «         ¦  «        ¦  «         dS # t          $ r Y dS w xY w)NTF)r�   r?   Úverifyr	   rˆ   r;   rH   )rJ   r‰   ÚsigrŠ   s       rN   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 ©Nr,   ©r>   r?   rr   s    rN   Ú	is_publiczCryptographyECKey.is_public–   ó   € Ý�tÔ(¨.Ñ9Ô9Ð9rZ   c                 ó’   — |                       ¦   «         r| S |                      | j                             ¦   «         | j        ¦  «        S rS   ©r‘   Ú	__class__r?   ri   r<   rr   s    rN   ri   zCryptographyECKey.public_key™   ó>   € Ø�>Š>ÑÔð 	ØˆKØ�~Š~˜dÔ/×:Ò:Ñ<Ô<¸d¼oÑNÔNÐNrZ   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‘   r?   r,   r   ÚEncodingÚPEMÚPublicFormatÚSubjectPublicKeyInfor-   ÚPrivateFormatÚTraditionalOpenSSLÚNoEncryption)rJ   Úpems     rN   r.   zCryptographyECKey.to_pemž   s‹   € Ø�>Š>ÑÔð 	ØÔ#×0Ò0Ý&Ô/Ô3½MÔ<VÔ<kð 1ñ ô ˆCð ˆJØÔ×-Ò-Ý"Ô+Ô/Ý Ô.ÔAÝ!.Ô!;Ñ!=Ô!=ð .ñ 
ô 
ˆð
 ˆ
rZ   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 )Nr^   r_   r`   )Ú	secp256r1Ú	secp384r1Ú	secp521r1é   rƒ   r3   )ÚsizeÚASCII)ÚalgrQ   r]   r[   r\   ra   )r‘   r?   ri   rj   r†   rq   r<   r$   Úpublic_numbersr[   r@   r\   Úprivate_numbersÚprivate_value)rJ   ri   r]   rq   Údatar¯   s         rN   Ú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àˆrZ   N)Ú__name__Ú
__module__Ú__qualname__r   r5   r7   r9   r   rO   rC   rs   ry   r�   r‡   rŒ   r‘   ri   r.   r±   rT   rZ   rN   r)   r)   !   sç   € € € € € ØŒ]€FØŒ]€FØŒ]€Fà<Kð +Fð +Fð +Fð +FðZBð Bð Bð2@ð @ð @ðUð Uð Uð
*ð 
*ð 
*ð+ð +ð +ðð ð ð:ð :ð :ðOð Oð Oð
ð ð ðð ð ð ð rZ   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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¦  «        s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  ¦  «        ‚)	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Ð*Ð*ÝÐGÈ)ÑSÑTÔTÐTõ Ô˜dœkÝÔ˜dœkÝÔ˜dœkð
÷ Š#ˆi‰.Œ.ð	 	Œð
 $ˆŒõ Ô˜tœ{ÝÔ ¤ÝÔ# TÔ%6ð
÷ Š#ˆi‰.Œ.ð	 	Œð %9ˆÔ!õ �C˜Ñ(Ô(ð 	­W°SÐ:JÑ-KÔ-Kð 	ÕPWÐX[Ð]lÑPmÔPmð 	Ø #ˆ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<   Å3*H Æ 'G ÇH Ç3G>Ç;H Ç=G>Ç>H È
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 )NrQ   r¸   z1Incorrect key type. Expected: 'RSA', Received: %srM   é   Únra   )ÚpÚqÚdpÚdqÚqic              3   ó    •K  — | ]}|‰v V — Œ	d S rS   rT   rU   s     €rN   rY   z2CryptographyRSAKey._process_jwk.<locals>.<genexpr>  s'   øè è € Ð7Ð7 Q�1˜�=Ð7Ð7Ð7Ð7Ð7Ð7rZ   c              3   ó    •K  — | ]}|‰v V — Œ	d S 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Ô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ÐCrZ   c                 ó|   — t          ||                      ¦   «         ¦  «        }|                     ¦   «         | _        d S rS   )r   r=   ri   r?   )rJ   rK   s     rN   rÀ   z CryptographyRSAKey._process_cert,  s5   € Ý'¨¨T×-FÒ-FÑ-HÔ-HÑIÔIˆØŸNšNÑ,Ô,ˆÔÐÐrZ   c                 óÊ   — 	 | j                              |t          j        ¦   «         |                      ¦   «         ¦  «        }n!# t
          $ r}t          |¦  «        ‚d }~ww xY w|S rS   )r?   r‡   r
   ÚPKCS1v15r;   rH   r   )rJ   r‰   rŠ   rM   s       rN   r‡   zCryptographyRSAKey.sign0  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Úwarnri   r?   rŒ   r
   rÕ   r;   r   )rJ   r‰   r�   s      rN   rŒ   zCryptographyRSAKey.verify7  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�   rr   s    rN   r‘   zCryptographyRSAKey.is_publicA  r’   rZ   c                 ó’   — |                       ¦   «         r| S |                      | j                             ¦   «         | j        ¦  «        S rS   r”   rr   s    rN   ri   zCryptographyRSAKey.public_keyD  r–   rZ   Ú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Ý   rG   r?   r,   r�   rž   r¡   rÛ   r¢   r-   r£   )rJ   Ú
pem_formatÚfmtr¤   s       rN   r.   zCryptographyRSAKey.to_pemI  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ð /ñ 
ô 
ð 	
rZ   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¬   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Ô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ðð ñ	ô 	ð 	ð ˆrZ   c                 óŒ   — 	 | j                              || j        ¦  «        }n!# t          $ r}t	          |¦  «        ‚d }~ww xY w|S rS   )r?   Úencryptr
   rH   r   )rJ   Úkey_dataÚwrapped_keyrM   s       rN   Úwrap_keyzCryptographyRSAKey.wrap_keyz  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rS   )r?   Údecryptr
   rH   r   )rJ   rè   Úunwrapped_keyrM   s       rN   Ú
unwrap_keyzCryptographyRSAKey.unwrap_key‚  sR   € ð	Ø Ô-×5Ò5°kÀ4Ä<ÑPÔ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   rZ   rN   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ð ð ðð ð ð ð rZ   r¶   c                   ó˜  — 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ej        j        dz  ddœZ d„ Z!d„ Z"dd„Z#dd„Z$d	„ Z%d
„ Z&dS )ÚCryptographyAESKeyNrƒ   é   )ÚCBCÚGCMc                 óð  — |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_PSEUDOr<   ÚMODESr:   Ú_modeÚKEY_128r|   ÚKEY_192ÚKEY_256ÚKEY_384ÚKEY_512Ú_key©rJ   rK   rL   s      rN   rO   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àˆŒ	ˆ	ˆ	rZ   c                 ó@   — | 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Ñ;VÔ;VÐWÐWˆØˆrZ   c                 ó€  — t          |¦  «        }	 | j                             | j        j        t
          j        j        ¦  «        }t          |¦  «        }|                      |¦  «        }|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õ   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Ç  sŽ  € Ý" :Ñ.Ô.ˆ
ð	Ø!Ô9×=Ò=¸d¼j¼oÍzÌ~ÔOhÑiÔiˆNÝ! .Ñ1Ô1ˆ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   ‘FF Æ
F=Æ)F8Æ8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†   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Þ  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 rS   )r!   r   r  r   )rJ   rç   r  s      rN   ré   zCryptographyAESKey.wrap_keyù  s.   € Ý  Ñ*Ô*ˆÝ" 4¤9¨h½Ñ8IÔ8IÑJÔJˆØÐrZ   c                 ó®   — t          |¦  «        }	 t          | j        |t          ¦   «         ¦  «        }n!# t          $ r}t          |¦  «        ‚d }~ww xY w|S rS   )r!   r   r  r   r   r   )rJ   rè   r  Úcauses       rN   rí   zCryptographyAESKey.unwrap_keyþ  s`   € Ý# KÑ0Ô0ˆð	"Ý'¨¬	°;ÅÑ@QÔ@QÑRÔRˆJˆJøÝð 	"ð 	"ð 	"Ý˜5‘/”/Ð!øøøøð	"øøøàÐs   ‘"4 ´
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   rZ   rN   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ð$ '1¤nÔ&?À1Ñ&DÈWÐUÐUÐðð ð ð,ð ð ðð ð ð ð.ð ð ð ð6ð ð ð
ð ð ð ð rZ   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¦  «        }t          |¦  «        st          |¦  «        rt          d¦  «        ‚|| _
        d S )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Ð+Ð+ÝÐ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å˜ÑÔð 	¥¨C¡¤ð 	Ýð9ñô ð ð
  ˆÔÐÐrZ   c                 ó  — |                      d¦  «        dk    s%t          d|                      d¦  «        z  ¦  «        ‚|                      d¦  «        }|                     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'  s|   € Ø�|Š|˜EÑ"Ô" eÒ+Ð+ÝÐNÐQY×Q]ÒQ]Ð^cÑQdÔQdÑdÑeÔeÐeà�LŠL˜ÑÔˆØ�HŠH�WÑÔˆÝ�!‰HŒHˆÝ˜QÑÔˆàˆrZ   c                 ób   — | j         dt          | j        ¦  «                             d¦  «        dœS )Nr
  r«   r  )r<   r    r?   r@   rr   s    rN   r±   zCryptographyHMACKey.to_dict2  s5   € à”?ØÝ! $Ô"3Ñ4Ô4×;Ò;¸GÑDÔDð
ð 
ð 	
rZ   c                 óÐ   — t          |¦  «        }t          j        | j        | j        t          ¦   «         ¬¦  «        }|                     |¦  «         |                     ¦   «         }|S )Nr  )r!   r   r9  r?   r;  r   rá   r  )rJ   r‰   ÚhrŠ   s       rN   r‡   zCryptographyHMACKey.sign9  sR   € Ý˜CÑ Ô ˆÝŒI�dÔ'¨¬ÅÑARÔARÐSÑSÔSˆØ	�Š�‰ŒˆØ—J’J‘L”Lˆ	ØÐrZ   c                 ó  — t          |¦  «        }t          |¦  «        }t          j        | j        | j        t          ¦   «         ¬¦  «        }|                     |¦  «         	 |                     |¦  «         d}n# t          $ r d}Y nw xY w|S )Nr  TF)	r!   r   r9  r?   r;  r   rá   rŒ   r   )rJ   r‰   r�   r?  Úverifieds        rN   rŒ   zCryptographyHMACKey.verify@  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   r5   ÚHS384r7   ÚHS512r9   r:  rO   rC   r±   r‡   rŒ   rT   rZ   rN   r7  r7    s¤   € € € € € ðð ð
 Ô  ¤¡¤°*Ô2BÀMÀFÄMÁOÄOÐU_ÔUeÐgtÐgmÔgtÑgvÔgvÐw€Gð ð  ð  ð0	ð 	ð 	ð
ð 
ð 
ðð ð ð
ð 
ð 
ð 
ð 
rZ   r7  ):ro   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ò   r7  rT   rZ   rN   ú<module>rW     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à "Ð "Ð "Ð "Ð "Ð "Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à€ðgð gð gð gð g˜ñ gô gð gðT|ð |ð |ð |ð |˜ñ |ô |ð |ð~zð zð zð zð z˜ñ zô zð zðzCð Cð Cð Cð C˜#ñ Cô Cð Cð Cð CrZ   