Skip to content

Commit 27d06af

Browse files
Merge pull request #17 from talha-API/main
Support for AES GCM 128 / 192 JWE decryption
2 parents db4c6f9 + 1d312f5 commit 27d06af

File tree

4 files changed

+45
-20
lines changed

4 files changed

+45
-20
lines changed

Mastercard.Developer.ClientEncryption.Core/Encryption/JWE/JweObject.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ internal class JweObject
1111
{
1212
private const string A128CBC_HS256 = "A128CBC-HS256";
1313
private const string A256GCM = "A256GCM";
14+
private const string A128GCM = "A128GCM";
15+
private const string A192GCM = "A192GCM";
1416

1517
public JweHeader Header { get; private set; }
1618
public string RawHeader { get; private set; }
@@ -35,6 +37,12 @@ public string Decrypt(JweConfig config)
3537
case A256GCM:
3638
plaintext = AesGcm.Decrypt(unwrappedKey, this);
3739
break;
40+
case A128GCM:
41+
plaintext = AesGcm.Decrypt(unwrappedKey, this);
42+
break;
43+
case A192GCM:
44+
plaintext = AesGcm.Decrypt(unwrappedKey, this);
45+
break;
3846
case A128CBC_HS256:
3947
plaintext = AesCbc.Decrypt(unwrappedKey, this);
4048
break;

Mastercard.Developer.ClientEncryption.Tests/NetCore2/Encryption/JWE/GcmJweObjectTest.cs

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,34 @@ public class GcmJweObjectTest
1212
#if !NETCOREAPP3_1 && !NET5_0_OR_GREATER
1313
[ExpectedException(typeof(EncryptionException), "AES/GCM/NoPadding is unsupported on .NET Standard < 2.1")]
1414
#endif
15-
public void TestDecrypt_ShouldReturnDecryptedPayload_WhenPayloadIsGcmEncrypted()
15+
public void TestDecrypt_ShouldReturnDecryptedPayload_WhenPayloadIs256GcmEncrypted()
1616
{
1717
// GIVEN
18-
JweObject jweObject = TestUtils.GetTestGcmJweObject();
18+
JweObject jweObject = TestUtils.GetTest256GcmJweObject();
19+
20+
// WHEN
21+
string decryptedPayload = jweObject.Decrypt(TestUtils.GetTestJweConfigBuilder().Build());
22+
23+
// THEN
24+
Assert.AreEqual("{\"foo\":\"bar\"}", decryptedPayload);
25+
}
26+
27+
public void TestDecrypt_ShouldReturnDecryptedPayload_WhenPayloadIs192GcmEncrypted()
28+
{
29+
// GIVEN
30+
JweObject jweObject = TestUtils.GetTest192GcmJweObject();
31+
32+
// WHEN
33+
string decryptedPayload = jweObject.Decrypt(TestUtils.GetTestJweConfigBuilder().Build());
34+
35+
// THEN
36+
Assert.AreEqual("{\"foo\":\"bar\"}", decryptedPayload);
37+
}
38+
39+
public void TestDecrypt_ShouldReturnDecryptedPayload_WhenPayloadIs128GcmEncrypted()
40+
{
41+
// GIVEN
42+
JweObject jweObject = TestUtils.GetTest128GcmJweObject();
1943

2044
// WHEN
2145
string decryptedPayload = jweObject.Decrypt(TestUtils.GetTestJweConfigBuilder().Build());

Mastercard.Developer.ClientEncryption.Tests/NetCore2/Interceptors/RestSharpV2CbcJweEncryptionInterceptorTest.cs

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -80,23 +80,6 @@ public void TestInterceptResponse_ShouldDoNothing_WhenNoPayload()
8080
fixture.InterceptResponse(response);
8181
}
8282

83-
[TestMethod]
84-
[ExpectedException(typeof(EncryptionException))] // <-- THEN
85-
public void TestInterceptResponse_ShouldThrowAnExceptionWhenEncryptionNotSupported()
86-
{
87-
// GIVEN
88-
string encryptedPayload = "{" +
89-
"\"encryptedPayload\":\"eyJraWQiOiI3NjFiMDAzYzFlYWRlM2E1NDkwZTUwMDBkMzc4ODdiYWE1ZTZlYzBlMjI2YzA3NzA2ZTU5OTQ1MWZjMDMyYTc5IiwiY3R5IjoiYXBwbGljYXRpb25cL2pzb24iLCJlbmMiOiJBMTkyR0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.peSgTt_lPbcNStWh-gI3yMzhOGtFCwExFwLxKeHwjzsXvHB0Fml5XnG0jRbJSfOHzKx02d0NVBzoDDRSAnafuabbbMKcoaUK-jZNHSg4BHdyBZpCO82kzvWeEm3TTNHIMBTfM00EmdFB03z_a0PaWsT-FIOzu4Sd5Z_nsNLhP9941CtVS-YtZ9WkgDezGipxA7ejQ3X5gFVy2RH1gL8OTbzIYCwBcrfSjAiCQgunNbLxPPlfZHB_6prPK7_50NS6FvuMnAhiqUiiAka8DHMdeGBWOie2Q0FV_bsRDHx_6CY8kQA3F_NXz1dELIclJhdZFfRt1y-TEfwOIj4nDi2JnA.8BYMB5MkH2ZNyFGS._xb3uDsUQcPT5fQyZw.O0MzJ5OvNyj_QMuqaloTWA\"}";
90-
var config = TestUtils.GetTestJweConfigBuilder()
91-
.WithDecryptionPath("$.encryptedPayload", "$.foo")
92-
.Build();
93-
var response = RestResponseWithContentLength(encryptedPayload);
94-
95-
// WHEN
96-
var fixture = RestSharpEncryptionInterceptor.From(config);
97-
fixture.InterceptResponse(response);
98-
}
99-
10083
[TestMethod]
10184
[ExpectedException(typeof(EncryptionException))] // <-- THEN
10285
public void TestInterceptResponse_ShouldThrowException_WhenDecryptionFails()

Mastercard.Developer.ClientEncryption.Tests/NetCore2/Test/TestUtils.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,19 @@ internal static JweObject GetTestCbcJweObject()
7171
return JweObject.Parse("eyJraWQiOiI3NjFiMDAzYzFlYWRlM2E1NDkwZTUwMDBkMzc4ODdiYWE1ZTZlYzBlMjI2YzA3NzA2ZTU5OTQ1MWZjMDMyYTc5IiwiY3R5IjoiYXBwbGljYXRpb25cL2pzb24iLCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.5bsamlChk0HR3Nqg2UPJ2Fw4Y0MvC2pwWzNv84jYGkOXyqp1iwQSgETGaplIa7JyLg1ZWOqwNHEx3N7gsN4nzwAnVgz0eta6SsoQUE9YQ-5jek0COslUkoqIQjlQYJnYur7pqttDibj87fcw13G2agle5fL99j1QgFPjNPYqH88DMv481XGFa8O3VfJhW93m73KD2gvE5GasOPOkFK9wjKXc9lMGSgSArp3Awbc_oS2Cho_SbsvuEQwkhnQc2JKT3IaSWu8yK7edNGwD6OZJLhMJzWJlY30dUt2Eqe1r6kMT0IDRl7jHJnVIr2Qpe56CyeZ9V0aC5RH1mI5dYk4kHg.yI0CS3NdBrz9CCW2jwBSDw.6zr2pOSmAGdlJG0gbH53Eg.UFgf3-P9UjgMocEu7QA_vQ");
7272
}
7373

74-
internal static JweObject GetTestGcmJweObject()
74+
internal static JweObject GetTest256GcmJweObject()
7575
{
7676
return JweObject.Parse("eyJraWQiOiI3NjFiMDAzYzFlYWRlM2E1NDkwZTUwMDBkMzc4ODdiYWE1ZTZlYzBlMjI2YzA3NzA2ZTU5OTQ1MWZjMDMyYTc5IiwiY3R5IjoiYXBwbGljYXRpb25cL2pzb24iLCJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.8c6vxeZOUBS8A9SXYUSrRnfl1ht9xxciB7TAEv84etZhQQ2civQKso-htpa2DWFBSUm-UYlxb6XtXNXZxuWu-A0WXjwi1K5ZAACc8KUoYnqPldEtC9Q2bhbQgc_qZF_GxeKrOZfuXc9oi45xfVysF_db4RZ6VkLvY2YpPeDGEMX_nLEjzqKaDz_2m0Ae_nknr0p_Nu0m5UJgMzZGR4Sk1DJWa9x-WJLEyo4w_nRDThOjHJshOHaOU6qR5rdEAZr_dwqnTHrjX9Qm9N9gflPGMaJNVa4mvpsjz6LJzjaW3nJ2yCoirbaeJyCrful6cCiwMWMaDMuiBDPKa2ovVTy0Sw.w0Nkjxl0T9HHNu4R.suRZaYu6Ui05Z3-vsw.akknMr3Dl4L0VVTGPUszcA");
7777
}
78+
79+
internal static JweObject GetTest128GcmJweObject()
80+
{
81+
return JweObject.Parse("eyJlbmMiOiJBMTI4R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.WtvYljbsjdEv-Ttxx1p6PgyIrOsLpj1FMF9NQNhJUAHlKchAo5QImgEgIdgJE7HC2KfpNcHiQVqKKZq_y201FVzpicDkNzlPJr5kIH4Lq-oC5iP0agWeou9yK5vIxFRP__F_B8HSuojBJ3gDYT_KdYffUIHkm_UysNj4PW2RIRlafJ6RKYanVzk74EoKZRG7MIr3pTU6LIkeQUW41qYG8hz6DbGBOh79Nkmq7Oceg0ZwCn1_MruerP-b15SGFkuvOshStT5JJp7OOq82gNAOkMl4fylEj2-vADjP7VSK8GlqrA7u9Tn-a4Q28oy0GOKr1Z-HJgn_CElknwkUTYsWbg.PKl6_kvZ4_4MjmjW.AH6pGFkn7J49hBQcwg.zdyD73TcuveImOy4CRnVpw");
82+
}
83+
84+
internal static JweObject GetTest192GcmJweObject()
85+
{
86+
return JweObject.Parse("eyJlbmMiOiJBMTkyR0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.FWC8PVaZoR2TRKwKO4syhSJReezVIvtkxU_yKh4qODNvlVr8t8ttvySJ-AjM8xdI6vNyIg9jBMWASG4cE49jT9FYuQ72fP4R-Td4vX8wpB8GonQj40yLqZyfRLDrMgPR20RcQDW2ThzLXsgI55B5l5fpwQ9Nhmx8irGifrFWOcJ_k1dUSBdlsHsYxkjRKMENu5x4H6h12gGZ21aZSPtwAj9msMYnKLdiUbdGmGG_P8a6gPzc9ih20McxZk8fHzXKujjukr_1p5OO4o1N4d3qa-YI8Sns2fPtf7xPHnwi1wipmCC6ThFLU80r3173RXcpyZkF8Y3UacOS9y1f8eUfVQ.JRE7kZLN4Im1Rtdb.eW_lJ-U330n0QHqZnQ._r5xYVvMCrvICwLz4chjdw");
87+
}
7888
}
7989
}

0 commit comments

Comments
 (0)