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));
            }
        }
Beispiel #2
0
        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()));
        }