@@ -135,37 +135,37 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
135135 print |roundTripTests[1]. configs|, " configs and ", |roundTripTests[1]. records|, " records for round trip. \n";
136136 }
137137
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);
150150 if |globalRecords| + |tableEncryptionConfigs| + |queries| == 0 {
151151 print "\nRunning no tests\n";
152152 return ;
153153 }
154154 Validate ();
155155 StringOrdering ();
156156 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);
169169 }
170170
171171 function MakeBucketRecord (x : nat ) : DDB. AttributeMap
@@ -186,11 +186,10 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
186186 ]
187187 }
188188
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 )
190190 requires counts. Length == 100
191191 requires client. ValidState ()
192192 requires client. Modifies !! {counts}
193- requires 0 < numQueries
194193 ensures client. ValidState ()
195194 modifies client. Modifies
196195 modifies counts
@@ -201,7 +200,7 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
201200 invariant client. ValidState ()
202201 invariant client. Modifies !! {counts}
203202 {
204- var bucketNumber := DDB. AttributeValue. N (String.Base10Int2String(bucket));
203+ var bucketNumber := DDB. AttributeValue. N (String.Base10Int2String(bucket as int ));
205204 var values : DDB. ExpressionAttributeValueMap := query. ExpressionAttributeValues. UnwrapOr (map[]);
206205 values := values[":aws_dbe_bucket" := bucketNumber];
207206 var q := query. (ExclusiveStartKey := lastKey, ExpressionAttributeValues := Some (values));
@@ -222,8 +221,8 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
222221 if custom {
223222 expect "PreferredBucket" in item;
224223 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 ;
227226 }
228227 }
229228 }
@@ -276,7 +275,7 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
276275 }
277276
278277
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 )
280279 requires counts. Length == 100
281280 requires client. ValidState ()
282281 requires client. Modifies !! {counts}
@@ -285,26 +284,42 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
285284 modifies client. Modifies
286285 modifies counts
287286 {
288- var bucketNumber := DDB. AttributeValue. N (String.Base10Int2String(bucket));
287+ var bucketNumber := DDB. AttributeValue. N (String.Base10Int2String(bucket as int ));
289288 var values : DDB. ExpressionAttributeValueMap := query. ExpressionAttributeValues. UnwrapOr (map[]);
290289 values := values[":aws_dbe_bucket" := bucketNumber];
291290 var q := query. (ExpressionAttributeValues := Some (values));
292291 var result := client. Query (q);
293292 expect result. Failure?;
294293 }
295294
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)
298296 requires 0 < numQueries <= 5
299297 requires client. ValidState ()
298+ requires trans. ValidState ()
300299 ensures client. ValidState ()
300+ ensures trans. ValidState ()
301301 modifies client. Modifies
302+ modifies trans. Modifies
302303 {
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+
303311 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+ {
305316 DoBucketQuery (client, i, q, counts, queryName, custom, numQueries);
306317 }
307- for i := numQueries to 5 {
318+
319+ for i : Types. BucketNumber := numQueries to 5
320+ invariant client. ValidState ()
321+ invariant trans. ValidState ()
322+ {
308323 TestBucketQueryFailure (client, i, q, counts, queryName, custom, numQueries);
309324 }
310325
@@ -522,6 +537,32 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
522537 ExpressionAttributeValues := Some (map[":attr2671 " := DDB.AttributeValue.S("2_BBBB.6_FFFF.7_GGGG.1_AAAA")])
523538 )
524539 }
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+ }
525566
526567 function GetBucketQuery1 () : DDB. QueryInput
527568 {
@@ -665,14 +706,24 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
665706 }
666707 }
667708
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 ()
669713 {
670- expect "bucket_encrypt" in largeEncryptionConfigs;
671- var config := largeEncryptionConfigs["bucket_encrypt"];
672714 var configs := Types. DynamoDbTablesEncryptionConfig (tableEncryptionConfigs := map[TableName := config.config]);
673715 assume {:axiom} false ;
674716 var trans :- expect DynamoDbEncryptionTransforms. DynamoDbEncryptionTransforms (configs);
717+ return trans;
718+ }
675719
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 ();
676727 TestScanTrans (trans, GetBucketScan1(5), "Attr6 = :attr6");
677728 TestScanTrans (trans, GetBucketScan1(1), "(aws_dbe_b_Attr2 = :attr2) OR (aws_dbe_b_Attr2 = :attr2AA )");
678729 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 {
690741 expect "bucket_encrypt" in largeEncryptionConfigs;
691742 var config := largeEncryptionConfigs["bucket_encrypt"];
692743 var wClient, rClient := SetupTestTable (config, config);
744+ var trans := MakeTrans (config);
745+
693746 for i : nat := 0 to 100 {
694747 var putInput := DDB. PutItemInput (
695748 TableName := TableName,
@@ -700,20 +753,20 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
700753 var q1 := DDB. QueryInput (
701754 TableName := TableName
702755 );
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");
708761
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");
712765
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 );
717770
718771 var scanCount4 := 0;
719772 var scanCount5 := 0;
@@ -757,19 +810,19 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
757810 expect "complex_bucket_encrypt" in largeEncryptionConfigs;
758811 var config := largeEncryptionConfigs["complex_bucket_encrypt"];
759812 var wClient, rClient := SetupTestTable (config, config);
813+ var trans := MakeTrans (config);
814+
760815 for i : nat := 0 to 100 {
761816 var putInput := DDB. PutItemInput (
762817 TableName := TableName,
763818 Item := MakeBucketRecord(i)
764819 );
765820 var _ :- expect wClient. PutItem (putInput);
766821 }
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());
773826 }
774827
775828 // As BucketTest1, but with custom bucket selector
@@ -785,6 +838,8 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
785838 var nConfig := config. config. (search := Some (nSearch));
786839 config := config. (config := nConfig);
787840 var wClient, rClient := SetupTestTable (config, config);
841+ var trans := MakeTrans (config);
842+
788843 for i : nat := 0 to 100 {
789844 var putInput := DDB. PutItemInput (
790845 TableName := TableName,
@@ -795,20 +850,20 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
795850 var q1 := DDB. QueryInput (
796851 TableName := TableName
797852 );
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 );
803858
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 );
807862
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 );
812867
813868 // we don't test scan here, because scan doesn't use ":aws_dbe_bucket"
814869 }
@@ -1230,13 +1285,8 @@ module {:options "-functionSyntax:4"} DdbEncryptionTestVectors {
12301285 }
12311286 expect config in largeEncryptionConfigs;
12321287 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);
12401290 }
12411291
12421292 method LargeTestsClient (client : Trans .IDynamoDbEncryptionTransformsClient, config : string )
0 commit comments