@@ -42,10 +42,12 @@ module SearchConfigToInfo {
42
42
requires ValidSearchConfig (outer.search)
43
43
requires outer. search. Some? ==> ValidSharedCache (outer.search.value.versions[0].keySource)
44
44
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 {}
45
46
ensures outer. search. Some? ==> ValidSharedCache (outer.search.value.versions[0].keySource)
46
47
ensures output. Success? && output. value. Some? ==>
47
48
&& output. value. value. ValidState ()
48
49
&& fresh (output. value. value. versions[0]. keySource. client)
50
+ && fresh (output. value. value. versions[0]. bucketSelector)
49
51
// = specification/searchable-encryption/search-config.md#initialization
50
52
// = type=implication
51
53
// # Initialization MUST fail if the [version number](#version-number) is not `1`.
@@ -242,10 +244,13 @@ module SearchConfigToInfo {
242
244
requires ValidBeaconVersion (config)
243
245
requires ValidSharedCache (config.keySource)
244
246
modifies config. keyStore. Modifies
247
+ modifies if config. bucketSelector. Some? then config. bucketSelector. value. Modifies else {}
245
248
ensures ValidSharedCache (config.keySource)
246
249
ensures output. Success? ==>
247
250
&& output. value. ValidState ()
248
251
&& fresh (output. value. keySource. client)
252
+ && fresh (output. value. bucketSelector)
253
+ && fresh (output. value. bucketSelector. Modifies)
249
254
250
255
// = specification/searchable-encryption/search-config.md#beacon-version-initialization
251
256
// = type=implication
@@ -264,7 +269,8 @@ module SearchConfigToInfo {
264
269
var maybePrimitives := Primitives. AtomicPrimitives ();
265
270
var primitives :- maybePrimitives. MapFailure (e => AwsCryptographyPrimitives(e));
266
271
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);
268
274
}
269
275
270
276
class DefaultBucketSelector extends IBucketSelector
@@ -321,6 +327,8 @@ module SearchConfigToInfo {
321
327
ensures output. Success? ==>
322
328
&& output. value. ValidState ()
323
329
&& output. value. keySource == source
330
+ && fresh (output. value. bucketSelector)
331
+ && fresh (output. value. bucketSelector. Modifies)
324
332
{
325
333
var maxBuckets : BucketCount := config. maximumNumberOfBuckets. UnwrapOr (1);
326
334
var defaultBuckets : BucketCount := config. defaultNumberOfBuckets. UnwrapOr (maxBuckets);
@@ -376,15 +384,17 @@ module SearchConfigToInfo {
376
384
bucketSelector := new DefaultBucketSelector ();
377
385
}
378
386
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);
388
398
}
389
399
390
400
// convert configured VirtualFieldList to internal VirtualFieldMap
0 commit comments