Esempio n. 1
0
        private async Task ProcessDeliveriesAsync(ChannelReader <Letter> channelReader)
        {
            while (await channelReader.WaitToReadAsync().ConfigureAwait(false))
            {
                while (channelReader.TryRead(out var letter))
                {
                    if (letter == null)
                    {
                        continue;
                    }

                    if (Compress)
                    {
                        letter.Body = await Gzip.CompressAsync(letter.Body).ConfigureAwait(false);

                        letter.LetterMetadata.Compressed = Compress;
                    }

                    if (Encrypt && (_hashKey != null || _hashKey.Length == 0))
                    {
                        letter.Body = AesEncrypt.Encrypt(letter.Body, _hashKey);
                        letter.LetterMetadata.Encrypted = Encrypt;
                    }

                    _logger.LogDebug(LogMessages.AutoPublisher.LetterPublished, letter.LetterId, letter.LetterMetadata?.Id);

                    await Publisher
                    .PublishAsync(letter, CreatePublishReceipts, _withHeaders)
                    .ConfigureAwait(false);
                }
            }
        }
Esempio n. 2
0
        public async Task ComcryptDecomcryptTest()
        {
            var message = new Message {
                StringMessage = $"Sensitive ReceivedLetter 0", MessageId = 0
            };
            var data = JsonSerializer.SerializeToUtf8Bytes(message);

            var hashKey = await ArgonHash
                          .GetHashKeyAsync(Passphrase, Salt, HouseofCat.Encryption.Constants.Aes256.KeySize)
                          .ConfigureAwait(false);

            _output.WriteLine(Encoding.UTF8.GetString(hashKey));
            _output.WriteLine($"HashKey: {Encoding.UTF8.GetString(hashKey)}");

            // Comcrypt
            var payload = await Gzip.CompressAsync(data);

            var encryptedPayload = AesEncrypt.Aes256Encrypt(payload, hashKey);

            // Decomcrypt
            var decryptedData = AesEncrypt.Aes256Decrypt(encryptedPayload, hashKey);

            Assert.NotNull(decryptedData);

            var decompressed = await Gzip.DecompressAsync(decryptedData);

            JsonSerializer.SerializeToUtf8Bytes(decompressed);
            _output.WriteLine($"Data: {Encoding.UTF8.GetString(data)}");
            _output.WriteLine($"Decrypted: {Encoding.UTF8.GetString(decryptedData)}");

            Assert.Equal(data, decompressed);
        }
Esempio n. 3
0
        private async Task ProcessDeliveriesAsync(ChannelReader <Letter> channelReader)
        {
            while (await channelReader.WaitToReadAsync().ConfigureAwait(false))
            {
                while (channelReader.TryRead(out var letter))
                {
                    if (letter == null)
                    {
                        continue;
                    }

                    if (_compress)
                    {
                        letter.Body = await Gzip.CompressAsync(letter.Body).ConfigureAwait(false);

                        letter.LetterMetadata.Compressed = _compress;
                        letter.LetterMetadata.CustomFields[Utils.Constants.HeaderForEncrypt] = Utils.Constants.HeaderValueForGzipCompress;
                    }

                    if (_encrypt)
                    {
                        letter.Body = AesEncrypt.Encrypt(letter.Body, _hashKey);
                        letter.LetterMetadata.Encrypted = _encrypt;
                        letter.LetterMetadata.CustomFields[Utils.Constants.HeaderForEncrypt] = Utils.Constants.HeaderValueForArgonAesEncrypt;
                    }

                    _logger.LogDebug(LogMessages.AutoPublisher.LetterPublished, letter.LetterId, letter.LetterMetadata?.Id);

                    await PublishAsync(letter, _createPublishReceipts, _withHeaders)
                    .ConfigureAwait(false);
                }
            }
        }
Esempio n. 4
0
        public async Task <bool> CompressAsync(Letter letter)
        {
            if (letter.LetterMetadata.Encrypted)
            {
                return(false);
            }

            if (!letter.LetterMetadata.Compressed)
            {
                try
                {
                    letter.Body = await Gzip.CompressAsync(letter.Body).ConfigureAwait(false);

                    letter.LetterMetadata.Compressed = true;
                }
                catch { }
            }

            return(letter.LetterMetadata.Compressed);
        }
Esempio n. 5
0
        // Returns Success
        public async Task <bool> CompressAsync(Letter letter)
        {
            if (letter.LetterMetadata.Encrypted)
            {
                return(false);
            }                 // Don't compress after encryption.

            if (!letter.LetterMetadata.Compressed)
            {
                try
                {
                    letter.Body = await Gzip.CompressAsync(letter.Body).ConfigureAwait(false);

                    letter.LetterMetadata.Compressed = true;
                    letter.LetterMetadata.CustomFields[Utils.Constants.HeaderForCompress] = Utils.Constants.HeaderValueForGzipCompress;
                }
                catch { return(false); }
            }

            return(true);
        }
Esempio n. 6
0
        public async Task ComcryptAsync(Letter letter)
        {
            if (letter.LetterMetadata.Compressed)
            {
                try
                {
                    letter.Body = await Gzip.CompressAsync(letter.Body).ConfigureAwait(false);

                    letter.LetterMetadata.Compressed = true;
                }
                catch { }
            }

            if (!letter.LetterMetadata.Encrypted && (_hashKey?.Length > 0))
            {
                try
                {
                    letter.Body = AesEncrypt.Encrypt(letter.Body, _hashKey);
                    letter.LetterMetadata.Encrypted = true;
                }
                catch { }
            }
        }