Example #1
0
		public async Task CrossSecurityLevelAddressBookExchange() {
			var lowLevelCrypto = new DesktopCryptoProvider(new Level1());
			var lowLevelEndpoint = Valid.GenerateOwnEndpoint(lowLevelCrypto);

			var highLevelCrypto = new DesktopCryptoProvider(new Level2());
			var highLevelEndpoint = Valid.GenerateOwnEndpoint(highLevelCrypto);

			await this.TestSendAndReceiveAsync(lowLevelCrypto, lowLevelEndpoint, highLevelCrypto, highLevelEndpoint);
			await this.TestSendAndReceiveAsync(highLevelCrypto, highLevelEndpoint, lowLevelCrypto, lowLevelEndpoint);
		}
        public void ExtractEndpointDetectsTampering()
        {
            var ownContact = Valid.GenerateOwnEndpoint(this.desktopCryptoProvider);
            var entry      = ownContact.CreateAddressBookEntry(this.desktopCryptoProvider);

            var untamperedEndpoint = entry.SerializedEndpoint.CopyBuffer();

            for (int i = 0; i < 100; i++)
            {
                TestUtilities.ApplyFuzzing(entry.SerializedEndpoint, 1);
                Assert.Throws <BadAddressBookEntryException>(() => entry.ExtractEndpoint(this.desktopCryptoProvider));
                untamperedEndpoint.CopyBuffer(entry.SerializedEndpoint);
            }
        }
Example #3
0
        public async Task CrossSecurityLevelAddressBookExchange()
        {
            var lowLevelCrypto   = new CryptoSettings(SecurityLevel.Minimum);
            var lowLevelEndpoint = Valid.GenerateOwnEndpoint(lowLevelCrypto);

            var highLevelCrypto = new CryptoSettings(SecurityLevel.Minimum)
            {
                AsymmetricKeySize = 2048
            };
            var highLevelEndpoint = Valid.GenerateOwnEndpoint(highLevelCrypto);

            await this.TestSendAndReceiveAsync(lowLevelCrypto, lowLevelEndpoint, highLevelCrypto, highLevelEndpoint);

            await this.TestSendAndReceiveAsync(highLevelCrypto, highLevelEndpoint, lowLevelCrypto, lowLevelEndpoint);
        }
Example #4
0
        public void PostAndReceiveAsync()
        {
            Task.Run(async delegate {
                var sender   = Valid.GenerateOwnEndpoint();
                var receiver = Valid.GenerateOwnEndpoint();

                var cloudStorage   = new Mocks.CloudBlobStorageProviderMock();
                var inboxMock      = new Mocks.InboxHttpHandlerMock(new[] { receiver.PublicEndpoint });
                var cryptoProvider = new Mocks.MockCryptoProvider();

                var sentMessage = Valid.Message;
                await this.SendMessageAsync(cloudStorage, inboxMock, cryptoProvider, sender, receiver.PublicEndpoint, sentMessage);
                var messages = await this.ReceiveMessageAsync(cloudStorage, inboxMock, new Mocks.MockCryptoProvider(), receiver);

                Assert.That(messages.Count, Is.EqualTo(1));
                var receivedMessage = messages.Single();
                Assert.That(receivedMessage.Payload.ContentType, Is.EqualTo(sentMessage.ContentType));
                Assert.That(receivedMessage.Payload.Content, Is.EqualTo(sentMessage.Content));
            }).GetAwaiter().GetResult();
        }
Example #5
0
        public void PayloadTamperingTests()
        {
            Task.Run(async delegate {
                var sender   = Valid.GenerateOwnEndpoint(this.desktopCryptoProvider);
                var receiver = Valid.GenerateOwnEndpoint(this.desktopCryptoProvider);

                for (int i = 0; i < 100; i++)
                {
                    var cloudStorage = new Mocks.CloudBlobStorageProviderMock();
                    var inboxMock    = new Mocks.InboxHttpHandlerMock(new[] { receiver.PublicEndpoint });

                    var sentMessage = Valid.Message;
                    await this.SendMessageAsync(cloudStorage, inboxMock, this.desktopCryptoProvider, sender, receiver.PublicEndpoint, sentMessage);

                    // Tamper with the payload itself.
                    TestUtilities.ApplyFuzzing(cloudStorage.Blobs.Single().Value, 1);

                    Assert.Throws <InvalidMessageException>(() => this.ReceiveMessageAsync(cloudStorage, inboxMock, this.desktopCryptoProvider, receiver).GetAwaiter().GetResult());
                }
            }).GetAwaiter().GetResult();
        }
Example #6
0
        public void PayloadReferenceTamperingTests()
        {
            Task.Run(async delegate {
                var sender   = Valid.GenerateOwnEndpoint(this.desktopCryptoProvider);
                var receiver = Valid.GenerateOwnEndpoint(this.desktopCryptoProvider);

                for (int i = 0; i < 100; i++)
                {
                    var cloudStorage = new Mocks.CloudBlobStorageProviderMock();
                    var inboxMock    = new Mocks.InboxHttpHandlerMock(new[] { receiver.PublicEndpoint });

                    var sentMessage = Valid.Message;
                    await this.SendMessageAsync(cloudStorage, inboxMock, this.desktopCryptoProvider, sender, receiver.PublicEndpoint, sentMessage);

                    // Tamper with the payload reference.
                    TestUtilities.ApplyFuzzing(inboxMock.Inboxes[receiver.PublicEndpoint][0].Item2, 1);

                    var receivedMessages =
                        await this.ReceiveMessageAsync(cloudStorage, inboxMock, this.desktopCryptoProvider, receiver, expectMessage: false);
                    Assert.AreEqual(0, receivedMessages.Count);
                }
            }).GetAwaiter().GetResult();
        }