
    <e                         d Z ddlZddlZddlZ G d dej                  Z G d dej                  Z G d dej                  Zed	k    r ej	                     dS dS )
zTest the secrets module.

As most of the functions in secrets are thin wrappers around functions
defined elsewhere, we don't need to test them exhaustively.
    Nc                   *    e Zd ZdZd Zd Zd Zd ZdS )Compare_Digest_Testsz%Test secrets.compare_digest function.c           	         dD ]}|dz  }|dz  }|                      t          j        ||                     |                      t          j        |                    d          |                    d                               d S )N)abcdxyz123d   utf-8)
assertTruesecretscompare_digestencodeselfsr   bs       (/usr/lib/python3.11/test/test_secrets.py
test_equalzCompare_Digest_Tests.test_equal   s    ' 	Z 	ZA#A#AOOG21a88999OOG2188G3D3DahhwFWFWXXYYYY		Z 	Z    c           	         |                      t          j        dd                     |                      t          j        dd                     dD ]}|dz  dz   }|dz  dz   }|                      t          j        ||                     |                      t          j        |                    d	          |                    d	                               d S )
Nabcabcds   abcs   abcd)xmna1b2c3r	   qkr
   )assertFalser   r   r   r   s       r   test_unequalz!Compare_Digest_Tests.test_unequal   s    /v>>???/@@AAA& 	[ 	[A#A#AW3Aq99:::W3AHHW4E4EqxxPWGXGXYYZZZZ		[ 	[r   c                     d}|                     d          }|                     t          t          j        ||           |                     t          t          j        ||           d S )Nabcder
   )r   assertRaises	TypeErrorr   r   )r   r   r   s      r   test_bad_typesz#Compare_Digest_Tests.test_bad_types$   sZ    HHW 	)W%;QBBB)W%;QBBBBBr   c                     |                      t          j        dd          t                     |                      t          j        dd          t                     d S )Nr   xyz)assertIsInstancer   r   bool)r   s    r   	test_boolzCompare_Digest_Tests.test_bool-   sN    g4UEBBDIIIg4UEBBDIIIIIr   N)__name__
__module____qualname____doc__r   r   r$   r)    r   r   r   r      sd        //Z Z Z[ [ [C C CJ J J J Jr   r   c                   $    e Zd ZdZd Zd Zd ZdS )Random_Testsz*Test wrappers around SystemRandom methods.c                     d}dD ]T}t          d          D ]B}t          j        |          }|                     d|cxk    od|z  k     nc |||fz             CUd S )Nzrandbits(%d) returned %d)            r      )ranger   randbitsr   )r   errmsgnumbitsins        r   test_randbitszRandom_Tests.test_randbits6   s    +" 	L 	LG1XX L L$W--Q 3 3 3 3G 3 3 3 3Vwl5JKKKKL	L 	Lr   c                     g d}t          d          D ]+}|                     t          j        |          |v            ,d S )N)   r6                @   
   )r7   r   r   choice)r   itemsr;   s      r   test_choicezRandom_Tests.test_choice>   sP    (((r 	< 	<AOOGN511U:;;;;	< 	<r   c                 .   t          dd          D ]7}|                     t          j        |          t          |                     8|                     t
          t          j        d           |                     t
          t          j        d           d S )Nr6   rE   r   )r7   assertInr   	randbelowr"   
ValueError)r   r;   s     r   test_randbelowzRandom_Tests.test_randbelowD   s}    q" 	: 	:AMM'+A..a9999*g&7;;;*g&7<<<<<r   N)r*   r+   r,   r-   r=   rH   rN   r.   r   r   r0   r0   3   sJ        44L L L< < <= = = = =r   r0   c                   *    e Zd ZdZd Zd Zd Zd ZdS )Token_TestszTest token functions.c                    t           j        t           j        t           j        fD ]}|                     |          5  |j        }	  |             n(# t          $ r |                     d|z             Y nw xY w	  |d            n(# t          $ r |                     d|z             Y nw xY wd d d            n# 1 swxY w Y   t           j        }| 	                    t          t          j        d                     |           | 	                    t          t          j        d                     d|z             d S )N)funcz$%s cannot be called with no argumentz%s cannot be called with Noner6   )r   token_bytes	token_hextoken_urlsafesubTestr*   r#   failDEFAULT_ENTROPYassertEquallen)r   rR   namesizes       r   test_token_defaultszToken_Tests.test_token_defaultsO   s   ('*;*, 	F 	FD4(( 	F 	F}MDFFFF  M M MIIDtKLLLLLMFDJJJJ  F F FII=DEEEEEF	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F &W06677>>>W.t4455qv>>>>>sY   B9
AB9"A52B94A55B99BB9"B*'B9)B**B99B=	 B=	c           	      0   dD ]}|                      |          5  |                     t          j        |          t                     |                     t          t          j        |                    |           d d d            n# 1 swxY w Y   d S )N)r?   rA      r	   r<   )rV   r'   r   rS   bytesrY   rZ   )r   r<   s     r   test_token_byteszToken_Tests.test_token_bytesa   s      	A 	AA"" A A%%g&9!&<&<eDDD  W%8%;%;!<!<a@@@A A A A A A A A A A A A A A A	A 	As   A#B

B	B	c                 n   dD ]}|                      |          5  t          j        |          }|                     |t                     |                     t          |          d|z             |                     t          d |D                                  d d d            n# 1 swxY w Y   d S )N)r?   r3      Z   r`   r6   c              3   2   K   | ]}|t           j        v V  d S N)string	hexdigits).0cs     r   	<genexpr>z-Token_Tests.test_token_hex.<locals>.<genexpr>o   s*      #E#EaA)9$9#E#E#E#E#E#Er   )	rV   r   rT   r'   strrY   rZ   r   all)r   r<   r   s      r   test_token_hexzToken_Tests.test_token_hexh   s	     	G 	GA"" G G%a((%%a---  Q1---#E#E1#E#E#E E EFFF	G G G G G G G G G G G G G G G	G 	Gs   BB))B-	0B-	c                 `   t           j        t           j        z   dz   dD ]}|                     |          5  t	          j        |          }|                     |t                     |                     t          fd|D                                  d d d            n# 1 swxY w Y   d S )Nz-_)r?         L   r`   c              3       K   | ]}|v V  	d S rg   r.   )rj   rk   legals     r   rl   z1Token_Tests.test_token_urlsafe.<locals>.<genexpr>x   s'      #:#:1AJ#:#:#:#:#:#:r   )
rh   ascii_lettersdigitsrV   r   rU   r'   rm   r   rn   )r   r<   r   ru   s      @r   test_token_urlsafezToken_Tests.test_token_urlsafeq   s    $v}4t;  	< 	<A"" < <)!,,%%a---#:#:#:#:#:#:#: : :;;;< < < < < < < < < < < < < < <	< 	<s   AB""B&	)B&	N)r*   r+   r,   r-   r]   rb   ro   rx   r.   r   r   rP   rP   L   s\        ? ? ?$A A AG G G< < < < <r   rP   __main__)
r-   r   unittestrh   TestCaser   r0   rP   r*   mainr.   r   r   <module>r}      s       
!J !J !J !J !J8, !J !J !JH= = = = =8$ = = =2,< ,< ,< ,< ,<(# ,< ,< ,<^ zHMOOOOO r   