Skip to content

Commit 8f3139b

Browse files
committed
chore: respect FORCE_PLAINTEXT_WRITE when using multitenant and search config
1 parent 3aa25d0 commit 8f3139b

File tree

5 files changed

+15
-6
lines changed

5 files changed

+15
-6
lines changed

DynamoDbEncryption/dafny/DynamoDbEncryptionTransforms/src/BatchWriteItemTransform.dfy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ module BatchWriteItemTransform {
3232
//= specification/dynamodb-encryption-client/ddb-sdk-integration.md#encrypt-before-batchwriteitem
3333
//# If the table name does not refer to an [encrypted-table](#encrypted-table),
3434
//# the list of operations MUST be unchanged.
35-
if tableName in config.tableEncryptionConfigs {
35+
if !IsPlainWrite(config, tableName) {
3636
var tableConfig := config.tableEncryptionConfigs[tableName];
3737
var encryptedItems : seq<DDB.WriteRequest> := [];
3838
for x := 0 to |writeRequests|

DynamoDbEncryption/dafny/DynamoDbEncryptionTransforms/src/DdbMiddlewareConfig.dfy

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,17 @@ module DdbMiddlewareConfig {
1616
partitionKeyName: string,
1717
sortKeyName: Option<string>,
1818
itemEncryptor: DynamoDbItemEncryptor.DynamoDbItemEncryptorClient,
19-
search : Option<SearchableEncryptionInfo.ValidSearchInfo>
19+
search : Option<SearchableEncryptionInfo.ValidSearchInfo>,
20+
plaintextOverride: AwsCryptographyDbEncryptionSdkDynamoDbTypes.PlaintextOverride
2021
)
2122

23+
// return true if records written to the table should NOT be encrypted or otherwise modified
24+
predicate method IsPlainWrite(config : Config, tableName : string)
25+
{
26+
|| tableName !in config.tableEncryptionConfigs
27+
|| config.tableEncryptionConfigs[tableName].plaintextOverride == AwsCryptographyDbEncryptionSdkDynamoDbTypes.PlaintextOverride.FORCE_PLAINTEXT_WRITE_ALLOW_PLAINTEXT_READ
28+
}
29+
2230
predicate ValidTableConfig?(config: TableConfig) {
2331
var encryptorConfig := config.itemEncryptor.config;
2432
&& config.logicalTableName == encryptorConfig.logicalTableName

DynamoDbEncryption/dafny/DynamoDbEncryptionTransforms/src/Index.dfy

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,8 @@ module
199199
partitionKeyName := inputConfig.partitionKeyName,
200200
sortKeyName := inputConfig.sortKeyName,
201201
itemEncryptor := itemEncryptor,
202-
search := search
202+
search := search,
203+
plaintextOverride := inputConfig.plaintextOverride.UnwrapOr(AwsCryptographyDbEncryptionSdkDynamoDbTypes.PlaintextOverride.FORBID_PLAINTEXT_WRITE_FORBID_PLAINTEXT_READ)
203204
);
204205

205206
internalConfigs := internalConfigs[tableName := internalConfig];

DynamoDbEncryption/dafny/DynamoDbEncryptionTransforms/src/PutItemTransform.dfy

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ module PutItemTransform {
2626
ensures output.Success? && input.sdkInput.TableName !in config.tableEncryptionConfigs ==>
2727
output.value.transformedInput == input.sdkInput
2828

29-
ensures output.Success? && input.sdkInput.TableName in config.tableEncryptionConfigs ==>
29+
ensures output.Success? && !IsPlainWrite(config, input.sdkInput.TableName) ==>
3030
&& var tableConfig := config.tableEncryptionConfigs[input.sdkInput.TableName];
3131
//= specification/dynamodb-encryption-client/ddb-sdk-integration.md#encrypt-before-putitem
3232
//= type=implication
@@ -55,7 +55,7 @@ module PutItemTransform {
5555
input.sdkInput.ExpressionAttributeValues).Success?
5656

5757
{
58-
if input.sdkInput.TableName !in config.tableEncryptionConfigs {
58+
if IsPlainWrite(config, input.sdkInput.TableName) {
5959
return Success(PutItemInputTransformOutput(transformedInput := input.sdkInput));
6060
}
6161
var tableConfig := config.tableEncryptionConfigs[input.sdkInput.TableName];

DynamoDbEncryption/dafny/DynamoDbEncryptionTransforms/src/TransactWriteItemsTransform.dfy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ module TransactWriteItemsTransform {
7575
item.Update.value.ExpressionAttributeValues);
7676
}
7777

78-
if item.Put.Some? && item.Put.value.TableName in config.tableEncryptionConfigs {
78+
if item.Put.Some? && !IsPlainWrite(config, item.Put.value.TableName) {
7979
var tableConfig := config.tableEncryptionConfigs[item.Put.value.TableName];
8080

8181
//= specification/dynamodb-encryption-client/ddb-sdk-integration.md#encrypt-before-transactwriteitems

0 commit comments

Comments
 (0)