@@ -8,26 +8,26 @@ namespace Mastercard.Developer.ClientEncryption.Core.Encryption.JWE
88{
99 public static class JweEncryption
1010 {
11- private const string ALGORITHM = "RSA-OAEP-256" ;
12- private const string ENCRYPTION = "A256GCM" ;
13- private const string CONTENT_TYPE = "application/json" ;
11+ private const string Algorithm = "RSA-OAEP-256" ;
12+ private const string Encryption = "A256GCM" ;
13+ private const string ContentType = "application/json" ;
1414
1515 public static string EncryptPayload ( string payload , JweConfig config )
1616 {
1717 try
1818 {
1919 // Parse the given payload
20- JToken json = JObject . Parse ( payload ) ;
20+ var payloadToken = JToken . Parse ( payload ) ;
2121
2222 // Encrypt
2323 foreach ( var entry in config . EncryptionPaths )
2424 {
25- string jsonPathIn = entry . Key ;
26- string jsonPathOut = entry . Value ;
27- json = EncryptPayloadPath ( json , jsonPathIn , jsonPathOut , config ) ;
25+ var jsonPathIn = entry . Key ;
26+ var jsonPathOut = entry . Value ;
27+ payloadToken = EncryptPayloadPath ( payloadToken , jsonPathIn , jsonPathOut , config ) ;
2828 }
2929
30- return json . ToString ( ) ;
30+ return payloadToken . ToString ( ) ;
3131 }
3232 catch ( Exception ex )
3333 {
@@ -40,16 +40,16 @@ public static string DecryptPayload(string payload, JweConfig config)
4040 try
4141 {
4242 // Parse the given payload
43- JToken json = JObject . Parse ( payload ) ;
43+ var payloadToken = JToken . Parse ( payload ) ;
4444
4545 // Perform decryption
4646 foreach ( var entry in config . DecryptionPaths )
4747 {
48- string jsonPathIn = entry . Key ;
49- string jsonPathOut = entry . Value ;
50- json = DecryptPayloadPath ( json , jsonPathIn , jsonPathOut , config ) ;
48+ var jsonPathIn = entry . Key ;
49+ var jsonPathOut = entry . Value ;
50+ payloadToken = DecryptPayloadPath ( payloadToken , jsonPathIn , jsonPathOut , config ) ;
5151 }
52- return json . ToString ( ) ;
52+ return payloadToken . ToString ( ) ;
5353 }
5454 catch ( Exception ex )
5555 {
@@ -59,26 +59,26 @@ public static string DecryptPayload(string payload, JweConfig config)
5959
6060 private static JToken DecryptPayloadPath ( JToken payload , string jsonPathIn , string jsonPathOut , JweConfig config )
6161 {
62- JToken token = payload . SelectToken ( jsonPathIn ) ;
63- if ( JsonUtils . IsNullOrEmptyJson ( token ) )
62+ var token = payload . SelectToken ( jsonPathIn ) ;
63+ if ( JsonUtils . IsNullOrEmptyJson ( token ) )
6464 {
6565 // Nothing to decrypt
6666 return payload ;
6767 }
6868
6969 // Read and remove encrypted data and encryption fields at the given JSON path
70- string encryptedValue = ReadAndDeleteJsonKey ( payload , token , config . EncryptedValueFieldName ) ;
70+ var encryptedValue = ReadAndDeleteJsonKey ( payload , token , config . EncryptedValueFieldName ) ;
7171 if ( string . IsNullOrEmpty ( encryptedValue ) )
7272 {
7373 // Nothing to decrypt
7474 return payload ;
7575 }
76- JweObject jweObject = JweObject . Parse ( encryptedValue ) ;
77- string decryptedValue = jweObject . Decrypt ( config ) ;
76+ var jweObject = JweObject . Parse ( encryptedValue ) ;
77+ var decryptedValue = jweObject . Decrypt ( config ) ;
7878
7979 if ( "$" . Equals ( jsonPathOut ) )
8080 {
81- return JObject . Parse ( decryptedValue ) ;
81+ return JToken . Parse ( decryptedValue ) ;
8282 }
8383
8484 JsonUtils . CheckOrCreateOutObject ( payload , jsonPathOut ) ;
@@ -95,30 +95,28 @@ private static JToken DecryptPayloadPath(JToken payload, string jsonPathIn, stri
9595
9696 private static string ReadAndDeleteJsonKey ( JToken context , JToken token , string key )
9797 {
98- if ( ! string . IsNullOrEmpty ( key ) )
98+ if ( string . IsNullOrEmpty ( key ) ) return token . ToString ( ) ;
99+ var value = context . SelectToken ( key ) ;
100+ if ( null != value && null != value . Parent )
99101 {
100- var value = context . SelectToken ( key ) ;
101- if ( null != value && null != value . Parent )
102- {
103- value . Parent . Remove ( ) ;
104- }
102+ value . Parent . Remove ( ) ;
105103 }
106104 return token . ToString ( ) ;
107105 }
108106
109107 private static JToken EncryptPayloadPath ( JToken json , string jsonPathIn , string jsonPathOut , JweConfig config )
110108 {
111- JToken token = json . SelectToken ( jsonPathIn ) ;
109+ var token = json . SelectToken ( jsonPathIn ) ;
112110 if ( JsonUtils . IsNullOrEmptyJson ( token ) )
113111 {
114112 // Nothing to encrypt
115113 return json ;
116114 }
117115
118116 // Encode and encrypt
119- string inJsonString = JsonUtils . SanitizeJson ( token . ToString ( Formatting . None ) ) ;
120- JweHeader header = new JweHeader ( ALGORITHM , ENCRYPTION , config . EncryptionKeyFingerprint , CONTENT_TYPE ) ;
121- string encrypted = JweObject . Encrypt ( config , inJsonString , header ) ;
117+ var inJsonString = JsonUtils . SanitizeJson ( token . ToString ( Formatting . None ) ) ;
118+ var header = new JweHeader ( Algorithm , Encryption , config . EncryptionKeyFingerprint , ContentType ) ;
119+ var encrypted = JweObject . Encrypt ( config , inJsonString , header ) ;
122120
123121 // Delete data in the clear
124122 if ( "$" . Equals ( jsonPathIn ) )
@@ -134,7 +132,7 @@ private static JToken EncryptPayloadPath(JToken json, string jsonPathIn, string
134132 JsonUtils . CheckOrCreateOutObject ( json , jsonPathOut ) ;
135133 var outJsonToken = json . SelectToken ( jsonPathOut ) as JObject ;
136134 JsonUtils . AddOrReplaceJsonKey ( outJsonToken , config . EncryptedValueFieldName , encrypted ) ;
137- return outJsonToken ;
135+ return json ;
138136 }
139137 }
140138}
0 commit comments