Ë
    (üàg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©ÚcurveéA   é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
             ú`/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/Crypto/SelfTest/Protocol/test_HPKE.pyÚ
round_tripzHPKE_Tests.round_trip   sÖ   € Ü�|‰| %Ô(ˆØˆä—H‘H¨$¯/©/Ó*;Ø%,ô.ˆ	à×Ñœ˜YŸ]™]Ó+¨T¯[©[¸Ñ-?Ô@ð �^‰^˜F¨fˆ^Ó5ˆä—H‘H¨$Ø%,Ø!*§¡ô0ˆ	ð ×Ñ˜b¨FÐÓ3ˆØ×Ñ˜ Ô$ð �n‰n˜VÓ$ˆØ×Ñ˜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?   € Ø—[‘[×%Ñ%Ó'ò 	0ˆEÜŸ9™9ò 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   € Ü—)‘)×&Ñ&ˆÜ�‰˜dŸi™i×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   € Ü—)‘)×&Ñ&ˆÜ�‰˜dŸi™i×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Ó*ð 	3¨bÜ�H‰H $§/¡/Ó"3Ü!ŸY™Y×1Ñ1õ3÷	3ð 	�‰Ð)¬3¨r¯|©|Ó+<Õ=÷	3ð 	3ús   ¬>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Ó*ð 	3¨bÜ�H‰H $§)¡)Ø $§	¡	Ü!ŸY™Y×1Ñ1õ3÷	3ð 	�‰Ð-¬s°2·<±<Ó/@ÕA÷		3ð 	3ús   –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Ó*ð 	3¨bÜ�H‰H $§)¡)×"6Ñ"6Ó"8Ø $Ü!ŸY™Y×1Ñ1õ3÷	3ð 	�‰Ð)¬3¨r¯|©|Ó+<Õ=÷		3ð 	3ús   ¬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Ó*ð 	3¨bÜ�H‰H $§)¡)×"6Ñ"6Ó"8Ø)Ü!ŸY™Y×1Ñ1õ3÷	3ð
 ×ÑœzÓ*ð 	3¨bÜ�H‰H $§)¡)×"6Ñ"6Ó"8Ø&Ü!ŸY™Y×1Ñ1õ3÷	3ð
 ×ÑœzÓ*ð 	3¨bÜ�H‰H $§)¡)×"6Ñ"6Ó"8Ø,Ü!ŸY™Y×1Ñ1õ3÷	3ð 	�‰�m¤S¨¯©Ó%6Õ7÷	3ð 	3ú÷
	3ð 	3ú÷
	3ð 	3ús&   –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ñ 	$Ü�H‰H $§)¡)Ü!ŸY™Y×1Ñ1Ø"õ$÷	$ð
 ×ÑœzÓ*ð 	3¨bÜ�H‰H $§)¡)×"6Ñ"6Ó"8ØŸ™×-Ñ-Ó/×:Ñ:À%Ð:ÓHÜ!ŸY™Y×1Ñ1õ3÷	3ð 	�‰Ð0´#°b·l±lÓ2CÔDà×ÑœzÓ*ð 	3¨bÜ�H‰H $§)¡)Ü!ŸY™Y×1Ñ1õ3÷	3ð 	�‰Ð&¬¨B¯L©LÓ(9Õ:÷	$ñ 	$ú÷
	3ð 	3ú÷	3ð 	3ús$   ˜;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   € Ü—H‘H¨$¯)©)Ü%)§Y¡Y×%@Ñ%@Ø!%§¡×!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–   € Ü—)‘)×-Ñ-ˆä—H‘H¨$¯)©)×*>Ñ*>Ó*@Ø%,ô.ˆ	ð �^‰^˜F¨fˆ^Ó5ˆä—H‘H¨$¯)©)Ø%,Ø!*§¡ô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Ú:4265617574792069732074727574682c20747275746820626561757479ÚZf938558b5d72f1a23810b4be2ab4f84331acc02fc97babc53a52ae8218a355a96d8770ac83d07bea87e13c512aÚ@37fda3567bdbd628e88668c3c8d7e97d1d1253b6d4ea6d44c150f741f1bf4431Ú436f756e742d30Ú436f756e742d31Ú(4f6465206f6e2061204772656369616e2055726eÚZaf2d7e9ac9ae7e270f46ba1f975be53c09f8d875bdc8535458c2494e8a6eab251c03d0c22a56b8ca42c2063b84)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ˆÜ×+Ñ+¬E¯M©M¸(Ó,CÓDˆàMˆÜ�]‰]˜6Ó"ˆànˆÜ�m‰m˜GÓ$ˆàTˆÜ�m‰m˜GÓ$ˆà#ˆÜ�}‰}˜XÓ&ˆà#ˆÜ�}‰}˜XÓ&ˆà=ˆÜ�}‰}˜XÓ&ˆànˆÜ�m‰m˜GÓ$ˆä—)‘)×&Ñ&ˆä—H‘H¨$Ø%,Ø"&Ø!$ô&ˆ	ð
 × Ñ   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ˆÜ×+Ñ+¬E¯M©M¸(Ó,CÓDˆàCˆ
Ü—‘˜zÓ*ˆàTˆÜ�m‰m˜GÓ$ˆàMˆÜ�]‰]˜6Ó"ˆànˆÜ�m‰m˜GÓ$ˆàTˆÜ�m‰m˜GÓ$ˆà#ˆÜ�}‰}˜XÓ&ˆà#ˆÜ�}‰}˜XÓ&ˆà=ˆÜ�}‰}˜XÓ&ˆànˆÜ�m‰m˜GÓ$ˆä—)‘)×&Ñ&ˆä—H‘H¨$Ø%,Ø"&Ø"(¨# Ø!$ô	&ˆ	ð × Ñ   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ˆÜ×+Ñ+¬E¯M©M¸(Ó,CÓDˆàUˆÜ×+Ñ+¬E¯M©M¸(Ó,CÓDˆàMˆÜ�]‰]˜6Ó"ˆànˆÜ�m‰m˜GÓ$ˆàTˆÜ�m‰m˜GÓ$ˆà#ˆÜ�}‰}˜XÓ&ˆà#ˆÜ�}‰}˜XÓ&ˆà=ˆÜ�}‰}˜XÓ&ˆànˆÜ�m‰m˜GÓ$ˆä—)‘)×&Ñ&ˆä—H‘H¨$Ø(,¯©Ó(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ˆÜ×+Ñ+¬E¯M©M¸(Ó,CÓDˆàUˆÜ×+Ñ+¬E¯M©M¸(Ó,CÓDˆàCˆ
Ü—‘˜zÓ*ˆàTˆÜ�m‰m˜GÓ$ˆàMˆÜ�]‰]˜6Ó"ˆànˆÜ�m‰m˜GÓ$ˆàTˆÜ�m‰m˜GÓ$ˆà#ˆÜ�}‰}˜XÓ&ˆà#ˆÜ�}‰}˜XÓ&ˆà=ˆÜ�}‰}˜XÓ&ˆànˆÜ�m‰m˜GÓ$ˆä—)‘)×&Ñ&ˆä—H‘H¨$Ø(,¯©Ó(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Û,Ü—w‘w—‘Ð'@×'IÑ'IÓJˆHÜŸW™WŸ\™\¨(°JÐ@XÓYˆNÜ�n cÓ*ð ,¨aÜ#Ÿy™y¨›|�”÷,÷ ,ñ ,ûä!¤;Ð/ò 	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˜  € ð �|Š|Ø�M‰MÐ5Ô6ä$ T§\¡\Ó2ó +	+‰KˆC�à˜HÑ%ˆFØ˜HÑ%ˆFØ˜YÑ'ˆGð ˜&Ò Øô $Ü#Ü#Ü#Ü#ñˆOð &×)Ñ)¨6°6Ð*:Ó;ˆGØˆØà—‘ #¨f¸g�ÓFñ Eà#×6Ñ6°v¸f±~Ø7=ó ?ß?I¹z»|ð ð #�Ø˜VÑ#Ø"&×"9Ñ"9¸&À¹.Ø:@ó#B�Kð !×3Ñ3°F¸6±NÀFÓK�	ä%)×%5Ñ%5×%<Ñ%<¸\Ø=CØ=DØ=HØ=Fó	&HÑ"�˜sð
 × Ñ  §¡£¨F°5©MÔ:Ø× Ñ  Ü!*¨6°/Ñ+BÓ!CôE÷%Eô* �#˜2 T×*ñ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Ú  € ð �|Š|Ø�M‰MÐ5Ô6ä$ T§\¡\Ó2ó 7	+‰KˆC�à˜HÑ%ˆFØ˜HÑ%ˆFØ˜YÑ'ˆGð ˜&Ò ØðˆOð ˜Ð Ñ6Øà—‘ #¨f¸g�ÓFñ  Pà $× 7Ñ 7¸¸v¹Ø8>ó!@�ð "�
Ø˜VÑ#Ø"&×"9Ñ"9¸&À¹.Ø:@ó#B�Kà!,×!7Ñ!7Ó!9�Jä% f¨U¡mÓ4�	à�Ø˜vÑ%Ü# F¨8Ñ$4Ó5´yÀÈÁÓ7OÐO�Cä $§¡°mÜ15·±¸7Ó1CØ-6Ø4>Ø-0Ü.7¸¸v¹Ó.Gô!I�ð #)¨Ñ"7ò P�Jä )¨*°TÑ*:Ó ;�IÜ!*¨:°dÑ+;Ó!<�JÜ# J¨uÑ$5Ó6�Cð !.× 4Ñ 4°ZÀÓ E�IØ×$Ñ$ Y°	Ð;NÕOñP÷1 PôD �#˜2 T×*ñ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à‡z�z�,ÔØ”Ô!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ÒØ€H‡M�M„Oð ó ð ˆzÒò/à€H‡M�M˜gÖ&ð r6   