Skip to content
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
{
"TableName": [
{
"hashKey": {
"N": "5"
},
"intSet": {
"B": "hSyNrutzz/66hy7Aop/U9tubCBYJkStxMs/p/3kNmgZg1i9S4SpyoDQqIgzrAqESJ9swarmKNk7PAdm+DWTLmQ=="
},
"doubleSet": {
"B": "kha4s0Orm/nlE1Q6YzvHZk+YhU5QVarJLDnmW2Glak6vmqi03wX5X/pQyNKWrHTGPeDsrx5jvdKwYghgVqncCg=="
},
"intValue": {
"B": "uPS1BBRz8jbWjN6OWvS0KqkzwzK6mBevD2XKQLMhTRA="
},
"stringSet": {
"B": "/OCTLd5eHaLdcgGNKwY5FXiPPEHaOB71Izt7UH6E/IesOWJ4ye39UV00g4K84xbIVBVT3Y5aXM0KW1/hSYEeIg=="
},
"doubleValue": {
"B": "6MibXf75M2xe/DeX5io6BUNGiP052GJhcEJ91n2i7rU="
},
"version": {
"N": "0"
},
"*amzn-ddb-map-sig*": {
"B": "qON5xK4vsIAEa43E2Il/GgARq3DdKMSOAnLCbl/nEL0="
},
"rangeKey": {
"N": "7"
},
"stringValue": {
"B": "WZRiC0H9mHHZsv81uSB3Qw27nF/Iflf+2QwRcDjRAx5xcWhiUbSTr5mYrp5038yY"
},
"*amzn-ddb-map-desc*": {
"B": "AAAAAAAAABVhbXpuLWRkYi1tYXAtc3ltLW1vZGUAAAARL0NCQy9QS0NTNVBhZGRpbmc="
},
"byteArrayValue": {
"B": "0mFT71NFB/YEZdVA9H0lKhI86Djiy7sezbFFcZ7ua3U="
},
"complexValue": {
"B": "wBFWEy3Ao2nhzCxxCLNdY1T5Gbqk5HM8I47r/8sz8zoVtfZaPYvi1wUFjEeIe4isMfCCmvvdBT0GSFCOB/0yCmmcPx0rINxsj5vLcJBQdXc="
}
},
{
"hashKey": {
"N": "8"
},
"intSet": {
"NS": ["0", "1", "10", "15", "200"]
},
"doubleSet": {
"NS": ["-34.2", "-3", "0", "7.6", "15"]
},
"intValue": {
"N": "123"
},
"stringSet": {
"SS": ["?", "Cruel", "Goodbye", "World"]
},
"doubleValue": {
"N": "15"
},
"version": {
"N": "0"
},
"*amzn-ddb-map-sig*": {
"B": "xBoeUzfWxAsm641nvqJhS7tAaILav/LvusuY39mNYYI="
},
"rangeKey": {
"N": "10"
},
"stringValue": {
"S": "Hello world!"
},
"*amzn-ddb-map-desc*": {
"B": "AAAAAAAAABVhbXpuLWRkYi1tYXAtc3ltLW1vZGUAAAARL0NCQy9QS0NTNVBhZGRpbmc="
},
"byteArrayValue": {
"B": "AAECAwQF"
},
"complexValue": {
"L": [
{
"M": {
"tags": {
"SS": ["apple", "banana", "cherry"]
}
}
}
]
}
},
{
"rangeKey": {
"N": "9"
},
"hashKey": {
"N": "7"
},
"stringValue": {
"S": "Hello world!"
},
"intSet": {
"NS": ["0", "1", "10", "15", "200"]
},
"doubleSet": {
"NS": ["-34.2", "-3", "0", "7.6", "15"]
},
"byteArrayValue": {
"B": "AAECAwQF"
},
"complexValue": {
"L": [
{
"M": {
"tags": {
"SS": ["apple", "banana", "cherry"]
}
}
}
]
},
"intValue": {
"N": "123"
},
"stringSet": {
"SS": ["?", "Cruel", "Goodbye", "World"]
},
"doubleValue": {
"N": "15"
},
"version": {
"N": "0"
}
},
{
"hashKey": {
"N": "6"
},
"intSet": {
"B": "HuutO2N8WwV9l6RQzHYjIgNgcEiIHRQylrvtUV065HObddI5sQXv5AtXWt/MZDZ048yVApCeZDrOzp6peStbiQ=="
},
"doubleSet": {
"NS": ["-34.2", "-3", "0", "7.6", "15"]
},
"intValue": {
"N": "123"
},
"stringSet": {
"B": "GTfT29jFZLl/yWG+617V+4UHP6zWkMM1YemGOUzrQrmd9TtFSlFPDmdaKmfCO5u0f0o4hic6IRNagl6RUVujRw=="
},
"doubleValue": {
"N": "15"
},
"version": {
"N": "0"
},
"*amzn-ddb-map-sig*": {
"B": "ChQhebhKmivOac3FvVonKiXShL3iixjAIKi8veZa+Jo="
},
"rangeKey": {
"N": "8"
},
"stringValue": {
"S": "Hello world!"
},
"*amzn-ddb-map-desc*": {
"B": "AAAAAAAAABVhbXpuLWRkYi1tYXAtc3ltLW1vZGUAAAARL0NCQy9QS0NTNVBhZGRpbmc="
},
"byteArrayValue": {
"B": "cLy/3hMrfSkRmGkhXD4aYC7j5cFlfca//k5gwaUilew="
},
"complexValue": {
"B": "SwP4pvB4goUzz891QwzMmzFhwnUYvxZzQBGlMUNYmciydYrpmBC8zLOOsVW8r34vIWk76pliPuM53F7MFhnusKAR3rLHBsUCvNzjhOC6JBQ="
}
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,17 @@
"plaintext": "file://plaintext.json",
"ciphertext": "file://ciphertext/java/wrapped-rsa-hmac-1.json",
"network": false
},
{
"version": "v1_complex",
"provider": "static",
"keys": {
"decrypt": "aesKey",
"verify": "hmacKey"
},
"plaintext": "file://plaintext.json",
"ciphertext": "file://ciphertext/java/static-aes-hmac-complex-1.json",
"network": false
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import java.lang.reflect.InvocationTargetException;
import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import software.amazon.awssdk.core.SdkBytes;
Expand Down Expand Up @@ -279,6 +280,10 @@ public static HashMap<String, CryptoAction> ActionsFromClass(
attributeActionsOnEncrypt.put("version", CryptoAction.SIGN_ONLY);
attributeActionsOnEncrypt.put("doubleValue", CryptoAction.SIGN_ONLY);
attributeActionsOnEncrypt.put("doubleSet", CryptoAction.SIGN_ONLY);
attributeActionsOnEncrypt.put(
"complexValue",
CryptoAction.ENCRYPT_AND_SIGN
);
} else if (value instanceof SignOnly) {
attributeActionsOnEncrypt.put(HASH_KEY, CryptoAction.SIGN_ONLY);
attributeActionsOnEncrypt.put(RANGE_KEY, CryptoAction.SIGN_ONLY);
Expand All @@ -290,6 +295,7 @@ public static HashMap<String, CryptoAction> ActionsFromClass(
attributeActionsOnEncrypt.put("version", CryptoAction.SIGN_ONLY);
attributeActionsOnEncrypt.put("doubleValue", CryptoAction.SIGN_ONLY);
attributeActionsOnEncrypt.put("doubleSet", CryptoAction.SIGN_ONLY);
attributeActionsOnEncrypt.put("complexValue", CryptoAction.SIGN_ONLY);
} else if (value instanceof Untouched) {
attributeActionsOnEncrypt.put(HASH_KEY, CryptoAction.SIGN_ONLY);
attributeActionsOnEncrypt.put(RANGE_KEY, CryptoAction.SIGN_ONLY);
Expand All @@ -301,6 +307,7 @@ public static HashMap<String, CryptoAction> ActionsFromClass(
attributeActionsOnEncrypt.put("version", CryptoAction.DO_NOTHING);
attributeActionsOnEncrypt.put("doubleValue", CryptoAction.DO_NOTHING);
attributeActionsOnEncrypt.put("doubleSet", CryptoAction.DO_NOTHING);
attributeActionsOnEncrypt.put("complexValue", CryptoAction.DO_NOTHING);
} else if (value instanceof BaseClass) {
// This is a BaseClass
attributeActionsOnEncrypt.put(HASH_KEY, CryptoAction.SIGN_ONLY);
Expand All @@ -322,6 +329,10 @@ public static HashMap<String, CryptoAction> ActionsFromClass(
CryptoAction.ENCRYPT_AND_SIGN
);
attributeActionsOnEncrypt.put("doubleSet", CryptoAction.ENCRYPT_AND_SIGN);
attributeActionsOnEncrypt.put(
"complexValue",
CryptoAction.ENCRYPT_AND_SIGN
);
} else if (value instanceof KeysOnly) {
attributeActionsOnEncrypt.put(HASH_KEY, CryptoAction.SIGN_ONLY);
attributeActionsOnEncrypt.put(RANGE_KEY, CryptoAction.SIGN_ONLY);
Expand Down Expand Up @@ -393,6 +404,21 @@ public static BaseClass attributeMapToBaseClass(
.collect(Collectors.toSet())
);
}
if (attributeMap.containsKey("complexValue")) {
java.util.List<java.util.Map<String, java.util.Set<String>>> complex =
attributeMap
.get("complexValue")
.l()
.stream()
.map(av -> {
java.util.Map<String, java.util.Set<String>> m =
new java.util.HashMap<>();
av.m().forEach((k, v) -> m.put(k, new java.util.HashSet<>(v.ss())));
return m;
})
.collect(java.util.stream.Collectors.toList());
value.setComplexValue(complex);
}

return value;
}
Expand Down Expand Up @@ -435,6 +461,18 @@ public static Map<String, AttributeValue> baseClassToV1AttrMap(
.collect(java.util.stream.Collectors.toList())
)
);
if (obj.getComplexValue() != null) {
java.util.List<AttributeValue> listItems = obj
.getComplexValue()
.stream()
.map(m -> {
Map<String, AttributeValue> avMap = new HashMap<>();
m.forEach((k, v) -> avMap.put(k, new AttributeValue().withSS(v)));
return new AttributeValue().withM(avMap);
})
.collect(java.util.stream.Collectors.toList());
map.put("complexValue", new AttributeValue().withL(listItems));
}
return map;
}

Expand Down Expand Up @@ -531,6 +569,40 @@ > baseClassToAttributeMap(Object TEST_VALUE) {
)
.build()
);
if (((BaseClass) TEST_VALUE).getComplexValue() != null) {
java.util.List<
software.amazon.awssdk.services.dynamodb.model.AttributeValue
> listItems =
((BaseClass) TEST_VALUE).getComplexValue()
.stream()
.map(m -> {
Map<
String,
software.amazon.awssdk.services.dynamodb.model.AttributeValue
> avMap = new HashMap<>();
m.forEach((k, v) ->
avMap.put(
k,
software.amazon.awssdk.services.dynamodb.model.AttributeValue
.builder()
.ss(v)
.build()
)
);
return software.amazon.awssdk.services.dynamodb.model.AttributeValue
.builder()
.m(avMap)
.build();
})
.collect(java.util.stream.Collectors.toList());
attributes.put(
"complexValue",
software.amazon.awssdk.services.dynamodb.model.AttributeValue
.builder()
.l(listItems)
.build()
);
}
} else if (TEST_VALUE instanceof KeysOnly) {
attributes.put(
HASH_KEY,
Expand Down
Loading
Loading