
    z-Ph                        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 n# e$ r dZdZY nw xY w	 d dlmZ d dlmc mZ n# e$ r dZ	Y nw xY wej        j        ZdZdZdZd	Zd
 Zd Zd Zd Zd Z ej        !                    e	d          d             Z"ej        !                    e	 d          d             Z#ej        !                    e	d          d             Z$dS )    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     e/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pyarrow/tests/test_dataset_encryption.pycreate_sample_tabler   4   sA    8888***  	
 	
  r   c            	      n    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   sC    %"!Hh#78) ---    r   c                  ,    t          j        d          S )Ni,  )r$   )r&   DecryptionConfigurationr   r   r   create_decryption_configr-   Q   s    %S9999r   c                      t          j        t          t                              d          t
          t                              d          i          S )NzUTF-8)custom_kms_conf)r&   KmsConnectionConfigr(   
FOOTER_KEYdecoder)   COL_KEYr   r   r   create_kms_connection_configr4   U   sE    !Z..w77'..11
   r   c                      t          |           S Nr   )kms_connection_configurations    r   kms_factoryr8   ^   s    9:::r   z+Parquet Encryption is not currently enabled)reasonc                     t                      } t                      }t                      }t                      }t	          j        t                    }t          j        |||          }t          j	        |||          }t          j                                        }|                    |          }t          j                    }	|	                    d           t          j        | d|||	           t          j                                        }t%          j        t(          d          5  t          j        d||	           d d d            n# 1 swxY w Y   t          j        |          }
t          j                            |
	          }t          j        d||	          }|                     |                                          sJ |                    ||          }t          j        |
          }
t          j                            |
	          }t          j        d||	          }|                     |                                          sJ d S )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20228::%k22N7-/@   7-/@ 
 j**,,G..AW.XXM!!F
c!"    j**,,G	w&6	7	7	7 H H

#GGGGGH H H H H H H H H H H H H H H 00  L j***VVGj)'fMMMG<<((**+++++ +EE02 203  L j***VVGj)'fMMMG<<((**+++++++s   ,EEEz'Parquet Encryption is currently enabledc                      t           j                                        } t          j        t
                    5  |                     d          }ddd           dS # 1 swxY w Y   dS )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      s     j**,,G	*	+	+ G G&&&FFG G G G G G G G G G G G G G G G G Gs   AA #A c                      G d dt           j                  d} t          j                            t          j        d t          |           D             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        |          }|                    |          }	|                    |          }
t'          j                    }|                    d           d}t          j        ||||	|           |dz   }t/          j        ||
|                                          }||k    sJ t          j        |||          }|                                }||k    sJ dS )z9Test encryption and decryption of a large number of rows.c                   6    e Zd ZdededefdZdededefdZdS );test_large_row_encryption_decryption.<locals>.NoOpKmsClient	key_bytesrh   returnc                 .    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                 .    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      sf        	e 	 	 	 	 	 		% 	C 	E 	 	 	 	 	 	r   r~   i  c                 4    g | ]}t          j                     S r   )random).0rh   s     r   
<listcomp>z8test_large_row_encryption_decryption.<locals>.<listcomp>   s    777V]__777r   )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float32r0   rK   r'   rL   rM   rN   r,   rY   rP   rQ   r\   rR   rS   rT   rU   pqParquetFilereadrO   r[   )	row_countr   
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      sY           IH  	77eI&6&6777

 

 

 	 '	 !  E '))J%&?&?&?&?@@N2$&0    +
$5 J +
B$>$@$@ J 0:NNNL&\RRRK22Z2PPM!/!J!J:!V!V!!F
c#DUD"/FD D D D ((I)C   dff  IjkfEEEG  ""IIr   )%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      s8  $                                    	B	BBB"BBBBBB++++++++++ " " "!"
 [ 
 !

  "	 	 	: : :  ; ; ; #P   6, 6, 6,r 'P   	G 	G 	G #P   8 8 8 8 8s   - 	99A AA