§
    ”P»jH  ã            
       óV  — d Z ddlZddlZddlZddlZej                             dej                             ej                             ej         	                    e
¦  «        d¦  «        ¦  «        ¦  «         ddlmZmZ  G d„ dej        ¦  «        Zedk    r ej        ¦   «          dS dS )z¥
Unit tests for Touch Biometrics Anti-Bot Detection in FreeExile.
Verifies rejection of synthetic emulators/bots and acceptance of authentic human touch kinematics.
é    Nz../../server)ÚTouchBiometricsValidatorÚ
TouchPointc                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestTouchBiometricsc                 ó,   — t          ¦   «         | _        d S )N)r   Ú	validator)Úselfs    ú7C:\Projects\FreeExile\tests\unit\test_security_touch.pyÚsetUpzTestTouchBiometrics.setUp   s   € Ý1Ñ3Ô3ˆŒˆˆó    c           	      ó^  — t          ddddd¬¦  «        t          ddddd¬¦  «        t          d	dd
dd¬¦  «        g}| j                             |¦  «        \  }}}|                      |¦  «         |                      d|                     ¦   «         ¦  «         |                      |d¦  «         dS )z?Emulators or PC mouse injections send zero or 1px touch radius.g      Y@r   g        ç      ð?©ÚxÚyÚtimestamp_msÚmajor_radiusÚforceg     €[@g     @Z@é2   g      ^@éd   zradius too smallçš™™™™™É?N)r   r   Úevaluate_touch_sampleÚassertFalseÚassertInÚlowerÚ
assertLess)r	   ÚpointsÚis_humanÚscoreÚreasons        r
   Ú test_reject_emulator_zero_radiusz4TestTouchBiometrics.test_reject_emulator_zero_radius   s¹   € õ ˜ %°aÀcÐQTÐUÑUÔUÝ˜ %°bÀsÐRUÐVÑVÔVÝ˜ %°cÈÐSVÐWÑWÔWð
ˆð
 #'¤.×"FÒ"FÀvÑ"NÔ"NÑˆ�%˜Ø×Ò˜Ñ"Ô"Ð"Ø�ŠÐ(¨&¯,ª,©.¬.Ñ9Ô9Ð9Ø�Š˜˜sÑ#Ô#Ð#Ð#Ð#r   c                 óª  — g }t          d¦  «        D ]e}|                     t          t          |dz  ¦  «        t          |dz  ¦  «        t          |dz  |dz  z   ¦  «        d|dz  z   d¬¦  «        ¦  «         Œf| j                             |¦  «        \  }}}|                      |¦  «         |                      d	|                     ¦   «         ¦  «         d
S )zOBots move along an exact mathematical straight vector without human hand curve.é
   é   r   é   ç      2@é   r   r   zstraight lineN)	ÚrangeÚappendr   Úfloatr   r   r   r   r   )r	   r   Úir   r   r    s         r
   Ú%test_reject_bot_perfect_straight_linez9TestTouchBiometrics.test_reject_bot_perfect_straight_line!   sÝ   € àˆÝ�r‘”ð 
	ð 
	ˆAà�MŠMÝÝ˜A ™F‘m”mÝ˜A ™F‘m”mÝ!& q¨2¡v°°Q±Ñ'7Ñ!8Ô!8Ø!%¨¨Q©¡Øðñ ô ñô ð ð ð #'¤.×"FÒ"FÀvÑ"NÔ"NÑˆ�%˜Ø×Ò˜Ñ"Ô"Ð"Ø�Š�o v§|¢|¡~¤~Ñ6Ô6Ð6Ð6Ð6r   c                 ót  — g }t          d¦  «        D ]Ü}t          j        |dz  ¦  «        dz  }|                     t	          t          |dz  |z   ¦  «        t          |dz  t          j        |dz  ¦  «        dz  z   ¦  «        t          |dz  t          j        |¦  «        dz  z   ¦  «        d	t          j        |¦  «        dz  z   dt          j        |d
z  ¦  «        dz  z   ¬¦  «        ¦  «         ŒÝ| j                             |¦  «        \  }}}|  	                    |¦  «         |  
                    |d¦  «         dS )zUReal human finger on iPhone with natural curve, radius deformation, and micro-tremor.r#   gš™™™™™é?g      @é   g333333ã?g      @é-   g      @r&   g      à?r   r   gffffffæ?N)r(   ÚmathÚsinr)   r   r*   Úcosr   r   Ú
assertTrueÚassertGreaterEqual)r	   r   r+   Únatural_jitterr   r   r    s          r
   Ú(test_accept_authentic_human_finger_touchz<TestTouchBiometrics.test_accept_authentic_human_finger_touch3   s9  € àˆÝ�r‘”ð 	ð 	ˆAå!œX a¨#¡gÑ.Ô.°Ñ4ˆNØ�MŠMÝÝ˜A ™F ^Ñ3Ñ4Ô4Ý˜A ™F¥T¤X¨a°#©gÑ%6Ô%6¸Ñ%<Ñ<Ñ=Ô=Ý!& q¨2¡vµ´¸!±´¸sÑ1BÑ'CÑ!DÔ!DØ!%­¬°©¬°cÑ(9Ñ!9Ø¥¤¨¨S©Ñ 1Ô 1°CÑ 7Ñ7ðñ ô ñô ð ð ð #'¤.×"FÒ"FÀvÑ"NÔ"NÑˆ�%˜Ø�Š˜Ñ!Ô!Ð!Ø×Ò  sÑ+Ô+Ð+Ð+Ð+r   N)Ú__name__Ú
__module__Ú__qualname__r   r!   r,   r6   © r   r
   r   r      sP   € € € € € ð4ð 4ð 4ð
$ð 
$ð 
$ð7ð 7ð 7ð$,ð ,ð ,ð ,ð ,r   r   Ú__main__)Ú__doc__Úunittestr0   ÚsysÚosÚpathÚinsertÚabspathÚjoinÚdirnameÚ__file__Úsecurity.touch_biometricsr   r   ÚTestCaser   r7   Úmainr:   r   r
   ú<module>rI      så   ððð ð
 €€€Ø €€€Ø 
€
€
€
Ø 	€	€	€	ð „‡‚��2”7—?’? 2¤7§<¢<°´·²ÀÑ0IÔ0IÈ>Ñ#ZÔ#ZÑ[Ô[Ñ \Ô \Ð \à JÐ JÐ JÐ JÐ JÐ JÐ JÐ Jð3,ð 3,ð 3,ð 3,ð 3,˜(Ô+ñ 3,ô 3,ð 3,ðl ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   