@@ -139,9 +139,8 @@ impl RingGcmBlockDecryptor {
139139
140140impl BlockDecryptor for RingGcmBlockDecryptor {
141141 fn decrypt ( & self , length_and_ciphertext : & [ u8 ] , aad : & [ u8 ] ) -> Result < Vec < u8 > > {
142- let mut result = Vec :: with_capacity (
143- length_and_ciphertext. len ( ) - SIZE_LEN - NONCE_LEN - TAG_LEN ,
144- ) ;
142+ let mut result =
143+ Vec :: with_capacity ( length_and_ciphertext. len ( ) - SIZE_LEN - NONCE_LEN - TAG_LEN ) ;
145144 result. extend_from_slice ( & length_and_ciphertext[ SIZE_LEN + NONCE_LEN ..] ) ;
146145
147146 let nonce = ring:: aead:: Nonce :: try_assume_unique_for_key (
@@ -175,48 +174,74 @@ pub fn create_footer_aad(file_aad: &[u8]) -> Result<Vec<u8>> {
175174 create_module_aad ( file_aad, ModuleType :: Footer , 0 , 0 , None )
176175}
177176
178- pub ( crate ) fn create_page_aad ( file_aad : & [ u8 ] , module_type : ModuleType , row_group_ordinal : usize ,
179- column_ordinal : usize , page_ordinal : Option < usize > ) -> Result < Vec < u8 > > {
180- create_module_aad ( file_aad, module_type, row_group_ordinal, column_ordinal, page_ordinal)
177+ pub ( crate ) fn create_page_aad (
178+ file_aad : & [ u8 ] ,
179+ module_type : ModuleType ,
180+ row_group_ordinal : usize ,
181+ column_ordinal : usize ,
182+ page_ordinal : Option < usize > ,
183+ ) -> Result < Vec < u8 > > {
184+ create_module_aad (
185+ file_aad,
186+ module_type,
187+ row_group_ordinal,
188+ column_ordinal,
189+ page_ordinal,
190+ )
181191}
182192
183- fn create_module_aad ( file_aad : & [ u8 ] , module_type : ModuleType , row_group_ordinal : usize ,
184- column_ordinal : usize , page_ordinal : Option < usize > ) -> Result < Vec < u8 > > {
193+ fn create_module_aad (
194+ file_aad : & [ u8 ] ,
195+ module_type : ModuleType ,
196+ row_group_ordinal : usize ,
197+ column_ordinal : usize ,
198+ page_ordinal : Option < usize > ,
199+ ) -> Result < Vec < u8 > > {
185200
186201 let module_buf = [ module_type as u8 ] ;
187202
188203 if module_buf[ 0 ] == ( ModuleType :: Footer as u8 ) {
189204 let mut aad = Vec :: with_capacity ( file_aad. len ( ) + 1 ) ;
190205 aad. extend_from_slice ( file_aad) ;
191206 aad. extend_from_slice ( module_buf. as_ref ( ) ) ;
192- return Ok ( aad)
207+ return Ok ( aad) ;
193208 }
194209
195210 if row_group_ordinal > i16:: MAX as usize {
196- return Err ( general_err ! ( "Encrypted parquet files can't have more than {} row groups: {}" ,
197- i16 :: MAX , row_group_ordinal) ) ;
211+ return Err ( general_err ! (
212+ "Encrypted parquet files can't have more than {} row groups: {}" ,
213+ i16 :: MAX ,
214+ row_group_ordinal
215+ ) ) ;
198216 }
199217 if column_ordinal > i16:: MAX as usize {
200- return Err ( general_err ! ( "Encrypted parquet files can't have more than {} columns: {}" ,
201- i16 :: MAX , column_ordinal) ) ;
218+ return Err ( general_err ! (
219+ "Encrypted parquet files can't have more than {} columns: {}" ,
220+ i16 :: MAX ,
221+ column_ordinal
222+ ) ) ;
202223 }
203224
204- if module_buf[ 0 ] != ( ModuleType :: DataPageHeader as u8 ) &&
205- module_buf[ 0 ] != ( ModuleType :: DataPage as u8 ) {
225+ if module_buf[ 0 ] != ( ModuleType :: DataPageHeader as u8 )
226+ && module_buf[ 0 ] != ( ModuleType :: DataPage as u8 )
227+ {
206228 let mut aad = Vec :: with_capacity ( file_aad. len ( ) + 5 ) ;
207229 aad. extend_from_slice ( file_aad) ;
208230 aad. extend_from_slice ( module_buf. as_ref ( ) ) ;
209231 aad. extend_from_slice ( ( row_group_ordinal as i16 ) . to_le_bytes ( ) . as_ref ( ) ) ;
210232 aad. extend_from_slice ( ( column_ordinal as i16 ) . to_le_bytes ( ) . as_ref ( ) ) ;
211- return Ok ( aad)
233+ return Ok ( aad) ;
212234 }
213235
214- let page_ordinal = page_ordinal . ok_or_else ( || general_err ! (
215- "Page ordinal must be set for data pages" ) ) ?;
236+ let page_ordinal =
237+ page_ordinal . ok_or_else ( || general_err ! ( "Page ordinal must be set for data pages" ) ) ?;
216238
217239 if page_ordinal > i16:: MAX as usize {
218- return Err ( general_err ! ( "Encrypted parquet files can't have more than {} pages per column chunk: {}" ,
219- i16 :: MAX , page_ordinal) ) ;
240+ return Err ( general_err ! (
241+ "Encrypted parquet files can't have more than {} pages per column chunk: {}" ,
242+ i16 :: MAX ,
243+ page_ordinal
244+ ) ) ;
220245 }
221246
222247 let mut aad = Vec :: with_capacity ( file_aad. len ( ) + 7 ) ;
@@ -239,7 +264,9 @@ impl FileDecryptionProperties {
239264 pub fn builder ( ) -> DecryptionPropertiesBuilder {
240265 DecryptionPropertiesBuilder :: with_defaults ( )
241266 }
242- pub fn has_footer_key ( & self ) -> bool { self . footer_key . is_some ( ) }
267+ pub fn has_footer_key ( & self ) -> bool {
268+ self . footer_key . is_some ( )
269+ }
243270
244271 pub fn has_column_keys ( & self ) -> bool {
245272 self . column_keys . is_some ( )
@@ -285,7 +312,7 @@ impl DecryptionPropertiesBuilder {
285312 }
286313
287314 pub fn with_column_key ( mut self , key : Vec < u8 > , value : Vec < u8 > ) -> Self {
288- let mut column_keys= self . column_keys . unwrap_or_default ( ) ;
315+ let mut column_keys = self . column_keys . unwrap_or_default ( ) ;
289316 column_keys. insert ( key, value) ;
290317 self . column_keys = Some ( column_keys) ;
291318 self
@@ -308,8 +335,15 @@ impl PartialEq for FileDecryptor {
308335}
309336
310337impl FileDecryptor {
311- pub ( crate ) fn new ( decryption_properties : & FileDecryptionProperties , aad_file_unique : Vec < u8 > , aad_prefix : Vec < u8 > ) -> Self {
312- let footer_decryptor = decryption_properties. footer_key . clone ( ) . map ( |footer_key| RingGcmBlockDecryptor :: new ( footer_key. as_ref ( ) ) ) ;
338+ pub ( crate ) fn new (
339+ decryption_properties : & FileDecryptionProperties ,
340+ aad_file_unique : Vec < u8 > ,
341+ aad_prefix : Vec < u8 > ,
342+ ) -> Self {
343+ let footer_decryptor = decryption_properties
344+ . footer_key
345+ . clone ( )
346+ . map ( |footer_key| RingGcmBlockDecryptor :: new ( footer_key. as_ref ( ) ) ) ;
313347
314348 Self {
315349 // todo decr: if no key available yet (not set in properties, will be retrieved from metadata)
@@ -326,7 +360,11 @@ impl FileDecryptor {
326360 }
327361
328362 pub ( crate ) fn has_column_key ( & self , column_name : & [ u8 ] ) -> bool {
329- self . decryption_properties . column_keys . clone ( ) . unwrap ( ) . contains_key ( column_name)
363+ self . decryption_properties
364+ . column_keys
365+ . clone ( )
366+ . unwrap ( )
367+ . contains_key ( column_name)
330368 }
331369
332370 pub ( crate ) fn get_column_decryptor ( & self , column_name : & [ u8 ] ) -> FileDecryptor {
@@ -387,9 +425,12 @@ pub struct CryptoContext {
387425}
388426
389427impl CryptoContext {
390- pub fn new ( row_group_ordinal : usize ,
391- column_ordinal : usize , data_decryptor : Arc < FileDecryptor > ,
392- metadata_decryptor : Arc < FileDecryptor > ) -> Self {
428+ pub fn new (
429+ row_group_ordinal : usize ,
430+ column_ordinal : usize ,
431+ data_decryptor : Arc < FileDecryptor > ,
432+ metadata_decryptor : Arc < FileDecryptor >
433+ ) -> Self {
393434 Self {
394435 row_group_ordinal,
395436 column_ordinal,
@@ -422,6 +463,10 @@ impl CryptoContext {
422463 }
423464 }
424465
425- pub fn data_decryptor ( & self ) -> Arc < FileDecryptor > { self . data_decryptor . clone ( ) }
426- pub fn metadata_decryptor ( & self ) -> Arc < FileDecryptor > { self . metadata_decryptor . clone ( ) }
466+ pub fn data_decryptor ( & self ) -> Arc < FileDecryptor > {
467+ self . data_decryptor . clone ( )
468+ }
469+ pub fn metadata_decryptor ( & self ) -> Arc < FileDecryptor > {
470+ self . metadata_decryptor . clone ( )
471+ }
427472}
0 commit comments