Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 87ba973

Browse files
committedAug 26, 2024
chore: remove :|
1 parent 0df13ba commit 87ba973

File tree

2 files changed

+24
-11
lines changed

2 files changed

+24
-11
lines changed
 

‎DynamoDbEncryption/dafny/DynamoDbEncryptionTransforms/src/BatchGetItemTransform.dfy

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ module BatchGetItemTransform {
1111
import opened AwsCryptographyDbEncryptionSdkDynamoDbTransformsTypes
1212
import EncTypes = AwsCryptographyDbEncryptionSdkDynamoDbItemEncryptorTypes
1313
import Seq
14+
import SortedSets
1415

1516
method Input(config: Config, input: BatchGetItemInputTransformInput)
1617
returns (output: Result<BatchGetItemInputTransformOutput, Error>)
@@ -34,14 +35,15 @@ module BatchGetItemTransform {
3435
return Success(BatchGetItemOutputTransformOutput(transformedOutput := input.sdkOutput));
3536
}
3637
var tableNames := input.sdkOutput.Responses.value.Keys;
38+
var tableNamesSeq := SortedSets.ComputeSetToSequence(tableNames);
39+
ghost var tableNamesSet' := tableNames;
40+
var i := 0;
3741
var result := map[];
38-
while tableNames != {}
39-
decreases |tableNames|
40-
invariant tableNames <= input.sdkOutput.Responses.value.Keys
42+
while i < |tableNamesSeq|
43+
invariant tableNamesSet' <= input.sdkOutput.Responses.value.Keys
4144
// true but expensive -- invariant result.Keys + tableNames == input.sdkOutput.Responses.value.Keys
4245
{
43-
var tableName :| tableName in tableNames;
44-
tableNames := tableNames - { tableName };
46+
var tableName := tableNamesSeq[i];
4547
var responses := input.sdkOutput.Responses.value[tableName];
4648
if tableName in config.tableEncryptionConfigs {
4749
var tableConfig := config.tableEncryptionConfigs[tableName];
@@ -74,6 +76,7 @@ module BatchGetItemTransform {
7476
} else {
7577
result := result + map[tableName := responses];
7678
}
79+
i := i + 1;
7780
}
7881
return Success(BatchGetItemOutputTransformOutput(transformedOutput := input.sdkOutput.(Responses := Some(result))));
7982
}

‎DynamoDbEncryption/dafny/DynamoDbEncryptionTransforms/src/BatchWriteItemTransform.dfy

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,27 @@ module BatchWriteItemTransform {
1111
import opened AwsCryptographyDbEncryptionSdkDynamoDbTransformsTypes
1212
import EncTypes = AwsCryptographyDbEncryptionSdkDynamoDbItemEncryptorTypes
1313
import Seq
14+
import SortedSets
1415
import Util = DynamoDbEncryptionUtil
1516

16-
method Input(config: Config, input: BatchWriteItemInputTransformInput)
17+
method {:vcs_split_on_every_assert} Input(config: Config, input: BatchWriteItemInputTransformInput)
1718
returns (output: Result<BatchWriteItemInputTransformOutput, Error>)
1819
requires ValidConfig?(config)
1920
ensures ValidConfig?(config)
2021
modifies ModifiesConfig(config)
2122
{
2223
var tableNames := input.sdkInput.RequestItems.Keys;
2324
var result : map<DDB.TableName, DDB.WriteRequests> := map[];
24-
while tableNames != {}
25-
decreases |tableNames|
26-
invariant tableNames <= input.sdkInput.RequestItems.Keys
25+
var tableNamesSeq := SortedSets.ComputeSetToSequence(tableNames);
26+
ghost var tableNamesSet' := tableNames;
27+
var i := 0;
28+
while i < |tableNamesSeq|
29+
invariant Seq.HasNoDuplicates(tableNamesSeq)
30+
invariant forall j | i <= j < |tableNamesSeq| :: tableNamesSeq[j] in tableNamesSet'
31+
invariant |tableNamesSet'| == |tableNamesSeq| - i
32+
invariant tableNamesSet' <= input.sdkInput.RequestItems.Keys
2733
{
28-
var tableName :| tableName in tableNames;
29-
tableNames := tableNames - { tableName };
34+
var tableName := tableNamesSeq[i];
3035

3136
var writeRequests : DDB.WriteRequests := input.sdkInput.RequestItems[tableName];
3237
//= specification/dynamodb-encryption-client/ddb-sdk-integration.md#encrypt-before-batchwriteitem
@@ -64,6 +69,11 @@ module BatchWriteItemTransform {
6469
}
6570
writeRequests := encryptedItems;
6671
}
72+
tableNamesSet' := tableNamesSet' - {tableName};
73+
i := i + 1;
74+
assert forall j | i <= j < |tableNamesSeq| :: tableNamesSeq[j] in tableNamesSet' by {
75+
reveal Seq.HasNoDuplicates();
76+
}
6777
result := result[tableName := writeRequests];
6878
}
6979
:- Need(|result| == |input.sdkInput.RequestItems|, E("Internal Error")); // Dafny gets too confused

0 commit comments

Comments
 (0)
Please sign in to comment.