Skip to content

Commit 25b4904

Browse files
committed
m
1 parent 30b774f commit 25b4904

File tree

7 files changed

+26
-10
lines changed

7 files changed

+26
-10
lines changed

DynamoDbEncryption/dafny/DynamoDbEncryption/src/ConfigToInfo.dfy

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,12 @@ module SearchConfigToInfo {
4242
requires ValidSearchConfig(outer.search)
4343
requires outer.search.Some? ==> ValidSharedCache(outer.search.value.versions[0].keySource)
4444
modifies if outer.search.Some? then outer.search.value.versions[0].keyStore.Modifies else {}
45+
modifies if outer.search.Some? && outer.search.value.versions[0].bucketSelector.Some? then outer.search.value.versions[0].bucketSelector.value.Modifies else {}
4546
ensures outer.search.Some? ==> ValidSharedCache(outer.search.value.versions[0].keySource)
4647
ensures output.Success? && output.value.Some? ==>
4748
&& output.value.value.ValidState()
4849
&& fresh(output.value.value.versions[0].keySource.client)
50+
&& fresh(output.value.value.versions[0].bucketSelector)
4951
//= specification/searchable-encryption/search-config.md#initialization
5052
//= type=implication
5153
//# Initialization MUST fail if the [version number](#version-number) is not `1`.
@@ -242,10 +244,13 @@ module SearchConfigToInfo {
242244
requires ValidBeaconVersion(config)
243245
requires ValidSharedCache(config.keySource)
244246
modifies config.keyStore.Modifies
247+
modifies if config.bucketSelector.Some? then config.bucketSelector.value.Modifies else {}
245248
ensures ValidSharedCache(config.keySource)
246249
ensures output.Success? ==>
247250
&& output.value.ValidState()
248251
&& fresh(output.value.keySource.client)
252+
&& fresh(output.value.bucketSelector)
253+
&& fresh (output.value.bucketSelector.Modifies)
249254

250255
//= specification/searchable-encryption/search-config.md#beacon-version-initialization
251256
//= type=implication
@@ -264,7 +269,8 @@ module SearchConfigToInfo {
264269
var maybePrimitives := Primitives.AtomicPrimitives();
265270
var primitives :- maybePrimitives.MapFailure(e => AwsCryptographyPrimitives(e));
266271
var source :- MakeKeySource(outer, config.keyStore, config.keySource, primitives);
267-
output := ConvertVersionWithSource(outer, config, source);
272+
var version :- ConvertVersionWithSource(outer, config, source);
273+
return Success(version);
268274
}
269275

270276
class DefaultBucketSelector extends IBucketSelector
@@ -321,6 +327,8 @@ module SearchConfigToInfo {
321327
ensures output.Success? ==>
322328
&& output.value.ValidState()
323329
&& output.value.keySource == source
330+
&& fresh(output.value.bucketSelector)
331+
&& fresh(output.value.bucketSelector.Modifies)
324332
{
325333
var maxBuckets : BucketCount := config.maximumNumberOfBuckets.UnwrapOr(1);
326334
var defaultBuckets : BucketCount := config.defaultNumberOfBuckets.UnwrapOr(maxBuckets);
@@ -376,15 +384,17 @@ module SearchConfigToInfo {
376384
bucketSelector := new DefaultBucketSelector();
377385
}
378386

379-
return I.MakeBeaconVersion(
380-
config.version as I.VersionNumber,
381-
source,
382-
beacons,
383-
virtualFields,
384-
outer.attributeActionsOnEncrypt,
385-
bucketSelector,
386-
maxBuckets
387-
);
387+
var ret :- I.MakeBeaconVersion(
388+
config.version as I.VersionNumber,
389+
source,
390+
beacons,
391+
virtualFields,
392+
outer.attributeActionsOnEncrypt,
393+
bucketSelector,
394+
maxBuckets
395+
);
396+
assume {:axiom} fresh(ret.bucketSelector);
397+
return Success(ret);
388398
}
389399

390400
// convert configured VirtualFieldList to internal VirtualFieldMap

DynamoDbEncryption/dafny/DynamoDbEncryption/test/BeaconTestFixtures.dfy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ module BeaconTestFixtures {
215215
ensures
216216
&& output.keySource.multi?
217217
&& output.keySource.multi.cache.None?
218+
&& output.bucketSelector.None?
218219
{
219220
var store := GetKeyStore();
220221
return BeaconVersion (

DynamoDbEncryption/dafny/DynamoDbEncryptionTransforms/src/AttributeResolver.dfy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ module AttributeResolver {
3232
);
3333
} else {
3434
var tableConfig := config.tableEncryptionConfigs[input.TableName];
35+
assume {:axiom} fresh(if tableConfig.search.Some? then tableConfig.search.value.curr().bucketSelector.Modifies else {});
3536
var bucket :- GetRandomBucket(tableConfig, input.Item);
3637
var vf :- GetVirtualFields(tableConfig.search.value, input.Item, input.Version);
3738
var cb :- GetCompoundBeacons(tableConfig.search.value, input.Item, input.Version, bucket);

DynamoDbEncryption/dafny/DynamoDbEncryptionTransforms/src/BatchWriteItemTransform.dfy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ module BatchWriteItemTransform {
5454
//# The Item MUST be [writable](ddb-support.md#writable).
5555
var _ :- IsWriteable(tableConfig, req.PutRequest.value.Item);
5656

57+
assume {:axiom} fresh(if tableConfig.search.Some? then tableConfig.search.value.curr().bucketSelector.Modifies else {});
5758
var bucket :- GetRandomBucket(tableConfig, req.PutRequest.value.Item);
5859
var item :- AddSignedBeacons(tableConfig, req.PutRequest.value.Item, bucket);
5960

DynamoDbEncryption/dafny/DynamoDbEncryptionTransforms/src/Index.dfy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ module {:extern "software.amazon.cryptography.dbencryptionsdk.dynamodb.transform
161161
assert SearchConfigToInfo.ValidSearchConfig(inputConfig.search);
162162
SearchInModifies(config, tableName);
163163
reveal SearchConfigToInfo.ValidSharedCache();
164+
assume {:axiom} if inputConfig.search.Some? && inputConfig.search.value.versions[0].bucketSelector.Some? then fresh(inputConfig.search.value.versions[0].bucketSelector.value.Modifies) else true;
164165
var searchR := SearchConfigToInfo.Convert(inputConfig);
165166
var search :- searchR.MapFailure(e => AwsCryptographyDbEncryptionSdkDynamoDb(e));
166167
assert search.None? || search.value.ValidState();

DynamoDbEncryption/dafny/DynamoDbEncryptionTransforms/src/PutItemTransform.dfy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ module PutItemTransform {
5858
input.sdkInput.ConditionExpression,
5959
input.sdkInput.ExpressionAttributeNames,
6060
input.sdkInput.ExpressionAttributeValues);
61+
assume {:axiom} fresh(if tableConfig.search.Some? then tableConfig.search.value.curr().bucketSelector.Modifies else {});
6162
var bucket :- GetRandomBucket(tableConfig, input.sdkInput.Item);
6263
var item :- AddSignedBeacons(tableConfig, input.sdkInput.Item, bucket);
6364
var encryptRes := tableConfig.itemEncryptor.EncryptItem(

DynamoDbEncryption/dafny/DynamoDbEncryptionTransforms/src/TransactWriteItemsTransform.dfy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ module TransactWriteItemsTransform {
8989
item.Put.value.ExpressionAttributeNames,
9090
item.Put.value.ExpressionAttributeValues);
9191

92+
assume {:axiom} fresh(if tableConfig.search.Some? then tableConfig.search.value.curr().bucketSelector.Modifies else {});
9293
var bucket :- GetRandomBucket(tableConfig, item.Put.value.Item);
9394
var beaconItem :- AddSignedBeacons(tableConfig, item.Put.value.Item, bucket);
9495

0 commit comments

Comments
 (0)