Skip to content

Commit 55503fb

Browse files
committed
Fixed #3
1 parent 9075062 commit 55503fb

File tree

4 files changed

+68
-5
lines changed

4 files changed

+68
-5
lines changed

src/main/java/com/mastercard/developer/encryption/FieldLevelEncryption.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,9 +223,9 @@ private static void decryptPayloadPath(DocumentContext payloadContext, String js
223223
checkOrCreateOutObject(payloadContext, jsonPathOut);
224224
addDecryptedDataToPayload(payloadContext, decryptedValue, jsonPathOut);
225225

226-
// Remove the input object if now empty
227-
inJsonObject = readJsonObject(payloadContext, jsonPathIn);
228-
if (inJsonObject != null && 0 == jsonProvider.length(inJsonObject) && !"$".equals(jsonPathIn)) {
226+
// Remove the input if now empty
227+
Object inJsonElement = readJsonElement(payloadContext, jsonPathIn);
228+
if (inJsonElement != null && 0 == jsonProvider.length(inJsonElement) && !"$".equals(jsonPathIn)) {
229229
payloadContext.delete(jsonPathIn);
230230
}
231231
}

src/main/java/com/mastercard/developer/json/JsonEngine.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ protected static Object asPrimitiveValue(String string) {
7575

7676
public String toJsonString(Object object) {
7777
if (null == object) {
78-
throw new IllegalStateException("Can get a JSON string from a null object!");
78+
throw new IllegalStateException("Can't get a JSON string from a null object!");
7979
}
8080
if (isJsonPrimitive(object)) {
8181
return object.toString();

src/test/java/com/mastercard/developer/encryption/FieldLevelEncryptionWithDefaultJsonEngineTest.java

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import javax.crypto.spec.IvParameterSpec;
1515
import javax.crypto.spec.SecretKeySpec;
1616
import java.security.InvalidKeyException;
17+
import java.security.PrivateKey;
1718

1819
import static com.mastercard.developer.encryption.FieldLevelEncryptionConfig.FieldValueEncoding;
1920
import static com.mastercard.developer.encryption.FieldLevelEncryptionParams.SYMMETRIC_KEY_TYPE;
@@ -1035,7 +1036,7 @@ public void testDecryptPayload_ShouldKeepInputObject_WhenContainsAdditionalField
10351036
}
10361037

10371038
@Test
1038-
public void testDecryptPayload_ShouldOverwriteInputObject_WhenOutPathSameAsInPath() throws Exception {
1039+
public void testDecryptPayload_ShouldOverwriteInputObject_WhenOutPathSameAsInPath_ObjectData() throws Exception {
10391040

10401041
// GIVEN
10411042
String encryptedPayload = "{" +
@@ -1060,6 +1061,40 @@ public void testDecryptPayload_ShouldOverwriteInputObject_WhenOutPathSameAsInPat
10601061
assertEquals("\"field2Value\"", payloadObject.get("encryptedData").getAsJsonObject().get("field2").toString());
10611062
}
10621063

1064+
/**
1065+
* https://github.com/Mastercard/client-encryption-java/issues/3
1066+
*/
1067+
@Test
1068+
public void testDecryptPayload_ShouldOverwriteInputObject_WhenOutPathSameAsInPath_PrimitiveTypeData() throws Exception {
1069+
1070+
// GIVEN
1071+
String encryptedPayload = "{" +
1072+
" \"data\": {" +
1073+
" \"encryptedData\": {" +
1074+
" \"encryptedValue\": \"Qiw1g87OCwa5/IXPC5nIJw==\"," +
1075+
" \"iv\": \"OZt7FRV644fEFbb75VNdjA==\"," +
1076+
" \"encryptedKey\": \"AyI8R1/ziGTZ6Uhy2JGsy+PYf+KXcrzn5v56tP3WnuFM2Qt24T9t4WXE+B1cqiDjo1LQIEgXJWZ5XX/fbYh/Y1qmycit/QmPVEjGqoKLNSB1Js00Cghyt7lChuSUIWRnYbNAa0q6EgPS5vyDrXDVZH0vkTM6egc7d76O9Sw+rXGzv9d9wiQlhxFXkb+GH/BCiswb064w53LcXdoBcup1sEEn6UIuORtiCGeQcNqS6yvkR3HWc0lrAJpCikJoTCMQli7MJYAVj+w4LZCUZMcwWMuiMhLQQdjTAhCCK9+fKItwA5xSDaXictspUALTi/drdcj2zXbxX3E2t+q1PgWPUg==\"," +
1077+
" \"publicKeyFingerprint\": \"29f8a7cea970886829226864c79195088ee464a89d8bc835d392c1f6666326c6\"," +
1078+
" \"oaepPaddingDigestAlgorithm\": \"SHA256\"" +
1079+
" }" +
1080+
" }" +
1081+
"}";
1082+
1083+
PrivateKey decryptionKey = EncryptionUtils.loadDecryptionKey("./src/test/resources/keys/pkcs8/github-issue#3.pem");
1084+
FieldLevelEncryptionConfig config = getTestFieldLevelEncryptionConfigBuilder()
1085+
.withDecryptionKey(decryptionKey)
1086+
.withDecryptionPath("$.data.encryptedData", "$.data.encryptedData")
1087+
.withFieldValueEncoding(FieldValueEncoding.BASE64)
1088+
.build();
1089+
1090+
// WHEN
1091+
String payload = FieldLevelEncryption.decryptPayload(encryptedPayload, config);
1092+
1093+
// THEN
1094+
JsonObject payloadObject = new Gson().fromJson(payload, JsonObject.class);
1095+
assertEquals("India", payloadObject.get("data").getAsJsonObject().get("encryptedData").getAsString());
1096+
}
1097+
10631098
@Test
10641099
public void testDecryptPayload_ShouldSupportRootAsInputPath() throws Exception {
10651100

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQClPNgGKUEUSZ5C
3+
UGQ5tEw9ZeYLPv6+vMZ6YH7QfzhCQwas1nL+eTsXAooggd0HglICSsIYcHMvnUuD
4+
458G3j8NGBTcuzO0FKsc+9WjWKXyqfvi9SnM/1q8ZvyIRbw2a1bSpND63d2GVERo
5+
K/31cyesb7BS4Jr/EQCEK+kN87l9MMkPmgAFBCAXrQ+ZdiZ43j0Czs6c7a+ueRRA
6+
fChKjS5nrUpFc/MWWPCUKUmqMnJMRaCTvQ+9ZIbnBccs2grbP9F+V25EpVagcbbE
7+
/c5RXzqbUNIUK/BpeJ9IPE7ZvUu8cEQU1pJIlk8TLnoIFyJwdRF9FDT/iNsHxuBN
8+
jpwT5EExAgMBAAECggEBAJWjciayOYN739xCHWG8i8aWfyv0EpL9NekhdfavH22y
9+
cVsYoe8eLor5+8jQki/4rvfwZ7HmNAoMspRwEFYR8puTEWGMDpiolwWacrCI2U/W
10+
7ItuZjqFjdBMm6l1LatCrc/4/mARiEncCk8kd8pOTMF2LAIB8ZvH8+W+NkIyU+qw
11+
TMyHFzpG1XE1/QQgr3sEHsOnBkyWZteS42AYa11lPA2Agt5OpABi6cgTVsfUdmlr
12+
paAuP00fmWXdFBzZRKHBTJHamFrp2Bm/i3+YQMdwMtbOKGo4R2VuTVcMaYb7jocG
13+
Q/goEHonOeV5SoeIdb3DfC0qlazhAM9Za2MsL2aD15kCgYEA1JYwb5l0WDFI0kHI
14+
4js/TQOc5p45jseQjYblouc0UccUZDjq26v5gDM+/xbo3Wv25p6Wkxn0HuCWzw+1
15+
hoOGKsX9U8846H+b/G9F2ihMj2a9oYFedNY0f2MYEbpKRehMNTARIOriQ/lXh/RT
16+
yr6jDD4wxH90KuuYhRVNnfcPnK8CgYEAxvtMO+6enIzW3OCRaY+9sWSqBp8orc2v
17+
SsO3ekt5ZVU4+crK+RIXRnCB8lOtPu2RD9jAYeXpyqqJ8f03slGtmSUshLv2xg3k
18+
WEuKP1XrXSnArqKWMf1v9DhvLV1Do07nwKw2wMQc+rufD65IJ7Yg5T7/TxmFyVeI
19+
S8rga/9mOB8CgYBBGjV/F7l/gKhSa37/eTFrfl3AalgqF4d3MAaHGtL08EiYYK3b
20+
1BC2Z/s012k81eFowsxOBDa0dgb5JlBq/0BJPRTVY7KD0QCOD+2OX6UCjW4pVZr9
21+
oNO25zvpwekY+4jLCQtVz1i3hFZ/9hzrC/KWvzzkEDwdIMU2jE2WwKBxVQKBgFKT
22+
69lbeBvEH09fKznB25mJCz7gQoOOvtaqTrTEKccyDQktbfrb1Sj4fBVTQKzC7tbC
23+
v2RhhBsFl2YEDl9EomTSFp2nXAxpq4AxKViLkbgCIeLXurlYUmPqH8mV0QIvNuKx
24+
Fa/+M4Ci6KobS/qfDRvWfyIWl30thHTf5y8quQNFAoGBALYIgy7b9JjGp2BwITMK
25+
1AFhH40Kl2C6Myk2ikITxNtKAYucDE27+OHmXSUvmi2itC0SpthTNt0nd5KAm749
26+
0WQdwU8xD+t3vb879gRJx4LZT/FjI+u3U8+Q4kKyUHpLDQuPhTYA6B2LA1LBlQlN
27+
myHZ4rfXarq79sN+UG4h2lCv
28+
-----END PRIVATE KEY-----

0 commit comments

Comments
 (0)