
    iD                        S SK r S SKr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JrJr   " S	 S
\R$                  5      r " S S\R$                  5      r0 4S jr\S:X  a  S r\R0                  " SS9  gg)    N)	unhexlify)HPKE)DeserializeError)ECC)list_test_cases)DH)SHA256SHA384SHA512c                       \ rS rSr\R
                  " SS9r\R
                  " SS9rSSSSSS	.rS
 r	S r
S rS rS rS rS rS rS rS rS rS rS rS rS rSrg)
HPKE_Tests   p256curveA   a          8   )r   p384p521
curve25519curve448c                    [         R                  " US9nUn[        R                  " UR	                  5       US9nU R                  [        UR                  5      U R                  U   5        UR                  SSS9n[        R                  " UUUR                  S9nUR                  USS9nU R                  SU5        UR                  S5      nUR                  U5      n	U R                  SU	5        g )Nr   receiver_keyaead_id   ABC   DEF	auth_datar   r   encs   GHI)r   generater   new
public_keyassertEquallenr$   curvessealunseal)
selfr   r   key1	encryptorct	decryptorptct2pt2s
             ]/var/www/html/trading/venv/lib/python3.13/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                     U R                   R                  5        H+  n[        R                   H  nU R	                  X5        M     M-     g N)r*   keysr   AEADr6   )r-   r   r   s      r5   test_round_tripHPKE_Tests.test_round_trip5   s3    [[%%'E99/ % (r8   c                     [         R                  R                  n[         R                  " U R                  R                  5       USS9  g )N)   as    cccccccccccccccccccccccccccccccc)r   r   pskr   r<   
AES128_GCMr&   r.   r'   r-   r   s     r5   test_pskHPKE_Tests.test_psk:   s2    ))&&dii224 &	(r8   c                     [         R                  R                  n[         R                  " U R                  R                  5       USS9  g )Ns   baba)r   r   inforB   rD   s     r5   	test_infoHPKE_Tests.test_info@   s2    ))&&dii224 	r8   c                 J   [         R                  " SS9nU R                  [        5       n[        R
                  " UR                  5       [        R                  R                  S9  S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)Np224r   r   zUnsupported curve)r   r%   assertRaises
ValueErrorr   r&   r'   r<   rC   assertInstr	exceptionr-   key3cms      r5   test_neg_unsupported_curve%HPKE_Tests.test_neg_unsupported_curveF   sj    ||&)z*bHH$//"3!YY113 + 	)3r||+<= +*s   <B
B"c                 0   U R                  [        5       n[        R                  " U R                  U R
                  [        R                  R                  S9  S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)Nr   
sender_keyr   zExactly 1 private key)rM   rN   r   r&   r.   key2r<   rC   rO   rP   rQ   r-   rT   s     r5   test_neg_too_many_private_keys)HPKE_Tests.test_neg_too_many_private_keysM   s`    z*bHH$)) $		!YY113 + 	-s2<</@A	 +*s   AB
Bc                 `   [         R                  " SS9nU R                  [        5       n[        R
                  " U R                  R                  5       U[        R                  R                  S9  S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)Nr   r   rX   zbut recipient key)r   r%   rM   rN   r   r&   r.   r'   r<   rC   rO   rP   rQ   rR   s      r5   test_neg_curve_mismatch"HPKE_Tests.test_neg_curve_mismatchT   ss    ||&)z*bHH$))"6"6"8 $!YY113 + 	)3r||+<=	 +*s   AB
B-c                    U R                  [        5       n[        R                  " U R                  R                  5       S[        R                  R                  S9  S S S 5        U R                  [        5       n[        R                  " U R                  R                  5       S[        R                  R                  S9  S S S 5        U R                  [        5       n[        R                  " U R                  R                  5       S[        R                  R                  S9  S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       NV= f)N)r8   s    GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG)r   rA   r   )   JJJr8   )rb   s   YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYzat least 32)rM   rN   r   r&   r.   r'   r<   rC   rO   rP   rQ   r[   s     r5   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E:AE$AE5
E!$
E25
Fc                 l   SnU R                  [        5         [        R                  " U R                  [        R
                  R                  US9  S S S 5        U R                  [        5       n[        R                  " U R                  R                  5       U R                  R                  5       R                  SS9[        R
                  R                  S9  S S S 5        U R                  S[        WR                  5      5        U R                  [        5       n[        R                  " U R                  [        R
                  R                  S9  S S S 5        U R                  S[        UR                  5      5        g ! , (       d  f       GN8= f! , (       d  f       N= f! , (       d  f       NW= f)	NsA   8888888888888888888888888888888888888888888888888888888888888888r#   rawformat)r   r$   r   z'enc' cannot be an inputr   z'enc' required)rM   r   r   r&   r.   r<   rC   rN   r'   
export_keyrO   rP   rQ   )r-   	wrong_encrT   s      r5   test_neg_wrong_encHPKE_Tests.test_neg_wrong_encm   s   '	/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
 +* +*s$   9F.A,F8F%
F
F"%
F3c                 >   [         R                  " U R                  [         R                  R                  U R
                  R                  5       R                  SS9S9nU R                  [        5         UR                  S5        S S S 5        g ! , (       d  f       g = f)Nrf   rg   r#   s<   XYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZ)r   r&   r.   r<   CHACHA20_POLY1305rZ   r'   ri   rM   rN   r,   )r-   r1   s     r5   test_neg_unseal_wrong_ct#HPKE_Tests.test_neg_unseal_wrong_ct   sl    HH$))%)YY%@%@!%!5!5!7!B!B%!B!PR	 z*[) +**s   3B
Bc                    [         R                  R                  n[         R                  " U R                  R                  5       US9nUR                  SSS9n[         R                  " U R                  UUR                  S9nU R                  [        5         UR                  U5        S S S 5        g ! , (       d  f       g = f)Nr   r   r    r!   r#   )r   r<   rn   r&   r.   r'   r+   r$   rM   rN   r,   )r-   r   r/   r0   r1   s        r5   test_neg_unseal_no_auth_data'HPKE_Tests.test_neg_unseal_no_auth_data   s    ))--HH$))*>*>*@%,.	 ^^Ff^5HH$))%,!*0	 z*R  +**s   B22
C c                    Sn[         R                  " [        R                  U5      5      nSn[        R                  U5      nSn[        R                  U5      nSn[        R                  U5      nSn	[        R                  U	5      n
Sn[        R                  U5      nSn[        R                  U5      nSn[        R                  U5      n[        R
                  R                  n[        R                  " UUUUS	9nUR                  Xj5      nU R                  UU5        UR                  UU5      nU R                  UU5        g )
N@4612c550263fc8ad58375df3f557aac531d26850903e55a9f23f21d8534e8ac8:4265617574792069732074727574682c20747275746820626561757479Zf938558b5d72f1a23810b4be2ab4f84331acc02fc97babc53a52ae8218a355a96d8770ac83d07bea87e13c512a@37fda3567bdbd628e88668c3c8d7e97d1d1253b6d4ea6d44c150f741f1bf4431436f756e742d30436f756e742d31(4f6465206f6e2061204772656369616e2055726eZaf2d7e9ac9ae7e270f46ba1f975be53c09f8d875bdc8535458c2494e8a6eab251c03d0c22a56b8ca42c2063b84)r   r   rH   r$   
r   import_x25519_private_keybytesfromhexr   r<   rC   r&   r,   r(   )r-   keyR_hexkeyRpt_hexr2   ct0_hexct0enc_hexr$   aad0_hexaad0aad1_hexaad1info_hexrH   ct1_hexct1r   r1   pt_X0pt_X1s                        r5   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+#r8   c                    Sn[         R                  " [        R                  U5      5      nSn[        R                  U5      nSn[        R                  U5      nSn[        R                  U5      nSn	[        R                  U	5      n
Sn[        R                  U5      nSn[        R                  U5      nSn[        R                  U5      nS	n[        R                  U5      nS
n[        R                  U5      n[        R
                  R                  n[        R                  " UUUXF4US9nUR                  X5      nU R                  UU5        UR                  UU5      nU R                  UU5        g )N@c5eb01eb457fe6c6f57577c5413b931550a162c71a03ac8d196babbd4e5ce0fd,456e6e796e20447572696e206172616e204d6f726961@0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82rv   Ze52c6fed7f758d0cf7145689f21bc1be6ec9ea097fef4e959440012f4feb73fb611b946199e681f4cfc34db8ea@0ad0950d9fb9588e59690b74f1237ecdf1d775cd60be2eca57af5a4b0471c91bry   rz   r{   Z49f3b19b28a9ea9f43e8c71204c00d4a490ee7f61387b6719db765e948123b45b61633ef059ba22cd62437c8ba)r   r   rH   rA   r$   r}   )r-   r   r   
psk_id_hexpsk_idpsk_hexrA   r   r2   r   r   r   r$   r   r   r   r   r   rH   r   r   r   r1   r   r   s                            r5   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+#r8   c                     Sn[         R                  " [        R                  U5      5      nSn[         R                  " [        R                  U5      5      nSn[        R                  U5      nSn[        R                  U5      nSn	[        R                  U	5      n
Sn[        R                  U5      nSn[        R                  U5      nSn[        R                  U5      nS	n[        R                  U5      n[        R
                  R                  n[        R                  " UUR                  5       UUU
S
9nUR                  X5      nU R                  UU5        UR                  UU5      nU R                  UU5        g )N@fdea67cf831f1ca98d8e27b1f6abeb5b7745e9d35348b80fa407ff6958f9137e@dc4a146313cce60a278a5323d321f051c5707e9c45ba21a3479fecdf76fc69ddrv   Z5fd92cc9d46dbf8943e72a07e42f363ed5f721212cd90bcfd072bfd9f44e06b80fd17824947496e21b680c141b@23fb952571a14a25e3d678140cd0e5eb47a0961bb18afcf85896e5453c312e76ry   rz   r{   Zd3736bb256c19bfa93d79e8f80b7971262cb7c887e35c26370cfed62254369a1b52e3d505b79dd699f002bc8ed)r   rY   r   rH   r$   r   r~   r   r   r   r<   rC   r&   r'   r,   r(   )r-   r   r   keyS_hexkeySr   r2   r   r   r   r$   r   r   r   r   r   rH   r   r   r   r1   r   r   s                          r5   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+#r8   c           	      b   Sn[         R                  " [        R                  U5      5      nSn[         R                  " [        R                  U5      5      nSn[        R                  U5      nSn[        R                  U5      nSn	[        R                  U	5      n
Sn[        R                  U5      nSn[        R                  U5      nSn[        R                  U5      nS	n[        R                  U5      nS
n[        R                  U5      nSn[        R                  U5      n[        R
                  R                  n[        R                  " UUR                  5       UXh4UUS9nUR                  UU5      nU R                  UU
5        UR                  UU5      nU R                  UU
5        g )N@cb29a95649dc5656c2d054c1aa0d3df0493155e9d5da6d7e344ed8b6a64a9423@fc1c87d2f3832adb178b431fce2ac77c7ca2fd680f3406c77b5ecdf818b119f4r   r   rv   Za84c64df1e11d8fd11450039d4fe64ff0c8a99fca0bd72c2d4c3e0400bc14a40f27e45e141a24001697737533e@820818d3c23993492cc5623ab437a48a0a7ca3e9639c140fe1e33811eb844b7cry   rz   r{   Z4d19303b848f424fc3c3beca249b2c6de0a34083b8e909b6aa4c3688505c05ffe0c8f57a0a4c5ab9da127435d9)r   rY   r   rA   rH   r$   r   )r-   r   r   r   r   r   r   r   rA   r   r2   r   r   r   r$   r   r   r   r   r   rH   r   r   r   r1   r   r   s                              r5   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+#r8    N)__name__
__module____qualname____firstlineno__r   r%   r.   rZ   r*   r6   r=   rE   rI   rU   r\   r_   rc   rk   ro   rr   r   r   r   r   __static_attributes__r   r8   r5   r   r      s    <<f%D<<f%D F&.0
(>B>8";$*!&$P-$^*$X1$r8   r   c                   ,    \ rS rSrS rS rS rS rSrg)HPKE_TestVectorsiM  c                 v   / U l          SS Kn[        R                  R	                  UR
                  5      n[        R                  R                  USSS5      n[        US5       n[        R                  " U5      U l         S S S 5        g ! , (       d  f       g = f! [        [        4 a    [        S5         g f = f)Nr   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        r5   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 B87B8c                    [        U5      nUS:X  a'  [        R                  " S[        R	                  USS9S9$ US:X  a'  [        R                  " S[        R	                  USS9S9$ US:X  a'  [        R                  " S	[        R	                  USS9S9$ US
:X  a  [
        R                  " U5      $ US:X  a  [
        R                  " U5      $ g )Nr   r   big)	byteorder)r   d   r      r   r   !   )r   r   	constructint
from_bytesr   r~   import_x448_private_key)r-   key_hexkem_idkey_bins       r5   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 r8   c           	         U R                   (       d  U R                  S5        [        U R                   5       GH/  u  pUS   nUS   nUS   nUS:X  a  M  [        [        [
        [        [
        S.nUR                  X445      nUc  MP  U R                  XUS9   U R                  US	   U5      R                  5       nSn	S
U;   a  U R                  US
   U5      n	U R                  US   U5      n
[        R                  R                  UUUU	U
5      u  pU R                  UR                  5       US   5        U R                  U[        US   5      5        SSS5        [!        SSSS9  GM2     g! , (       d  f       N= f)z+Test HPKE encapsulation using test vectors.No test vectors availabler   kdf_idr     )r      )r      )r      )r   r   )r   r   Nidxr   r   skRmskSmskEmr$   shared_secret. Tendflush)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                r5   test_hpke_encap HPKE_TestVectors.test_hpke_encapj  s    ||MM56$T\\2KCH%FH%FY'G &  $####O &))6*:;G#g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   B<E--
E;	c                 F   U R                   (       d  U R                  S5        [        U R                   5       GHT  u  pUS   nUS   nUS   nUS:X  a  M  SnX44U;  a  M(  U R                  XUS9   U R	                  US   U5      nS	nS
U;   a%  U R	                  US
   U5      n	U	R                  5       n[        US   5      n
S	nSU;   a  [        US   5      [        US   5      4n[        R                  " U[        R                  " U5      U
UU[        US   5      S9nUS    HR  n[        US   5      n[        US   5      n[        US   5      nUR                  UU5      nU R                  UUS5        MT     S	S	S	5        [        SSSS9  GMW     g	! , (       d  f       N= f)z7Test HPKE encryption and decryption using test vectors.r   r   r   r   r   r   r   r   Nr   r$   r   rA   rH   )r   r   r$   rY   rA   rH   encryptionsr2   r0   aadzDecryption failedr   r   Tr   )r   r   r   r   r   r'   r   r   r&   r<   r,   r(   r   )r-   r   r   r   r   r   r   receiver_priv
sender_pubr   r   rA   receiver_hpke
encryption	plaintext
ciphertextr  	decrypteds                     r5   test_hpke_unseal!HPKE_TestVectors.test_hpke_unseal  s    ||MM56$T\\2KCH%FH%FY'G & O 6#g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 #)"7J )*T*: ;I!*:d+;!<J#Ju$56C !. 4 4Z EI$$Y	;NO #81 GD #2T*o 3* GFs   0D	F
F 	)r   N)	r   r   r   r   r   r   r   r  r   r   r8   r5   r   r   M  s    	e7 1+f=+r8   r   c                 ~    / nU[        [        5      -  nU R                  S5      (       a  U[        [        5      -  nU$ )N
slow_tests)r   r   r   r   )configtestss     r5   	get_testsr    s:    E	_Z((Ezz,!122Lr8   __main__c                  >    [         R                  " [        5       5      $ r:   )unittest	TestSuiter  r   r8   r5   suiter    s    !!)+..r8   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   r8   r5   <module>r      sz    	      1   5  . .z$"" z$z	M+x(( M+`   z/MMg& r8   