public void CanDecryptCurrentStringValueAndAccessDecryptedNodes(string plainTextJson, params JsonNodeType[] expectedNodeTypes)
        {
            var cipherTextJson = @"""" + Convert.ToBase64String(Encoding.UTF8.GetBytes(plainTextJson)) + @"""";

            var info = new JsonSerializeOperationInfo
            {
                EncryptionMechanism = new Base64EncryptionMechanism(),
            };

            var reader = new JsonReader(new StringReader(cipherTextJson), info);
            Assert.That(reader.NodeType, Is.EqualTo(JsonNodeType.None));

            reader.Read("");
            Assert.That(reader.NodeType, Is.EqualTo(JsonNodeType.String));

            reader.SetDecryptReads(true, "");

            foreach (var expectedNodeType in expectedNodeTypes)
            {
                Assert.That(reader.NodeType, Is.EqualTo(expectedNodeType));
                reader.Read("");
            }

            reader.SetDecryptReads(false, "");

            Assert.That(reader.NodeType, Is.EqualTo(JsonNodeType.EndOfString));
        }
        public void ThrowsExceptionWhenSettingDecryptReadsToFalseBeforeEncryptedDataIsCompletelyConsumed()
        {
            var cipherTextJson = @"""" + Convert.ToBase64String(Encoding.UTF8.GetBytes(@"{""foo"":""bar""}")) + @"""";

            var info = new JsonSerializeOperationInfo
            {
                EncryptionMechanism = new Base64EncryptionMechanism(),
            };

            var reader = new JsonReader(new StringReader(cipherTextJson), info);

            Assert.That(reader.NodeType, Is.EqualTo(JsonNodeType.None));

            reader.Read();
            Assert.That(reader.NodeType, Is.EqualTo(JsonNodeType.String));

            reader.DecryptReads = true;

            Assert.That(reader.NodeType, Is.EqualTo(JsonNodeType.OpenObject));

            reader.Read();
            Assert.That(reader.NodeType, Is.EqualTo(JsonNodeType.String));

            Assert.That(() => reader.DecryptReads = false, Throws.InvalidOperationException);
        }
        public void CanDecryptCurrentStringValueAndAccessDecryptedNodes(string plainTextJson, params JsonNodeType[] expectedNodeTypes)
        {
            var cipherTextJson = @"""" + Convert.ToBase64String(Encoding.UTF8.GetBytes(plainTextJson)) + @"""";

            var info = new JsonSerializeOperationInfo
            {
                EncryptionMechanism = new Base64EncryptionMechanism(),
            };

            var reader = new JsonReader(new StringReader(cipherTextJson), info);

            Assert.That(reader.NodeType, Is.EqualTo(JsonNodeType.None));

            reader.Read();
            Assert.That(reader.NodeType, Is.EqualTo(JsonNodeType.String));

            reader.DecryptReads = true;

            foreach (var expectedNodeType in expectedNodeTypes)
            {
                Assert.That(reader.NodeType, Is.EqualTo(expectedNodeType));
                reader.Read();
            }

            reader.DecryptReads = false;

            Assert.That(reader.NodeType, Is.EqualTo(JsonNodeType.None));
        }
        public void ThrowsExceptionWhenSettingDecryptReadsToFalseBeforeEncryptedDataIsCompletelyConsumed()
        {
            var cipherTextJson = @"""" + Convert.ToBase64String(Encoding.UTF8.GetBytes(@"{""foo"":""bar""}")) + @"""";

            var info = new JsonSerializeOperationInfo
            {
                EncryptionMechanism = new Base64EncryptionMechanism(),
            };

            var reader = new JsonReader(new StringReader(cipherTextJson), info);
            Assert.That(reader.NodeType, Is.EqualTo(JsonNodeType.None));

            reader.Read();
            Assert.That(reader.NodeType, Is.EqualTo(JsonNodeType.String));

            reader.DecryptReads = true;

            Assert.That(reader.NodeType, Is.EqualTo(JsonNodeType.OpenObject));

            reader.Read();
            Assert.That(reader.NodeType, Is.EqualTo(JsonNodeType.String));

            Assert.That(() => reader.DecryptReads = false, Throws.InvalidOperationException);
        }