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 fa1dd02

Browse files
committedSep 30, 2024
m
1 parent 2166afc commit fa1dd02

File tree

2 files changed

+70
-2
lines changed

2 files changed

+70
-2
lines changed
 

‎DynamoDbEncryption/dafny/DynamoDbEncryption/src/ConfigToInfo.dfy

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ module SearchConfigToInfo {
5050
//= type=implication
5151
//# Initialization MUST fail if the length of the list of [beacon versions](#beacon-version-initialization) is not 1.
5252
ensures outer.search.Some? && |outer.search.value.versions| != 1 ==> output.Failure?
53+
54+
ensures ValidSearchConfig(outer.search)
5355
{
5456
if outer.search.None? {
5557
return Success(None);

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

Lines changed: 68 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,24 @@ module
3030
}
3131

3232
predicate ValidWholeSearchConfig(config : ET.DynamoDbTablesEncryptionConfig)
33+
reads
34+
set
35+
t <- config.tableEncryptionConfigs |
36+
config.tableEncryptionConfigs[t].search.Some?,
37+
c <- config.tableEncryptionConfigs[t].search.value.versions |
38+
&& c.keySource.multi?
39+
&& c.keySource.multi.cache.Some?
40+
&& c.keySource.multi.cache.value.Shared?
41+
:: c.keySource.multi.cache.value.Shared,
42+
set
43+
t <- config.tableEncryptionConfigs |
44+
config.tableEncryptionConfigs[t].search.Some?,
45+
f <- config.tableEncryptionConfigs[t].search.value.versions |
46+
&& f.keySource.multi?
47+
&& f.keySource.multi.cache.Some?
48+
&& f.keySource.multi.cache.value.Shared?,
49+
o <- f.keySource.multi.cache.value.Shared.Modifies
50+
:: o
3351
{
3452
forall t <- config.tableEncryptionConfigs
3553
::
@@ -148,7 +166,54 @@ module
148166
// tmp27.keySource.multi.cache.value.Shared.ValidState()
149167
// }
150168

151-
method {:vcs_split_on_every_assert} DynamoDbEncryptionTransforms(config: AwsCryptographyDbEncryptionSdkDynamoDbTypes.DynamoDbTablesEncryptionConfig)
169+
170+
// //= specification/dynamodb-encryption-client/ddb-sdk-integration.md#dynamodb-table-encryption-configs
171+
// //# During initialization, this client MUST construct a
172+
// //# [DynamoDb Item Encryptor](./ddb-table-encryption-config.md)
173+
// //# per configured table, using these table encryption configs.
174+
// var m' := config.tableEncryptionConfigs;
175+
// var mKeys := m'.Keys;
176+
// var tableNamesSeq := SortedSets.ComputeSetToSequence(mKeys);
177+
// ghost var mKeysSet := mKeys;
178+
179+
// ghost var inputConfigsModifies: set<object> := set
180+
// tableConfig <- config.tableEncryptionConfigs.Values,
181+
// o <- (
182+
// (if tableConfig.keyring.Some? then tableConfig.keyring.value.Modifies else {})
183+
// + (if tableConfig.cmm.Some? then tableConfig.cmm.value.Modifies else {})
184+
// + (if tableConfig.legacyOverride.Some? then tableConfig.legacyOverride.value.encryptor.Modifies else {})
185+
// )
186+
// :: o;
187+
188+
// var allLogicalTableNames := {};
189+
// var i := 0;
190+
191+
// while i < |tableNamesSeq|
192+
// invariant m'.Keys <= config.tableEncryptionConfigs.Keys
193+
// invariant forall k <- m' :: m'[k] == config.tableEncryptionConfigs[k]
194+
// invariant forall internalConfig <- internalConfigs.Values :: internalConfig.logicalTableName in allLogicalTableNames
195+
196+
// invariant CorrectlyTransferedStructure?(internalConfigs, config)
197+
// invariant AllTableConfigsValid?(internalConfigs)
198+
// invariant ValidConfig?(Config(internalConfigs))
199+
200+
// // invariant BiteMe(config)
201+
202+
// modifies inputConfigsModifies
203+
// {
204+
// var tableName: string := tableNamesSeq[i];
205+
206+
// var inputConfig := config.tableEncryptionConfigs[tableName];
207+
// :- Need(inputConfig.logicalTableName !in allLogicalTableNames, E("Duplicate logical table maped to multipule physical tables: " + inputConfig.logicalTableName));
208+
209+
// assert SearchConfigToInfo.ValidSearchConfig(inputConfig.search) by {
210+
// assert ValidWholeSearchConfig(config);
211+
// assert inputConfig in config.tableEncryptionConfigs.Values;
212+
// }
213+
// }
214+
// }
215+
216+
method {:vcs_split_on_every_assert} {:only} DynamoDbEncryptionTransforms(config: AwsCryptographyDbEncryptionSdkDynamoDbTypes.DynamoDbTablesEncryptionConfig)
152217
returns (res: Result<DynamoDbEncryptionTransformsClient, Error>)
153218
//= specification/dynamodb-encryption-client/ddb-table-encryption-config.md#logical-table-name
154219
//= type=implication
@@ -196,7 +261,7 @@ module
196261
invariant AllTableConfigsValid?(internalConfigs)
197262
invariant ValidConfig?(Config(internalConfigs))
198263

199-
// invariant BiteMe(config)
264+
invariant ValidWholeSearchConfig(config)
200265

201266
modifies inputConfigsModifies
202267
{
@@ -282,6 +347,7 @@ module
282347
}
283348

284349
i := i + 1;
350+
assert SearchConfigToInfo.ValidSearchConfig(inputConfig.search);
285351
}
286352
assert SearchValidState(DdbMiddlewareConfig.Config(tableEncryptionConfigs := internalConfigs));
287353

0 commit comments

Comments
 (0)
Please sign in to comment.