@@ -25,6 +25,8 @@ module DynamoDbItemEncryptorTest {
25
25
// encrypt => encrypted fields changed, others did not
26
26
// various errors
27
27
28
+ const PublicKeyUtf8 : UTF8. ValidUTF8Bytes := UTF8. EncodeAscii ("aws-crypto-public-key")
29
+
28
30
function method DDBS (x : string ) : DDB. AttributeValue {
29
31
DDB. AttributeValue. S (x)
30
32
}
@@ -61,8 +63,15 @@ module DynamoDbItemEncryptorTest {
61
63
);
62
64
}
63
65
64
- method {:test} TestV2RoundTripComplexSwitch () {
65
- var actions := map [
66
+ function method {:opaque} GetAttrName (s : string ) : DDB. AttributeName
67
+ {
68
+ if DDB. IsValid_AttributeName (s) then
69
+ s
70
+ else
71
+ "spoo"
72
+ }
73
+
74
+ const Actions1 : DDBE. AttributeActions := map [
66
75
"bar" := CSE. SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT,
67
76
"sortKey" := CSE. SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT,
68
77
"encrypt" := CSE. ENCRYPT_AND_SIGN,
@@ -71,11 +80,24 @@ module DynamoDbItemEncryptorTest {
71
80
"sign3" := CSE. SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT,
72
81
"sign4" := CSE. SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT,
73
82
"nothing" := CSE. DO_NOTHING
74
- ];
75
- var config := TestFixtures. GetEncryptorConfigFromActions (actions, Some("sortKey"));
83
+ ]
84
+
85
+ const Actions2 : DDBE. AttributeActions := map [
86
+ GetAttrName ("bar") := CSE. SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT,
87
+ GetAttrName ("sortKey") := CSE. SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT,
88
+ GetAttrName ("encrypt") := CSE. ENCRYPT_AND_SIGN,
89
+ GetAttrName ("sign") := CSE. SIGN_ONLY,
90
+ GetAttrName ("sign2") := CSE. SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT,
91
+ GetAttrName ("sign3") := CSE. SIGN_ONLY,
92
+ GetAttrName ("sign4") := CSE. SIGN_ONLY,
93
+ GetAttrName ("nothing") := CSE. DO_NOTHING
94
+ ]
95
+
96
+ method {:test} TestV2RoundTripComplexSwitch () {
97
+ var config := TestFixtures. GetEncryptorConfigFromActions (Actions1, Some("sortKey"));
76
98
var encryptor := TestFixtures. GetDynamoDbItemEncryptorFrom (config);
77
99
78
- var inputItem := map [
100
+ var inputItem : map < DDB . AttributeName, DDB . AttributeValue > : = map [
79
101
"bar" := DDB. AttributeValue. N ("1234"),
80
102
"sortKey" := DDB. AttributeValue. B ([1,2,3,4]),
81
103
"encrypt" := DDBS ("text"),
@@ -103,17 +125,7 @@ module DynamoDbItemEncryptorTest {
103
125
expect encryptRes. value. encryptedItem["sign4"] == inputItem["sign4"];
104
126
expect encryptRes. value. encryptedItem["nothing"] == inputItem["nothing"];
105
127
106
- var actions2 := map [
107
- "bar" := CSE. SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT,
108
- "sortKey" := CSE. SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT,
109
- "encrypt" := CSE. ENCRYPT_AND_SIGN,
110
- "sign" := CSE. SIGN_ONLY,
111
- "sign2" := CSE. SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT,
112
- "sign3" := CSE. SIGN_ONLY,
113
- "sign4" := CSE. SIGN_ONLY,
114
- "nothing" := CSE. DO_NOTHING
115
- ];
116
- var config2 := TestFixtures. GetEncryptorConfigFromActions (actions2, Some("sortKey"));
128
+ var config2 := TestFixtures. GetEncryptorConfigFromActions (Actions2, Some("sortKey"));
117
129
var encryptor2 := TestFixtures. GetDynamoDbItemEncryptorFrom (config2);
118
130
119
131
var decryptRes := encryptor2. DecryptItem (
@@ -135,10 +147,10 @@ module DynamoDbItemEncryptorTest {
135
147
var parsedHeader := decryptRes. value. parsedHeader;
136
148
expect parsedHeader. Some?;
137
149
expect parsedHeader. value. algorithmSuiteId == AlgorithmSuites. DBE_ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_ECDSA_P384_SYMSIG_HMAC_SHA384. id. DBE;
138
- expect parsedHeader. value. attributeActionsOnEncrypt == actions - {"nothing", "sign2"};
150
+ expect parsedHeader. value. attributeActionsOnEncrypt == Actions1 - {"nothing", "sign2"};
139
151
// Expect the verification key in the context
140
152
expect |parsedHeader. value. storedEncryptionContext| == 1;
141
- expect UTF8 . EncodeAscii ("aws-crypto-public-key") in parsedHeader. value. storedEncryptionContext. Keys;
153
+ expect PublicKeyUtf8 in parsedHeader. value. storedEncryptionContext. Keys;
142
154
expect |parsedHeader. value. encryptedDataKeys| == 1;
143
155
144
156
var strEC := SE. EcAsString (parsedHeader.value.encryptionContext);
@@ -239,7 +251,7 @@ module DynamoDbItemEncryptorTest {
239
251
// # Then, this operation MUST create a [Required Encryption Context CMM](https://github.com/awslabs/private-aws-encryption-sdk-specification-staging/blob/dafny-verified/framework/required-encryption-context-cmm.md)
240
252
// # with the following inputs:
241
253
expect |parsedHeader. value. storedEncryptionContext| == 1;
242
- expect UTF8 . EncodeAscii ("aws-crypto-public-key") in parsedHeader. value. storedEncryptionContext. Keys;
254
+ expect PublicKeyUtf8 in parsedHeader. value. storedEncryptionContext. Keys;
243
255
expect |parsedHeader. value. encryptedDataKeys| == 1;
244
256
245
257
var strEC := SE. EcAsString (parsedHeader.value.encryptionContext);
@@ -372,7 +384,7 @@ module DynamoDbItemEncryptorTest {
372
384
expect parsedHeader. value. attributeActionsOnEncrypt == actions - {"nothing"};
373
385
// Expect the verification key in the context
374
386
expect |parsedHeader. value. storedEncryptionContext| == 1;
375
- expect UTF8 . EncodeAscii ("aws-crypto-public-key") in parsedHeader. value. storedEncryptionContext. Keys;
387
+ expect PublicKeyUtf8 in parsedHeader. value. storedEncryptionContext. Keys;
376
388
expect |parsedHeader. value. encryptedDataKeys| == 1;
377
389
378
390
var strEC := SE. EcAsString (parsedHeader.value.encryptionContext);
@@ -433,7 +445,7 @@ module DynamoDbItemEncryptorTest {
433
445
expect parsedHeader. value. attributeActionsOnEncrypt == TestFixtures. GetSignedAttributeActions ();
434
446
// Expect the verification key in the context
435
447
expect |parsedHeader. value. storedEncryptionContext| == 1;
436
- expect UTF8 . EncodeAscii ("aws-crypto-public-key") in parsedHeader. value. storedEncryptionContext. Keys;
448
+ expect PublicKeyUtf8 in parsedHeader. value. storedEncryptionContext. Keys;
437
449
expect |parsedHeader. value. encryptedDataKeys| == 1;
438
450
439
451
// = specification/structured-encryption/encrypt-structure.md#create-new-encryption-context-and-cmm
@@ -493,7 +505,7 @@ module DynamoDbItemEncryptorTest {
493
505
expect parsedHeader. value. algorithmSuiteId == AlgorithmSuites. DBE_ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_ECDSA_P384_SYMSIG_HMAC_SHA384. id. DBE;
494
506
// Expect the verification key in the context
495
507
expect |parsedHeader. value. storedEncryptionContext| == 1;
496
- expect UTF8 . EncodeAscii ("aws-crypto-public-key") in parsedHeader. value. storedEncryptionContext. Keys;
508
+ expect PublicKeyUtf8 in parsedHeader. value. storedEncryptionContext. Keys;
497
509
expect |parsedHeader. value. encryptedDataKeys| == 1;
498
510
}
499
511
0 commit comments