
    ,hE                     :   d dl Z d dlZ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 d dlmZmZmZ  G d	 d
ej$                        Z G d dej$                        Zedk(  r ej,                          i fdZedk(  rd Z ej,                  d       yy)    N)	unhexlify)HPKE)DeserializeError)ECC)list_test_cases)DH)SHA256SHA384SHA512c                       e Zd Z ej                  d      Z ej                  d      ZddddddZd	 Zd
 Z	d Z
d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)
HPKE_Testsp256curveA   a          8   )r   p384p521
curve25519curve448c                    t        j                  |      }|}t        j                  |j	                         |      }| j                  t        |j                        | j                  |          |j                  dd      }t        j                  |||j                        }|j                  |d      }| j                  d|       |j                  d      }|j                  |      }	| j                  d|	       y )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
             d/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/Crypto/SelfTest/Protocol/test_HPKE.py
round_tripzHPKE_Tests.round_trip   s    ||%(HH$//*;%,.	Y]]+T[[-?@ ^^Ff^5HH$%,!*0	 bF3$ nnV$s#%    c                     | j                   j                         D ])  }t        j                  D ]  }| j	                  ||        + y N)r)   keysr   AEADr5   )r,   r   r   s      r4   test_round_tripzHPKE_Tests.test_round_trip5   s?    [[%%' 	0E99 0w/0	0r6   c                     t         j                  j                  }t        j                  | j                  j                         |d       y )N)   as    cccccccccccccccccccccccccccccccc)r   r   pskr   r:   
AES128_GCMr%   r-   r&   r,   r   s     r4   test_pskzHPKE_Tests.test_psk:   s2    ))&&dii224 &	(r6   c                     t         j                  j                  }t        j                  | j                  j                         |d       y )Ns   baba)r   r   infor?   rA   s     r4   	test_infozHPKE_Tests.test_info@   s2    ))&&dii224 	r6   c                 H   t        j                  d      }| j                  t              5 }t	        j
                  |j                         t        j                  j                         d d d        | j                  dt        j                               y # 1 sw Y   /xY w)Np224r   r   zUnsupported curve)r   r$   assertRaises
ValueErrorr   r%   r&   r:   r@   assertInstr	exceptionr,   key3cms      r4   test_neg_unsupported_curvez%HPKE_Tests.test_neg_unsupported_curveF   sq    ||&)z* 	3bHH$//"3!YY113	3 	)3r||+<=	3 	3s   >BB!c                 *   | j                  t              5 }t        j                  | j                  | j
                  t        j                  j                         d d d        | j                  dt        j                               y # 1 sw Y   /xY w)Nr   
sender_keyr   zExactly 1 private key)rH   rI   r   r%   r-   key2r:   r@   rJ   rK   rL   r,   rO   s     r4   test_neg_too_many_private_keysz)HPKE_Tests.test_neg_too_many_private_keysM   sg    z* 	3bHH$)) $		!YY113	3 	-s2<</@A		3 	3s   AB		Bc                 ^   t        j                  d      }| j                  t              5 }t	        j
                  | j                  j                         |t        j                  j                         d d d        | j                  dt        j                               y # 1 sw Y   /xY w)Nr   r   rR   zbut recipient key)r   r$   rH   rI   r   r%   r-   r&   r:   r@   rJ   rK   rL   rM   s      r4   test_neg_curve_mismatchz"HPKE_Tests.test_neg_curve_mismatchT   sz    ||&)z* 	3bHH$))"6"6"8 $!YY113	3 	)3r||+<=		3 	3s   A	B##B,c                    | j                  t              5 }t        j                  | j                  j                         dt        j                  j                         d d d        | j                  t              5 }t        j                  | j                  j                         dt        j                  j                         d d d        | j                  t              5 }t        j                  | j                  j                         dt        j                  j                         d d d        | j                  dt        j                               y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   GxY w)N)r6   s    GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG)r   r>   r   )   JJJr6   )rZ   s   YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYzat least 32)rH   rI   r   r%   r-   r&   r:   r@   rJ   rK   rL   rU   s     r4   test_neg_pskzHPKE_Tests.test_neg_psk\   s   z* 	3bHH$))"6"6"8)!YY113	3
 z* 	3bHH$))"6"6"8&!YY113	3
 z* 	3bHH$))"6"6"8,!YY113	3 	mS%67	3 	3
	3 	3
	3 	3s&   A	E<A	E%"A	E1E"%E.1E:c                 `   d}| j                  t              5  t        j                  | j                  t        j
                  j                  |       d d d        | j                  t              5 }t        j                  | j                  j                         | j                  j                         j                  d      t        j
                  j                         d d d        | j                  dt        j                               | j                  t              5 }t        j                  | j                  t        j
                  j                         d d d        | j                  dt        |j                               y # 1 sw Y   :xY w# 1 sw Y   xY w# 1 sw Y   HxY w)	NsA   8888888888888888888888888888888888888888888888888888888888888888r"   rawformat)r   r#   r   z'enc' cannot be an inputr   z'enc' required)rH   r   r   r%   r-   r:   r@   rI   r&   
export_keyrJ   rK   rL   )r,   	wrong_encrO   s      r4   test_neg_wrong_enczHPKE_Tests.test_neg_wrong_encm   s2   '	/0 	$HH$))!YY11"$	$
 z* 	3bHH$))"6"6"8--/::%:H!YY113	3 	0#bll2CDz* 	3bHH$))!YY113	3 	&BLL(9:	$ 	$
	3 	3	3 	3s$   ;F0A1F#:F$FF!$F-c                 >   t        j                  | j                  t         j                  j                  | j
                  j                         j                  d            }| j                  t              5  |j                  d       d d d        y # 1 sw Y   y xY w)Nr]   r^   r"   s<   XYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZXYZ)r   r%   r-   r:   CHACHA20_POLY1305rT   r&   r`   rH   rI   r+   )r,   r0   s     r4   test_neg_unseal_wrong_ctz#HPKE_Tests.test_neg_unseal_wrong_ct   su    HH$))%)YY%@%@!%!5!5!7!B!B%!B!PR	 z* 	*[)	* 	* 	*s   8BBc                    t         j                  j                  }t        j                  | j                  j                         |      }|j                  dd      }t        j                  | j                  ||j                        }| j                  t              5  |j                  |       d d d        y # 1 sw Y   y xY w)Nr   r   r   r    r"   )r   r:   rd   r%   r-   r&   r*   r#   rH   rI   r+   )r,   r   r.   r/   r0   s        r4   test_neg_unseal_no_auth_dataz'HPKE_Tests.test_neg_unseal_no_auth_data   s    ))--HH$))*>*>*@%,.	 ^^Ff^5HH$))%,!*0	 z* 	!R 	! 	! 	!s   B99Cc                    d}t        j                  t        j                  |            }d}t        j                  |      }d}t        j                  |      }d}t        j                  |      }d}	t        j                  |	      }
d}t        j                  |      }d}t        j                  |      }d}t        j                  |      }t        j
                  j                  }t	        j                  ||||	      }|j                  ||
      }| j                  ||       |j                  ||      }| j                  ||       y )
N@4612c550263fc8ad58375df3f557aac531d26850903e55a9f23f21d8534e8ac8:4265617574792069732074727574682c20747275746820626561757479Zf938558b5d72f1a23810b4be2ab4f84331acc02fc97babc53a52ae8218a355a96d8770ac83d07bea87e13c512a@37fda3567bdbd628e88668c3c8d7e97d1d1253b6d4ea6d44c150f741f1bf4431436f756e742d30436f756e742d31(4f6465206f6e2061204772656369616e2055726eZaf2d7e9ac9ae7e270f46ba1f975be53c09f8d875bdc8535458c2494e8a6eab251c03d0c22a56b8ca42c2063b84)r   r   rD   r#   
r   import_x25519_private_keybytesfromhexr   r:   r@   r%   r+   r'   )r,   keyR_hexkeyRpt_hexr1   ct0_hexct0enc_hexr#   aad0_hexaad0aad1_hexaad1info_hexrD   ct1_hexct1r   r0   pt_X0pt_X1s                        r4   test_x25519_mode_0zHPKE_Tests.test_x25519_mode_0   s    V++EMM(,CDM]]6"nmmG$TmmG$#}}X&#}}X&=}}X&nmmG$))&&HH$%,"&!$&	
   d+#  d+#r6   c                    d}t        j                  t        j                  |            }d}t        j                  |      }d}t        j                  |      }d}t        j                  |      }d}	t        j                  |	      }
d}t        j                  |      }d}t        j                  |      }d}t        j                  |      }d	}t        j                  |      }d
}t        j                  |      }t        j
                  j                  }t	        j                  |||||f|      }|j                  |
|      }| j                  ||       |j                  ||      }| j                  ||       y )N@c5eb01eb457fe6c6f57577c5413b931550a162c71a03ac8d196babbd4e5ce0fd,456e6e796e20447572696e206172616e204d6f726961@0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82rj   Ze52c6fed7f758d0cf7145689f21bc1be6ec9ea097fef4e959440012f4feb73fb611b946199e681f4cfc34db8ea@0ad0950d9fb9588e59690b74f1237ecdf1d775cd60be2eca57af5a4b0471c91brm   rn   ro   Z49f3b19b28a9ea9f43e8c71204c00d4a490ee7f61387b6719db765e948123b45b61633ef059ba22cd62437c8ba)r   r   rD   r>   r#   rq   )r,   ru   rv   
psk_id_hexpsk_idpsk_hexr>   rw   r1   rx   ry   rz   r#   r{   r|   r}   r~   r   rD   r   r   r   r0   r   r   s                            r4   test_x25519_mode_1zHPKE_Tests.test_x25519_mode_1   sC    V++EMM(,CDC
z*TmmG$M]]6"nmmG$TmmG$#}}X&#}}X&=}}X&nmmG$))&&HH$%,"&"(#!$	&	   d+#  d+#r6   c                    d}t        j                  t        j                  |            }d}t        j                  t        j                  |            }d}t        j                  |      }d}t        j                  |      }d}	t        j                  |	      }
d}t        j                  |      }d}t        j                  |      }d}t        j                  |      }d	}t        j                  |      }t        j
                  j                  }t	        j                  ||j                         |||

      }|j                  ||      }| j                  ||       |j                  ||      }| j                  ||       y )N@fdea67cf831f1ca98d8e27b1f6abeb5b7745e9d35348b80fa407ff6958f9137e@dc4a146313cce60a278a5323d321f051c5707e9c45ba21a3479fecdf76fc69ddrj   Z5fd92cc9d46dbf8943e72a07e42f363ed5f721212cd90bcfd072bfd9f44e06b80fd17824947496e21b680c141b@23fb952571a14a25e3d678140cd0e5eb47a0961bb18afcf85896e5453c312e76rm   rn   ro   Zd3736bb256c19bfa93d79e8f80b7971262cb7c887e35c26370cfed62254369a1b52e3d505b79dd699f002bc8ed)r   rS   r   rD   r#   r   rr   rs   rt   r   r:   r@   r%   r&   r+   r'   )r,   ru   rv   keyS_hexkeySrw   r1   rx   ry   rz   r#   r{   r|   r}   r~   r   rD   r   r   r   r0   r   r   s                          r4   test_x25519_mode_2z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+#  d+#r6   c                 d   d}t        j                  t        j                  |            }d}t        j                  t        j                  |            }d}t        j                  |      }d}t        j                  |      }d}	t        j                  |	      }
d}t        j                  |      }d}t        j                  |      }d}t        j                  |      }d	}t        j                  |      }d
}t        j                  |      }d}t        j                  |      }t        j
                  j                  }t	        j                  ||j                         |||f||      }|j                  ||      }| j                  ||
       |j                  ||      }| j                  ||
       y )N@cb29a95649dc5656c2d054c1aa0d3df0493155e9d5da6d7e344ed8b6a64a9423@fc1c87d2f3832adb178b431fce2ac77c7ca2fd680f3406c77b5ecdf818b119f4r   r   rj   Za84c64df1e11d8fd11450039d4fe64ff0c8a99fca0bd72c2d4c3e0400bc14a40f27e45e141a24001697737533e@820818d3c23993492cc5623ab437a48a0a7ca3e9639c140fe1e33811eb844b7crm   rn   ro   Z4d19303b848f424fc3c3beca249b2c6de0a34083b8e909b6aa4c3688505c05ffe0c8f57a0a4c5ab9da127435d9)r   rS   r   r>   rD   r#   r   )r,   ru   rv   r   r   r   r   r   r>   rw   r1   rx   ry   rz   r#   r{   r|   r}   r~   r   rD   r   r   r   r0   r   r   s                              r4   test_x25519_mode_3zHPKE_Tests.test_x25519_mode_3  sk    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+#r6   N)__name__
__module____qualname__r   r$   r-   rT   r)   r5   r;   rB   rE   rP   rV   rX   r[   rb   re   rg   r   r   r   r    r6   r4   r   r      s    3<<f%D3<<f%D F&.0
(>B>8";$*!&$P-$^*$X1$r6   r   c                   $    e Zd Zd Zd Zd Zd Zy)HPKE_TestVectorsc                 f   g | _         	 dd l}t        j                  j	                  |j
                        }t        j                  j                  |dd      }t        |d      5 }t        j                  |      | _         d d d        y # 1 sw Y   y xY w# t        t        f$ r t        d       Y y w xY w)Nr   Protocolz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        r4   setUpzHPKE_TestVectors.setUpO  s    	e,ww'@'I'IJHWW\\(J@XYNnc* ,a#yy|, , ,!;/ 	ecd	es0   AB #B>B BB B B0/B0c                    t        |      }|dk(  r,t        j                  dt        j	                  |d            S |dk(  r,t        j                  dt        j	                  |d            S |dk(  r,t        j                  d	t        j	                  |d            S |d
k(  rt        j                  |      S |dk(  rt        j                  |      S y )N   r   big)	byteorder)r   d   r      r   r   !   )r   r   	constructint
from_bytesr   rr   import_x448_private_key)r,   key_hexkem_idkey_bins       r4   import_private_keyz#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 r6   c           	         | j                   s| j                  d       t        | j                         D ]2  \  }}|d   }|d   }|d   }|dk(  rt        t        t
        t        t
        d}|j                  ||f      }|N| j                  |||      5  | j                  |d	   |      j                         }d}	d
|v r| j                  |d
   |      }	| j                  |d   |      }
t        j                  j                  ||||	|
      \  }}| j                  |j                         |d          | j                  |t        |d                ddd       t!        ddd       5 y# 1 sw Y   xY w)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                r4   test_hpke_encapz HPKE_TestVectors.test_hpke_encapj  s    ||MM56$T\\2 +	+KCH%FH%FY'G &  $####O &))66*:;G#fgF E#66vf~7= ??Iz|  #V#"&"9"9&.:@#BK !33F6NFK	%)%5%5%<%<\=C=D=H=F	&H"s
   F5M:  !*6/+B!CE%E* #2T*W+	+,E Es   B;E**E3	c                 .   | j                   s| j                  d       t        | j                         D ]S  \  }}|d   }|d   }|d   }|dk(  rd}||f|vr%| j                  |||      5  | j	                  |d   |      }d	}d
|v r%| j	                  |d
   |      }	|	j                         }t        |d         }
d	}d|v rt        |d         t        |d         f}t        j                  |t        j                  |      |
||t        |d               }|d   D ]Q  }t        |d         }t        |d         }t        |d         }|j                  ||      }| j                  ||d       S 	 d	d	d	       t        ddd       V y	# 1 sw Y   xY w)z7Test HPKE encryption and decryption using test vectors.r   r   r   r   r   r   r   r   Nr   r#   r   r>   rD   )r   r   r#   rS   r>   rD   encryptionsr1   r/   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   r>   receiver_hpke
encryption	plaintext
ciphertextr   	decrypteds                     r4   test_hpke_unsealz!HPKE_TestVectors.test_hpke_unseal  s    ||MM56$T\\2 7	+KCH%FH%FY'G & O 6#fgF  P $ 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 PJ )*T*: ;I!*:d+;!<J#Ju$56C !. 4 4Z EI$$Y	;NOP1 PD #2T*o7	+* P  Ps   ,DFF	N)r   r   r   r   r   r   r   r   r6   r4   r   r   M  s    	e7 1+f=+r6   r   __main__c                 t    g }|t        t              z  }| j                  d      r|t        t              z  }|S )N
slow_tests)r   r   r   r   )configtestss     r4   	get_testsr     s7    E	_Z((Ezz,!122Lr6   c                  <    t        j                  t                     S r8   )unittest	TestSuiter   r   r6   r4   suiter     s    !!)+..r6   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   mainr   r   r   r6   r4   <module>r
     s    	      1   5  . .z$"" z$z	M+x(( M+` zHMMO   z/HMMg& r6   