+
    nDjgF                        ^ RI t ^ RIHt ^ RIHt ^ RIt^ RIHt ^ RIt	^ RI
t
Rt ^ RIHt ^ RIHt  ^ RIHt ^ RIHu Ht ]
P0                  P                   tRtRtR	tR
t]]]]/tRtRt . R$Ot!]RR./t"R t#]]"3R lt$R t%]3R lt&R t']R 4       t(R%R lt)]
P0                  PU                  ]RR7      R 4       t+]
P0                  PU                  ]RR7      ]
P0                  PY                  RRR.4      R 4       4       t-]
P0                  PU                  ]RR7      ]
P0                  PY                  R. R&O4      R 4       4       t.]
P0                  PU                  ]RR7      ]
P0                  PY                  R. R'O4      R 4       4       t/]
P0                  PU                  ]RR7      ]
P0                  PY                  R. R(O4      R 4       4       t0]
P0                  PU                  ]'       * R R7      R! 4       t1]
P0                  PU                  ]RR7      R" 4       t2]
P0                  PU                  ]RR7      R# 4       t3R#   ] d	    RtRt ELi ; i  ] d    Rt ELi ; i))    N)contextmanager)	timedeltaFInMemoryKmsClientTs   0123456789112345
footer_keys   1234567890123450col_keys   2345678901234501col2_keyn_legsanimalc            	      F    \         P                  ! R . ROR. ROR. RO/4      # )yearr
   r   )i      r     r   )   r      r      d   )FlamingoParrotDogHorsezBrittle stars	Centipede)patable     _/data/cameron/venvs/s3viz/lib/python3.14/site-packages/pyarrow/tests/test_dataset_encryption.pycreate_sample_tabler   :   s,    888* 	
 r   c           
      N    \         P                  ! V R VR\        RR7      RR7      # )F
AES_GCM_V1g      @)minutes   )r   plaintext_footercolumn_keysencryption_algorithmcache_lifetimedata_key_length_bits)peEncryptionConfigurationr   )r   r%   s   &&r   create_encryption_configr+   K   s,    %%) -  r   c                  0    \         P                  ! R R7      # )i,  )r'   )r)   DecryptionConfigurationr   r   r   create_decryption_configr.   W   s    %%S99r   c           
          \         P                  ! V P                  4        UUu/ uF  w  rWP                  R 4      bK  	  uppR7      # u uppi )zUTF-8)custom_kms_conf)r)   KmsConnectionConfigitemsdecode)keyskey_namekeys   &  r   create_kms_connection_configr7   [   sK    !! "&
!- jj))!-
 
s   A	
c                     \        V 4      # Nr   )kms_connection_configurations   &r   kms_factoryr;   d   s    9::r   c              #      "   V '       d   R x  R # \         P                  ! WR7      ;_uu_ 4        R x  R R R 4       R #   + '       g   i     R # ; i5i)Nmatch)pytestraises)success
error_typer>   s   &&&r   cond_raisesrC   h   s+     ]]:33 4333s   .A?
AA	
	Ac           	        a aa V'       dM   \        R/ \        B\        \        /B o\        R/ \        B\        V./B oVP                  R 4      ^ ,          pM\        o\        oRpRVVV 3R llpS P                  pSP                  4        UUUu. uF&  w  rVV F  pVP                  R 4      ^ ,          NK  	  K(  	  ppppV Uu. uF-  pWx9  g   K  Ve   VP                  V R 24      '       d   K+  VNK/  	  p	p\        V4      ^ 8  g   Q h\        V	4      ^ 8  g   Q h\        \        /p
SP                  4        UUu/ uF  w  r[V\        8w  g   K  W[bK  	  pppV! WR4       V! WR4       V! WR4       V! WRR4       V! WRR4       V! WRR4       \        S4      ^8  d   SP                  4        F  w  rV F  pVP                  R 4      ^ ,          pSP                  4        UUu/ uF  w  r[V\        V39   g   K  W[bK  	  pppW8g  pW.,           pV! VV	R4       V! VVV4       V! VVR4       V! VVR4       K  	  K  	  V! SV	R4       V! SVR4       V! SVR4       R# u upppi u upi u uppi u uppi ).NTc           	        < Sp\        \        S4      p\        4       p\        V4      p\        V 4      p\        P
                  ! \        4      p	\        P                  ! WV4      p
\        P                  ! WV4      p\        P                  P                  4       pVP                  V
R 7      p\        P                  ! 4       pVP!                  R4       \        P"                  ! SRVVVR7       \        P                  P                  4       p\$        P&                  ! \(        RR7      ;_uu_ 4        \        P                  ! RWR7       RRR4       \        P*                  ! VR7      p\        P                  P                  VR	7      p\-        V\.        R
R7      ;_uu_ 4        \        P                  ! RWR7      p\-        V\.        R
R7      ;_uu_ 4        SP1                  V4      P3                  VP5                  V4      4      '       g   Q h RRR4       RRR4       V	P7                  W4      p\        P*                  ! VR7      p\        P                  P                  VR	7      p\-        V\.        R
R7      ;_uu_ 4        \        P                  ! RWR7      p\-        V\.        R
R7      ;_uu_ 4        SP1                  V4      P3                  VP5                  V4      4      '       g   Q h RRR4       RRR4       R#   + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     LV; i  + '       g   i     R# ; i)encryption_config/sample_datasetdatabase_dirformatfile_options
filesystemzno decryptionr=   rN   rP   Ndecryption_configdefault_fragment_scan_optionszUnknown master key)decryption_properties)r+   FOOTER_KEY_NAMEr.   r7   r)   CryptoFactoryr;   dsParquetEncryptionConfigParquetDecryptionConfigr   datasetParquetFileFormatmake_write_optionsfs_MockFileSystem
create_dirwrite_datasetr?   r@   IOErrorParquetFragmentScanOptionsrC   
ValueErrorselectequalsto_tablefile_decryption_properties)	read_keysread_columnsto_table_successdataset_success
write_keysrH   rS   encrypt_kms_connection_configdecrypt_kms_connection_configcrypto_factoryparquet_encryption_cfgparquet_decryption_cfgpformatwrite_optionsmockfspq_scan_optsr\   rV   r%   r4   r   s   &&&&              r   assert_decrypts>do_test_dataset_encryption_decryption.<locals>.assert_decrypts}   s    
4_kR46(DZ(P%(DY(O%))+6!#!;!;;L"
 "$!;!;;L"

 **..0224 3 
 ##%#
%&	
 **..0]]7*:;;JJ'K < 444
 **..*6 / 
 *<PQQjj!1'UG-zAUVV||L1889I9I,9WXXXX W R !/ I I)!>44"7
 **..*6 / 
 *<PQQjj!1'UG-zAUVV||L1889I9I,9WXXXX W RQ3 <;; WVV RQQ" WV RQQsT   /K=!3L%8L	L%?3M28L9	+M=L	L"	L%%L6	9M	MM	Fr   )T)dictKEYSEXTRA_COL_KEY_NAMEEXTRA_COL_KEYCOLUMN_KEYSsplitcolumn_namesr2   
startswithlenrW   
FOOTER_KEY)r   extra_column_pathextra_column_namerx   all_column_namesr5   r   column_nameencrypted_column_namesplaintext_column_namesfooter_key_onlyr6   column_keys_onlycolumn_key_namecolumn_key_column_namesencrypted_column_namerj   plaintext_and_one_successplaintext_and_oner%   r4   s   f&                 @@r   %do_test_dataset_encryption_decryptionr   q   s   BdB1=ABV[V-?BSAT,UV-33C8;! DY DYN ))<G<M<M<O?<O"8(1=+ *//4Q771= 8<O  ? 2BU1A+!,!J *  18#4#?#?;-q@Q#R	 *k1A  U
 %&***%&***&
3O-1ZZ\8-9MH#6 &-9  8 OTBOUCOu= $eUK$eUK$uE ;!8C8I8I8K4O)@% )>(C(CC(H(K% 37**,P2> (_o,N N +X]2>  P -B,V)$:=T$T!	+A4H	+<>WX	+A5I	+;UC% *A 9L, D0$7D0$7D*D1m?U84Ps0   ,I#I*I*1I*<I/I/'I5
=I5
z+Parquet Encryption is not currently enabled)reasonc                  ,    \        \        4       4       R # r9   )r   r   r   r   r   "test_dataset_encryption_decryptionr      s     **=*?@r   r   listzlist.list.elementc                     \         P                  ! . RO. RO. ROR.R.R	..\         P                  ! \         P                  ! 4       4      R7      p\	        4       P                  RV4      p\        W 4       R# )
   typer   N)r   r      )r   r      )      	   )r   arraylist_int32r   append_columnr   )r   	list_datar   s   &  r   test_list_encryption_decryptionr     sY    
 	Iy2$rd;XXbhhj!I  !//	BE)%=r   c                    \         P                  ! \         P                  ! 4       \         P                  ! 4       4      p\         P                  ! RR.RR.RR	.R
.. . .VR7      p\        4       P                  RV4      p\        W04       R# )k1r   mapN)r   r   )k2r   )r   r   )k3r   )r   r   )r   r   )k4r   )r   map_stringr   r   r   r   r   )r   map_typemap_datar   s   &   r   test_map_encryption_decryptionr     sv     wwryy{BHHJ/Hxx	"Y	$:Y	<RKR	
 H  !//x@E)%=r   c                    R \         P                  ! 4       3R\         P                  ! 4       3.p\         P                  ! V4      p\         P                  ! . ROVR7      p\        4       P                  RV4      p\        W@4       R# )f1f2r   structN)r   oner   twor   threer   fourr   fiver   six)r   r   r   r   r   r   r   r   )r   struct_fieldsstruct_typestruct_datar   s   &    r   !test_struct_encryption_decryptionr   (  se    
 BHHJ'$		)<=M))M*K((TK  !//+FE)%=r   c                    R \         P                  ! 4       3R\         P                  ! 4       3.p\         P                  ! V4      pRpRpRpRpR	pR
p\         P                  ! \         P                  ! 4       V4      p	^V^V/p
^V/p^V/p^V^V/p\         P
                  ! V	4      pW.pV.pV.p\         P                  ! VVRVRR.VR7      .p\        4       P                  RV4      p\        VV 4       R# )r   r   Nr   colr   r   r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   )r   r   r   struct1struct2struct3struct4struct5struct6r   map1map2map3map4	list_typelist1list2list3r   r   s   &                   r   &test_deep_nested_encryption_decryptionr   8  s     BHHJ'$		)<=M))M*KGGGGGGwwrxxz;/Hw7#Dw<Dw<Dw7#D"ILEFEFE5%udDA	RSI!//yAE)%=r   z'Parquet Encryption is currently enabledc                     \         P                  P                  4       p \        P                  ! \
        4      ;_uu_ 4        V P                  RR7      pRRR4       R#   + '       g   i     R# ; i)zTest write_dataset with ParquetFileFormat and test if an exception is thrown
if you try to set encryption_config using make_write_optionsz
some valuerG   N)r   r\   r]   r?   r@   NotImplementedErrorr^   )rt   _s     r   -test_write_dataset_parquet_without_encryptionr   _  sH     jj**,G	*	+	+&&&F 
,	+	+	+s   AA/	c            	     F  a  ! R R\         P                  4      oRp \        P                  P	                  \        P
                  ! \        V 4       Uu. uF  p\        P                  ! 4       NK  	  up\        P                  ! 4       R7      .R.R7      p\         P                  ! 4       p\         P                  ! V3R l4      p\         P                  ! RRR./RR	^R
7      p\        P                  ! WCV4      p\        P                  ! WC\         P                  ! 4       4      p\        P                   ! VR7      p\        P"                  ! VR7      p	V	P%                  VR7      p
VP'                  V4      p\(        P*                  ! 4       pVP-                  R4       Rp\        P.                  ! W-V	WR7       VR,           p\0        P2                  ! WVR7      P5                  4       pW/8X  g   Q h\        P6                  ! WVR7      pVP9                  4       pW/8X  g   Q hR# u upi )z9Test encryption and decryption of a large number of rows.c                   D   a  ] tR tRt o V 3R lR ltV 3R lR ltRtV tR# );test_large_row_encryption_decryption.<locals>.NoOpKmsClientit  c                ,   < V ^8  d   QhRS[ RS[RS[ /# )r   	key_bytesr   returnbytesstr)rN   __classdict__s   "r   __annotate__Htest_large_row_encryption_decryption.<locals>.NoOpKmsClient.__annotate__u  s"     	 	e 	 	 	r   c                2    \         P                  ! V4      pV# r9   )base64	b64encode)selfr   r   bs   &&& r   wrap_keyDtest_large_row_encryption_decryption.<locals>.NoOpKmsClient.wrap_keyu  s      +AHr   c                ,   < V ^8  d   QhRS[ RS[RS[ /# )r   wrapped_keyr   r   r   )rN   r   s   "r   r   r   y  s"     	 	% 	C 	E 	r   c                2    \         P                  ! V4      pV# r9   )r   	b64decode)r   r   r   r   s   &&& r   
unwrap_keyFtest_large_row_encryption_decryption.<locals>.NoOpKmsClient.unwrap_keyy  s      -AHr   r   N)__name__
__module____qualname____firstlineno__r   r   __static_attributes____classdictcell__)r   s   @r   NoOpKmsClientr   t  s     	 		 	r   r   r   foo)namesc                    < S! 4       # r9   r   )r   r   s   &r   <lambda>6test_large_row_encryption_decryption.<locals>.<lambda>  s    r   UNIMPORTANT_KEYTF)r   r%   double_wrappingr$   r(   rR   rT   rG   rI   zlarge-row-test-dataset)rN   rO   rP   z/part-0.parquetrV   rP   rQ   Ni  )r)   	KmsClientr   Tablefrom_arraysr   rangerandomfloat32r1   rX   r*   rY   rZ   r[   r-   rd   r]   r^   ri   r_   r`   ra   rb   pqParquetFilereadr\   rh   )	row_countr   r   
kms_configrq   rH   
pqe_config
pqd_configscan_optionsfile_formatru   ri   rv   path	file_path	new_tabler\   r   s                    @r   $test_large_row_encryption_decryptionr  n  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   Hc                  
   \        4       p \        4       p\        4       p\        4       p\        P
                  ! \        4      p\        P                  ! WCV4      p\        P                  ! WCV4      p\        P                  P                  4       pVP                  VR R.R7      p\        P                  ! 4       p	V	P!                  R4       \        P"                  ! V RVVV	R7       \        P$                  ! VR7      p
\        P                  P                  V
R7      p\        P                  ! RWyR7      pVP'                  4        EF  pVP)                  W2VP*                  V	4      p\,        P.                  ! VP*                  VV	R	7      ;_uu_ 4       p\1        VP2                  P4                  4       EF,  pVP2                  P7                  V4      pVP9                  ^ 4      P:                  f   Q hVP9                  ^ 4      P:                  P<                  R8X  g   Q hVP9                  ^ 4      P:                  P>                  R8X  g   Q hVP9                  ^4      P:                  f   Q hVP9                  ^4      P:                  P<                  ^8X  g   Q hVP9                  ^4      P:                  P>                  ^d8X  g   Q hVP9                  ^4      P:                  f   EK-  Q h	  R
R
R
4       EK  	  R
#   + '       g   i     EK  ; i)r   r
   )rH   write_statisticsrI   rJ   rK   rR   rT   rQ   r  Nr   r   ) r   r+   r.   r7   r)   rX   r;   rY   rZ   r[   r   r\   r]   r^   r_   r`   ra   rb   rd   get_fragmentsri   r  r
  r  r  metadatanum_row_groups	row_groupcolumn
statisticsminmax)r   rH   rS   kms_connection_configrq   rr   rs   rt   ru   rv   rw   r\   fragmentrV   parquet_filerg_idxr  s                    r   7test_dataset_encryption_with_selected_column_statisticsr%    s     !E02028:%%k2N77/@  77/@ jj**,G..0 (+ / M
 !F
c!" 000L jj***VGjj)'MG))+ . I I!hmmV!M^^MM"7
 
  5 5 D DE(11;;FC	 ''*55AAA ''*5599TAAA ''*5599TAAA ''*55AAA ''*5599Q>>> ''*5599S@@@ ''*55=== F
 
 ,
 
 
s   EK0K00L)r   r
   r   r9   )r   zmap.key_value.keyzmap.key_value.value)r   z	struct.f1z	struct.f2)r   zcol.list.element.key_value.keyz#col.list.element.key_value.value.f1z#col.list.element.key_value.value.f2)4r   
contextlibr   datetimer   r  
pyarrow.fsr_   pyarrowr   r?   encryption_unavailablepyarrow.parquetparquetr
  pyarrow.datasetr\   rY   ImportError pyarrow.tests.parquet.encryptionr   pyarrow.parquet.encryption
encryptionr)   mark
pytestmarkr   rW   COL_KEYCOL_KEY_NAMEr{   r}   r|   COLUMNSr~   r   r+   r.   r7   r;   rC   r   skipifr   parametrizer   r   r   r   r   r  r%  r   r   r   <module>r9     s  $  %        
"B++ [[  
 !

\7;# 
&h12" )8[ 	: '+ ;  J2Z #P  AA #P   1D(EF> G> 8   F>	> #P   (LM	> N	> 8   >	>4 'P  	G	G #P  88v #P  =>=>_  	B	B  "!"s"   H: I :I	I		II