internal override string TransformResult(RedisValue value)
        {
            string encoded = (string)value;

            byte[] decoded   = Convert.FromBase64String(encoded);
            byte[] decrypted = EncryptionHelpers.DecryptDataAsync(decoded, _encryptionKey).ConfigureAwait(false).GetAwaiter().GetResult();
            return(Encoding.UTF8.GetString(decrypted));
        }
        public async Task DecryptDataAsync_WithValidData_ReturnsEncryptedArray()
        {
            byte[] key       = EncryptionHelpers.CreateEncryptionKey();
            byte[] data      = new byte[128];
            byte[] encrypted = await EncryptionHelpers.EncryptDataAsync(data, key);

            byte[] result = await EncryptionHelpers.DecryptDataAsync(encrypted, key);

            Assert.Equal(data, result);
        }
 internal override void ReceiveHandler(RedisChannel channel, RedisValue value)
 {
     try
     {
         string encoded   = (string)value;
         byte[] decoded   = Convert.FromBase64String(encoded);
         byte[] decrypted = EncryptionHelpers.DecryptDataAsync(decoded, _encryptionKey).ConfigureAwait(false).GetAwaiter().GetResult();
         string data      = Encoding.UTF8.GetString(decrypted);
         base.ReceiveHandler(channel, data);
     }
     catch (Exception ex)
     {
         Log.Logger.Error(ex, "Failed decrypting on Channel {Channel}: {Value}", _channel, value);
     }
 }
Esempio n. 4
0
        internal override async Task <EventMessage> GetEventMessageAsync(EventData eventData)
        {
            EventMessage decrypted;

            byte[] decryptedData = await EncryptionHelpers.DecryptDataAsync(eventData.Body.Array, _encryptionKey).ConfigureAwait(false);

            using (EventData data = new EventData(decryptedData))
            {
                data.SystemProperties = eventData.SystemProperties;
                foreach (KeyValuePair <string, object> kv in eventData.Properties)
                {
                    data.Properties.Add(kv);
                }
                decrypted = new EventMessage(data);
            }
            return(decrypted);
        }
        public async Task EncryptingAndDecrypting_WithReadOnlyMemory_Works()
        {
            byte[] randBytes = new byte[512];
            Random rnd       = new Random();

            rnd.NextBytes(randBytes);
            ReadOnlyMemory <byte> data = new ReadOnlyMemory <byte>(randBytes);

            byte[] key       = EncryptionHelpers.CreateEncryptionKey();
            byte[] encrypted = await EncryptionHelpers.EncryptDataAsync(data, key);

            ReadOnlyMemory <byte> encryptedData = new ReadOnlyMemory <byte>(encrypted);

            byte[] decrypted = await EncryptionHelpers.DecryptDataAsync(encrypted, key);

            Assert.Equal(randBytes, decrypted);
        }
        protected override T DeserializeObject <T>(string value)
        {
            try
            {
                byte[] encrypted = Convert.FromBase64String(value);
                byte[] decrypted = EncryptionHelpers.DecryptDataAsync(encrypted, _encryptionKey).ConfigureAwait(false).GetAwaiter().GetResult();
                string strdata   = Encoding.UTF8.GetString(decrypted);
                return(base.DeserializeObject <T>(strdata));
            }
            catch (Exception ex)
            {
                Log.Logger.Error(ex, "Failed decrypting {Value}", value);

#nullable disable // Nullable doesn't work with generics and default
                return(default(T));

#nullable enable
            }
        protected override async Task OnMessageReceivedAsync(RedisValue message)
        {
            try
            {
                // Decrypt the message then push to the base function for processing
                string       decryptedMsg;
                QueueMessage msg            = base.DeserializeObject <QueueMessage>(message);
                byte[]       encryptedBytes = Convert.FromBase64String(msg.Content);
                byte[]       decryptedBytes = await EncryptionHelpers.DecryptDataAsync(encryptedBytes, _encryptionKey).ConfigureAwait(false);

                string decrypted = Encoding.UTF8.GetString(decryptedBytes);
                msg.Content  = decrypted;
                decryptedMsg = base.SerializeObject(msg);
                await base.OnMessageReceivedAsync(decryptedMsg);
            }
            catch (Exception ex)
            {
                Log.Logger.Error(ex, "Failed decrypting on Queue {Name}: {Value}", _queueName, message);
            }
        }
Esempio n. 8
0
        /// <inheritdoc />
        internal override async Task <List <EventMessage> > ProcessMessagesAsync(StreamEntry[] entries)
        {
            List <EventMessage> messages = await base.ProcessMessagesAsync(entries);

            foreach (EventMessage msg in messages)
            {
                try
                {
                    string?content = msg.Content as string;
                    if (content != null)
                    {
                        byte[] encrypted      = Convert.FromBase64String(content);
                        byte[] plaintextBytes = await EncryptionHelpers.DecryptDataAsync(encrypted, _encryptionKey).ConfigureAwait(false);

                        string plaintext = Encoding.UTF8.GetString(plaintextBytes);
                        msg.Content = plaintext;
                    }
                    else
                    {
                        msg.Content = string.Empty;
                    }
                }
                catch (Exception ex)
                {
                    Log.Logger.Error(
                        ex,
                        "Failed decrypting on Stream {Name} Consumer Group {Group} Consumer {Consumer} at {Offset}-{Sequence}: {Value}",
                        _streamName,
                        _consumerGroup,
                        _consumerName,
                        msg.Offset,
                        msg.SequenceNumber,
                        msg.Content?.ToString() ?? string.Empty);
                }
            }

            return(messages);
        }
        /// <inheritdoc />
        protected override async Task <QueueMessage> GetQueueMessageAsync(ReadOnlyMemory <byte> body, IBasicProperties properties, bool redelivered, ulong messageId)
        {
            byte[] decrypted = await EncryptionHelpers.DecryptDataAsync(body, _encryptionKey);

            return(new QueueMessage(properties, decrypted, redelivered, messageId));
        }
 public async Task DecryptDataAsync_WithEmptyEncryptionKey_Throws()
 {
     byte[] data = EncryptionHelpers.CreateEncryptionKey();
     await Assert.ThrowsAsync <ArgumentOutOfRangeException>(async() => await EncryptionHelpers.DecryptDataAsync(data, Array.Empty <byte>()));
 }
 public async Task DecryptDataAsync_WithNullEncryptionKey_Throws()
 {
     byte[] data = EncryptionHelpers.CreateEncryptionKey();
     await Assert.ThrowsAsync <ArgumentNullException>(async() => await EncryptionHelpers.DecryptDataAsync(data, null));
 }