+
    '(jD                        ^ RI t ^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
 ^ RIHt ^ RIHt ^ RIHtHtHt  ! R	 R
]P$                  4      t ! R R]P$                  4      t/ 3R lt]R8X  d   R t]P0                  ! RR7       R# R# )    N)	unhexlify)HPKE)DeserializeError)ECC)list_test_cases)DH)SHA256SHA384SHA512c            
          a  ] tR t^t o ]P
                  ! RR7      t]P
                  ! RR7      tR^AR^aR^R^ R^8/tR t	R t
R	 tR
 tR tR tR tR tR tR tR tR tR tR tR tRtV tR# )
HPKE_Testsp256curvep384p521
curve25519curve448c                   \         P                  ! VR 7      pTp\        P                  ! VP	                  4       VR7      pV P                  \        VP                  4      V P                  V,          4       VP                  RRR7      p\        P                  ! VVVP                  R7      pVP                  VRR7      pV P                  RV4       VP                  R4      pVP                  V4      p	V P                  RV	4       R# )r   receiver_keyaead_id   ABC   DEF	auth_datar   r   encs   GHIN)r   generater   new
public_keyassertEquallenr   curvessealunseal)
selfr   r   key1	encryptorct	decryptorptct2pt2s
   &&&       W/home/ubuntu/cf-venv/lib/python3.14/site-packages/Crypto/SelfTest/Protocol/test_HPKE.py
round_tripHPKE_Tests.round_trip   s    ||%(HH$//*;%,.	Y]]+T[[-?@ ^^Ff^5HH$%,!*0	 bF3$ nnV$s#%    c                    V P                   P                  4        F+  p\        P                   F  pV P	                  W4       K  	  K-  	  R # N)r$   keysr   AEADr0   )r'   r   r   s   &  r/   test_round_tripHPKE_Tests.test_round_trip5   s3    [[%%'E99/ % (r2   c                    \         P                  P                  p\         P                  ! V P                  P                  4       VRR7       R# )   a)r   r   pskN)r:   s    ccccccccccccccccccccccccccccccccr   r6   
AES128_GCMr    r(   r!   r'   r   s   & r/   test_pskHPKE_Tests.test_psk:   s2    ))&&dii224 &	(r2   c                    \         P                  P                  p\         P                  ! V P                  P                  4       VR R7       R# )s   baba)r   r   infoNr<   r>   s   & r/   	test_infoHPKE_Tests.test_info@   s2    ))&&dii224 	r2   c                l   \         P                  ! R R7      pV P                  \        4      ;_uu_ 4       p\        P
                  ! VP                  4       \        P                  P                  R7       RRR4       V P                  R\        XP                  4      4       R#   + '       g   i     L7; i)p224r   r   NzUnsupported curve)r   r   assertRaises
ValueErrorr   r    r!   r6   r=   assertInstr	exceptionr'   key3cms   &  r/   test_neg_unsupported_curve%HPKE_Tests.test_neg_unsupported_curveF   sm    ||&)z**bHH$//"3!YY113 + 	)3r||+<= +*s   ?B##B3	c                L   V P                  \        4      ;_uu_ 4       p\        P                  ! V P                  V P
                  \        P                  P                  R 7       RRR4       V P                  R\        XP                  4      4       R#   + '       g   i     L7; i)r   
sender_keyr   NzExactly 1 private key)rG   rH   r   r    r(   key2r6   r=   rI   rJ   rK   r'   rN   s   & r/   test_neg_too_many_private_keys)HPKE_Tests.test_neg_too_many_private_keysM   sc    z**bHH$)) $		!YY113 + 	-s2<</@A	 +*s   ABB#	c                   \         P                  ! R R7      pV P                  \        4      ;_uu_ 4       p\        P
                  ! V P                  P                  4       V\        P                  P                  R7       RRR4       V P                  R\        XP                  4      4       R#   + '       g   i     L7; i)r   r   rR   Nzbut recipient key)r   r   rG   rH   r   r    r(   r!   r6   r=   rI   rJ   rK   rL   s   &  r/   test_neg_curve_mismatch"HPKE_Tests.test_neg_curve_mismatchT   sv    ||&)z**bHH$))"6"6"8 $!YY113 + 	)3r||+<=	 +*s   A
B..B>	c                ^   V P                  \        4      ;_uu_ 4       p\        P                  ! V P                  P                  4       R\        P                  P                  R7       RRR4       V P                  \        4      ;_uu_ 4       p\        P                  ! V P                  P                  4       R\        P                  P                  R7       RRR4       V P                  \        4      ;_uu_ 4       p\        P                  ! V P                  P                  4       R\        P                  P                  R7       RRR4       V P                  R\        XP                  4      4       R#   + '       g   i     EL; i  + '       g   i     L; i  + '       g   i     L^; i)r2   )r   r;   r   Nzat least 32)r2   s    GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG)   JJJr2   )r\   s   YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY)rG   rH   r   r    r(   r!   r6   r=   rI   rJ   rK   rU   s   & r/   test_neg_pskHPKE_Tests.test_neg_psk\   s   z**bHH$))"6"6"8)!YY113 +
 z**bHH$))"6"6"8&!YY113 +
 z**bHH$))"6"6"8,!YY113 + 	mS%67 +**
 +*
 +*s&   A
E5A
F	<A
F5F		F	F,	c           	        R	pV P                  \        4      ;_uu_ 4        \        P                  ! V P                  \        P
                  P                  VR7       RRR4       V P                  \        4      ;_uu_ 4       p\        P                  ! V P                  P                  4       V P                  P                  4       P                  RR7      \        P
                  P                  R7       RRR4       V P                  R\        XP                  4      4       V P                  \        4      ;_uu_ 4       p\        P                  ! V P                  \        P
                  P                  R7       RRR4       V P                  R\        VP                  4      4       R#   + '       g   i     ELT; i  + '       g   i     L; i  + '       g   i     L^; i)
   r   Nrawformat)r   r   r   z'enc' cannot be an inputr   z'enc' requiredsA   8888888888888888888888888888888888888888888888888888888888888888)rG   r   r   r    r(   r6   r=   rH   r!   
export_keyrI   rJ   rK   )r'   	wrong_encrN   s   &  r/   test_neg_wrong_encHPKE_Tests.test_neg_wrong_encm   s)   '	/00HH$))!YY11"$ 1
 z**bHH$))"6"6"8--/::%:H!YY113 + 	0#bll2CDz**bHH$))!YY113 + 	&BLL(9: 100
 +* +*s$   <F'A2F;=;G'F8	;G	G	c                b   \         P                  ! V P                  \         P                  P                  V P
                  P                  4       P                  R R7      R7      pV P                  \        4      ;_uu_ 4        VP                  R4       RRR4       R#   + '       g   i     R# ; i)ra   rb   r   Ns<   XYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZ)r   r    r(   r6   CHACHA20_POLY1305rT   r!   rd   rG   rH   r&   )r'   r+   s   & r/   test_neg_unseal_wrong_ct#HPKE_Tests.test_neg_unseal_wrong_ct   sr    HH$))%)YY%@%@!%!5!5!7!B!B%!B!PR	 z**[) +***s   BB.	c                   \         P                  P                  p\         P                  ! V P                  P                  4       VR 7      pVP                  RRR7      p\         P                  ! V P                  VVP                  R7      pV P                  \        4      ;_uu_ 4        VP                  V4       RRR4       R#   + '       g   i     R# ; i)r   r   r   r   r   N)r   r6   ri   r    r(   r!   r%   r   rG   rH   r&   )r'   r   r)   r*   r+   s   &    r/   test_neg_unseal_no_auth_data'HPKE_Tests.test_neg_unseal_no_auth_data   s    ))--HH$))*>*>*@%,.	 ^^Ff^5HH$))%,!*0	 z**R  +***s   (CC	c                   R p\         P                  ! \        P                  V4      4      pRp\        P                  V4      pRp\        P                  V4      pRp\        P                  V4      pRp	\        P                  V	4      p
Rp\        P                  V4      pRp\        P                  V4      pRp\        P                  V4      p\        P
                  P                  p\        P                  ! VVVVR7      pVP                  Wj4      pV P                  VV4       VP                  VV4      pV P                  VV4       R	# )
@4612c550263fc8ad58375df3f557aac531d26850903e55a9f23f21d8534e8ac8:4265617574792069732074727574682c20747275746820626561757479Zf938558b5d72f1a23810b4be2ab4f84331acc02fc97babc53a52ae8218a355a96d8770ac83d07bea87e13c512a@37fda3567bdbd628e88668c3c8d7e97d1d1253b6d4ea6d44c150f741f1bf4431436f756e742d30436f756e742d31(4f6465206f6e2061204772656369616e2055726eZaf2d7e9ac9ae7e270f46ba1f975be53c09f8d875bdc8535458c2494e8a6eab251c03d0c22a56b8ca42c2063b84)r   r   rB   r   N
r   import_x25519_private_keybytesfromhexr   r6   r=   r    r&   r"   )r'   keyR_hexkeyRpt_hexr,   ct0_hexct0enc_hexr   aad0_hexaad0aad1_hexaad1info_hexrB   ct1_hexct1r   r+   pt_X0pt_X1s   &                    r/   test_x25519_mode_0HPKE_Tests.test_x25519_mode_0   s    V++EMM(,CDM]]6"nmmG$TmmG$#}}X&#}}X&=}}X&nmmG$))&&HH$%,"&!$&	
   +#  d+#r2   c                   R p\         P                  ! \        P                  V4      4      pRp\        P                  V4      pRp\        P                  V4      pRp\        P                  V4      pRp	\        P                  V	4      p
Rp\        P                  V4      pRp\        P                  V4      pRp\        P                  V4      pRp\        P                  V4      pR	p\        P                  V4      p\        P
                  P                  p\        P                  ! VVVWF3VR
7      pVP                  W4      pV P                  VV4       VP                  VV4      pV P                  VV4       R# )@c5eb01eb457fe6c6f57577c5413b931550a162c71a03ac8d196babbd4e5ce0fd,456e6e796e20447572696e206172616e204d6f726961@0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82rq   Ze52c6fed7f758d0cf7145689f21bc1be6ec9ea097fef4e959440012f4feb73fb611b946199e681f4cfc34db8ea@0ad0950d9fb9588e59690b74f1237ecdf1d775cd60be2eca57af5a4b0471c91brt   ru   rv   Z49f3b19b28a9ea9f43e8c71204c00d4a490ee7f61387b6719db765e948123b45b61633ef059ba22cd62437c8ba)r   r   rB   r;   r   Nrx   )r'   r|   r}   
psk_id_hexpsk_idpsk_hexr;   r~   r,   r   r   r   r   r   r   r   r   r   rB   r   r   r   r+   r   r   s   &                        r/   test_x25519_mode_1HPKE_Tests.test_x25519_mode_1   s?    V++EMM(,CDC
z*TmmG$M]]6"nmmG$TmmG$#}}X&#}}X&=}}X&nmmG$))&&HH$%,"&"(!$	&	   +#  d+#r2   c                   R p\         P                  ! \        P                  V4      4      pRp\         P                  ! \        P                  V4      4      pRp\        P                  V4      pRp\        P                  V4      pRp	\        P                  V	4      p
Rp\        P                  V4      pRp\        P                  V4      pRp\        P                  V4      pRp\        P                  V4      p\        P
                  P                  p\        P                  ! VVP                  4       VVV
R	7      pVP                  W4      pV P                  VV4       VP                  VV4      pV P                  VV4       R
# )@fdea67cf831f1ca98d8e27b1f6abeb5b7745e9d35348b80fa407ff6958f9137e@dc4a146313cce60a278a5323d321f051c5707e9c45ba21a3479fecdf76fc69ddrq   Z5fd92cc9d46dbf8943e72a07e42f363ed5f721212cd90bcfd072bfd9f44e06b80fd17824947496e21b680c141b@23fb952571a14a25e3d678140cd0e5eb47a0961bb18afcf85896e5453c312e76rt   ru   rv   Zd3736bb256c19bfa93d79e8f80b7971262cb7c887e35c26370cfed62254369a1b52e3d505b79dd699f002bc8ed)r   rS   r   rB   r   Nr   ry   rz   r{   r   r6   r=   r    r!   r&   r"   )r'   r|   r}   keyS_hexkeySr~   r,   r   r   r   r   r   r   r   r   r   rB   r   r   r   r+   r   r   s   &                      r/   test_x25519_mode_2HPKE_Tests.test_x25519_mode_2   s<    V++EMM(,CDU++EMM(,CDM]]6"nmmG$TmmG$#}}X&#}}X&=}}X&nmmG$))&&HH$(,(9%,"&!$	&	   +#  d+#r2   c           	     j   R p\         P                  ! \        P                  V4      4      pRp\         P                  ! \        P                  V4      4      pRp\        P                  V4      pRp\        P                  V4      pRp	\        P                  V	4      p
Rp\        P                  V4      pRp\        P                  V4      pRp\        P                  V4      pRp\        P                  V4      pR	p\        P                  V4      pR
p\        P                  V4      p\        P
                  P                  p\        P                  ! VVP                  4       VWh3VVR7      pVP                  VV4      pV P                  VV
4       VP                  VV4      pV P                  VV
4       R# )@cb29a95649dc5656c2d054c1aa0d3df0493155e9d5da6d7e344ed8b6a64a9423@fc1c87d2f3832adb178b431fce2ac77c7ca2fd680f3406c77b5ecdf818b119f4r   r   rq   Za84c64df1e11d8fd11450039d4fe64ff0c8a99fca0bd72c2d4c3e0400bc14a40f27e45e141a24001697737533e@820818d3c23993492cc5623ab437a48a0a7ca3e9639c140fe1e33811eb844b7crt   ru   rv   Z4d19303b848f424fc3c3beca249b2c6de0a34083b8e909b6aa4c3688505c05ffe0c8f57a0a4c5ab9da127435d9)r   rS   r   r;   rB   r   Nr   )r'   r|   r}   r   r   r   r   r   r;   r~   r,   r   r   r   r   r   r   r   r   r   rB   r   r   r   r+   r   r   s   &                          r/   test_x25519_mode_3HPKE_Tests.test_x25519_mode_3  si    V++EMM(,CDU++EMM(,CDC
z*TmmG$M]]6"nmmG$TmmG$#}}X&#}}X&=}}X&nmmG$))&&HH$(,(9%,"("&!$&	   d+#  d+#r2    N)__name__
__module____qualname____firstlineno__r   r   r(   rT   r$   r0   r7   r?   rC   rO   rV   rY   r]   rf   rj   rm   r   r   r   r   __static_attributes____classdictcell____classdict__s   @r/   r   r      s     <<f%D<<f%D 	bBF&.0
(>B>8";$*!&$P-$^*$X1$ 1$r2   r   c                   8   a  ] tR tRt o R tR tR tR tRtV t	R# )HPKE_TestVectorsiM  c                   . V n          ^ RIp\        P                  P	                  VP
                  4      p\        P                  P                  VRRR4      p\        VR4      ;_uu_ 4       p\        P                  ! V4      V n         RRR4       R#   + '       g   i     R# ; i  \        \        3 d    \        R4        R# i ; i)r   NProtocol
wycheproofzHPKE-test-vectors.jsonrzN
Warning: skipping extended tests for HPKE (install pycryptodome-test-vectors))vectorspycryptodome_test_vectorsospathdirname__file__joinopenjsonloadFileNotFoundErrorImportErrorprint)r'   r   init_dirfull_file_namefs   &    r/   setUpHPKE_TestVectors.setUpO  s    	e,ww'@'I'IJHWW\\(JNfgNnc**a#yy| +***!;/ 	ecd	es0   A#B& ,BB& B#	B& #B& &CCc                   \        V4      pV^8X  d.   \        P                  ! R\        P	                  VRR7      R7      # V^8X  d.   \        P                  ! R\        P	                  VRR7      R7      # V^8X  d.   \        P                  ! R\        P	                  VRR7      R7      # V^ 8X  d   \
        P                  ! V4      # V^!8X  d   \
        P                  ! V4      # R# )   r   big)	byteorder)r   dr   r   N)r   r   	constructint
from_bytesr   ry   import_x448_private_key)r'   key_hexkem_idkey_bins   &&& r/   import_private_key#HPKE_TestVectors.import_private_keyZ  s    G$V==vJO 2@ 2Q R Rv==vJO 2@ 2Q R Rv==vJO 2@ 2Q R Rv//88v--g66 r2   c                n   V P                   '       g   V P                  R4       \        V P                   4       EFd  w  rVR,          pVR,          pVR,          pVR8X  d   K*  R\        R\        R\
        R\        R\
        /pVP                  W434      pVf   Kb  V P                  WVR7      ;_uu_ 4        V P                  VR,          V4      P                  4       pRp	R	V9   d   V P                  VR	,          V4      p	V P                  VR
,          V4      p
\        P                  P                  VVVV	V
4      w  rV P                  VP                  4       VR,          4       V P                  V\        VR,          4      4       RRR4       \!        RRRR7       EKg  	  R#   + '       g   i     L%; i)z+Test HPKE encapsulation using test vectors.No test vectors availabler   kdf_idr     Nidxr   r   skRmskSmskEmr   shared_secret. Tendflushr                      r   !   r   )r   skipTest	enumerater	   r
   r   getsubTestr   r!   r   HPKE_Cipher_encapr"   hexr   r   )r'   r   vectorr   r   r   supported_combihashmodreceiver_pubsender_priv	encap_keyr   r   s   &            r/   test_hpke_encap HPKE_TestVectors.test_hpke_encapj  s    |||MM56$T\\2KCH%FH%FY'G &  VVVVVO &))6*:;G#gFF#66vf~7= ??Iz|  #V#"&"9"9&.:@#BK !33F6NFK	%)%5%5%<%<\=C=D=H=F	&H"
   F5M:  !*6/+B!CE% G* #2T**W 3, GFs   6CF$$F4c                   V P                   '       g   V P                  R4       \        V P                   4       EF  w  rVR,          pVR,          pVR,          pVR8X  d   K*  RpW43V9  d   K6  V P                  WVR7      ;_uu_ 4        V P	                  VR,          V4      pRpR	V9   d*   V P	                  VR	,          V4      p	V	P                  4       p\        VR
,          4      p
RpRV9   d%   \        VR,          4      \        VR,          4      3p\        P                  ! V\        P                  ! V4      V
VV\        VR,          4      R7      pVR,           F^  p\        VR,          4      p\        VR,          4      p\        VR,          4      pVP                  VV4      pV P                  VVR4       K`  	  RRR4       \        RRRR7       EK  	  R#   + '       g   i     L%; i)z7Test HPKE encryption and decryption using test vectors.r   r   r   r   r   r   r   Nr   r   r   r;   rB   )r   r   r   rS   r;   rB   encryptionsr,   r*   aadzDecryption failedr   r   Tr   )r   r   r   r   r   )r   r   r   r   r   r!   r   r   r    r6   r&   r"   r   )r'   r   r   r   r   r   r   receiver_priv
sender_pubr  r  r;   receiver_hpke
encryption	plaintext
ciphertextr  	decrypteds   &                 r/   test_hpke_unseal!HPKE_TestVectors.test_hpke_unseal  s    |||MM56$T\\2KCH%FH%FY'G & O 6#gFF $ 7 7v8>!@ "
V#"&"9"9&.:@#BK!,!7!7!9J%fUm4	v%#F8$45y7OOC $m1571C-64>-0.7v.G!I #)"7"7J )*T*: ;I!*:d+;!<J#Ju$56C !. 4 4Z EI$$Y	;NO #81 GD #2T**o 3* GFs   
D6GG-)r   N)
r   r   r   r   r   r   r  r  r   r   r   s   @r/   r   r   M  s      	e7 1+f=+ =+r2   r   c                     . pV\        \        4      ,          pV P                  R 4      '       d   V\        \        4      ,          pV# )
slow_tests)r   r   r   r   )configtestss   & r/   	get_testsr    s:    E	_Z((Ezz,!122Lr2   __main__c                  >    \         P                  ! \        4       4      # r4   )unittest	TestSuiter  r   r2   r/   suiter    s    !!)+..r2   r  )defaultTest)r   r   r  binasciir   Crypto.Protocolr   Crypto.Protocol.HPKEr   Crypto.PublicKeyr   Crypto.SelfTest.st_commonr   r   Crypto.Hashr	   r
   r   TestCaser   r   r  r   r  mainr   r2   r/   <module>r$     sz    	      1   5  . .z$"" z$z	M+x(( M+`   z/MMg& r2   