Example #1
0
        public void Private_field_is_encrypted_and_decrypted()
        {
            var dataProtectionProvider = Helpers.GetTestDataProtectionProvider(ApplicationName);
            var contractResolver       = new EncryptedContractResolver(dataProtectionProvider);
            var serializer             = new JsonSerializer()
            {
                ContractResolver = contractResolver
            };

            var myDoubles = new Dictionary <string, double>
            {
                { "first", 1.1 },
                { "second", 2.2 },
                { "third", 3.3 },
            };
            var instance = new FooDictionaryPrivate(myDoubles);

            var builder = new StringBuilder();

            using (var textWriter = new StringWriter(builder))
                serializer.Serialize(textWriter, instance);

            var json = builder.ToString();

            json.ShouldNotBe(JsonConvert.SerializeObject(instance));

            using var textReader = new StringReader(json);
            using var reader     = new JsonTextReader(textReader);
            var decrypted = serializer.Deserialize <FooDictionaryPrivate>(reader);

            decrypted.GetMyDoubles().ShouldBe(myDoubles);
        }
        public void Private_field_is_encrypted_and_decrypted()
        {
            var dataProtectionProvider = Helpers.GetTestDataProtectionProvider(ApplicationName);
            var contractResolver       = new EncryptedContractResolver(dataProtectionProvider);
            var serializer             = new JsonSerializer()
            {
                ContractResolver = contractResolver
            };

            var myULong  = (ulong)75;
            var instance = new FooULongPrivate(myULong);

            var builder = new StringBuilder();

            using (var textWriter = new StringWriter(builder))
                serializer.Serialize(textWriter, instance);

            var json = builder.ToString();

            json.ShouldNotBe(JsonConvert.SerializeObject(instance));

            using var textReader = new StringReader(json);
            using var reader     = new JsonTextReader(textReader);
            var decrypted = serializer.Deserialize <FooULongPrivate>(reader);

            decrypted.GetMyULong().ShouldBe(myULong);
        }
Example #3
0
        public void HashSet_with_nested_object()
        {
            var dataProtectionProvider = Helpers.GetTestDataProtectionProvider(nameof(NestedObjectTests));
            var contractResolver       = new EncryptedContractResolver(dataProtectionProvider);
            var serializer             = new JsonSerializer()
            {
                ContractResolver = contractResolver
            };

            var instance = new HashSetParent();
            var guid     = Guid.NewGuid();

            instance.AddId(new ConcreteComplexId(guid));

            var builder = new StringBuilder();

            using (var textWriter = new StringWriter(builder))
                serializer.Serialize(textWriter, instance);

            var json = builder.ToString();

            using var textReader = new StringReader(json);
            using var reader     = new JsonTextReader(textReader);
            var decrypted = serializer.Deserialize <HashSetParent>(reader);

            var id = decrypted.GetIds().First();

            id.Id.ShouldBe(guid);
        }
Example #4
0
        public void Public_property_is_encrypted_and_decrypted()
        {
            var dataProtectionProvider = Helpers.GetTestDataProtectionProvider(ApplicationName);
            var contractResolver       = new EncryptedContractResolver(dataProtectionProvider);
            var serializer             = new JsonSerializer()
            {
                ContractResolver = contractResolver
            };

            var myInt    = 75;
            var instance = new FooIntPublic {
                MyInt = myInt
            };

            var builder = new StringBuilder();

            using (var textWriter = new StringWriter(builder))
                serializer.Serialize(textWriter, instance);

            var json = builder.ToString();

            json.ShouldNotBe(JsonConvert.SerializeObject(instance));

            using var textReader = new StringReader(json);
            using var reader     = new JsonTextReader(textReader);
            var decrypted = serializer.Deserialize <FooIntPublic>(reader);

            decrypted.MyInt.ShouldBe(myInt);
        }
        public void Internal_properties_are_encrypted_and_decrypted()
        {
            var dataProtectionProvider = Helpers.GetTestDataProtectionProvider(ApplicationName);
            var contractResolver       = new EncryptedContractResolver(dataProtectionProvider);
            var serializer             = new JsonSerializer()
            {
                ContractResolver = contractResolver
            };

            var instance = new FooBoolInternalProperty {
                MyBool = true
            };

            var builder = new StringBuilder();

            using (var textWriter = new StringWriter(builder))
                serializer.Serialize(textWriter, instance);

            var json = builder.ToString();

            json.ShouldNotBe("{\"MyBool\":true}");
            json.ShouldContain("MyBool");

            using var textReader = new StringReader(json);
            using var reader     = new JsonTextReader(textReader);
            var decrypted = serializer.Deserialize <FooBoolInternalProperty>(reader);

            decrypted.MyBool.ShouldBeTrue();
        }
        public void Public_properties_not_decorated_with_EncryptAttribute_should_not_be_encrypted()
        {
            var dataProtectionProvider = Helpers.GetTestDataProtectionProvider(ApplicationName);
            var contractResolver       = new EncryptedContractResolver(dataProtectionProvider);
            var serializer             = new JsonSerializer()
            {
                ContractResolver = contractResolver
            };

            var instance = new FooBoolNoEncrypt {
                MyBool = true
            };

            var builder = new StringBuilder();

            using (var textWriter = new StringWriter(builder))
                serializer.Serialize(textWriter, instance);

            var json = builder.ToString();

            json.ShouldBe("{\"MyBool\":true}");

            using var textReader = new StringReader(json);
            using var reader     = new JsonTextReader(textReader);
            var decrypted = serializer.Deserialize <FooBoolNoEncrypt>(reader);

            decrypted.MyBool.ShouldBeTrue();
        }
        public void Private_fields_are_encrypted_and_decrypted()
        {
            var dataProtectionProvider = Helpers.GetTestDataProtectionProvider(ApplicationName);
            var contractResolver       = new EncryptedContractResolver(dataProtectionProvider);
            var serializer             = new JsonSerializer()
            {
                ContractResolver = contractResolver
            };

            var myBytes  = new byte[] { 5, 6, 7 };
            var instance = new FooByteArrayPrivate(myBytes);

            var builder = new StringBuilder();

            using (var textWriter = new StringWriter(builder))
                serializer.Serialize(textWriter, instance);

            var json = builder.ToString();

            json.ShouldNotBe("{\"MyByte\":[5,6,7]}");

            using var textReader = new StringReader(json);
            using var reader     = new JsonTextReader(textReader);
            var decrypted = serializer.Deserialize <FooByteArrayPrivate>(reader);

            decrypted.GetMyBytes().ShouldBe(myBytes);
        }
        public void Public_properties_are_encrypted_and_decrypted()
        {
            var dataProtectionProvider = Helpers.GetTestDataProtectionProvider(ApplicationName);
            var contractResolver       = new EncryptedContractResolver(dataProtectionProvider);
            var serializer             = new JsonSerializer()
            {
                ContractResolver = contractResolver
            };

            var instance = new FooBytePublic {
                MyByte = 5
            };

            var builder = new StringBuilder();

            using (var textWriter = new StringWriter(builder))
                serializer.Serialize(textWriter, instance);

            var json = builder.ToString();

            json.ShouldNotBe("{\"MyByte\":5}");

            using var textReader = new StringReader(json);
            using var reader     = new JsonTextReader(textReader);
            var decrypted = serializer.Deserialize <FooBytePublic>(reader);

            decrypted.MyByte.ShouldBe((byte)5);
        }
Example #9
0
        public void Single_level_nested_objects()
        {
            var dataProtectionProvider = Helpers.GetTestDataProtectionProvider(nameof(NestedObjectTests));
            var contractResolver       = new EncryptedContractResolver(dataProtectionProvider);
            var serializer             = new JsonSerializer()
            {
                ContractResolver = contractResolver
            };

            var instance = new Parent
            {
                EncryptedString = "this should be encrypted",
                FullChild       = new FullChild
                {
                    MyInt    = 37,
                    MyString = "full child string"
                },
                PartialChild = new PartialChild
                {
                    MyInt    = 38,
                    MyString = "partial child string"
                }
            };

            var builder = new StringBuilder();

            using (var textWriter = new StringWriter(builder))
                serializer.Serialize(textWriter, instance);

            var json    = builder.ToString();
            var jObject = JObject.Parse(json);


            // make sure the string was encrypted
            jObject.Value <string>(nameof(Parent.EncryptedString)).ShouldNotBe(instance.EncryptedString);

            // This should throw because we shouldn't be able to convert the FullChild since its
            // 'MyInt' is an encrypted string
            Should.Throw <Exception>(() => jObject.GetValue(nameof(FullChild)).ToObject <FullChild>());

            // This should NOT throw because the entire FullChild is an encrypted string
            jObject.Value <string>(nameof(FullChild));

            // This should be the same since we aren't encrypting the 'MyInt' of PartialChild
            var partialInt = jObject.Property(nameof(PartialChild)).Values().Cast <JProperty>().First(v => v.Name == nameof(PartialChild.MyInt));

            partialInt.ToObject <int>().ShouldBe(instance.PartialChild.MyInt);

            // This should not be the same since we ARE encrypting the 'MyString' of PartialChild
            var partialString = jObject.Property(nameof(PartialChild)).Values().Cast <JProperty>().First(v => v.Name == nameof(PartialChild.MyString));

            partialString.ToObject <string>().ShouldNotBe(instance.PartialChild.MyString);


            using var textReader = new StringReader(json);
            using var reader     = new JsonTextReader(textReader);
            var decrypted = serializer.Deserialize <Parent>(reader);

            decrypted.EncryptedString.ShouldBe(instance.EncryptedString);
            decrypted.FullChild.MyInt.ShouldBe(instance.FullChild.MyInt);
            decrypted.FullChild.MyString.ShouldBe(instance.FullChild.MyString);
        }