
    dafaP                     $   d Z ddlZddlZddlZddlZddlmZmZmZ g dZ	g dZ
e
e	z   ddgz   Z G d d	ej                        Z G d
 de      Z G d de      Z G d de      Z G d dej                        Zedk(  r ej&                          yy)zTest the binascii C module.    N)
bigmemtest_1G_4G)
b2a_base64b2a_hexb2a_qpb2a_uuhexlify)
a2b_base64a2b_hexa2b_qpa2b_uu	unhexlifycrc32crc_hqxc                       e Zd ZeZdZe e ed            z  Zedz  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d Zd Zd Zd Zy)BinASCIITests.   The quick brown fox jumps over the lazy dog.
   s   
Hello world.
c                 D    | j                  | j                        | _        y N)	type2testrawdatadataselfs    -/root/Python-3.12.4/Lib/test/test_binascii.pysetUpzBinASCIITest.setUp   s    NN4<<0	    c                     | j                  t        t        j                  t                     | j                  t        t        j
                  t                     y r   )
assertTrue
issubclassbinasciiError	Exception
Incompleter   s    r   test_exceptionszBinASCIITest.test_exceptions   s2    
8>>9=>
8#6#6	BCr   c           	          t         D ]O  }| j                  t        t        t        |      d             | j                  t        t        t        |             Q y )N__call__)all_functionsr    hasattrgetattrr"   assertRaises	TypeError)r   names     r   test_functionszBinASCIITest.test_functions#   sD    ! 	BDOOGGHd$;ZHIi4)@A	Br   c                    d}| j                   d | }t        t        t              D ]  \  }}t	        t
        |      }t	        t
        |      }	  || j                  |            } || j                  |            }| j                  |dj                  ||||             | j                  |t               | j                  t               | j                  t        |      d        | j                  t        j                  |d      t                | j                  t        j"                  |      t                y # t        $ r,}	| j                  dj                  |||	             Y d }	~	d }	~	ww xY w)N-   {}/{} conversion raises {!r}{}/{} conversion: {!r} != {!r}   r   )r   zipa2b_functionsb2a_functionsr+   r"   r   r$   failformatassertEqualassertIsInstancebytes
assertLessmaxr   intr   )
r   MAX_ALLrawfafba2bb2aareserrs
             r   test_returned_valuez BinASCIITest.test_returned_value)   s<   ll8G$-7 	)FB(B'C(B'CNs+,$..+, S# (,,2F2r3,DF!!#u-!!!U+OOCFC(	) 	h..sA6<hnnS137  N		8??BLMMNs   .D==	E2"E--E2c                    d}g }t        dt        | j                        |      D ]I  }| j                  | j                  |||z          }t	        j
                  |      }|j                  |       K t               }|D ]-  }| j                  |      }t	        j                  |      }||z  }/ | j                  || j                         y )N9   r   )
rangelenr   r   r"   r   appendr<   r   r:   )r   
MAX_BASE64linesibrF   rG   lines           r   test_base64validzBinASCIITest.test_base64valid=   s    
q#dll+Z8 	At||Aa
l;<A##A&ALLO	 g 	Dt$A##A&A1HC	 	dll+r   c                   
 d}g }t        dt        | j                        |      D ]I  }| j                  | j                  |||z          }t        j                  |      }|j                  |       K t               
d}t        d      D ]  }||vs
j                  |        
fd}t               }t        ||      D ]-  }	| j                  |	      }t        j                  |      }||z  }/ | j                  || j                         | j                  t        j                  | j                  
            d       y )NrK   r   s@   abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/r   c                     }t        |       t        |      z  }t               }| rG|rEt        |       t        |      z  |kD  r| d   | dd  } }n
|d   |dd  }}|j                  |       | r|rE||z   | z   S )Nr      )rM   	bytearrayrN   )rS   noiseratiorG   cfillerss        r   addnoisez1BinASCIITest.test_base64invalid.<locals>.addnoise[   s    EIU+E+C5t9E
*U2"1gtABxtA$QxqruA

1 5 ;%%r   r   )rL   rM   r   r   r   r"   r   rN   rX   mapr   r:   )r   rO   rP   rQ   rR   rF   validr]   rG   rS   r\   s             @r   test_base64invalidzBinASCIITest.test_base64invalidL   s"    
q#dii.*5 	At||Aa
l;<A##A&ALLO	
 +Ss 	"A~q!	"
	& k%( 	Dt$A##A&A1HC	 	dll+ 	,,T^^G-DEsKr   c                     dt         dt        dt        f fddt        ffd}dt        ffd}dt        ffd}dt        ffd}dt        ffd	} |d
d        |dd        |dd        |dd        |dd        |dd        |dd        |dd        |dd        |dd        |dd        |dd        |dd        |dd        |dd        |dd        |dd        |dd        |dd        |d d        |d!d        |d"d#        |d$d%        |d&d%        |d'd%        |d(d%        |d)d%       y )*Nassert_regexr   non_strict_mode_expected_resultc                    j                  t        j                  |       5  t        j                  j	                  |      d       d d d        j                  t        j                  j	                  |      d      |       j                  t        j                  j	                  |            |       y # 1 sw Y   txY w)NT)strict_modeF)assertRaisesRegexr"   r#   r   r   r:   )rb   r   rc   r   s      r   _assertRegexTemplatezBBinASCIITest.test_base64_strict_mode.<locals>._assertRegexTemplates   s    ''E L##DNN4$8dKLX001ESXY<>X001EF<>	L Ls   'B<<Cc                      d| |       y )Nz(?i)Excess data r   rc   rg   s     r   assertExcessDataz>BinASCIITest.test_base64_strict_mode.<locals>.assertExcessData{   s     !3T;Z[r   c                      d| |       y )Nz(?i)Only base64 datari   rj   s     r   assertNonBase64DatazABinASCIITest.test_base64_strict_mode.<locals>.assertNonBase64Data~   s     !8$@_`r   c                      d| |       y )Nz(?i)Leading paddingri   rj   s     r   assertLeadingPaddingzBBinASCIITest.test_base64_strict_mode.<locals>.assertLeadingPadding   s     !7?^_r   c                      d| |       y )Nz(?i)Discontinuous paddingri   rj   s     r   assertDiscontinuousPaddingzHBinASCIITest.test_base64_strict_mode.<locals>.assertDiscontinuousPadding   s     !=tEder   c                      d| |       y )Nz(?i)Excess paddingri   rj   s     r   assertExcessPaddingzABinASCIITest.test_base64_strict_mode.<locals>.assertExcessPadding   s     !6>]^r   s   ab==a   is   ab===s   ab====s   ab==:s   abc=as   is   abc=:s   ab==
s   abc==s   abc===s   abc====s   abc=====s   
ab==s   ab:(){:|:&};:==s   a
b==s   a b==   =r      ==s   ===s   ====s   =====s   ab=c=s   ab=ab==s   is   abcd=s   is   abcd==s   abcd===s   abcd====s	   abcd=====)strr<   )r   rk   rm   ro   rq   rs   rg   s   `     @r   test_base64_strict_modez$BinASCIITest.test_base64_strict_modeq   sy   	>s 	>% 	>bg 	>	\E 	\	au 	a	` 	`	fe 	f	_u 	_ 	4(4(D)4(8,8,D)8,H-X.h/ 	It,.5It,K. 	T3'UC(VS)Wc*Xs+"8X6":|<Hl3I|4J5K6L,7r   c                 
     fd} |d        |d        |d        |d        |d        |d        |d        |d	        fd
} |d        |d        |d        |d        |d        |d        |d       y )Nc                     j                  t        j                  d      5  t        j                  j	                  |              d d d        y # 1 sw Y   y xY w)Nz(?i)Incorrect padding)rf   r"   r#   r   r   )r   r   s    r   assertIncorrectPaddingz>BinASCIITest.test_base64errors.<locals>.assertIncorrectPadding   sD    ''8PQ :##DNN4$89: : :s   %AAs   abs   ab=s   abcs   abcdefs   abcdef=s   abcdefgs   a=b=s   a
b=c                    t        t        j                  dd|             }dt        |      z   }j	                  t
        j                  |      5  t        j                  j                  |              d d d        y # 1 sw Y   y xY w)Ns   [^A-Za-z0-9/+]r   z((?i)Invalid.+number of data characters.+)	rM   resubrw   rf   r"   r#   r   r   )r   n_data_charsexpected_errmsg_rer   s      r   assertInvalidLengthz;BinASCIITest.test_base64errors.<locals>.assertInvalidLength   sn    rvv&8$EFL;c,>OO ''8JK :##DNN4$89: : :s   %A>>B   as   a=s   a==s   a===s   aaaaas]  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas
   A	B
C ??DEri   )r   r{   r   s   `  r   test_base64errorszBinASCIITest.test_base64errors   s    	: 	u%v&v&y)z*z*w'x(	: 	D!E"F#G$H%/0O,r   c                    d}dD ]  }g }t        dt        | j                        |      D ]K  }| j                  | j                  |||z          }t        j                  ||      }|j                  |       M t               }|D ]-  }| j                  |      }t        j                  |      }||z  }/ | j                  || j                          | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d	      d       | j                  t
        j                  t
        j                  d
       | j                  t
        j                  t
        j                  d       | j                  t
        j                  t
        j                  d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  dd      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  dd      d       | j                  t        j                  d      t        j                  d             | j                  t              5  t        j                  dd       d d d        y # 1 sw Y   y xY w)Nr1   )TFr   )backtick   s                                     s                                       s    s   !!!!s.   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   xs   !>   
r   s    
Ts   `
s    Cats
   $ $-A=   
s
   $`$-A=```
)rL   rM   r   r   r   r"   r	   rN   r<   r   r:   r,   r#   r-   )	r   MAX_UUr   rP   rQ   rR   rF   rG   rS   s	            r   test_uuzBinASCIITest.test_uu   so   % 	0HE1c$))nf5  NN4<<!F(#;<OOA9Q  'C NN4(OOA&q S$,,/	0 	1:>1:>1:>(..(//;G(..(//7C(..(//7C 	.
;-v6t<fE0#60#64nEdC'	)8!8	:y) 	'OOC&	' 	' 	's   "MMc                    t        j                  | j                  d      d      }t        j                  | j                  d      |      }| j                  |d       | j	                  t
        t         j                         | j	                  t
        t         j                  | j                  d             dD ]:  }| j                  t        j                  | j                  d      |      |dz         < y )N   Test the CRC-32 ofr       this string.i7  r   )r   rW   i4  iE# ixV4i  )r"   r   r   r:   r,   r-   r   crcs     r   test_crc_hqxzBinASCIITest.test_crc_hqx   s    t~~.CDaHt~~.>?Ee$)X%5%56)X%5%5t~~c7JK8 	+CX--dnnS.A3G 6\+	+r   c                    t        j                  | j                  d            }t        j                  | j                  d      |      }| j                  |d       | j	                  t
        t         j                         y )Nr   r   ij])r"   r   r   r:   r,   r-   r   s     r   
test_crc32zBinASCIITest.test_crc32   sX    nnT^^,ABCnnT^^,<=sCj))X^^4r   c                 F   d}t        j                  | j                  |            }t        j                  | j                  |            }| j	                  ||       | j                  t         j                  t         j                  |d d        | j                  t         j                  t         j                  |d d dz          | j                  t         j                  t         j                  t        ddg             | j                  t         j                  t         j                  d       | j                  t         j                  t         j                  d       | j                  t         j                  t         j                  d       | j                  t         j                  t         j                  d       | j	                  t        j                  | j                  |            |       | j	                  t        j                  | j                  |            |       y )	N    {s   worldi   s   helloi   0r      q   s   0Gs   0gs   G0s   g0)
r"   r   r   r   r:   r,   r#   r<   r
   r   )r   stus       r   test_hexzBinASCIITest.test_hex  sp   _T^^A./T^^A./A(..(*:*:AcrFC(..(*:*:AcrFTMJ(..(*:*:E3*<MN(..(*:*:EB(..(*:*:EB(..(*:*:EB(..(*:*:EB 	))$..*;<a@++DNN1,=>Br   c                    d}| j                  t        j                  | j                  |            |j	                         j                  d             |j	                  dd      j                  d      }| j                  t        j                  | j                  |      dd      |       |j	                  d      j                  d      }| j                  t        j                  | j                  |      d      |       y)z?Test that hexlify and b2a_hex are binary versions of bytes.hex.r   ascii.   :N)r:   r"   r
   r   hexencoder   )r   r   	expected8	expected1s       r   test_hex_separatorzBinASCIITest.test_hex_separator  s    
 `))$..*;<aeegnnW>UVEE#qM((1	))$..*;S!DiPEE#J%%g.	))$..*;SA9Mr   c                    | j                   }t        j                  }t        j                  } |dd       	  |dUi ddi | j	                  d       | j                   | |d            d       | j                   | |d            d       | j                   | |d            d       | j                   | |d	            d
       | j                   | |d            d
       | j                   | |d            d       | j                   | |d            d       | j                   | |d            d       | j                   | |d            d       | j                   | |d            d       | j                   | |d            d       | j                   | |d      d d       d       | j                   | |d            d       | j                   | |d      d      d       | j                  t
        |d       | j                   | |d            d       | j                   | |d            d       | j                   | |d             d!       | j                   | |d"            d#       | j                   | |d            d$       | j                   | |d            d       | j                   | |d      d      d%       | j                   | |d&      d      d'       | j                   | |d(      d      d)       | j                   | |d&      dd*      d+       | j                   | |d,      d      d,       | j                   | |d            d-       | j                   | |d.            d/       | j                   | |d0            d0       | j                   | |d1            d1       | j                   | |d0      d d       d-       | j                   | |d1      d d       d/       | j                   | |d2            d3       | j                   | |d4            d5       | j                   | |d4      d6      d5       | j                   | |d7            d7       | j                   | |d7      d6      d8       | j                   | |d7      d9      d7       | j                   | |d:            d;       | j                   | |d:      d6      d;       | j                   | |d:      d9      d<       | j                   | |d=            d=       | j                   | |d=      d6      d>       | j                   | |d=      d9      d?       | j                   | |d@            dA       | j                   | |d@      d6      dA       | j                   | |d@      d9      dB       | j                   | |dC      d d       dD       | j                   | |dE      d d       dF       | j                   | |dC      d d d6      dG       | j                   | |dE      d d d6      dH       | j                   | |dC      d d d9      dI       | j                   | |dE      d d d9      dJ       | j                   | |dK            dL       | j                   | |dM            dN       | j                   | |dO            dP       | j                   | |dQ            dR       | j                   | |dS            dS       | j                   | |dT      d d       dL       y # t
        $ r Y 6w xY w)VNr   F)r   headerrW   z/binascii.a2b_qp(**{1:1}) didn't raise TypeErrorru   s   = rv   s   =
ABs   ABs   =
ABs   =ABs   =AB
CDs   CDs   =AB   s   =abs   =AXs   =XAr   s   =A   _T)r       bar)foos   =00
=00s    
 s   

s   =FF
=FF
=FFsR   000000000000000000000000000000000000000000000000000000000000000000000000000

s[   000000000000000000000000000000000000000000000000000000000000000000000000000=
=FF
=FF
=FFr   s   =7Fs   =3Ds   =5Fs   x ys   x_ys   x s   x=20)r   	quotetabss   x=20ys   x	ys   =20   	s   =09s    xs   	x    s   =00s    
s   =00
)r   s   x y	zs	   x=20y=09z)istexts   x 
y	
s
   x=20
y=09
s
   x =0Ay	=0As   x y	s
   x=20y=09s
   x =0Dy	=0Ds   x 
y	
s   x=20
y=09
s   x =0D=0Ay	=0D=0As   x 
s   x s   x	
s   x	s   x=20s   x=09s   x =0Ds   x	=0D   .s   =2Es   .
s   =2E
s   .s   =2Es   . s   =2E=00s   a.
s   .a)r   )r   r"   r   r   r8   r-   r:   r,   )r   r   r   r   s       r   test_qpzBinASCIITest.test_qp!  s    NN	C&	I 1Q%  IIGH	$0#6	% 0159	% 0148	( 34e<	* 56>	( 34c:	, 78%@	& 12G<	& 12G<	& 12F;	& 12F;	& 1#2 67?	$0$7	$=tD)V7	- 89?K	*? @A-	/	*I JK:	< 		' 23V<	$0&9	$0$7	$=vF	& 1$?H	% 0>H	& 1$$O!	#	' 24@'J	$0&9	% 016:	% 0159	& 12F;	% 0" 56?	& 1#2 67@	% 016:	' 23X>	' 2dCXN	) 45yA	) 4E%	'	) 4UC"	$	, 78(	*	, 74H(	*	, 7F'	)	, 78%	'	, 74H(	*	, 7F'	)	*: ;<,	.	*: ;tL,	.	*: ;EJ-	/ 		) 4Sb 9:GD	* 5cr :;XF	) 4Sb 9TJ"	$	* 5cr :dK"	$	) 4Sb 9%H!	#	* 5cr :5I"	$ 		$0&9	& 12H=	& 12H=	& 12I>	' 23W=	% 0" 56?u  		s   
]= =	^
	^
c           	         | j                  d      }t        D ]7  }|dk(  rt        j                  |d       t	        t        |      }	  ||       9 y # t
        $ r,}| j                  dj                  |||             Y d }~kd }~ww xY w)Nr   r   r   z{}({!r}) raises {!r})r   r)   r"   r   r+   r$   r8   r9   )r   emptyfuncfrH   s        r   test_empty_stringzBinASCIITest.test_empty_string  s    s#! 		KDy   *$'AK%		K  K		077eSIJJKs   A	B"BBc                 R   t        t              t        t              z
  D ](  }	 | j                  t        t        t        |      d       * | j                  t        t        j                  dd       y # t        $ r+}| j                  dj                  ||             Y d }~d }~ww xY w)Ntestz{}("test") raises {!r}r   )setr)   r6   r,   r-   r+   r"   r$   r8   r9   r   )r   r   rH   s      r   test_unicode_b2azBinASCIITest.test_unicode_b2a  s    &]);; 	FDF!!)WXt-DfM	F 	)X%5%5vqA  F		299$DEEFs   %A22	B&;!B!!B&c                 H   d}| j                   d | }t        t        t              D ]  \  }}t	        t
        |      }t	        t
        |      }	  || j                  |            } ||      }|j                  d      } ||      }	| j                  	|dj                  |||	|             | j                  |	       | j                  |	t               | j                  t        |d        y # t        $ r,}
| j                  dj                  |||
             Y d }
~
d }
~
ww xY w)Nr1   r   r2   r3      )r   r5   r6   r7   r+   r"   r   decoder$   r8   r9   r:   r;   r<   r,   
ValueError)r   r@   rA   rB   rC   rD   rE   rF   
binary_resrG   rH   s              r   test_unicode_a2bzBinASCIITest.test_unicode_a2b  s   ll8G$-7 	7FB(B'C(B'CNs+, V
HHW%!f S# (,,2F2r3,DFS*-!!#u-j#v6	7  N		8??BLMMNs   8C,,	D!5"DD!c                    | j                  d      }| j                  t        j                  |      d       | j                  t        j                  |d      d       | j                  t        j                  |d      d       y )Ns   hellos	   aGVsbG8=
T)newlineFs   aGVsbG8=)r   r:   r"   r   )r   rR   s     r   test_b2a_base64_newlinez$BinASCIITest.test_b2a_base64_newline  sn    NN8$,,Q/&	(,,Q=&	(,,Q>$	&r   c                     t        t        d            }|d d d   }| j                  t              5  t	        j
                  |       d d d        y # 1 sw Y   y xY w)Ns	   noncontig)
memoryviewrX   r,   BufferErrorr"   r   )r   mnoncontig_writables      r   test_c_contiguityzBinASCIITest.test_c_contiguity  sQ    y./ttW{+ 	1/0	1 	1 	1s   AAN)__name__
__module____qualname__r<   r   r   rL   r   r&   r/   rI   rT   r`   rx   r   r   r   r   r   r   r   r   r   r   r   r   ri   r   r   r   r      s    IAGuU3Z  G$$G1D
B8(,#LJ88v->#'J
+5C$
Nd@LKB7*&1r   r   c                       e Zd Zd Zy)ArrayBinASCIITestc                 @    t        j                   dt        |            S )NB)arraylist)r   r   s     r   r   zArrayBinASCIITest.type2test  s    {{3Q((r   N)r   r   r   r   ri   r   r   r   r     s    )r   r   c                       e Zd ZeZy)BytearrayBinASCIITestN)r   r   r   rX   r   ri   r   r   r   r     s    Ir   r   c                       e Zd ZeZy)MemoryviewBinASCIITestN)r   r   r   r   r   ri   r   r   r   r     s    Ir   r   c                   8    e Zd ZdZ eedz   dd      d        Zy)ChecksumBigBufferTestCasez<bpo-38256 - check that inputs >=4 GiB are handled correctly.   rW   F)sizememusedry_runc                 f    dt         dz   z  }| j                  t        j                  |      d       y )Ns   nyanrW   iM"B>)r   r:   r"   r   )r   r   r   s      r   test_big_bufferz)ChecksumBigBufferTestCase.test_big_buffer  s)    #'"-z:r   N)r   r   r   __doc__r   r   r   ri   r   r   r   r     s$    FS1WQ6; 7;r   r   __main__)r   unittestr"   r   r}   test.supportr   r   r   r7   r6   r)   TestCaser   r   r   r   r   r   mainri   r   r   <module>r      s    !    	 - --)0DDp18$$ p1f) )
L \ ; 1 1 ; zHMMO r   