in src/main/java/software/amazon/encryption/s3/internal/ObjectMetadataEncodingStrategy.java [17:39]
public Map<String, String> encodeMetadata(EncryptionMaterials materials, byte[] iv,
Map<String, String> metadata) {
EncryptedDataKey edk = materials.encryptedDataKeys().get(0);
metadata.put(MetadataKeyConstants.ENCRYPTED_DATA_KEY_V2, ENCODER.encodeToString(edk.encryptedDatakey()));
metadata.put(MetadataKeyConstants.CONTENT_IV, ENCODER.encodeToString(iv));
metadata.put(MetadataKeyConstants.CONTENT_CIPHER, materials.algorithmSuite().cipherName());
metadata.put(MetadataKeyConstants.CONTENT_CIPHER_TAG_LENGTH, Integer.toString(materials.algorithmSuite().cipherTagLengthBits()));
metadata.put(MetadataKeyConstants.ENCRYPTED_DATA_KEY_ALGORITHM, new String(edk.keyProviderInfo(), StandardCharsets.UTF_8));
try (JsonWriter jsonWriter = JsonWriter.create()) {
jsonWriter.writeStartObject();
for (Map.Entry<String, String> entry : materials.encryptionContext().entrySet()) {
jsonWriter.writeFieldName(entry.getKey()).writeValue(entry.getValue());
}
jsonWriter.writeEndObject();
String jsonEncryptionContext = new String(jsonWriter.getBytes(), StandardCharsets.UTF_8);
metadata.put(MetadataKeyConstants.ENCRYPTED_DATA_KEY_CONTEXT, jsonEncryptionContext);
} catch (JsonWriter.JsonGenerationException e) {
throw new S3EncryptionClientException("Cannot serialize encryption context to JSON.", e);
}
return metadata;
}