in parquet-hadoop/src/main/java/org/apache/parquet/crypto/FileEncryptionProperties.java [44:91]
private FileEncryptionProperties(ParquetCipher cipher,
byte[] footerKey, byte[] footerKeyMetadata, boolean encryptedFooter,
byte[] aadPrefix, boolean storeAadPrefixInFile,
Map<ColumnPath, ColumnEncryptionProperties> columnPropertyMap) {
if (null == footerKey) {
throw new IllegalArgumentException("Footer key is null");
}
if (! (footerKey.length == 16 || footerKey.length == 24 || footerKey.length == 32)) {
throw new IllegalArgumentException("Wrong footer key length " + footerKey.length);
}
if (null != columnPropertyMap && columnPropertyMap.size() == 0) {
throw new IllegalArgumentException("No encrypted columns");
}
SecureRandom random = new SecureRandom();
byte[] aadFileUnique = new byte[AAD_FILE_UNIQUE_LENGTH];
random.nextBytes(aadFileUnique);
boolean supplyAadPrefix = false;
if (null == aadPrefix) {
this.fileAAD = aadFileUnique;
} else {
this.fileAAD = AesCipher.concatByteArrays(aadPrefix, aadFileUnique);
if (!storeAadPrefixInFile) supplyAadPrefix = true;
}
this.algorithm = cipher.getEncryptionAlgorithm();
if (algorithm.isSetAES_GCM_V1()) {
algorithm.getAES_GCM_V1().setAad_file_unique(aadFileUnique);
algorithm.getAES_GCM_V1().setSupply_aad_prefix(supplyAadPrefix);
if (null != aadPrefix && storeAadPrefixInFile) {
algorithm.getAES_GCM_V1().setAad_prefix(aadPrefix);
}
} else {
algorithm.getAES_GCM_CTR_V1().setAad_file_unique(aadFileUnique);
algorithm.getAES_GCM_CTR_V1().setSupply_aad_prefix(supplyAadPrefix);
if (null != aadPrefix && storeAadPrefixInFile) {
algorithm.getAES_GCM_CTR_V1().setAad_prefix(aadPrefix);
}
}
this.footerKey = footerKey;
this.footerKeyMetadata = footerKeyMetadata;
this.encryptedFooter = encryptedFooter;
this.columnPropertyMap = columnPropertyMap;
}