Skip to content

Commit 7e17008

Browse files
committed
m
1 parent c2746c5 commit 7e17008

File tree

6 files changed

+26
-14
lines changed

6 files changed

+26
-14
lines changed

DynamoDbEncryption/dafny/DynamoDbEncryptionTransforms/src/AttributeResolver.dfy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ module AttributeResolver {
3232
);
3333
} else {
3434
var tableConfig := config.tableEncryptionConfigs[input.TableName];
35-
var bucket := GetRandomBucket(tableConfig); // TODO - should this be input?
35+
var bucket :- GetRandomBucket(tableConfig);
3636
var vf :- GetVirtualFields(tableConfig.search.value, input.Item, input.Version);
3737
var cb :- GetCompoundBeacons(tableConfig.search.value, input.Item, input.Version, bucket);
3838
return Success(

DynamoDbEncryption/dafny/DynamoDbEncryptionTransforms/src/BatchWriteItemTransform.dfy

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

57-
var bucket := GetRandomBucket(tableConfig);
57+
var bucket :- GetRandomBucket(tableConfig);
5858
var item :- AddSignedBeacons(tableConfig, req.PutRequest.value.Item, bucket);
5959

6060
var encryptRes := tableConfig.itemEncryptor.EncryptItem(EncTypes.EncryptItemInput(plaintextItem:=item));

DynamoDbEncryption/dafny/DynamoDbEncryptionTransforms/src/DdbMiddlewareConfig.dfy

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ module DdbMiddlewareConfig {
1212
import SearchableEncryptionInfo
1313
import DDB = ComAmazonawsDynamodbTypes
1414
import HexStrings
15+
import Random
1516

1617
datatype TableConfig = TableConfig(
1718
physicalTableName: ComAmazonawsDynamodbTypes.TableName,
@@ -30,16 +31,27 @@ module DdbMiddlewareConfig {
3031
|| config.tableEncryptionConfigs[tableName].plaintextOverride == AwsCryptographyDbEncryptionSdkDynamoDbTypes.PlaintextOverride.FORCE_PLAINTEXT_WRITE_ALLOW_PLAINTEXT_READ
3132
}
3233

33-
function method GetRandomBucket(config : TableConfig) : seq<uint8>
34+
method GetRandomBucket(config : TableConfig) returns (output : Result<seq<uint8>, Error>)
3435
{
35-
if config.search.Some? then
36-
var numBuckets : uint32 := config.search.value.versions[0].numBuckets;
37-
if numBuckets <= 1 then
38-
[]
39-
else
40-
[1] // TODO
41-
else
42-
[]
36+
if config.search.None? {
37+
return Success([]);
38+
}
39+
var numBuckets : uint32 := config.search.value.versions[0].numBuckets;
40+
if numBuckets <= 1 {
41+
return Success([]);
42+
}
43+
if (numBuckets > 255) {
44+
return Failure(E("Number of buckets exceeds 255"));
45+
}
46+
47+
var randR := Random.GenerateBytes(1);
48+
var rand : seq<uint8> :- randR.MapFailure(e => E("Failed to get random byte"));
49+
var bucket := rand[0] % (numBuckets as uint8);
50+
if bucket == 0 {
51+
return Success([]);
52+
} else {
53+
return Success([bucket as uint8]);
54+
}
4355
}
4456

4557
predicate ValidTableConfig?(config: TableConfig) {

DynamoDbEncryption/dafny/DynamoDbEncryptionTransforms/src/PutItemTransform.dfy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ module PutItemTransform {
5858
input.sdkInput.ConditionExpression,
5959
input.sdkInput.ExpressionAttributeNames,
6060
input.sdkInput.ExpressionAttributeValues);
61-
var bucket := GetRandomBucket(tableConfig);
61+
var bucket :- GetRandomBucket(tableConfig);
6262
var item :- AddSignedBeacons(tableConfig, input.sdkInput.Item, bucket);
6363
var encryptRes := tableConfig.itemEncryptor.EncryptItem(
6464
EncTypes.EncryptItemInput(plaintextItem:=item)

DynamoDbEncryption/dafny/DynamoDbEncryptionTransforms/src/ScanTransform.dfy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ module ScanTransform {
4343
:- Need(input.sdkInput.ConditionalOperator.None?, E("Legacy parameter 'ConditionalOperator' not supported in UpdateItem with Encryption"));
4444
var tableConfig := config.tableEncryptionConfigs[input.sdkInput.TableName];
4545

46-
var bucket := []; // TODO
46+
var bucket := []; // TODO
4747
var finalResult :- ScanInputForBeacons(tableConfig, input.sdkInput, bucket);
4848
return Success(ScanInputTransformOutput(transformedInput := finalResult));
4949
}

DynamoDbEncryption/dafny/DynamoDbEncryptionTransforms/src/TransactWriteItemsTransform.dfy

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

92-
var bucket := GetRandomBucket(tableConfig);
92+
var bucket :- GetRandomBucket(tableConfig);
9393
var beaconItem :- AddSignedBeacons(tableConfig, item.Put.value.Item, bucket);
9494

9595
var encryptRes := tableConfig.itemEncryptor.EncryptItem(

0 commit comments

Comments
 (0)