K iddlZddlmZddlZddlmZddlZddlZdZ ddl m Z ddl mZ ddlmZddlm cmZej,jZdZdZdZd Zd Zd Zd Zd ZdZ ej,jCe ddZ"ej,jCe ddZ#ej,jCe ddZ$y#e$rdZ dZYwxYw#e$rdZ YwxYw)N) timedeltaFInMemoryKmsClientTs0123456789112345 footer_keys1234567890123450col_keyc@tjgdgdgddS)N)ir ir )r r d)FlamingoParrotDogHorsez Brittle stars Centipede)yearn_legsanimal)patablek/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/pyarrow/tests/test_dataset_encryption.pycreate_sample_tabler4s# 888*   rc dtjtdtddgidt ddS) NFrr AES_GCM_V1g@)minutes)rplaintext_footer column_keysencryption_algorithmcache_lifetimedata_key_length_bits)peEncryptionConfigurationFOOTER_KEY_NAME COL_KEY_NAMErrrrcreate_encryption_configr*Es6 % %"!Hh#78) -  rc.tjdS)Ni,)r$)r&DecryptionConfigurationrrrcreate_decryption_configr-Qs % %S 99rctjttj dt t j diS)NzUTF-8)custom_kms_conf)r&KmsConnectionConfigr( FOOTER_KEYdecoder)COL_KEYrrrcreate_kms_connection_configr4Us8 ! ! Z..w7 '..1  rct|SNr)kms_connection_configurations r kms_factoryr8^s 9 ::rz+Parquet Encryption is not currently enabled)reasonclt}t}t}t}t j t }tj|||}tj|||}tjj}|j|}tj} | j!dtj"|d||| tjj}t%j&t(d5tjd|| dddtj*|} tjj| }tjd|| } |j-| j/sJ|j1||} tj*| } tjj| }tjd|| } |j-| j/sJy#1swYxYw) Nencryption_config/sample_dataset)database_dirformat file_options filesystemz no decryption)matchrArCdecryption_configdefault_fragment_scan_options)decryption_properties)rr*r-r4r& CryptoFactoryr8dsParquetEncryptionConfigParquetDecryptionConfigrdatasetParquetFileFormatmake_write_optionsfs_MockFileSystem create_dir write_datasetpytestraisesIOErrorParquetFragmentScanOptionsequalsto_tablefile_decryption_properties) rr<rGkms_connection_configcrypto_factoryparquet_encryption_cfgparquet_decryption_cfgpformat write_optionsmockfs pq_scan_optsrOrJs r"test_dataset_encryption_decryptionrebs !E02028:%%k2N77-/@ 77-/@ jj**,G..AW.XM    !F c !" jj**,G w&6 7H #GGH000Ljj***VGjj)'fMG <<((* ++ ++EE02003Ljj***VGjj)'fMG <<((* ++ +-HHs H**H3z'Parquet Encryption is currently enabledctjj}tjt 5|j d}dddy#1swYyxYw)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)rrOrPrVrWNotImplementedErrorrQ)ra_s r-test_write_dataset_parquet_without_encryptionrisOjj**,G * +G  & & & FGGGs AAc  Gddtjd}tjj tj t |Dcgc]}tjc}tjgdg}tj}tjfd}tjdddgid d d }tj|||}tj||tj}tj | }tj"|} | j%|} |j'|} t)j*} | j-dd} tj.|| | | | | dz}t1j2|| | j5}||k(sJtj6| | | }|j9}||k(sJycc}w)z9Test encryption and decryption of a large number of rows.c4eZdZdededefdZdededefdZy);test_large_row_encryption_decryption..NoOpKmsClient key_bytesrhreturnc0tj|}|Sr6)base64 b64encode)selfrmrhbs rwrap_keyzDtest_large_row_encryption_decryption..NoOpKmsClient.wrap_keys  +AHr wrapped_keyc0tj|}|Sr6)rp b64decode)rrrurhrss r unwrap_keyzFtest_large_row_encryption_decryption..NoOpKmsClient.unwrap_keys  -AHrN)__name__ __module__ __qualname__bytesstrrtrxrrr NoOpKmsClientrls6 e    % C E rr~i)typefoo)namescSr6r)rhr~s rz6test_large_row_encryption_decryption..s rUNIMPORTANT_KEYTF)rr"double_wrappingr!r%rFrHr;r=zlarge-row-test-dataset)rArBrCz/part-0.parquet)rJrCrEN)r& KmsClientrTable from_arraysarrayrangerandomfloat32r0rKr'rLrMrNr,rYrPrQr\rRrSrTrUpq ParquetFilereadrOr[) row_countrhr kms_configr^r< pqe_config pqd_config scan_options file_formatrbr\rcpath file_path new_tablerOr~s @r$test_large_row_encryption_decryptionrs  I HH &+I&6 7V]]_ 7  ' ! E'')J%%&?@N22$&0 ++ $5J++ B$>$>$@J00:NL&&\RK22Z2PM!/!J!J:!V    !F c #DUD"/FD((I)C df I  jjkfEG  "I I  S 8sH )%rpdatetimerr pyarrow.fsrRpyarrowrrVencryption_unavailablepyarrow.parquetparquetrpyarrow.datasetrOrL ImportError pyarrow.tests.parquet.encryptionrpyarrow.parquet.encryption encryptionr&mark pytestmarkr1r(r3r)rr*r-r4r8skipifrerirrrrrs:$    "B++ [[ !   " :;#P6,6,r'P G G#P88c B B"!"s" CC# C C #C-,C-