@@ -32,6 +32,8 @@ module {:options "-functionSyntax:4"} JsonConfig {
32
32
import CreateInterceptedDDBClient
33
33
import DynamoDbItemEncryptor
34
34
35
+ // TODO: Add extern for DEFAULT_KEYS
36
+ const DEFAULT_KEYS : string := ".. / .. / .. / .. / submodules/ MaterialProviders/ TestVectorsAwsCryptographicMaterialProviders/ dafny/ TestVectorsAwsCryptographicMaterialProviders/ test/ keys. json"
35
37
36
38
predicate IsValidInt32 (x: int ) { - 0x8000_0000 <= x < 0x8000_0000}
37
39
type ConfigName = string
@@ -128,11 +130,7 @@ module {:options "-functionSyntax:4"} JsonConfig {
128
130
}
129
131
}
130
132
131
- method GetRoundTripTests (data : JSON , keys: KeyVectors .KeyVectorsClient)
132
- returns (output : Result< seq < RoundTripTest> , string > )
133
- requires keys. ValidState ()
134
- modifies keys. Modifies
135
- ensures keys. ValidState ()
133
+ method GetRoundTripTests (data : JSON ) returns (output : Result< seq < RoundTripTest> , string > )
136
134
{
137
135
:- Need (data.Object?, "RoundTripTest Test must be an object.");
138
136
var configs : map < string , TableConfig> := map [];
@@ -141,34 +139,26 @@ module {:options "-functionSyntax:4"} JsonConfig {
141
139
for i := 0 to |data. obj| {
142
140
var obj := data. obj[i];
143
141
match obj. 0 {
144
- case "Configs" => var src :- GetTableConfigs (obj.1, keys ); configs := src;
142
+ case "Configs" => var src :- GetTableConfigs (obj.1); configs := src;
145
143
case "Records" => var src :- GetRecords (obj.1); records := src;
146
144
case _ => return Failure ("Unexpected part of a write test : '" + obj.0 + "'");
147
145
}
148
146
}
149
147
return Success ([RoundTripTest(configs, records)]);
150
148
}
151
149
152
- method GetWriteTests (data : JSON , keys: KeyVectors .KeyVectorsClient)
153
- returns (output : Result< seq < WriteTest> , string > )
154
- requires keys. ValidState ()
155
- modifies keys. Modifies
156
- ensures keys. ValidState ()
150
+ method GetWriteTests (data : JSON ) returns (output : Result< seq < WriteTest> , string > )
157
151
{
158
152
:- Need (data.Array?, "Write Test list must be an array.");
159
153
var results : seq < WriteTest> := [];
160
154
for i := 0 to |data. arr| {
161
155
var obj := data. arr[i];
162
- var item :- GetOneWriteTest (obj, keys );
156
+ var item :- GetOneWriteTest (obj);
163
157
results := results + [item];
164
158
}
165
159
return Success (results);
166
160
}
167
- method GetOneWriteTest (data : JSON , keys: KeyVectors .KeyVectorsClient)
168
- returns (output : Result< WriteTest, string > )
169
- requires keys. ValidState ()
170
- modifies keys. Modifies
171
- ensures keys. ValidState ()
161
+ method GetOneWriteTest (data : JSON ) returns (output : Result< WriteTest, string > )
172
162
{
173
163
:- Need (data.Object?, "A Write Test must be an object.");
174
164
var config : Option< TableConfig> := None;
@@ -178,7 +168,7 @@ module {:options "-functionSyntax:4"} JsonConfig {
178
168
for i := 0 to |data. obj| {
179
169
var obj := data. obj[i];
180
170
match obj. 0 {
181
- case "Config" => var src :- GetOneTableConfig ("foo", obj.1, keys ); config := Some (src);
171
+ case "Config" => var src :- GetOneTableConfig ("foo", obj.1); config := Some (src);
182
172
case "FileName" =>
183
173
:- Need (obj.1.String?, "Write Test file name must be a string.");
184
174
fileName := obj. 1. str;
@@ -191,26 +181,18 @@ module {:options "-functionSyntax:4"} JsonConfig {
191
181
return Success (WriteTest(config.value, records, fileName));
192
182
}
193
183
194
- method GetDecryptTests (data : JSON , keys: KeyVectors .KeyVectorsClient)
195
- returns (output : Result< seq < DecryptTest> , string > )
196
- requires keys. ValidState ()
197
- modifies keys. Modifies
198
- ensures keys. ValidState ()
184
+ method GetDecryptTests (data : JSON ) returns (output : Result< seq < DecryptTest> , string > )
199
185
{
200
186
:- Need (data.Array?, "Decrypt Test list must be an array.");
201
187
var results : seq < DecryptTest> := [];
202
188
for i := 0 to |data. arr| {
203
189
var obj := data. arr[i];
204
- var item :- GetOneDecryptTest (obj, keys );
190
+ var item :- GetOneDecryptTest (obj);
205
191
results := results + [item];
206
192
}
207
193
return Success (results);
208
194
}
209
- method GetOneDecryptTest (data : JSON , keys: KeyVectors .KeyVectorsClient)
210
- returns (output : Result< DecryptTest, string > )
211
- requires keys. ValidState ()
212
- modifies keys. Modifies
213
- ensures keys. ValidState ()
195
+ method GetOneDecryptTest (data : JSON ) returns (output : Result< DecryptTest, string > )
214
196
{
215
197
:- Need (data.Object?, "A Decrypt Test must be an object.");
216
198
var config : Option< TableConfig> := None;
@@ -220,7 +202,7 @@ module {:options "-functionSyntax:4"} JsonConfig {
220
202
for i := 0 to |data. obj| {
221
203
var obj := data. obj[i];
222
204
match obj. 0 {
223
- case "Config" => var src :- GetOneTableConfig ("foo", obj.1, keys ); config := Some (src);
205
+ case "Config" => var src :- GetOneTableConfig ("foo", obj.1); config := Some (src);
224
206
case "EncryptedRecords" => encRecords :- GetRecords (obj.1);
225
207
case "PlainTextRecords" => plainRecords :- GetRecords (obj.1);
226
208
case _ => return Failure ("Unexpected part of a encrypt test : '" + obj.0 + "'");
@@ -232,27 +214,20 @@ module {:options "-functionSyntax:4"} JsonConfig {
232
214
return Success (DecryptTest(config.value, encRecords, plainRecords));
233
215
}
234
216
235
- method GetTableConfigs (data : JSON , keys: KeyVectors .KeyVectorsClient)
236
- returns (output : Result< map < string , TableConfig> , string > )
237
- requires keys. ValidState ()
238
- modifies keys. Modifies
239
- ensures keys. ValidState ()
217
+ method GetTableConfigs (data : JSON ) returns (output : Result< map < string , TableConfig> , string > )
240
218
{
241
219
:- Need (data.Object?, "Search Config list must be an object.");
242
220
var results : map < string , TableConfig> := map [];
243
221
for i := 0 to |data. obj| {
244
222
var obj := data. obj[i];
245
- var item :- GetOneTableConfig (obj.0, obj.1, keys );
223
+ var item :- GetOneTableConfig (obj.0, obj.1);
246
224
results := results[obj. 0 := item];
247
225
}
248
226
return Success (results);
249
227
}
250
228
251
- method GetItemEncryptor (name : string , data : JSON , keys: KeyVectors .KeyVectorsClient )
229
+ method GetItemEncryptor (name : string , data : JSON )
252
230
returns (encryptor : Result< DynamoDbItemEncryptor. DynamoDbItemEncryptorClient, string > )
253
- requires keys. ValidState ()
254
- modifies keys. Modifies
255
- ensures keys. ValidState ()
256
231
ensures encryptor. Success? ==>
257
232
&& encryptor. value. ValidState ()
258
233
&& fresh (encryptor. value)
@@ -321,6 +296,11 @@ module {:options "-functionSyntax:4"} JsonConfig {
321
296
}
322
297
}
323
298
299
+ var keys :- expect KeyVectors. KeyVectors (
300
+ KeyVectorsTypes.KeyVectorsConfig(
301
+ keyManifestPath := DEFAULT_KEYS
302
+ )
303
+ );
324
304
var keyDescription :-
325
305
if |key| == 0 then
326
306
Success (KeyVectorsTypes.Hierarchy(KeyVectorsTypes.HierarchyKeyring(
@@ -353,11 +333,7 @@ module {:options "-functionSyntax:4"} JsonConfig {
353
333
return Success (encr);
354
334
}
355
335
356
- method GetOneTableConfig (name : string , data : JSON , keys: KeyVectors .KeyVectorsClient)
357
- returns (output : Result< TableConfig, string > )
358
- requires keys. ValidState ()
359
- modifies keys. Modifies
360
- ensures keys. ValidState ()
336
+ method GetOneTableConfig (name : string , data : JSON ) returns (output : Result< TableConfig, string > )
361
337
{
362
338
:- Need (data.Object?, "A Table Config must be an object.");
363
339
var logicalTableName := TableName;
@@ -424,6 +400,11 @@ module {:options "-functionSyntax:4"} JsonConfig {
424
400
}
425
401
}
426
402
403
+ var keys :- expect KeyVectors. KeyVectors (
404
+ KeyVectorsTypes.KeyVectorsConfig(
405
+ keyManifestPath := DEFAULT_KEYS
406
+ )
407
+ );
427
408
var keyDescription :-
428
409
if |key| == 0 then
429
410
Success (KeyVectorsTypes.Hierarchy(KeyVectorsTypes.HierarchyKeyring(
@@ -543,22 +524,7 @@ module {:options "-functionSyntax:4"} JsonConfig {
543
524
var cache :- expect mpl. CreateCryptographicMaterialsCache (input);
544
525
545
526
var client :- expect Primitives. AtomicPrimitives ();
546
-
547
- // Create a test partitionIdBytes
548
- var partitionIdBytes : seq < uint8> :- expect SI. GenerateUuidBytes ();
549
-
550
- // Create a random logicalKeyStoreNameBytes
551
- // Ideally, this should be taken from the KeyStore store,
552
- // but logicalKeyStoreName variable doesn't exist in the
553
- // trait AwsCryptographyKeyStoreTypes.IKeyStoreClient
554
- // Therefore, the only way to get logicalKeyStoreName is
555
- // to call GetKeyStoreInfo, which we don't need to do here
556
- // since this method does NOT test the shared cache
557
- // which is the only place logicalKeyStoreName is used
558
- // (in the cache identifier)
559
- var logicalKeyStoreNameBytes : seq < uint8> :- expect SI. GenerateUuidBytes ();
560
-
561
- var src := SI. KeySource (client, store, SI.SingleLoc("foo"), cache, 100 as uint32, partitionIdBytes, logicalKeyStoreNameBytes);
527
+ var src := SI. KeySource (client, store, SI.SingleLoc("foo"), cache, 100 as uint32);
562
528
563
529
var bv :- expect SI. MakeBeaconVersion (1, src, map[], map[], map[]);
564
530
return Success (bv);
@@ -1148,27 +1114,19 @@ module {:options "-functionSyntax:4"} JsonConfig {
1148
1114
));
1149
1115
}
1150
1116
1151
- method GetIoTests (data : JSON , keys: KeyVectors .KeyVectorsClient)
1152
- returns (output : Result< seq < IoTest> , string > )
1153
- requires keys. ValidState ()
1154
- modifies keys. Modifies
1155
- ensures keys. ValidState ()
1117
+ method GetIoTests (data : JSON ) returns (output : Result< seq < IoTest> , string > )
1156
1118
{
1157
1119
:- Need (data.Object?, "IoTests must be an object.");
1158
1120
var results : seq < IoTest> := [];
1159
1121
for i := 0 to |data. obj| {
1160
1122
var obj := data. obj[i];
1161
- var item :- GetOneIoTest (obj.0, obj.1, keys );
1123
+ var item :- GetOneIoTest (obj.0, obj.1);
1162
1124
results := results + [item];
1163
1125
}
1164
1126
return Success (results);
1165
1127
}
1166
1128
1167
- method GetOneIoTest (name : string , data : JSON , keys: KeyVectors .KeyVectorsClient)
1168
- returns (output : Result< IoTest, string > )
1169
- requires keys. ValidState ()
1170
- modifies keys. Modifies
1171
- ensures keys. ValidState ()
1129
+ method GetOneIoTest (name : string , data : JSON ) returns (output : Result< IoTest, string > )
1172
1130
{
1173
1131
:- Need (data.Object?, "IoTest must be an object.");
1174
1132
var readConfig : Option< TableConfig> := None;
@@ -1180,8 +1138,8 @@ module {:options "-functionSyntax:4"} JsonConfig {
1180
1138
for i := 0 to |data. obj| {
1181
1139
var obj := data. obj[i];
1182
1140
match obj. 0 {
1183
- case "WriteConfig" => var config :- GetOneTableConfig (obj.0, obj.1, keys ); writeConfig := Some (config);
1184
- case "ReadConfig" => var config :- GetOneTableConfig (obj.0, obj.1, keys ); readConfig := Some (config);
1141
+ case "WriteConfig" => var config :- GetOneTableConfig (obj.0, obj.1); writeConfig := Some (config);
1142
+ case "ReadConfig" => var config :- GetOneTableConfig (obj.0, obj.1); readConfig := Some (config);
1185
1143
case "Records" => records :- GetRecords (obj.1);
1186
1144
case "Values" => values :- GetValueMap (data.obj[i].1);
1187
1145
case "Queries" => queries :- GetSimpleQueries (data.obj[i].1);
0 commit comments