§
    iÝ[f  ã                   óä   — d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZmZmZmZ d dlmZ  G d	„ d
e
¦  «        Z ed¦  «         ed¦  «         ed¦  «         ed¦  «        gZd„ ZdS )é    N)Údefault_backend)Úhashes)ÚConcatKDFHash)Ú8InvalidEncryptionAlgorithmForECDH1PUWithKeyWrappingError)Ú$JWEAlgorithmWithTagAwareKeyAgreement)ÚAESAlgorithmÚCBCHS2EncAlgorithmÚECKeyÚu32be_len_input)ÚOKPKeyc                   óˆ   — e Zd Zg d¢ZeefZdd„Zd„ Zd„ Z	d„ Z
d„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zdd„Zdd„Zd„ Zd„ Zdd„Zdd„ZdS )ÚECDH1PUAlgorithm)ÚepkÚapuÚapvÚskidNc                 ó¨   — |€d| _         d| _        n%d|› d�| _         d                     |¦  «        | _        || _        t	          |¦  «        | _        d S )NzECDH-1PUz)ECDH-1PU in the Direct Key Agreement modez
ECDH-1PU+AÚKWz4ECDH-1PU using Concat KDF and CEK wrapped with A{}KW)ÚnameÚdescriptionÚformatÚkey_sizer   Úaeskw)Úselfr   s     úW/var/www/piapp/venv/lib/python3.11/site-packages/authlib/jose/drafts/_jwe_algorithms.pyÚ__init__zECDH1PUAlgorithm.__init__   sb   € ØÐØ"ˆDŒIØJˆDÔÐà1 XÐ1Ð1Ð1ˆDŒIðß$šf XÑ.Ô.ð Ôð !ˆŒÝ! (Ñ+Ô+ˆŒ
ˆ
ˆ
ó    c                 óX   — t          || j        ¦  «        r|S t          j        |¦  «        S ©N)Ú
isinstanceÚALLOWED_KEY_CLSr
   Ú
import_key)r   Úraw_datas     r   Úprepare_keyzECDH1PUAlgorithm.prepare_key   s-   € Ý�h Ô 4Ñ5Ô5ð 	ØˆOÝÔ Ñ)Ô)Ð)r   c                 ó¤   — |                       |¦  «        }|                      |¦  «        }||dœ}| j        �|                     ¦   «         }||d<   |S )N)r   ÚheaderÚcek)Ú_generate_ephemeral_keyÚ_prepare_headersr   Úgenerate_cek)r   Úenc_algÚkeyr   ÚhÚpresetr'   s          r   Úgenerate_presetz ECDH1PUAlgorithm.generate_preset"   s\   € Ø×*Ò*¨3Ñ/Ô/ˆØ×!Ò! #Ñ&Ô&ˆØ¨Ð*Ð*ˆØŒ=Ð$Ø×&Ò&Ñ(Ô(ˆCØˆF�5‰MØˆr   c                 ó   — ||z   S r   © )r   Úshared_key_eÚshared_key_ss      r   Úcompute_shared_keyz#ECDH1PUAlgorithm.compute_shared_key+   s   € Ø˜lÑ*Ð*r   c                 ó`  — |€d}nt          |¦  «        }| j        €t          |d         ¦  «        }nt          |d         ¦  «        }t          |                     d¦  «        d¦  «        }t          |                     d¦  «        d¦  «        }t          j        d|¦  «        |z   }||z   |z   |z   S )Nr   ÚencÚalgr   Tr   z>I)r   r   ÚgetÚstructÚpack)	r   ÚheadersÚbit_sizeÚtagÚcctagÚalg_idÚapu_infoÚapv_infoÚpub_infos	            r   Úcompute_fixed_infoz#ECDH1PUAlgorithm.compute_fixed_info.   s°   € Øˆ;ØˆEˆEå# CÑ(Ô(ˆEð Œ=Ð Ý$ W¨U¤^Ñ4Ô4ˆFˆFå$ W¨U¤^Ñ4Ô4ˆFõ # 7§;¢;¨uÑ#5Ô#5°tÑ<Ô<ˆõ # 7§;¢;¨uÑ#5Ô#5°tÑ<Ô<ˆõ ”;˜t XÑ.Ô.°Ñ6ˆà˜Ñ  8Ñ+¨hÑ6Ð6r   c                 ó’   — t          t          j        ¦   «         |dz  |t          ¦   «         ¬¦  «        }|                     |¦  «        S )Né   )Ú	algorithmÚlengthÚ	otherinfoÚbackend)r   r   ÚSHA256r   Úderive)r   Ú
shared_keyÚ
fixed_infor<   Úckdfs        r   Úcompute_derived_keyz$ECDH1PUAlgorithm.compute_derived_keyE   sF   € ÝÝ”m‘o”oØ˜q‘=Ø Ý#Ñ%Ô%ð	
ñ 
ô 
ˆð �{Š{˜:Ñ&Ô&Ð&r   c                 óÞ   — |                      |¦  «        }|                      |¦  «        }|                      ||¦  «        }	|                      |||¦  «        }
|                      |	|
|¦  «        S r   ©Úexchange_shared_keyr4   rC   rO   )r   Úsender_static_keyÚsender_ephemeral_keyÚrecipient_pubkeyr;   r<   r=   r3   r2   rL   rM   s              r   Údeliver_at_senderz"ECDH1PUAlgorithm.deliver_at_senderN   sn   € Ø(×<Ò<Ð=MÑNÔNˆØ+×?Ò?Ð@PÑQÔQˆØ×,Ò,¨\¸<ÑHÔHˆ
à×,Ò,¨W°hÀÑDÔDˆ
à×'Ò'¨
°JÀÑIÔIÐIr   c                 óÞ   — |                      |¦  «        }|                      |¦  «        }|                      ||¦  «        }	|                      |||¦  «        }
|                      |	|
|¦  «        S r   rQ   )r   Úrecipient_keyÚsender_static_pubkeyÚsender_ephemeral_pubkeyr;   r<   r=   r3   r2   rL   rM   s              r   Údeliver_at_recipientz%ECDH1PUAlgorithm.deliver_at_recipientW   sn   € Ø$×8Ò8Ð9MÑNÔNˆØ$×8Ò8Ð9PÑQÔQˆØ×,Ò,¨\¸<ÑHÔHˆ
à×,Ò,¨W°hÀÑDÔDˆ
à×'Ò'¨
°JÀÑIÔIÐIr   c                 ó<   — |                      |d         d¬¦  «        S )NÚcrvT)Ú
is_private)Úgenerate_key)r   r,   s     r   r(   z(ECDH1PUAlgorithm._generate_ephemeral_key`   s   € Ø×Ò  E¤
°tÐÑ<Ô<Ð<r   c                 óF   ‡— ˆfd„‰j         D ¦   «         }‰j        |d<   d|iS )Nc                 ó"   •— i | ]}|‰|         “ŒS r1   r1   )Ú.0Úkr   s     €r   ú
<dictcomp>z5ECDH1PUAlgorithm._prepare_headers.<locals>.<dictcomp>e   s   ø€ Ð?Ð?Ð? �1�c˜!”fÐ?Ð?Ð?r   Úktyr   )ÚREQUIRED_JSON_FIELDSre   )r   r   Úpub_epks    ` r   r)   z!ECDH1PUAlgorithm._prepare_headersc   s5   ø€ à?Ð?Ð?Ð? cÔ&>Ð?Ñ?Ô?ˆØœˆ�‰Ø�wÐÐr   c                 ó  — t          |t          ¦  «        st          ¦   «         ‚|rd|v r|d         }i }n*|                      |¦  «        }|                      |¦  «        }|rd|v r	|d         }n|                     ¦   «         }|||dœS )Nr   r'   )r   r'   r&   )r    r	   r   r(   r)   r*   )r   r+   r,   Ú
sender_keyr.   r   r-   r'   s           r   Ú!generate_keys_and_prepare_headersz2ECDH1PUAlgorithm.generate_keys_and_prepare_headersi   s¤   € Ý˜'Õ#5Ñ6Ô6ð 	MÝJÑLÔLÐLàð 	+�e˜v�o�oØ˜”-ˆCØˆAˆAà×.Ò.¨sÑ3Ô3ˆCØ×%Ò% cÑ*Ô*ˆAàð 	)�e˜v�o�oØ˜”-ˆCˆCà×&Ò&Ñ(Ô(ˆCà 3°!Ð4Ð4Ð4r   c                 óŒ   — | j         €|j        }n| j         }|                     d¦  «        }|                      ||||||¦  «        S )NÚwrapKey)r   ÚCEK_SIZEÚ
get_op_keyrV   )	r   r+   r;   r,   ri   r   r=   r<   Ú
public_keys	            r   Ú_agree_upon_key_at_senderz*ECDH1PUAlgorithm._agree_upon_key_at_sender{   sK   € ØŒ=Ð ØÔ'ˆHˆHà”}ˆHà—^’^ IÑ.Ô.ˆ
à×%Ò% j°#°zÀ7ÈHÐVYÑZÔZÐZr   c                 ól   — | j                              |¦  «        }| j                              ||¦  «        S r   )r   r$   Úwrap_cek)r   r'   ÚdkÚkeks       r   Ú	_wrap_cekzECDH1PUAlgorithm._wrap_cek…   s/   € ØŒj×$Ò$ RÑ(Ô(ˆØŒz×"Ò" 3¨Ñ,Ô,Ð,r   c                 ób   — |                       ||||||¦  «        }|                      ||¦  «        S r   )rp   ru   )	r   r+   r;   r,   ri   r   r'   r=   rs   s	            r   Úagree_upon_key_and_wrap_cekz,ECDH1PUAlgorithm.agree_upon_key_and_wrap_cek‰   s4   € Ø×+Ò+¨G°W¸cÀ:ÈsÐTWÑXÔXˆØ�~Š~˜c 2Ñ&Ô&Ð&r   c                 óâ   — | j         �t          d¦  «        ‚|rd|v r|d         }i }n*|                      |¦  «        }|                      |¦  «        }|                      |||||¦  «        }d||dœS )Nz Invalid algorithm state detectedr   r   )Úekr'   r&   )r   ÚRuntimeErrorr(   r)   rp   )	r   r+   r;   r,   ri   r.   r   r-   rs   s	            r   ÚwrapzECDH1PUAlgorithm.wrap�   sŠ   € àŒ=Ð$ÝÐAÑBÔBÐBàð 	+�e˜v�o�oØ˜”-ˆCØˆAˆAà×.Ò.¨sÑ3Ô3ˆCØ×%Ò% cÑ*Ô*ˆAà×+Ò+¨G°W¸cÀ:ÈsÑSÔSˆà "°Ð2Ð2Ð2r   c                 ó’  — d|vrt          d¦  «        ‚| j        €|j        }n| j        }|                     d¦  «        }|                     |d         ¦  «        }	|	                     d¦  «        }
|                      |||
|||¦  «        }| j        €|S | j                             |¦  «        }| j                             ||||¦  «        S )Nr   zMissing "epk" in headersrl   )	Ú
ValueErrorr   rm   rn   r"   r[   r   r$   Úunwrap)r   r+   ry   r;   r,   ri   r=   r<   Úsender_pubkeyr   Ú
epk_pubkeyrs   rt   s                r   r~   zECDH1PUAlgorithm.unwrap�   sË   € Ø˜ÐÐÝÐ7Ñ8Ô8Ð8àŒ=Ð ØÔ'ˆHˆHà”}ˆHà"×-Ò-¨iÑ8Ô8ˆØ�nŠn˜W Uœ^Ñ,Ô,ˆØ—^’^ IÑ.Ô.ˆ
Ø×&Ò& s¨M¸:ÀwÐPXÐZ]Ñ^Ô^ˆàŒ=Ð ØˆIàŒj×$Ò$ RÑ(Ô(ˆØŒz× Ò  ¨"¨g°sÑ;Ô;Ð;r   r   )Ú__name__Ú
__module__Ú__qualname__ÚEXTRA_HEADERSr
   r   r!   r   r$   r/   r4   rC   rO   rV   r[   r(   r)   rj   rp   ru   rw   r{   r~   r1   r   r   r   r      s;  € € € € € Ø1Ð1Ð1€MØ˜f�o€Oð
,ð 
,ð 
,ð 
,ð*ð *ð *ð
ð ð ð+ð +ð +ð7ð 7ð 7ð.'ð 'ð 'ðJð Jð JðJð Jð Jð=ð =ð =ð ð  ð  ð5ð 5ð 5ð 5ð$[ð [ð [ð [ð-ð -ð -ð'ð 'ð 'ð3ð 3ð 3ð 3ð <ð <ð <ð <ð <ð <r   r   é€   éÀ   é   c                 óD   — t           D ]}|                      |¦  «         Œd S r   )ÚJWE_DRAFT_ALG_ALGORITHMSÚregister_algorithm)Úclsr7   s     r   Úregister_jwe_alg_draftrŒ   º   s2   € Ý'ð $ð $ˆØ×Ò˜sÑ#Ô#Ð#Ð#ð$ð $r   )r9   Úcryptography.hazmat.backendsr   Úcryptography.hazmat.primitivesr   Ú,cryptography.hazmat.primitives.kdf.concatkdfr   Úauthlib.jose.errorsr   Úauthlib.jose.rfc7516r   Úauthlib.jose.rfc7518r   r	   r
   r   Úauthlib.jose.rfc8037r   r   r‰   rŒ   r1   r   r   ú<module>r”      s-  ðØ €€€Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø FÐ FÐ FÐ FÐ FÐ Fà XÐ XÐ XÐ XÐ XÐ XØ EÐ EÐ EÐ EÐ EÐ EØ YÐ YÐ YÐ YÐ YÐ YÐ YÐ YÐ YÐ YÐ YÐ YØ 'Ð 'Ð 'Ð 'Ð 'Ð 'ðc<ð c<ð c<ð c<ð c<Ð;ñ c<ô c<ð c<ðN Ð�TÑÔØÐ�SÑÔØÐ�SÑÔØÐ�SÑÔð	Ð ð$ð $ð $ð $ð $r   