@@ -135,37 +135,37 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
135
135
print |roundTripTests[1]. configs|, " configs and ", |roundTripTests[1]. records|, " records for round trip. \n";
136
136
}
137
137
138
- // var _ :- expect DecryptManifest.Decrypt("decrypt_dotnet_32.json", keyVectors);
139
- // var _ :- expect DecryptManifest.Decrypt("decrypt_java_32.json", keyVectors);
140
- // var _ :- expect DecryptManifest.Decrypt("decrypt_dotnet_33.json", keyVectors);
141
- // var _ :- expect DecryptManifest.Decrypt("decrypt_java_33.json", keyVectors);
142
- // var _ :- expect DecryptManifest.Decrypt("decrypt_dotnet_33a.json", keyVectors);
143
- // var _ :- expect DecryptManifest.Decrypt("decrypt_java_33a.json", keyVectors);
144
- // var _ :- expect DecryptManifest.Decrypt("decrypt_rust_38.json", keyVectors);
145
- // var _ :- expect DecryptManifest.Decrypt("decrypt_go_38.json", keyVectors);
146
- // var _ :- expect DecryptManifest.Decrypt("decrypt_java_39.json", keyVectors);
147
- // var _ :- expect WriteManifest.Write("encrypt.json");
148
- // var _ :- expect EncryptManifest.Encrypt("encrypt.json", "decrypt.json", "java", "3.3", keyVectors);
149
- // var _ :- expect DecryptManifest.Decrypt("decrypt.json", keyVectors);
138
+ var _ :- expect DecryptManifest. Decrypt ("decrypt_dotnet_32.json", keyVectors);
139
+ var _ :- expect DecryptManifest. Decrypt ("decrypt_java_32.json", keyVectors);
140
+ var _ :- expect DecryptManifest. Decrypt ("decrypt_dotnet_33.json", keyVectors);
141
+ var _ :- expect DecryptManifest. Decrypt ("decrypt_java_33.json", keyVectors);
142
+ var _ :- expect DecryptManifest. Decrypt ("decrypt_dotnet_33a.json", keyVectors);
143
+ var _ :- expect DecryptManifest. Decrypt ("decrypt_java_33a.json", keyVectors);
144
+ var _ :- expect DecryptManifest. Decrypt ("decrypt_rust_38.json", keyVectors);
145
+ var _ :- expect DecryptManifest. Decrypt ("decrypt_go_38.json", keyVectors);
146
+ var _ :- expect DecryptManifest. Decrypt ("decrypt_java_39.json", keyVectors);
147
+ var _ :- expect WriteManifest. Write ("encrypt.json");
148
+ var _ :- expect EncryptManifest. Encrypt ("encrypt.json", "decrypt.json", "java", "3.3", keyVectors);
149
+ var _ :- expect DecryptManifest. Decrypt ("decrypt.json", keyVectors);
150
150
if |globalRecords| + |tableEncryptionConfigs| + |queries| == 0 {
151
151
print "\nRunning no tests\n";
152
152
return ;
153
153
}
154
154
Validate ();
155
155
StringOrdering ();
156
156
BucketTests ();
157
- // LargeTests();
158
- // PerfQueryTests();
159
- // BasicIoTest();
160
- // RunIoTests();
161
- // BasicQueryTest();
162
- // ConfigModTest();
163
- // ComplexTests();
164
- // WriteTests();
165
- // RoundTripTests();
166
- // DecryptTests();
167
- // var client :- expect CreateInterceptedDDBClient.CreateVanillaDDBClient();
168
- // DeleteTable(client);
157
+ LargeTests ();
158
+ PerfQueryTests ();
159
+ BasicIoTest ();
160
+ RunIoTests ();
161
+ BasicQueryTest ();
162
+ ConfigModTest ();
163
+ ComplexTests ();
164
+ WriteTests ();
165
+ RoundTripTests ();
166
+ DecryptTests ();
167
+ var client :- expect CreateInterceptedDDBClient. CreateVanillaDDBClient ();
168
+ DeleteTable (client);
169
169
}
170
170
171
171
function MakeBucketRecord (x : nat ) : DDB. AttributeMap
@@ -186,11 +186,10 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
186
186
]
187
187
}
188
188
189
- method DoBucketQuery (client : DDB .IDynamoDBClient, bucket : nat , query : DDB .QueryInput, counts : array <int >, queryName : string , custom : bool , numQueries : nat )
189
+ method DoBucketQuery (client : DDB .IDynamoDBClient, bucket : Types .BucketNumber , query : DDB .QueryInput, counts : array <int >, queryName : string , custom : bool , numQueries : Types .BucketCount )
190
190
requires counts. Length == 100
191
191
requires client. ValidState ()
192
192
requires client. Modifies !! {counts}
193
- requires 0 < numQueries
194
193
ensures client. ValidState ()
195
194
modifies client. Modifies
196
195
modifies counts
@@ -201,7 +200,7 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
201
200
invariant client. ValidState ()
202
201
invariant client. Modifies !! {counts}
203
202
{
204
- var bucketNumber := DDB. AttributeValue. N (String.Base10Int2String(bucket));
203
+ var bucketNumber := DDB. AttributeValue. N (String.Base10Int2String(bucket as int ));
205
204
var values : DDB. ExpressionAttributeValueMap := query. ExpressionAttributeValues. UnwrapOr (map[]);
206
205
values := values[":aws_dbe_bucket" := bucketNumber];
207
206
var q := query. (ExclusiveStartKey := lastKey, ExpressionAttributeValues := Some (values));
@@ -222,8 +221,8 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
222
221
if custom {
223
222
expect "PreferredBucket" in item;
224
223
expect item["PreferredBucket"]. N?;
225
- var stored_bucket :- expect StrToInt (item["PreferredBucket"].N);
226
- expect bucket == stored_bucket % numQueries;
224
+ var stored_bucket : int : - expect StrToInt (item["PreferredBucket"].N);
225
+ expect bucket as int == stored_bucket % numQueries as int ;
227
226
}
228
227
}
229
228
}
@@ -276,7 +275,7 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
276
275
}
277
276
278
277
279
- method TestBucketQueryFailure (client : DDB .IDynamoDBClient, bucket : nat , query : DDB .QueryInput, counts : array <int >, queryName : string , custom : bool , numQueries : nat )
278
+ method TestBucketQueryFailure (client : DDB .IDynamoDBClient, bucket : Types .BucketCount , query : DDB .QueryInput, counts : array <int >, queryName : string , custom : bool , numQueries : Types .BucketCount )
280
279
requires counts. Length == 100
281
280
requires client. ValidState ()
282
281
requires client. Modifies !! {counts}
@@ -285,26 +284,42 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
285
284
modifies client. Modifies
286
285
modifies counts
287
286
{
288
- var bucketNumber := DDB. AttributeValue. N (String.Base10Int2String(bucket));
287
+ var bucketNumber := DDB. AttributeValue. N (String.Base10Int2String(bucket as int ));
289
288
var values : DDB. ExpressionAttributeValueMap := query. ExpressionAttributeValues. UnwrapOr (map[]);
290
289
values := values[":aws_dbe_bucket" := bucketNumber];
291
290
var q := query. (ExpressionAttributeValues := Some (values));
292
291
var result := client. Query (q);
293
292
expect result. Failure?;
294
293
}
295
294
296
-
297
- method TestBucketQueries (client : DDB .IDynamoDBClient, numQueries : nat , q : DDB .QueryInput, queryName : string , custom : bool := false)
295
+ method TestBucketQueries (client : DDB .IDynamoDBClient, numQueries : Types .BucketCount, q : DDB .QueryInput, trans : DynamoDbEncryptionTransforms .DynamoDbEncryptionTransformsClient, queryName : string , custom : bool := false)
298
296
requires 0 < numQueries <= 5
299
297
requires client. ValidState ()
298
+ requires trans. ValidState ()
300
299
ensures client. ValidState ()
300
+ ensures trans. ValidState ()
301
301
modifies client. Modifies
302
+ modifies trans. Modifies
302
303
{
304
+ var input := Trans. GetNumberOfQueriesInput (input := q);
305
+ var res :- expect trans. GetNumberOfQueries (input);
306
+ if res. numberOfQueries != numQueries {
307
+ print "numberOfQueries should have been\n", numQueries, " but was ", res. numberOfQueries, " for ", queryName,"\n";
308
+ }
309
+ expect res. numberOfQueries == numQueries;
310
+
303
311
var counts: array < int > := new int [100](i => 0);
304
- for i := 0 to numQueries {
312
+ for i : Types. BucketNumber := 0 to numQueries
313
+ invariant client. ValidState ()
314
+ invariant trans. ValidState ()
315
+ {
305
316
DoBucketQuery (client, i, q, counts, queryName, custom, numQueries);
306
317
}
307
- for i := numQueries to 5 {
318
+
319
+ for i : Types. BucketNumber := numQueries to 5
320
+ invariant client. ValidState ()
321
+ invariant trans. ValidState ()
322
+ {
308
323
TestBucketQueryFailure (client, i, q, counts, queryName, custom, numQueries);
309
324
}
310
325
@@ -522,6 +537,32 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
522
537
ExpressionAttributeValues := Some (map[":attr2671 " := DDB.AttributeValue.S("2_BBBB.6_FFFF.7_GGGG.1_AAAA")])
523
538
)
524
539
}
540
+ function GetCompScan2671 () : DDB. ScanInput
541
+ {
542
+ DDB. ScanInput (
543
+ TableName := TableName,
544
+ FilterExpression := Some("Comp2671 = :attr2671 "),
545
+ ExpressionAttributeValues := Some (map[":attr2671 " := DDB.AttributeValue.S("2_BBBB.6_FFFF.7_GGGG.1_AAAA")])
546
+ )
547
+ }
548
+ function GetCompQuery1472 () : DDB. QueryInput
549
+ {
550
+ DDB. QueryInput (
551
+ TableName := TableName,
552
+ IndexName := Some("ATTR_INDEX1472"),
553
+ FilterExpression := None,
554
+ KeyConditionExpression := Some ("Comp1472 = :attr1472 "),
555
+ ExpressionAttributeValues := Some (map[":attr1472 " := DDB.AttributeValue.S("1_AAAA.4_DDDD.7_GGGG.2_BBBB")])
556
+ )
557
+ }
558
+ function GetCompScan1472 () : DDB. ScanInput
559
+ {
560
+ DDB. ScanInput (
561
+ TableName := TableName,
562
+ FilterExpression := Some("Comp1472 = :attr1472 "),
563
+ ExpressionAttributeValues := Some (map[":attr1472 " := DDB.AttributeValue.S("1_AAAA.4_DDDD.7_GGGG.2_BBBB")])
564
+ )
565
+ }
525
566
526
567
function GetBucketQuery1 () : DDB. QueryInput
527
568
{
@@ -665,14 +706,24 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
665
706
}
666
707
}
667
708
668
- method BucketTest3 ()
709
+ method MakeTrans (config : TableConfig ) returns (output : DynamoDbEncryptionTransforms. DynamoDbEncryptionTransformsClient)
710
+ ensures fresh (output)
711
+ ensures fresh (output. Modifies)
712
+ ensures output. ValidState ()
669
713
{
670
- expect "bucket_encrypt" in largeEncryptionConfigs;
671
- var config := largeEncryptionConfigs["bucket_encrypt"];
672
714
var configs := Types. DynamoDbTablesEncryptionConfig (tableEncryptionConfigs := map[TableName := config.config]);
673
715
assume {:axiom} false ;
674
716
var trans :- expect DynamoDbEncryptionTransforms. DynamoDbEncryptionTransforms (configs);
717
+ return trans;
718
+ }
675
719
720
+ method BucketTest3 ()
721
+ {
722
+ expect "bucket_encrypt" in largeEncryptionConfigs;
723
+ var config := largeEncryptionConfigs["bucket_encrypt"];
724
+ var trans := MakeTrans (config);
725
+ assert fresh (trans);
726
+ assert trans. ValidState ();
676
727
TestScanTrans (trans, GetBucketScan1(5), "Attr6 = :attr6");
677
728
TestScanTrans (trans, GetBucketScan1(1), "(aws_dbe_b_Attr2 = :attr2) OR (aws_dbe_b_Attr2 = :attr2AA )");
678
729
TestScanTrans (trans, GetBucketScan2(5, 1), "(Attr6 = :attr6 AND aws_dbe_b_Attr2 = :attr2) OR (Attr6 = :attr6 AND aws_dbe_b_Attr2 = :attr2AA )");
@@ -690,6 +741,8 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
690
741
expect "bucket_encrypt" in largeEncryptionConfigs;
691
742
var config := largeEncryptionConfigs["bucket_encrypt"];
692
743
var wClient, rClient := SetupTestTable (config, config);
744
+ var trans := MakeTrans (config);
745
+
693
746
for i : nat := 0 to 100 {
694
747
var putInput := DDB. PutItemInput (
695
748
TableName := TableName,
@@ -700,20 +753,20 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
700
753
var q1 := DDB. QueryInput (
701
754
TableName := TableName
702
755
);
703
- TestBucketQueries (rClient, 5, GetBucketQuery5(), "bucket query 5");
704
- TestBucketQueries (rClient, 4, GetBucketQuery4(), "bucket query 4");
705
- TestBucketQueries (rClient, 3, GetBucketQuery3(), "bucket query 3");
706
- TestBucketQueries (rClient, 2, GetBucketQuery2(), "bucket query 2");
707
- TestBucketQueries (rClient, 1, GetBucketQuery1(), "bucket query 1");
756
+ TestBucketQueries (rClient, 5, GetBucketQuery5(), trans, "bucket query 5");
757
+ TestBucketQueries (rClient, 4, GetBucketQuery4(), trans, "bucket query 4");
758
+ TestBucketQueries (rClient, 3, GetBucketQuery3(), trans, "bucket query 3");
759
+ TestBucketQueries (rClient, 2, GetBucketQuery2(), trans, "bucket query 2");
760
+ TestBucketQueries (rClient, 1, GetBucketQuery1(), trans, "bucket query 1");
708
761
709
- TestBucketQueries (rClient, 5, GetBucketQuery15(), "bucket query 15");
710
- TestBucketQueries (rClient, 5, GetBucketQuery51(), "bucket query 51");
711
- TestBucketQueries (rClient, 5, GetBucketQuery23(), "bucket query 23");
762
+ TestBucketQueries (rClient, 5, GetBucketQuery15(), trans, "bucket query 15");
763
+ TestBucketQueries (rClient, 5, GetBucketQuery51(), trans, "bucket query 51");
764
+ TestBucketQueries (rClient, 5, GetBucketQuery23(), trans, "bucket query 23");
712
765
713
- TestBucketQueries (rClient, 1, GetBucketQuery15F(), "bucket query 15F", false );
714
- TestBucketQueries (rClient, 2, GetBucketQuery25F(), "bucket query 25F", false );
715
- TestBucketQueries (rClient, 3, GetBucketQuery35F(), "bucket query 35F", false );
716
- TestBucketQueries (rClient, 4, GetBucketQuery45F(), "bucket query 45F", false );
766
+ TestBucketQueries (rClient, 1, GetBucketQuery15F(), trans, "bucket query 15F", false );
767
+ TestBucketQueries (rClient, 2, GetBucketQuery25F(), trans, "bucket query 25F", false );
768
+ TestBucketQueries (rClient, 3, GetBucketQuery35F(), trans, "bucket query 35F", false );
769
+ TestBucketQueries (rClient, 4, GetBucketQuery45F(), trans, "bucket query 45F", false );
717
770
718
771
var scanCount4 := 0;
719
772
var scanCount5 := 0;
@@ -757,19 +810,19 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
757
810
expect "complex_bucket_encrypt" in largeEncryptionConfigs;
758
811
var config := largeEncryptionConfigs["complex_bucket_encrypt"];
759
812
var wClient, rClient := SetupTestTable (config, config);
813
+ var trans := MakeTrans (config);
814
+
760
815
for i : nat := 0 to 100 {
761
816
var putInput := DDB. PutItemInput (
762
817
TableName := TableName,
763
818
Item := MakeBucketRecord(i)
764
819
);
765
820
var _ :- expect wClient. PutItem (putInput);
766
821
}
767
- print "BucketTest4 Wrote";
768
- TestBucketQueries (rClient, 2, GetCompQuery2671(), "comp query 2671");
769
- print "BucketTest4 Did One";
770
-
771
- // TestBucketScan(rClient, GetBucketScan6(0,1,2,3,4,5));
772
- TestBucketScan (rClient, GetBucketScan6(5,4,3,2,1,0));
822
+ TestBucketQueries (rClient, 2, GetCompQuery2671(), trans, "comp query 2671");
823
+ TestBucketScan (rClient, GetCompScan2671());
824
+ TestBucketQueries (rClient, 4, GetCompQuery1472(), trans, "comp query 1472");
825
+ TestBucketScan (rClient, GetCompScan1472());
773
826
}
774
827
775
828
// As BucketTest1, but with custom bucket selector
@@ -785,6 +838,8 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
785
838
var nConfig := config. config. (search := Some (nSearch));
786
839
config := config. (config := nConfig);
787
840
var wClient, rClient := SetupTestTable (config, config);
841
+ var trans := MakeTrans (config);
842
+
788
843
for i : nat := 0 to 100 {
789
844
var putInput := DDB. PutItemInput (
790
845
TableName := TableName,
@@ -795,20 +850,20 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
795
850
var q1 := DDB. QueryInput (
796
851
TableName := TableName
797
852
);
798
- TestBucketQueries (rClient, 5, GetBucketQuery5(), "bucket query 5a", true );
799
- TestBucketQueries (rClient, 4, GetBucketQuery4(), "bucket query 4a", true );
800
- TestBucketQueries (rClient, 3, GetBucketQuery3(), "bucket query 3a", true );
801
- TestBucketQueries (rClient, 2, GetBucketQuery2(), "bucket query 2a", true );
802
- TestBucketQueries (rClient, 1, GetBucketQuery1(), "bucket query 1a", true );
853
+ TestBucketQueries (rClient, 5, GetBucketQuery5(), trans, "bucket query 5a", true );
854
+ TestBucketQueries (rClient, 4, GetBucketQuery4(), trans, "bucket query 4a", true );
855
+ TestBucketQueries (rClient, 3, GetBucketQuery3(), trans, "bucket query 3a", true );
856
+ TestBucketQueries (rClient, 2, GetBucketQuery2(), trans, "bucket query 2a", true );
857
+ TestBucketQueries (rClient, 1, GetBucketQuery1(), trans, "bucket query 1a", true );
803
858
804
- TestBucketQueries (rClient, 5, GetBucketQuery15(), "bucket query 15a", true );
805
- TestBucketQueries (rClient, 5, GetBucketQuery51(), "bucket query 51a", true );
806
- TestBucketQueries (rClient, 5, GetBucketQuery23(), "bucket query 23a", true );
859
+ TestBucketQueries (rClient, 5, GetBucketQuery15(), trans, "bucket query 15a", true );
860
+ TestBucketQueries (rClient, 5, GetBucketQuery51(), trans, "bucket query 51a", true );
861
+ TestBucketQueries (rClient, 5, GetBucketQuery23(), trans, "bucket query 23a", true );
807
862
808
- TestBucketQueries (rClient, 1, GetBucketQuery15F(), "bucket query 15Fa", true );
809
- TestBucketQueries (rClient, 2, GetBucketQuery25F(), "bucket query 25Fa", true );
810
- TestBucketQueries (rClient, 3, GetBucketQuery35F(), "bucket query 35Fa", true );
811
- TestBucketQueries (rClient, 4, GetBucketQuery45F(), "bucket query 45Fa", true );
863
+ TestBucketQueries (rClient, 1, GetBucketQuery15F(), trans, "bucket query 15Fa", true );
864
+ TestBucketQueries (rClient, 2, GetBucketQuery25F(), trans, "bucket query 25Fa", true );
865
+ TestBucketQueries (rClient, 3, GetBucketQuery35F(), trans, "bucket query 35Fa", true );
866
+ TestBucketQueries (rClient, 4, GetBucketQuery45F(), trans, "bucket query 45Fa", true );
812
867
813
868
// we don't test scan here, because scan doesn't use ":aws_dbe_bucket"
814
869
}
@@ -1230,13 +1285,8 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
1230
1285
}
1231
1286
expect config in largeEncryptionConfigs;
1232
1287
var tconfig := largeEncryptionConfigs[config];
1233
- var configs := Types. DynamoDbTablesEncryptionConfig (
1234
- tableEncryptionConfigs := map[TableName := tconfig.config]
1235
- );
1236
- // because there are lots of pre-conditions on configs
1237
- assume {:axiom} false ;
1238
- var client :- expect DynamoDbEncryptionTransforms. DynamoDbEncryptionTransforms (configs);
1239
- LargeTestsClient (client, config);
1288
+ var trans := MakeTrans (tconfig);
1289
+ LargeTestsClient (trans, config);
1240
1290
}
1241
1291
1242
1292
method LargeTestsClient (client : Trans .IDynamoDbEncryptionTransformsClient, config : string )
0 commit comments