Skip to content

Commit 31681ed

Browse files
committed
Added ability to decrypt primitive type values using the same path as the encrypted value
1 parent f6dc7b0 commit 31681ed

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

Mastercard.Developer.ClientEncryption.Core/Encryption/FieldLevelEncryption.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,9 +197,9 @@ private static void DecryptPayloadPath(JObject payloadObject, string jsonPathIn,
197197
CheckOrCreateOutObject(payloadObject, jsonPathOut);
198198
AddDecryptedDataToPayload(payloadObject, decryptedValue, jsonPathOut);
199199

200-
// Remove the input object if now empty
200+
// Remove the input if now empty
201201
inJsonToken = payloadObject.SelectToken(jsonPathIn);
202-
if (!inJsonToken.HasValues)
202+
if (inJsonToken.Type == JTokenType.Object && !inJsonToken.HasValues)
203203
{
204204
inJsonToken.Parent.Remove();
205205
}

Mastercard.Developer.ClientEncryption.Tests/NetCore/Encryption/FieldLevelEncryptionTest.cs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1087,7 +1087,7 @@ public void TestDecryptPayload_ShouldKeepInputObject_WhenContainsAdditionalField
10871087
}
10881088

10891089
[TestMethod]
1090-
public void TestDecryptPayload_ShouldOverwriteInputObject_WhenOutPathSameAsInPath()
1090+
public void TestDecryptPayload_ShouldOverwriteInputObject_WhenOutPathSameAsInPath_ObjectData()
10911091
{
10921092
// GIVEN
10931093
const string encryptedPayload = "{" +
@@ -1112,6 +1112,30 @@ public void TestDecryptPayload_ShouldOverwriteInputObject_WhenOutPathSameAsInPat
11121112
Assert.AreEqual("field2Value", payloadObject["encryptedData"]["field2"]);
11131113
}
11141114

1115+
[TestMethod]
1116+
public void TestDecryptPayload_ShouldOverwriteInputObject_WhenOutPathSameAsInPath_PrimitiveTypeData()
1117+
{
1118+
// GIVEN
1119+
const string encryptedPayload = "{" +
1120+
" \"data\": {" +
1121+
" \"iv\": \"3ce861359fa1630c7a794901ee14bf41\"," +
1122+
" \"encryptedKey\": \"02bb8d5c7d113ef271f199c09f0d76db2b6d5d2d209ad1a20dbc4dd0d04576a92ceb917eea5f403ccf64c3c39dda564046909af96c82fad62f89c3cbbec880ea3105a0a171af904cd3b86ea68991202a2795dca07050ca58252701b7ecea06055fd43e96f4beee48b6275e86af93c88c21994ff46f0610171bd388a2c0a1f518ffc8346f7f513f3283feae5b102c8596ddcb2aea5e62ceb17222e646c599f258463405d28ac012bfd4cc431f94111ee07d79e660948485e38c13cdb8bba8e1df3f7dba0f4c77696f71930533c955f3a430658edaa03b0b0c393934d60f5ac3ea5c06ed64bf969fc01942eac432b8e0c56f7538659a72859d445d150c169ae690\"," +
1123+
" \"encryptedValue\": \"e2d6a3a76ea6e605e55b400e5a4eba11\"," +
1124+
" \"oaepHashingAlgorithm\": \"SHA256\"" +
1125+
" } " +
1126+
"}";
1127+
var config = TestUtils.GetTestFieldLevelEncryptionConfigBuilder()
1128+
.WithDecryptionPath("$.data", "$.data")
1129+
.Build();
1130+
1131+
// WHEN
1132+
var payload = FieldLevelEncryption.DecryptPayload(encryptedPayload, config);
1133+
1134+
// THEN
1135+
var payloadObject = JObject.Parse(payload);
1136+
Assert.AreEqual("string", payloadObject["data"]);
1137+
}
1138+
11151139
[TestMethod]
11161140
public void TestDecryptPayload_ShouldSupportRootAsInputPath()
11171141
{

0 commit comments

Comments
 (0)