@@ -194,7 +194,6 @@ module BaseBeacon {
194
194
}
195
195
196
196
function method {:opaque} ValueToSet (value : DDB .AttributeValue, key : Bytes ) : (ret : Result< DDB. AttributeValue, Error> )
197
- requires asSet
198
197
ensures ret. Success? ==> ret. value. SS?
199
198
ensures ! value. SS? && ! value. NS? && ! value. BS? ==> ret. Failure?
200
199
ensures ret. Success? ==> HasNoDuplicates (ret.value.SS)
@@ -241,11 +240,20 @@ module BaseBeacon {
241
240
// = type=implication
242
241
// # * The resulting set MUST NOT contain duplicates.
243
242
&& (ret. value. Some? ==> HasNoDuplicates (ret.value.value.SS))
243
+ // = specification/searchable-encryption/beacons.md#asset-initialization
244
+ // = type=implication
245
+ // # * Writing an item MUST fail if the item contains this beacon's attribute,
246
+ // # and that attribute is not of type Set.
247
+ && var value := TermLoc. TermToAttr (loc, item, None);
248
+ && (value. Some? && ! (value. value. SS? || value. value. NS? || value. value. BS?) ==> ret. Failure?)
244
249
{
245
250
var value := TermLoc. TermToAttr (loc, item, None);
246
251
if value. None? then
247
252
Success (None)
248
253
else
254
+ // = specification/searchable-encryption/beacons.md#asset-initialization
255
+ // # * The Standard Beacon MUST be stored in the item as a Set,
256
+ // # comprised of the [beacon values](#beacon-value) of all the elements in the original Set.
249
257
var setValue :- ValueToSet (value.value, key);
250
258
Success (Some(setValue))
251
259
}
@@ -346,18 +354,13 @@ module BaseBeacon {
346
354
BeaconizeBinarySet (value[1..], key, converted + [h])
347
355
}
348
356
349
- function method GetBeaconValue (value : DDB .AttributeValue, key : Bytes )
357
+ function method GetBeaconValue (value : DDB .AttributeValue, key : Bytes , forContains : bool )
350
358
: (ret : Result< DDB. AttributeValue, Error> )
351
- // = specification/searchable-encryption/beacons.md#asset-initialization
352
- // = type=implication
353
- // # * Writing an item MUST fail if the item contains this beacon's attribute,
354
- // # and that attribute is not of type Set.
355
- ensures asSet && ! value. SS? && ! value. NS? && ! value. BS? ==> ret. Failure?
356
359
{
357
- // = specification/searchable-encryption/beacons.md#asset-initialization
358
- // # * The Standard Beacon MUST be stored in the item as a Set,
359
- // # comprised of the [beacon values](#beacon- value) of all the elements in the original Set.
360
- if asSet then
360
+ // in query, allow beaconization of terminals
361
+ if asSet && ! value . S? && ! value . N? && ! value . B? then
362
+ ValueToSet ( value, key)
363
+ else if forContains && (value . SS? || value . NS? || value . BS?) then
361
364
ValueToSet (value, key)
362
365
else
363
366
var bytes :- DynamoToStruct. TopLevelAttributeToBytes (value). MapFailure (e => E(e));
0 commit comments