
    g                        d dl Z d dlmZ d dlZd dlmZ d dlZd dlZdZ		 d dl
mZ d dlmZ 	 d dlmZ d dlmc mZ ej,                  j                  ZdZdZdZd	Zd
 Zd Zd Zd Zd Z ej,                  jC                  e	d      d        Z"ej,                  jC                  e	 d      d        Z#ej,                  jC                  e	d      d        Z$y# e$ r dZdZY w xY w# e$ r dZ	Y w xY w)    N)	timedeltaFInMemoryKmsClientTs   0123456789112345
footer_keys   1234567890123450col_keyc                  @    t        j                  g dg dg dd      S )N)i      r	   i  r
   )   r      r      d   )FlamingoParrotDogHorsezBrittle stars	Centipede)yearn_legsanimal)patable     Z/var/www/openai/venv/lib/python3.12/site-packages/pyarrow/tests/test_dataset_encryption.pycreate_sample_tabler   4   s#    888*	
 r   c            	      d    t        j                  t        dt        ddgidt	        d      d      S )	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                  .    t        j                  d      S )Ni,  )r$   )r&   DecryptionConfigurationr   r   r   create_decryption_configr-   Q   s    %%S99r   c                      t        j                  t        t        j	                  d      t
        t        j	                  d      i      S )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                     t        |       S Nr   )kms_connection_configurations    r   kms_factoryr8   ^   s    9::r   z+Parquet Encryption is not currently enabled)reasonc                  l   t               } t               }t               }t               }t	        j
                  t              }t        j                  |||      }t        j                  |||      }t        j                  j                         }|j                  |      }t        j                         }	|	j!                  d       t        j"                  | d|||	       t        j                  j                         }t%        j&                  t(        d      5  t        j                  d||	       d d d        t        j*                  |      }
t        j                  j                  |
	      }t        j                  d||	      }| j-                  |j/                               sJ |j1                  ||      }t        j*                  |
      }
t        j                  j                  |
	      }t        j                  d||	      }| j-                  |j/                               sJ y # 1 sw Y   xY w)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)'fMG<<((*+++ +EE02003L jj***VGjj)'fMG<<((*+++- 
8	7s   H**H3z'Parquet Encryption is currently enabledc                      t         j                  j                         } t        j                  t
              5  | j                  d      }ddd       y# 1 sw Y   yxY w)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            	           G d dt         j                        d} t        j                  j	                  t        j
                  t        |       D cg c]  }t        j                          c}t        j                               gdg      }t        j                         }t        j                  fd      }t        j                  dddgid	d
d      }t        j                  |||      }t        j                  ||t        j                               }t        j                   |      }t        j"                  |      }	|	j%                  |      }
|j'                  |      }t)        j*                         }|j-                  d       d}t        j.                  |||	|
|       |dz   }t1        j2                  |||      j5                         }||k(  sJ t        j6                  ||	|      }|j9                         }||k(  sJ yc c}w )z9Test encryption and decryption of a large number of rows.c                   4    e Zd ZdededefdZdededefdZy);test_large_row_encryption_decryption.<locals>.NoOpKmsClient	key_bytesrh   returnc                 0    t        j                  |      }|S r6   )base64	b64encode)selfrm   rh   bs       r   wrap_keyzDtest_large_row_encryption_decryption.<locals>.NoOpKmsClient.wrap_key   s      +AHr   wrapped_keyc                 0    t        j                  |      }|S r6   )rp   	b64decode)rr   ru   rh   rs   s       r   
unwrap_keyzFtest_large_row_encryption_decryption.<locals>.NoOpKmsClient.unwrap_key   s      -AHr   N)__name__
__module____qualname__bytesstrrt   rx   r   r   r   NoOpKmsClientrl      s6    	e 	 	 		% 	C 	E 	r   r~   i  )typefoo)namesc                             S r6   r   )rh   r~   s    r   <lambda>z6test_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UD"/FD ((I)C df  IjjkfEG  "IIS 8s   H)%rp   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-