public void RoundTrip()
    {
        var factory    = new EncryptionFactory();
        var serializer = new JsonSerializer
        {
            ContractResolver = factory.GetContractResolver()
        };

        using (var algorithm = CryptoBuilder.Build())
        {
            string serialized;
            using (factory.GetEncryptSession(algorithm))
            {
                var instance = new ClassToSerialize
                {
                    Property1 = "Property1Value",
                    Property2 = "Property2Value"
                };
                serialized = serializer.Serialize(instance);
            }
            using (factory.GetDecryptSession(algorithm))
            {
                var result = serializer.Deserialize <ClassToSerialize>(serialized);
                ObjectApprover.VerifyWithJson(result);
            }
        }
    }
    public async Task Works()
    {
        var target = new ClassWithString
        {
            Property = "Foo"
        };

        using var factory   = new EncryptionFactory();
        using var algorithm = CryptoBuilder.Build();
        var serializer = new JsonSerializer
        {
            ContractResolver = factory.GetContractResolver()
        };

        string serialized;

        using (factory.GetEncryptSession(algorithm))
        {
            await Task.Delay(1);

            serialized = serializer.Serialize(target);
        }

        using (factory.GetDecryptSession(algorithm))
        {
            await Task.Delay(1);

            var result = serializer.Deserialize <ClassWithString>(serialized);
            Assert.Equal("Foo", result.Property);
        }
    }
    static void Main()
    {
        // per system (periodically rotated)
        var key = Encoding.UTF8.GetBytes("gdDbqRpqdRbTs3mhdZh9qCaDaxJXl+e6");

        // per app domain
        using (var factory = new EncryptionFactory())
        {
            var serializer = new JsonSerializer
            {
                ContractResolver = factory.GetContractResolver()
            };

            // transferred as meta data with the serialized payload
            byte[] initVector;

            string serialized;

            // per serialize session
            using (var algorithm = new RijndaelManaged
            {
                Key = key
            })
            {
                initVector = algorithm.IV;
                using (factory.GetEncryptSession(algorithm))
                {
                    var instance = new ClassToSerialize
                    {
                        Property = "PropertyValue",
                    };
                    var builder = new StringBuilder();
                    using (var writer = new StringWriter(builder))
                    {
                        serializer.Serialize(writer, instance);
                    }
                    serialized = builder.ToString();
                }
            }

            // per deserialize session
            using (var algorithm = new RijndaelManaged
            {
                IV = initVector,
                Key = key
            })
            {
                using (factory.GetDecryptSession(algorithm))
                {
                    using var stringReader = new StringReader(serialized);
                    using var jsonReader   = new JsonTextReader(stringReader);
                    var deserialized = serializer.Deserialize <ClassToSerialize>(jsonReader);
                    Console.WriteLine(deserialized !.Property);
                }
            }
        }
        Console.ReadKey();
    }
Exemple #4
0
    public async Task Invoke(IIncomingPhysicalMessageContext context, Func <IIncomingPhysicalMessageContext, Task> next)
    {
        if (!context.MessageHeaders.ReadKeyAndIv(out var keyId, out var iv))
        {
            await next(context).ConfigureAwait(false);

            return;
        }
        using (factory.GetDecryptSession(stateBuilder(keyId, iv)))
        {
            await next(context).ConfigureAwait(false);
        }
    }
    public void ExampleUsage()
    {
        // per system (periodically rotated)
        var key = Encoding.UTF8.GetBytes("gdDbqRpqdRbTs3mhdZh9qCaDaxJXl+e6");

        // per app domain
        using (var factory = new EncryptionFactory())
        {
            var serializer = new JsonSerializer
            {
                ContractResolver = factory.GetContractResolver()
            };

            // transferred as meta data with the serialized payload
            byte[] initVector;

            string serialized;

            // per serialize session
            using (var algorithm = new RijndaelManaged
            {
                Key = key
            })
            {
                initVector = algorithm.IV;
                using (factory.GetEncryptSession(algorithm))
                {
                    var instance = new ClassToSerialize
                    {
                        Property1 = "Property1Value",
                        Property2 = "Property2Value"
                    };
                    serialized = serializer.Serialize(instance);
                }
            }

            // per deserialize session
            using (var algorithm = new RijndaelManaged
            {
                IV = initVector,
                Key = key
            })
            {
                using (factory.GetDecryptSession(algorithm))
                {
                    var deserialized = serializer.Deserialize <ClassToSerialize>(serialized);
                    ObjectApprover.VerifyWithJson(deserialized);
                }
            }
        }
    }
    public async Task Process(IncomingStepContext context, Func <Task> next)
    {
        var transportMessage = context.Load <TransportMessage>();

        if (!transportMessage.Headers.ReadKeyAndIv(out var keyId, out var iv))
        {
            await next();

            return;
        }
        using (factory.GetDecryptSession(stateBuilder(keyId, iv)))
        {
            await next();
        }
    }
Exemple #7
0
    public static T Run <T>(T instance)
    {
        using (var factory = new EncryptionFactory())
            using (var algorithm = CryptoBuilder.Build())
            {
                var serializer = new JsonSerializer
                {
                    ContractResolver = factory.GetContractResolver()
                };

                string result;
                using (factory.GetEncryptSession(algorithm))
                {
                    result = serializer.Serialize(instance);
                }

                Approvals.Verify(result);
                using (factory.GetDecryptSession(algorithm))
                {
                    return(serializer.Deserialize <T>(result));
                }
            }
    }
Exemple #8
0
    public static async Task <T> Run <T>(T instance, [CallerFilePath] string sourceFile = "")
    {
        using var factory   = new EncryptionFactory();
        using var algorithm = CryptoBuilder.Build();
        var serializer = new JsonSerializer
        {
            ContractResolver = factory.GetContractResolver()
        };

        string result;

        using (factory.GetEncryptSession(algorithm))
        {
            result = serializer.Serialize(instance);
        }

        await Verify(result, null, sourceFile);

        using (factory.GetDecryptSession(algorithm))
        {
            return(serializer.Deserialize <T>(result));
        }
    }
Exemple #9
0
        public T DeserializeDecrypt <T>(string key, byte[] initVector, string value)
        {
            var byteArrayKey = CryptoService.CreateByteArrayKey(key);


            var serializer = new JsonSerializer
            {
                ContractResolver = _encryptionFactory.GetContractResolver()
            };

            using (var algorithm = new AesManaged
            {
                Key = byteArrayKey,
                IV = initVector
            })
            {
                using (_encryptionFactory.GetDecryptSession(algorithm))
                    using (var stringReader = new StringReader(value))
                        using (var jsonReader = new JsonTextReader(stringReader))
                        {
                            return(serializer.Deserialize <T>(jsonReader));
                        }
            }
        }