Skip to content

Commit 69ec293

Browse files
committed
m
1 parent 7e4de93 commit 69ec293

File tree

1 file changed

+34
-22
lines changed

1 file changed

+34
-22
lines changed

DynamoDbEncryption/dafny/DynamoDbItemEncryptor/test/DynamoDBItemEncryptorTest.dfy

+34-22
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ module DynamoDbItemEncryptorTest {
2525
// encrypt => encrypted fields changed, others did not
2626
// various errors
2727

28+
const PublicKeyUtf8 : UTF8.ValidUTF8Bytes := UTF8.EncodeAscii("aws-crypto-public-key")
29+
2830
function method DDBS(x : string) : DDB.AttributeValue {
2931
DDB.AttributeValue.S(x)
3032
}
@@ -61,8 +63,15 @@ module DynamoDbItemEncryptorTest {
6163
);
6264
}
6365

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[
6675
"bar" := CSE.SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT,
6776
"sortKey" := CSE.SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT,
6877
"encrypt" := CSE.ENCRYPT_AND_SIGN,
@@ -71,11 +80,24 @@ module DynamoDbItemEncryptorTest {
7180
"sign3" := CSE.SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT,
7281
"sign4" := CSE.SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT,
7382
"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"));
7698
var encryptor := TestFixtures.GetDynamoDbItemEncryptorFrom(config);
7799

78-
var inputItem := map[
100+
var inputItem : map<DDB.AttributeName, DDB.AttributeValue> := map[
79101
"bar" := DDB.AttributeValue.N("1234"),
80102
"sortKey" := DDB.AttributeValue.B([1,2,3,4]),
81103
"encrypt" := DDBS("text"),
@@ -103,17 +125,7 @@ module DynamoDbItemEncryptorTest {
103125
expect encryptRes.value.encryptedItem["sign4"] == inputItem["sign4"];
104126
expect encryptRes.value.encryptedItem["nothing"] == inputItem["nothing"];
105127

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"));
117129
var encryptor2 := TestFixtures.GetDynamoDbItemEncryptorFrom(config2);
118130

119131
var decryptRes := encryptor2.DecryptItem(
@@ -135,10 +147,10 @@ module DynamoDbItemEncryptorTest {
135147
var parsedHeader := decryptRes.value.parsedHeader;
136148
expect parsedHeader.Some?;
137149
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"};
139151
// Expect the verification key in the context
140152
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;
142154
expect |parsedHeader.value.encryptedDataKeys| == 1;
143155

144156
var strEC := SE.EcAsString(parsedHeader.value.encryptionContext);
@@ -239,7 +251,7 @@ module DynamoDbItemEncryptorTest {
239251
//# 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)
240252
//# with the following inputs:
241253
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;
243255
expect |parsedHeader.value.encryptedDataKeys| == 1;
244256

245257
var strEC := SE.EcAsString(parsedHeader.value.encryptionContext);
@@ -372,7 +384,7 @@ module DynamoDbItemEncryptorTest {
372384
expect parsedHeader.value.attributeActionsOnEncrypt == actions - {"nothing"};
373385
// Expect the verification key in the context
374386
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;
376388
expect |parsedHeader.value.encryptedDataKeys| == 1;
377389

378390
var strEC := SE.EcAsString(parsedHeader.value.encryptionContext);
@@ -433,7 +445,7 @@ module DynamoDbItemEncryptorTest {
433445
expect parsedHeader.value.attributeActionsOnEncrypt == TestFixtures.GetSignedAttributeActions();
434446
// Expect the verification key in the context
435447
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;
437449
expect |parsedHeader.value.encryptedDataKeys| == 1;
438450

439451
//= specification/structured-encryption/encrypt-structure.md#create-new-encryption-context-and-cmm
@@ -493,7 +505,7 @@ module DynamoDbItemEncryptorTest {
493505
expect parsedHeader.value.algorithmSuiteId == AlgorithmSuites.DBE_ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_ECDSA_P384_SYMSIG_HMAC_SHA384.id.DBE;
494506
// Expect the verification key in the context
495507
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;
497509
expect |parsedHeader.value.encryptedDataKeys| == 1;
498510
}
499511

0 commit comments

Comments
 (0)