public static void DecryptField <T>(this JObject jsonJObject, ICryptoManager cryptoManager, string path) { var jToken = jsonJObject.SelectToken(cryptoManager.Mangle(path)); var kid = jToken.SelectToken(EncryptionField.KeyIdentifier).Value <string>(); var cipherText = jToken.SelectToken(EncryptionField.CipherText).Value <string>(); var alg = jToken.SelectToken(EncryptionField.Algorithm).Value <string>(); var decryptedBytes = cryptoManager.Decrypt(new EncryptionResult { Alg = alg, Kid = kid, Ciphertext = cipherText }); var rawText = Encoding.UTF8.GetString(decryptedBytes); jsonJObject.Property(cryptoManager.Mangle(path)).Remove(); var typeCode = Type.GetTypeCode(typeof(T)); if (typeCode == TypeCode.String) { jsonJObject.Add(new JProperty(path, rawText)); } else { var value = JsonConvert.DeserializeObject(rawText); jsonJObject.Add(new JProperty(path, value)); } }
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) { var result = base.CreateProperty(member, memberSerialization); if (member.TryGetEncryptedFieldAttribute(out var attribute)) { if (attribute.KeyName == null) { throw new CryptoKeyNullException(); } var propertyInfo = member as PropertyInfo; if (_legacyFieldPrefix == null) { result.PropertyName = _cryptoManager.Mangle(result.PropertyName); } else { result.PropertyName = _legacyFieldPrefix + result.PropertyName; } result.Converter = new EncryptedFieldConverter(propertyInfo, _cryptoManager, attribute.LegacySigningKeyName); } return(result); }
public static void EncryptField(this JObject jsonJObject, ICryptoManager cryptoManager, string path) { var jToken = jsonJObject.SelectToken(path); var rawBytes = Encoding.UTF8.GetBytes(jToken.ToString()); var encrypted = cryptoManager.Encrypt(rawBytes); jsonJObject.Property(path).Remove(); jsonJObject.Add(new JProperty(cryptoManager.Mangle(path), encrypted.ToJObject())); }