
    kKj                         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 d dlmZ d dlmZ d dlmZ g dZ G d	 d
e      Z ed       ee       ee       ee      gZddZy)   )	RecipientJWEKeyAgreementJWEKeyWrappingJWEEncModel)A128KWA192KWA256KW)ECKey)derive_key_for_concat_kdf)CBCHS2EncModel)HeaderParameter)InvalidEncryptionAlgorithmError)ECDH1PUAlgModelregister_ecdh_1puJWE_ALG_MODELSc                   >   e Zd ZdZ eddd       edd       edd       edd      d	Zd
dgZdZdedz  fdZ	de
ddfdZde
dee   defdZde
dee   dedefdZde
dee   defdZde
dee   dedefdZde
dee   dedz  defdZde
dee   dedz  defdZy)r   zKey Agreement with Elliptic Curve Diffie-Hellman One-Pass Unified Model (ECDH-1PU)

    https://datatracker.ietf.org/doc/html/draft-madden-jose-ecdh-1pu-04
    zEphemeral Public KeyjwkTzAgreement PartyUInfostrzAgreement PartyVInfozSender Key ID)epkapuapvskidECOKPkey_wrappingNc                     |d| _         d| _        d | _        || _        y d|j                    | _         d|j                    | _        |j                  | _        || _        y )NzECDH-1PUzDECDH-1PU using one-pass KDF and CEK in the Direct Key Agreement modez	ECDH-1PU+z1ECDH-1PU using one-pass KDF and CEK wrapped with )namedescriptionkey_sizer   )selfr   s     l/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/joserfc/drafts/jwe_ecdh_1pu.py__init__zECDH1PUAlgModel.__init__"   sk    "DIeD DM
 ) $L$5$5#67DI!RS_SdSdRefD(11DM(    encreturnc                 X    | j                   rt        |t              sd}t        |      y y )NzwIn key agreement with key wrapping mode ECDH-1PU algorithm only supports AES_CBC_HMAC_SHA2 family encryption algorithms)r   
isinstancer   r   )r    r$   r   s      r!   
_check_enczECDH1PUAlgModel._check_enc-   s7     Z^%DO  2+>> &Er#   	recipientc                 J    | j                  |       | j                  ||d       S Nr(   )_ECDH1PUAlgModel__encrypt_agreed_upon_keyr    r$   r)   s      r!   encrypt_agreed_upon_keyz'ECDH1PUAlgModel.encrypt_agreed_upon_key:   s#    --c9dCCr#   tagc                 J    | j                  |       | j                  |||      S r+   r,   r    r$   r)   r0   s       r!    encrypt_agreed_upon_key_with_tagz0ECDH1PUAlgModel.encrypt_agreed_upon_key_with_tag>   s#    --c9cBBr#   c                 (    | j                  ||d       S r+   )_ECDH1PUAlgModel__decrypt_agreed_upon_keyr.   s      r!   decrypt_agreed_upon_keyz'ECDH1PUAlgModel.decrypt_agreed_upon_keyB   s    --c9dCCr#   c                 (    | j                  |||      S r+   r5   r2   s       r!    decrypt_agreed_upon_key_with_tagz0ECDH1PUAlgModel.decrypt_agreed_upon_key_with_tagE   s    --c9cBBr#   c                    |j                   }|j                  }|j                  }|J |J |J |j                  |      }|j                  |      }||z   }	|j	                         }
t        |	|
|j                  | j                  |      S r+   )
sender_keyrecipient_keyephemeral_keyexchange_derive_keyheadersr   cek_sizer   )r    r$   r)   r0   r;   r<   r=   sender_shared_keyephemeral_shared_key
shared_keyr?   s              r!   __encrypt_agreed_upon_keyz)ECDH1PUAlgModel.__encrypt_agreed_upon_keyH   s    ))
!//!//%%%((((((&::=I,@@O),==
##%(WcllDMM[^__r#   c                 L   | j                  |       |j                         }d|v sJ |j                  }|j                  }|J |J |j	                  |d         }|j                  |      }|j                  |      }	|	|z   }
t        |
||j                  | j                  |      S )Nr   )	r(   r?   r;   r<   
import_keyr>   r   r@   r   )r    r$   r)   r0   r?   r;   r<   r=   rA   rB   rC   s              r!   __decrypt_agreed_upon_keyz)ECDH1PUAlgModel.__decrypt_agreed_upon_keyV   s    ##%))
!//%%%(((%00@)==jI,@@O),==
(WcllDMM[^__r#   )__name__
__module____qualname____doc__r   more_header_registry	key_types	tag_awarer   r"   r   r(   r   r
   bytesr/   r3   r7   r9   r-   r6    r#   r!   r   r      s|    5udC5u=5u=7	 uII	)^d%: 	)?k ?d ?D; D9UCS DX] DCK CIV[L\ Cch Cmr CD; D9UCS DX] DCK CIV[L\ Cch Cmr C`[ `YuEU `\adh\h `mr ``[ `YuEU `\adh\h `mr `r#   r   Nc                      ddl m}  ddlm} t        D ]6  }| j                  |       |j                  |j                  |j                  <   8 y )Nr   )JWERegistry)KeySet)	jwerR   r   rS   r   registerrM   algorithm_keysr   )rR   rS   models      r!   r   r   o   s8    !U#,1OOejj)  r#   )r%   N)_rfc7516.modelsr   r   r   r   _rfc7518.jwe_algsr   r   r	   _rfc7518.ec_keyr
   _rfc7518.derive_keyr   _rfc7518.jwe_encsr   registryr   errorsr   __all__r   r   r   rP   r#   r!   <module>r`      sq    U U 
 $ / & 4 EQ`o Q`j DFFF	<r#   