
    k7i                         S SK r S SKJr  S SKJr  S SKJr  S SKJr  S SK	J
r
  S SKJr  S SKJr  S S	KJr  S S
KJr  S SKJr   " S S\
5      r\" S5      \" S5      \" S5      \" S5      /rS rg)    N)default_backend)hashes)ConcatKDFHash)8InvalidEncryptionAlgorithmForECDH1PUWithKeyWrappingError)$JWEAlgorithmWithTagAwareKeyAgreement)AESAlgorithm)CBCHS2EncAlgorithm)ECKey)u32be_len_input)OKPKeyc                       \ rS rSr/ SQr\\4rSS jrS r	S r
S rS rS	 rS
 rS rS rS rSS jr SS jrS rS rSS jrSS jrSrg)ECDH1PUAlgorithm   )epkapuapvskidNc                     Uc  SU l         SU l        OSU S3U l         SU S3U l        Xl        [        U5      U l        g )NzECDH-1PUz)ECDH-1PU in the Direct Key Agreement modez
ECDH-1PU+AKWz0ECDH-1PU using Concat KDF and CEK wrapped with A)namedescriptionkey_sizer   aeskw)selfr   s     ]/home/james-whalen/.local/lib/python3.13/site-packages/authlib/jose/drafts/_jwe_algorithms.py__init__ECDH1PUAlgorithm.__init__   sN    "DIJD$XJb1DIB8*BO  !!(+
    c                 f    [        XR                  5      (       a  U$ [        R                  " U5      $ N)
isinstanceALLOWED_KEY_CLSr
   
import_key)r   raw_datas     r   prepare_keyECDH1PUAlgorithm.prepare_key!   s)    h 4 455O))r   c                     U R                  U5      nU R                  U5      nX4S.nU R                  b  UR                  5       nXeS'   U$ )N)r   headercek)_generate_ephemeral_key_prepare_headersr   generate_cek)r   enc_algkeyr   hpresetr)   s          r   generate_preset ECDH1PUAlgorithm.generate_preset&   sN    **3/!!#&*==$&&(C5Mr   c                 
    X-   $ r     )r   shared_key_eshared_key_ss      r   compute_shared_key#ECDH1PUAlgorithm.compute_shared_key/   s    **r   c                 ,   Uc  SnO[        U5      nU R                  c  [        US   5      nO[        US   5      n[        UR                  S5      S5      n[        UR                  S5      S5      n[        R                  " SU5      U-   nXV-   U-   U-   $ )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_info#ECDH1PUAlgorithm.compute_fixed_info2   s    ;E#C(E == $WU^4F$WU^4F #7;;u#5t< #7;;u#5t< ;;tX.6 8+h66r   c                 x    [        [        R                  " 5       US-  U[        5       S9nUR	                  U5      $ )N   )	algorithmlength	otherinfobackend)r   r   SHA256r   derive)r   
shared_key
fixed_infor@   ckdfs        r   compute_derived_key$ECDH1PUAlgorithm.compute_derived_keyI   s6    mmoq= #%	
 {{:&&r   c                     UR                  U5      nUR                  U5      nU R                  X5      n	U R                  XEU5      n
U R                  XU5      $ r    exchange_shared_keyr7   rG   rT   )r   sender_static_keysender_ephemeral_keyrecipient_pubkeyr?   r@   rA   r6   r5   rQ   rR   s              r   deliver_at_sender"ECDH1PUAlgorithm.deliver_at_senderR   s[     )<<=MN+??@PQ,,\H
,,WD
''
IIr   c                     UR                  U5      nUR                  U5      nU R                  X5      n	U R                  XEU5      n
U R                  XU5      $ r    rW   )r   recipient_keysender_static_pubkeysender_ephemeral_pubkeyr?   r@   rA   r6   r5   rQ   rR   s              r   deliver_at_recipient%ECDH1PUAlgorithm.deliver_at_recipientc   s[     %889MN$889PQ,,\H
,,WD
''
IIr   c                 (    UR                  US   SS9$ )NcrvT)
is_private)generate_key)r   r.   s     r   r*   (ECDH1PUAlgorithm._generate_ephemeral_keyt   s    E
t<<r   c                 n    UR                    Vs0 s H  o"X   _M	     nnUR                  US'   SU0$ s  snf )Nktyr   )REQUIRED_JSON_FIELDSrj   )r   r   kpub_epks       r   r+   !ECDH1PUAlgorithm._prepare_headersw   s@    &)&>&>?&>cf9&>?w @s   2c                     [        U[        5      (       d
  [        5       eU(       a  SU;   a  US   n0 nO"U R                  U5      nU R	                  U5      nU(       a  SU;   a  US   nOUR                  5       nXWUS.$ )Nr   r)   )r   r)   r(   )r!   r	   r   r*   r+   r,   )r   r-   r.   
sender_keyr0   r   r/   r)   s           r   !generate_keys_and_prepare_headers2ECDH1PUAlgorithm.generate_keys_and_prepare_headers}   s{    '#566JLLevo-CA..s3C%%c*Aevo-C&&(C!44r   c                     U R                   c  UR                  nOU R                   nUR                  S5      nU R                  XEXXv5      $ )NwrapKey)r   CEK_SIZE
get_op_keyr\   )	r   r-   r?   r.   rp   r   rA   r@   
public_keys	            r   _agree_upon_key_at_sender*ECDH1PUAlgorithm._agree_upon_key_at_sender   sJ     == ''H}}H^^I.
%%Z(
 	
r   c                 n    U R                   R                  U5      nU R                   R                  X5      $ r    )r   r%   wrap_cek)r   r)   dkkeks       r   	_wrap_cekECDH1PUAlgorithm._wrap_cek   s+    jj$$R(zz""3,,r   c                 J    U R                  XX4XW5      nU R                  Xh5      $ r    )rx   r~   )	r   r-   r?   r.   rp   r   r)   rA   r|   s	            r   agree_upon_key_and_wrap_cek,ECDH1PUAlgorithm.agree_upon_key_and_wrap_cek   s'     ++GcsX~~c&&r   c                     U R                   b  [        S5      eU(       a  SU;   a  US   n0 nO"U R                  U5      nU R                  U5      nU R	                  XX4U5      nSXS.$ )Nz Invalid algorithm state detectedr   r   )ekr)   r(   )r   RuntimeErrorr*   r+   rx   )	r   r-   r?   r.   rp   r0   r   r/   r|   s	            r   wrapECDH1PUAlgorithm.wrap   sn    ==$ABBevo-CA..s3C%%c*A++GcsS"22r   c                    SU;  a  [        S5      eU R                  c  UR                  nOU R                  nUR                  S5      nUR	                  US   5      n	U	R                  S5      n
U R                  XHXXv5      nU R                  c  U$ U R                  R                  U5      nU R                  R                  XX<5      $ )Nr   zMissing "epk" in headersrt   )	
ValueErrorr   ru   rv   r#   rb   r   r%   unwrap)r   r-   r   r?   r.   rp   rA   r@   sender_pubkeyr   
epk_pubkeyr|   r}   s                r   r   ECDH1PUAlgorithm.unwrap   s    788== ''H}}H"--i8nnWU^,^^I.
&&
X
 == Ijj$$R(zz  g;;r   )r   r   r   r   r    )__name__
__module____qualname____firstlineno__EXTRA_HEADERSr
   r   r"   r   r%   r1   r7   rG   rT   r\   rb   r*   r+   rq   rx   r~   r   r   r   __static_attributes__r4   r   r   r   r      sg    1MfoO
,*
+7.'J"J"= 5& ;?
-'3 <r   r            c                 @    [          H  nU R                  U5        M     g r    )JWE_DRAFT_ALG_ALGORITHMSregister_algorithm)clsr;   s     r   register_jwe_alg_draftr      s    's# (r   )r=   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   r4   r   r   <module>r      se     8 1 F X E - 3 & 0 '{<; {<~ TSSS	 $r   