Skip to content

Commit e3ac7cd

Browse files
chore: add test for DDBEC with sdk v2 (#2126)
1 parent 091b7b4 commit e3ac7cd

8 files changed

Lines changed: 520 additions & 22 deletions

File tree

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"TableName": [
3+
{
4+
"hashKey": {
5+
"S": "test😀Ψkey"
6+
},
7+
"*amzn-ddb-map-desc*": {
8+
"B": "AAAAAAAAABBhbXpuLWRkYi1lbnYta2V5AAAA4EFRRUJBSGhBODR3blhqRUpkQmJCQnlsUlVGY1paSzJqN3h3aDZVeUxvTDI4blErMEZBQUFBSDR3ZkFZSktvWklodmNOQVFjR29HOHdiUUlCQURCb0Jna3Foa2lHOXcwQkJ3RXdIZ1lKWUlaSUFXVURCQUV1TUJFRUREWlBYZGxDVHY2VlBCVUNFZ0lCRUlBN045Q1RjRHowSzd1RVNUUGxxU3MxdjRZQTVEU2tJQmVWc0lpN2FQTllVeW9xMm4xazZJUUlINnZGc3pmeFZSeFdLdUhxejZ0MkNtV1BlUFU9AAAAD2F3cy1rbXMtZWMtYXR0cgAAAAYqa2V5cyoAAAAQYW16bi1kZGItZW52LWFsZwAAAAdBRVMvMjU2AAAAEGFtem4tZGRiLXNpZy1hbGcAAAAOSG1hY1NIQTI1Ni8yNTYAAAARYW16bi1kZGItd3JhcC1hbGcAAAADa21zAAAAFWFtem4tZGRiLW1hcC1zeW0tbW9kZQAAABEvQ0JDL1BLQ1M1UGFkZGluZw=="
9+
},
10+
"*amzn-ddb-map-sig*": {
11+
"B": "+01tpVk8ZvuIFh+ZA02PkhFhEBs2vYePEgcM/qZ6JFw="
12+
}
13+
}
14+
]
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
{
2+
"TableName": [
3+
{
4+
"rangeKey": {
5+
"N": "7"
6+
},
7+
"hashKey": {
8+
"N": "5"
9+
},
10+
"stringValue": {
11+
"B": "leseMgRescbtfi/CZCmfW0Lk1jkv6Md5cqAtBTEP1AQyTB25+xVF7UjWR1DbeA8Y"
12+
},
13+
"*amzn-ddb-map-desc*": {
14+
"B": "AAAAAAAAABVhbXpuLWRkYi1tYXAtc3ltLW1vZGUAAAARL0NCQy9QS0NTNVBhZGRpbmc="
15+
},
16+
"intSet": {
17+
"B": "rf/00OwnLb/FlqMWDjvcdiX1AqzRQfLOuSSaTDZX7nSQrkDyqyxHxKYPWGnZOPOI3P2fOjVvYV0BSlmCIvP5kQ=="
18+
},
19+
"byteArrayValue": {
20+
"B": "DwzxA9QJrucdFE8nPIEaiAdggInKUH4CvumuBNZxcQc="
21+
},
22+
"intValue": {
23+
"B": "b6tg6Vm7pzdcmlT0pc/4q/cecHZaiENJG/Hv+IU+6Lg="
24+
},
25+
"stringSet": {
26+
"B": "HHIUXDDb2gMeGMfUs9cW0CtvPohceTRyOQ1GI/voY6vImFe1AJKNCy5Shx/PmMYH+rEzjryVsd8EVmcCco0PGA=="
27+
},
28+
"version": {
29+
"N": "0"
30+
},
31+
"*amzn-ddb-map-sig*": {
32+
"B": "EQXY4c3O2NSyRpPPuR9RzZ+CnLxn7jgb12RRmivNYZA="
33+
}
34+
}
35+
]
36+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
{
2+
"TableName": [
3+
{
4+
"rangeKey": {
5+
"N": "7"
6+
},
7+
"hashKey": {
8+
"N": "5"
9+
},
10+
"stringValue": {
11+
"B": "6Z0SJgkzw3Ij0RNpHzrdH5o9+3tGJVVr3G66OL4+q7nfh/7AEg3wHnRuBiO2z3F/"
12+
},
13+
"*amzn-ddb-map-desc*": {
14+
"B": "AAAAAAAAABVhbXpuLWRkYi1tYXAtc3ltLW1vZGUAAAARL0NCQy9QS0NTNVBhZGRpbmc="
15+
},
16+
"intSet": {
17+
"B": "E2PmJ8DFDYXCYlAssQzJCFPkeoZqyDDpXI0qJe5iXIIkGE1Ltn+J++OzKDZ+Gvkvno1eNERWplptL22HH2+kjQ=="
18+
},
19+
"byteArrayValue": {
20+
"B": "263KRNe2DxnFKltNMXgxr95crOtbOziyqaI2rVdiUco="
21+
},
22+
"intValue": {
23+
"B": "5rYFQHJpwVusKp4zIcJkNgQpzrz3Gwk+sb3aQsmJWRs="
24+
},
25+
"stringSet": {
26+
"B": "Yii7PxCMKEefXMIEXeLl20YMm7WhKxxNlCJzv18QCLhmrVEL15xvTzAkcPMXVud7YIJFx1XzcVTjK0wwn5htSw=="
27+
},
28+
"version": {
29+
"N": "0"
30+
},
31+
"*amzn-ddb-map-sig*": {
32+
"B": "I/fHzON+4U01BsJA8hU6ebKn+TftiuaVAGDsn/ykAO8="
33+
}
34+
}
35+
]
36+
}

DynamoDbEncryption/runtimes/java/src/test/sdkv1/com/amazonaws/services/dynamodbv2/datamodeling/LegacyTestVectors.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,47 @@ public static BaseClass attributeMapToBaseClass(
397397
return value;
398398
}
399399

400+
public static Map<String, AttributeValue> baseClassToV1AttrMap(
401+
BaseClass obj
402+
) {
403+
Map<String, AttributeValue> map = new HashMap<>();
404+
map.put(
405+
HASH_KEY,
406+
new AttributeValue().withN(String.valueOf(obj.getHashKey()))
407+
);
408+
map.put(
409+
RANGE_KEY,
410+
new AttributeValue().withN(String.valueOf(obj.getRangeKey()))
411+
);
412+
map.put(
413+
"version",
414+
new AttributeValue().withN(String.valueOf(obj.getVersion()))
415+
);
416+
map.put(
417+
"intValue",
418+
new AttributeValue().withN(String.valueOf(obj.getIntValue()))
419+
);
420+
map.put("stringValue", new AttributeValue().withS(obj.getStringValue()));
421+
map.put(
422+
"byteArrayValue",
423+
new AttributeValue()
424+
.withB(java.nio.ByteBuffer.wrap(obj.getByteArrayValue()))
425+
);
426+
map.put("stringSet", new AttributeValue().withSS(obj.getStringSet()));
427+
map.put(
428+
"intSet",
429+
new AttributeValue()
430+
.withNS(
431+
obj
432+
.getIntSet()
433+
.stream()
434+
.map(String::valueOf)
435+
.collect(java.util.stream.Collectors.toList())
436+
)
437+
);
438+
return map;
439+
}
440+
400441
public static Map<
401442
String,
402443
software.amazon.awssdk.services.dynamodb.model.AttributeValue

DynamoDbEncryption/runtimes/java/src/test/sdkv1/com/amazonaws/services/dynamodbv2/datamodeling/TransformerHolisticIT.java

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// SPDX-License-Identifier: Apache-2.0
33
package com.amazonaws.services.dynamodbv2.datamodeling;
44

5+
import static com.amazonaws.services.dynamodbv2.datamodeling.LegacyTestVectors.baseClassToV1AttrMap;
56
import static org.testng.AssertJUnit.assertEquals;
67
import static org.testng.AssertJUnit.assertFalse;
78
import static org.testng.AssertJUnit.assertNull;
@@ -107,18 +108,18 @@ public class TransformerHolisticIT {
107108
private static final PrivateKey rsaPriv;
108109
private static final PublicKey rsaPub;
109110
private static final KeyPair rsaPair;
110-
private static final EncryptionMaterialsProvider symProv;
111+
public static final EncryptionMaterialsProvider symProv;
111112
private static final EncryptionMaterialsProvider asymProv;
112113
private static final EncryptionMaterialsProvider symWrappedProv;
113114
protected static final String HASH_KEY = "hashKey";
114115
protected static final String RANGE_KEY = "rangeKey";
115-
protected static final String BASE_CLASS_TABLE_NAME = "TableName";
116+
public static final String BASE_CLASS_TABLE_NAME = "TableName";
116117
private static final String RSA = "RSA";
117118

118119
private AmazonDynamoDB client;
119-
private static AWSKMS kmsClient = AWSKMSClientBuilder.standard().build();
120+
public static AWSKMS kmsClient = AWSKMSClientBuilder.standard().build();
120121

121-
private static Map<String, KeyData> keyDataMap = new HashMap<>();
122+
public static Map<String, KeyData> keyDataMap = new HashMap<>();
122123

123124
// AttributeEncryptor *must* be used with SaveBehavior.CLOBBER to avoid the risk of data
124125
// corruption.
@@ -127,7 +128,7 @@ public class TransformerHolisticIT {
127128
.builder()
128129
.withSaveBehavior(SaveBehavior.CLOBBER)
129130
.build();
130-
private static final BaseClass ENCRYPTED_TEST_VALUE = new BaseClass();
131+
public static final BaseClass ENCRYPTED_TEST_VALUE = new BaseClass();
131132
private static final Mixed MIXED_TEST_VALUE = new Mixed();
132133
private static final SignOnly SIGNED_TEST_VALUE = new SignOnly();
133134
private static final Untouched UNTOUCHED_TEST_VALUE = new Untouched();
@@ -139,7 +140,7 @@ public class TransformerHolisticIT {
139140

140141
private static final String TEST_VECTOR_MANIFEST_DIR =
141142
"/vectors/encrypted_item/";
142-
private static final String SCENARIO_MANIFEST_PATH =
143+
public static final String SCENARIO_MANIFEST_PATH =
143144
TEST_VECTOR_MANIFEST_DIR + "scenarios.json";
144145
private static final String JAVA_DIR = "java";
145146

@@ -326,6 +327,28 @@ public void setUp() {
326327
createCiphertextTables(client);
327328
}
328329

330+
// This test configures EC with various combination. This is different from other tests as other test run in same hardcoded EC.
331+
@Test
332+
public void decryptWithECConfigTest()
333+
throws IOException, GeneralSecurityException {
334+
final String nullTableNameInECCipherFile =
335+
"file://ciphertext/java/static-aes-hmac-null-table-1.json";
336+
final String nonBMPinECCipherFile =
337+
"file://ciphertext/java/kms-nonbmp-hashkey-1.json";
338+
final String nonAsciiTableInECCipherFile =
339+
"file://ciphertext/java/static-aes-hmac-nonascii-table-1.json";
340+
341+
TransformerHolisticITHelper.decryptNullTableNameInEC(
342+
nullTableNameInECCipherFile
343+
);
344+
TransformerHolisticITHelper.decryptNonBmpHashKeyVector(
345+
nonBMPinECCipherFile
346+
);
347+
TransformerHolisticITHelper.decryptNonAsciiTableNameVector(
348+
nonAsciiTableInECCipherFile
349+
);
350+
}
351+
329352
@Test(dataProvider = "getDecryptTestVectors")
330353
public void decryptTestVector(Scenario scenario) throws IOException {
331354
client = DynamoDBEmbedded.create().amazonDynamoDB();
@@ -1353,7 +1376,7 @@ private void putDataFromFile(AmazonDynamoDB client, String filename)
13531376
}
13541377
}
13551378

1356-
private Map<
1379+
public static Map<
13571380
String,
13581381
List<Map<String, AttributeValue>>
13591382
> getCiphertextManifestFromFile(String filename) throws IOException {
@@ -1365,7 +1388,7 @@ > getCiphertextManifestFromFile(String filename) throws IOException {
13651388
);
13661389
}
13671390

1368-
private static <T> T getManifestFromFile(
1391+
public static <T> T getManifestFromFile(
13691392
String filename,
13701393
TypeReference typeRef
13711394
) throws IOException {
@@ -1380,7 +1403,7 @@ private static <T> T getManifestFromFile(
13801403
return (T) manifestMapper.readValue(manifestFile, typeRef);
13811404
}
13821405

1383-
private static void loadKeyData(String filename) throws IOException {
1406+
static void loadKeyData(String filename) throws IOException {
13841407
keyDataMap =
13851408
getManifestFromFile(
13861409
TEST_VECTOR_MANIFEST_DIR + stripFilePath(filename),

0 commit comments

Comments
 (0)