public void EncryptString()
        {
            const string KEY_ID      = "bc436485-5092-42b8-92a3-0aa8b93536dc";
            var          mockContext = new Mock <IOutgoingLogicalMessageContext>();
            var          headers     = new Dictionary <string, string>
            {
                { EncryptionHeaders.RijndaelKeyIdentifier, KEY_ID }
            };

            mockContext.SetupGet(p => p.Headers)
            .Returns(headers);

            const string ENCRYPT_VALUE   = "This is a test value";
            const string FAKE_ENCRYPTION = "FAKEENCRYPTEDVALUE";

            var mockClient = new Mock <IAmazonKeyManagementService>();

            mockClient.Setup(m => m.EncryptAsync(It.IsAny <EncryptRequest>(), default))
            .ReturnsAsync(new EncryptResponse {
                CiphertextBlob = new System.IO.MemoryStream(Encoding.UTF8.GetBytes(FAKE_ENCRYPTION)),
                KeyId          = KEY_ID
            });

            var sut = new KMSEncryptionService(KEY_ID, mockClient.Object);

            var value = sut.Encrypt(ENCRYPT_VALUE, mockContext.Object);

            value.Should().NotBeNull();
            value.EncryptedBase64Value.Should().NotBeNullOrEmpty();

            var decoded = Encoding.UTF8.GetString(Convert.FromBase64String(value.EncryptedBase64Value));

            decoded.Should().BeEquivalentTo(FAKE_ENCRYPTION);
        }
        public void DecryptString()
        {
            const string KEY_ID      = "bc436485-5092-42b8-92a3-0aa8b93536dc";
            var          mockContext = new Mock <IIncomingLogicalMessageContext>();
            var          headers     = new Dictionary <string, string>
            {
                { EncryptionHeaders.RijndaelKeyIdentifier, KEY_ID }
            };

            mockContext.SetupGet(p => p.Headers)
            .Returns(headers);

            const string ENCRYPT_VALUE   = "This is a test value";
            const string FAKE_ENCRYPTION = "FAKEENCRYPTEDVALUE";
            var          base64Encrypted = Convert.ToBase64String(
                new System.IO.MemoryStream(Encoding.UTF8.GetBytes(FAKE_ENCRYPTION)).ToArray());

            var mockClient = new Mock <IAmazonKeyManagementService>();

            mockClient.Setup(m => m.DecryptAsync(It.IsAny <DecryptRequest>(), default))
            .ReturnsAsync(new DecryptResponse
            {
                Plaintext = new System.IO.MemoryStream(Encoding.UTF8.GetBytes(ENCRYPT_VALUE)),
                KeyId     = KEY_ID
            });

            var encryptedValue = new EncryptedValue
            {
                EncryptedBase64Value = base64Encrypted
            };

            var sut = new KMSEncryptionService(KEY_ID, mockClient.Object);

            var decrypted = sut.Decrypt(encryptedValue, mockContext.Object);

            decrypted.Should().NotBeNull();
            decrypted.Should().BeEquivalentTo(ENCRYPT_VALUE);
        }