Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions parquet/src/encryption/decrypt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -432,6 +432,14 @@ impl FileDecryptionProperties {
}
(column_names, column_keys)
}

/// Whether these decryption properties use a key retriever.
/// When false, explicit keys were provided up front and can
/// be retrieved without providing key metadata, rather than
/// resolved on demand.
pub fn uses_key_retriever(&self) -> bool {
matches!(self.keys, DecryptionKeys::ViaRetriever(_))
}
}

impl std::fmt::Debug for FileDecryptionProperties {
Expand Down
33 changes: 33 additions & 0 deletions parquet/tests/encryption/encryption.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1474,3 +1474,36 @@ fn test_decrypt_page_index(

Ok(())
}

#[test]
fn test_decryption_properties_uses_key_retriever() {
let key_retriever = TestKeyRetriever::new()
.with_key(
AES_128_FOOTER_KEY_NAME.to_owned(),
AES_128_FOOTER_KEY.to_vec(),
)
.with_key(
AES_128_KEY_NAMES[0].to_owned(),
AES_128_COLUMN_KEYS[0].to_vec(),
);

let properties_with_retriever =
FileDecryptionProperties::with_key_retriever(Arc::new(key_retriever))
.build()
.unwrap();

assert!(properties_with_retriever.uses_key_retriever());

let properties_with_keys = FileDecryptionProperties::builder(AES_128_FOOTER_KEY.to_vec())
.with_column_key(AES_128_COLUMN_NAMES[0], AES_128_COLUMN_KEYS[0].to_vec())
.build()
.unwrap();

assert!(!properties_with_keys.uses_key_retriever());

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe test uniform case as well?

Suggested change
assert!(!properties_with_keys.uses_key_retriever());
assert!(!properties_with_keys.uses_key_retriever());
let properties_uniform = FileDecryptionProperties::builder(footer_key.to_vec())
.build()
.unwrap();
assert!(!properties_uniform.uses_key_retriever());


let uniform_properties = FileDecryptionProperties::builder(AES_128_FOOTER_KEY.to_vec())
.build()
.unwrap();

assert!(!uniform_properties.uses_key_retriever());
}
Loading