
    h                        S SK r S SKJr  S SKrS SKJr  S SKrS SKrSr	 S SK
Jr  S SKJr   S SKJr  S SKJs  Jr  \R,                  R                  rSrSrSrS	rS
 rS rS rS rS r \R,                  RC                  \	SS9S 5       r"\R,                  RC                  \	(       + SS9S 5       r#\R,                  RC                  \	SS9S 5       r$g! \ a    SrSr Nf = f! \ a    Sr	 Nf = f)    N)	timedeltaFInMemoryKmsClientTs   0123456789112345
footer_keys   1234567890123450col_keyc                  B    [         R                  " / SQ/ SQ/ SQS.5      $ )N)i      r	   i  r
   )   r      r      d   )FlamingoParrotDogHorsezBrittle stars	Centipede)yearn_legsanimal)patable     _/home/james-whalen/.local/lib/python3.13/site-packages/pyarrow/tests/test_dataset_encryption.pycreate_sample_tabler   4   s#    888*	
 r   c            
      Z    [         R                  " [        S[        SS/0S[	        SS9SS9$ )	NFr   r   
AES_GCM_V1g      @)minutes   )r   plaintext_footercolumn_keysencryption_algorithmcache_lifetimedata_key_length_bits)peEncryptionConfigurationFOOTER_KEY_NAMECOL_KEY_NAMEr   r   r   r   create_encryption_configr*   E   s6    %%"!Hh#78) -  r   c                  *    [         R                  " SS9$ )Ni,  )r$   )r&   DecryptionConfigurationr   r   r   create_decryption_configr-   Q   s    %%S99r   c                      [         R                  " [        [        R	                  S5      [
        [        R	                  S5      0S9$ )NzUTF-8)custom_kms_conf)r&   KmsConnectionConfigr(   
FOOTER_KEYdecoder)   COL_KEYr   r   r   create_kms_connection_configr4   U   s8    !!Z..w7'..1
 r   c                     [        U 5      $ Nr   )kms_connection_configurations    r   kms_factoryr8   ^   s    9::r   z+Parquet Encryption is not currently enabled)reasonc                  X   [        5       n [        5       n[        5       n[        5       n[        R
                  " [        5      n[        R                  " XCU5      n[        R                  " XCU5      n[        R                  R                  5       nUR                  US9n[        R                  " 5       n	U	R!                  S5        [        R"                  " U SUUU	S9  [        R                  R                  5       n[$        R&                  " [(        SS9   [        R                  " SXyS9  S S S 5        [        R*                  " US9n
[        R                  R                  U
S	9n[        R                  " SXyS9nU R-                  UR/                  5       5      (       d   eUR1                  X25      n[        R*                  " US
9n
[        R                  R                  U
S	9n[        R                  " SXyS9nU R-                  UR/                  5       5      (       d   eg ! , (       d  f       N= f)Nencryption_config/sample_dataset)database_dirformatfile_options
filesystemzno decryption)matchrA   rC   decryption_configdefault_fragment_scan_options)decryption_properties)r   r*   r-   r4   r&   CryptoFactoryr8   dsParquetEncryptionConfigParquetDecryptionConfigr   datasetParquetFileFormatmake_write_optionsfs_MockFileSystem
create_dirwrite_datasetpytestraisesIOErrorParquetFragmentScanOptionsequalsto_tablefile_decryption_properties)r   r<   rG   kms_connection_configcrypto_factoryparquet_encryption_cfgparquet_decryption_cfgpformatwrite_optionsmockfspq_scan_optsrO   rJ   s                r   "test_dataset_encryption_decryptionre   b   s     !E02028:%%k2N77/@  77/@
 jj**,G..AW.XM!F
c!" jj**,G	w&6	7


#GG 
8 000L jj***VGjj)'MG<<((*++++ +EE2003L jj***VGjj)'MG<<((*++++- 
8	7s   H
H)z'Parquet Encryption is currently enabledc                      [         R                  R                  5       n [        R                  " [
        5         U R                  SS9nSSS5        g! , (       d  f       g= f)zTest write_dataset with ParquetFileFormat and test if an exception is thrown
if you try to set encryption_config using make_write_optionsz
some valuer;   N)r   rO   rP   rV   rW   NotImplementedErrorrQ   )ra   _s     r   -test_write_dataset_parquet_without_encryptionri      sB     jj**,G	*	+&&&F 
,	+	+s   A
A c            	        ^  " S S[         R                  5      mSn [        R                  R	                  [        R
                  " [        U 5       Vs/ s H  n[        R                  " 5       PM     sn[        R                  " 5       S9/S/S9n[         R                  " 5       n[         R                  " U4S j5      n[         R                  " SSS/0S	S
SS9n[        R                  " XCU5      n[        R                  " XC[         R                  " 5       5      n[        R                   " US9n[        R"                  " US9n	U	R%                  US9n
UR'                  U5      n[(        R*                  " 5       nUR-                  S5        Sn[        R.                  " X-U	XS9  US-   n[0        R2                  " XUS9R5                  5       nX/:X  d   e[        R6                  " XUS9nUR9                  5       nX/:X  d   egs  snf )z9Test encryption and decryption of a large number of rows.c                   @    \ rS rSrS\S\S\4S jrS\S\S\4S jrSrg	)
;test_large_row_encryption_decryption.<locals>.NoOpKmsClient   	key_bytesrh   returnc                 2    [         R                  " U5      nU$ r6   )base64	b64encode)selfrn   rh   bs       r   wrap_keyDtest_large_row_encryption_decryption.<locals>.NoOpKmsClient.wrap_key   s      +AHr   wrapped_keyc                 2    [         R                  " U5      nU$ r6   )rq   	b64decode)rs   rw   rh   rt   s       r   
unwrap_keyFtest_large_row_encryption_decryption.<locals>.NoOpKmsClient.unwrap_key   s      -AHr   r   N)	__name__
__module____qualname____firstlineno__bytesstrru   rz   __static_attributes__r   r   r   NoOpKmsClientrl      s6    	e 	 	 		% 	C 	E 	r   r   i  )typefoo)namesc                    > T" 5       $ r6   r   )rh   r   s    r   <lambda>6test_large_row_encryption_decryption.<locals>.<lambda>   s    r   UNIMPORTANT_KEYTF   )r   r"   double_wrappingr!   r%   rF   rH   r;   r=   zlarge-row-test-dataset)rA   rB   rC   z/part-0.parquet)rJ   rC   rE   N)r&   	KmsClientr   Tablefrom_arraysarrayrangerandomfloat32r0   rK   r'   rL   rM   rN   r,   rY   rP   rQ   r\   rR   rS   rT   rU   pqParquetFilereadrO   r[   )	row_countrh   r   
kms_configr^   r<   
pqe_config
pqd_configscan_optionsfile_formatrb   r\   rc   path	file_path	new_tablerO   r   s                    @r   $test_large_row_encryption_decryptionr      s     IHH  	&+I&67&6V]]_&67

 	 '	 ! E '')J%%&?@N22$&0  ++$5J ++B$>$>$@J 00:NL&&\RK22Z2PM!/!J!J:!V!F
c#DU"/D ((I df  jjfEG  "IS 8s   G=)%rq   datetimer   r   
pyarrow.fsrR   pyarrowr   rV   encryption_unavailablepyarrow.parquetparquetr   pyarrow.datasetrO   rL   ImportError pyarrow.tests.parquet.encryptionr   pyarrow.parquet.encryption
encryptionr&   mark
pytestmarkr1   r(   r3   r)   r   r*   r-   r4   r8   skipifre   ri   r   r   r   r   <module>r      s:  $         
"B++ [[  
 !

"	:; #P  6,6,r 'P  	G	G #P  88c  	B	B  "!"s"   C C 
CCC*)C*