public async Task InitializeAsync(string passphrase, string salt)
        {
            await _serviceLock.WaitAsync().ConfigureAwait(false);

            try
            {
                if (!Initialized)
                {
                    _hashKey = await ArgonHash
                               .GetHashKeyAsync(passphrase, salt, Constants.EncryptionKeySize)
                               .ConfigureAwait(false);

                    await ChannelPool
                    .InitializeAsync()
                    .ConfigureAwait(false);

                    await AutoPublisher
                    .StartAsync(_hashKey)
                    .ConfigureAwait(false);

                    await FinishSettingUpConsumersAsync().ConfigureAwait(false);

                    Initialized = true;
                }
            }
            finally
            { _serviceLock.Release(); }
        }
Example #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);
        }
Example #3
0
        public async Task ArgonHashTest()
        {
            var hashKey = await ArgonHash
                          .GetHashKeyAsync(Passphrase, Salt, 32)
                          .ConfigureAwait(false);

            Assert.True(hashKey.Length == 32);
        }
        public ArgonAesEncryptionProvider(string passphrase, string salt, EncryptionMethod method, EncryptionOptions options = null)
        {
            Guard.AgainstNull(passphrase, nameof(passphrase));
            Guard.AgainstNull(salt, nameof(salt));

            _method       = method;
            _options      = options;
            _argonHashKey = ArgonHash.GetHashKeyAsync(passphrase, salt, Encryption.Constants.Aes256.KeySize, _options?.HashOptions).GetAwaiter().GetResult();
        }
Example #5
0
        public async Task CheckFileHashAsyncTest()
        {
            // Arrange
            var handler = new ArgonHash(degrees, argonIterations, memorySpace, saltLength, hashLength);

            // Act
            bool matches = await handler.CheckFileHashAsync(filename, fileHash);

            // Assert
            Assert.IsTrue(matches);
        }
Example #6
0
        public async Task CheckHashFailTest()
        {
            // Arrange
            var handler = new ArgonHash(degrees, argonIterations, memorySpace, saltLength, hashLength);

            // Act
            bool matches = await handler.CheckHashAsync(sample, failHash);

            // Assert
            Assert.IsFalse(matches);
        }
Example #7
0
        public async Task GetHashAsyncTest()
        {
            // Arrange
            var handler = new ArgonHash(degrees, argonIterations, memorySpace, saltLength, hashLength);

            // Act
            string hash = await handler.GetHashAsync(sample);

            // Assert
            Assert.IsTrue(hash.Length > 0);
        }
Example #8
0
        public void Setup()
        {
            XorShift = new XorShift(true);
            Payload1 = XorShift.GetRandomBytes(1024);
            Payload2 = XorShift.GetRandomBytes(2048);
            Payload3 = XorShift.GetRandomBytes(4096);
            Payload4 = XorShift.GetRandomBytes(8192);

            HashKey = ArgonHash
                      .GetHashKeyAsync(Passphrase, Salt, KeySize)
                      .GetAwaiter()
                      .GetResult();
        }
Example #9
0
        public async Task CheckHashFailStreamTest()
        {
            // Arrange
            var handler = new ArgonHash(degrees, argonIterations, memorySpace, saltLength, hashLength);

            using var stream = new MemoryStream(Encoding.UTF8.GetBytes(sample));

            // Act
            bool matches = await handler.CheckHashAsync(stream, failHash);

            // Assert
            Assert.IsFalse(matches);
        }
Example #10
0
        public async Task GetHashAsyncStreamTest()
        {
            // Arrange
            var handler = new ArgonHash(degrees, argonIterations, memorySpace, saltLength, hashLength);

            using var stream = new MemoryStream(Encoding.UTF8.GetBytes(sample));

            // Act
            string hash = await handler.GetHashAsync(stream);

            // Assert
            Assert.IsTrue(hash.Length > 0);
        }
Example #11
0
        public async Task GetAndCheckHashTest()
        {
            // Arrange
            var handler = new ArgonHash(degrees, argonIterations, memorySpace, saltLength, hashLength);

            // Act
            string hash = await handler.GetHashAsync(sample);

            bool matches = await handler.CheckHashAsync(sample, hash);

            // Assert
            Assert.IsTrue(matches);
        }
Example #12
0
        public async Task GetAndCheckHashStreamTest()
        {
            // Arrange
            var handler = new ArgonHash(degrees, argonIterations, memorySpace, saltLength, hashLength);

            using var stream = new MemoryStream(Encoding.UTF8.GetBytes(sample));

            // Act
            string hash = await handler.GetHashAsync(stream);

            stream.Position = 0;
            bool matches = await handler.CheckHashAsync(stream, hash);

            // Assert
            Assert.IsTrue(matches);
        }
Example #13
0
        /// <summary>
        /// Builds out a RabbitService with instantiated dependencies based on config settings.
        /// </summary>
        /// <param name="config"></param>
        /// <param name="passphrase"></param>
        /// <param name="salt"></param>
        /// <param name="loggerFactory"></param>
        /// <param name="processReceiptAsync"></param>
        public RabbitService(Config config, string passphrase, string salt, ILoggerFactory loggerFactory = null, Func <PublishReceipt, ValueTask> processReceiptAsync = null)
        {
            LogHelper.LoggerFactory = loggerFactory;

            Config      = config;
            ChannelPool = new ChannelPool(Config);

            if (!string.IsNullOrWhiteSpace(passphrase))
            {
                _hashKey = ArgonHash
                           .GetHashKeyAsync(passphrase, salt, Utils.Constants.EncryptionKeySize)
                           .GetAwaiter().GetResult();
            }

            Publisher = new Publisher(ChannelPool, _hashKey);
            Topologer = new Topologer(ChannelPool);

            BuildConsumers();

            StartAsync(processReceiptAsync).GetAwaiter().GetResult();
        }
Example #14
0
        public async Task EncryptDecryptTest()
        {
            var data = new byte[] { 0xFF, 0x00, 0xAA, 0xFF, 0x00, 0x00, 0xFF, 0xAA, 0x00, 0xFF, 0x00, 0xFF };

            var hashKey = await ArgonHash
                          .GetHashKeyAsync(Passphrase, Salt, 32)
                          .ConfigureAwait(false);

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

            var encryptedData = AesEncrypt.Aes256Encrypt(data, hashKey);

            _output.WriteLine($"Encrypted: {Encoding.UTF8.GetString(encryptedData)}");

            var decryptedData = AesEncrypt.Aes256Decrypt(encryptedData, hashKey);

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

            Assert.Equal(data, decryptedData);
        }
Example #15
0
 public async Task CreateArgonHashKeyAsync()
 {
     var hashKey = await ArgonHash
                   .GetHashKeyAsync(Passphrase, Salt, KeySize)
                   .ConfigureAwait(false);
 }