Skip to content

Commit eeb3f51

Browse files
authored
fix: remove usage of :| (#1320)
1 parent 6128a39 commit eeb3f51

File tree

3 files changed

+33
-16
lines changed

3 files changed

+33
-16
lines changed

DynamoDbEncryption/dafny/DynamoDbEncryptionTransforms/src/BatchGetItemTransform.dfy

+8-5
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

+16-6
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

DynamoDbEncryption/dafny/DynamoDbEncryptionTransforms/src/Index.dfy

+9-5
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ module
1616
import DynamoDbItemEncryptor
1717
import SearchConfigToInfo
1818
import Seq
19+
import SortedSets
1920
import ET = AwsCryptographyDbEncryptionSdkDynamoDbTypes
2021
import SET = AwsCryptographyDbEncryptionSdkStructuredEncryptionTypes
2122
import DDB = ComAmazonawsDynamodbTypes
@@ -119,6 +120,9 @@ module
119120
//# [DynamoDb Item Encryptor](./ddb-table-encryption-config.md)
120121
//# per configured table, using these table encryption configs.
121122
var m' := config.tableEncryptionConfigs;
123+
var mKeys := m'.Keys;
124+
var tableNamesSeq := SortedSets.ComputeSetToSequence(mKeys);
125+
ghost var mKeysSet := mKeys;
122126

123127
ghost var inputConfigsModifies: set<object> := set
124128
tableConfig <- config.tableEncryptionConfigs.Values,
@@ -130,8 +134,9 @@ module
130134
:: o;
131135

132136
var allLogicalTableNames := {};
137+
var i := 0;
133138

134-
while m'.Keys != {}
139+
while i < |tableNamesSeq|
135140
invariant m'.Keys <= config.tableEncryptionConfigs.Keys
136141
invariant forall k <- m' :: m'[k] == config.tableEncryptionConfigs[k]
137142
invariant forall internalConfig <- internalConfigs.Values :: internalConfig.logicalTableName in allLogicalTableNames
@@ -140,10 +145,10 @@ module
140145
invariant AllTableConfigsValid?(internalConfigs)
141146
invariant ValidConfig?(Config(internalConfigs))
142147

143-
decreases m'.Keys
144148
modifies inputConfigsModifies
145149
{
146-
var tableName: string :| tableName in m';
150+
var tableName: string := tableNamesSeq[i];
151+
147152
var inputConfig := config.tableEncryptionConfigs[tableName];
148153
:- Need(inputConfig.logicalTableName !in allLogicalTableNames, E("Duplicate logical table maped to multipule physical tables: " + inputConfig.logicalTableName));
149154

@@ -223,8 +228,7 @@ module
223228
assert ConfigsMatch(tableName, internalConfig, inputConfig);
224229
}
225230

226-
// Pop 'tableName' off the map, so that we may continue iterating
227-
m' := map k' | k' in m' && k' != tableName :: m'[k'];
231+
i := i + 1;
228232
}
229233
assert SearchValidState(DdbMiddlewareConfig.Config(tableEncryptionConfigs := internalConfigs));
230234

0 commit comments

Comments
 (0)