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); } } }
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); }
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); } } }
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); }
// 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); }
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 { } } }