コード例 #1
0
        public void TestHashing()
        {
            var mask = new CurlMask();
            var hash = mask.Hash(new TryteString("L9DRGFPYDMGVLH9ZCEWHXNEPC9TQQSA9W9FZVYXLBMJTHJC9HZDONEJMMVJVEMHWCIBLAUYBAUFQOMYSN"));

            Assert.AreEqual("MMUKJ9EXZHFXVLVQSUFPHAHXPFNMPOZRHAIIMANCQNQRHSPRIN9NTPQKLDRRGJGNRAJTTWKJJBPXYWDGB", hash.Value);
        }
コード例 #2
0
        public void TestSubscriptionCreationAndRecreation()
        {
            var mask = new CurlMask();
            var subscriptionFactory = new MamChannelSubscriptionFactory(new InMemoryIotaRepository(), CurlMamParser.Default, mask);

            var root         = new Hash(Seed.Random().Value);
            var channelKey   = Seed.Random();
            var subscription = subscriptionFactory.Create(root, Mode.Restricted, channelKey.Value, true);

            var serializedSubscription = subscription.ToJson();

            var recreatedSubscription = subscriptionFactory.CreateFromJson(serializedSubscription);

            Assert.AreEqual(root.Value, recreatedSubscription.MessageRoot.Value);
        }
コード例 #3
0
        public static User UpdateUserWithTangleInfos(User user, IReadOnlyList <TryteString> ownDataWrappers)
        {
            var trytes          = user.TangleMessenger.GetMessages(user.PublicKeyAddress);
            var contact         = FilterRequestInfos(trytes);
            var decrypted       = new CurlMask().Unmask(ownDataWrappers[0], user.Seed);
            var decryptedString = decrypted.ToUtf8String();
            var decryptedUser   = JsonConvert.DeserializeObject <OwnDataUser>(decryptedString);

            user.Name     = decryptedUser.Name;
            user.ImageUrl = decryptedUser.ImageUrl;
            IAsymmetricKey privateKey = new NTRUPrivateKey(new TryteString(decryptedUser.PrivateKey).ToBytes());

            user.NtruKeyPair = new NTRUKeyPair(contact.PublicNtruKey, privateKey);
            return(user);
        }
コード例 #4
0
        public void TestMaskUnmask()
        {
            var mask = new CurlMask();
            var curl = new Curl(CurlMode.CurlP27);

            curl.Absorb(this.authId.ToTrits());
            var payloadTrits = this.payload.ToTrits();

            mask.Mask(payloadTrits, curl);

            curl.Reset();
            curl.Absorb(this.authId.ToTrits());
            var unmasked = mask.Unmask(payloadTrits, curl);

            Assert.AreEqual(this.payload.Value, Converter.TritsToTrytes(unmasked));
        }
コード例 #5
0
        public void TestPublicMessageCreation()
        {
            var seed     = new Seed("JETCPWLCYRM9XYQMMZIFZLDBZZEWRMRVGWGGNCUH9LFNEHKEMLXAVEOFFVOATCNKVKELNQFAGOVUNWEJI");
            var curlMask = new CurlMask();

            var channelFactory = new MamChannelFactory(CurlMamFactory.Default, CurlMerkleTreeFactory.Default, new InMemoryIotaRepository());
            var channel        = channelFactory.Create(Mode.Private, seed);

            var message         = channel.CreateMessage(new TryteString("IREALLYWANTTHISTOWORKINCSHARPASWELLPLEASEMAKEITHAPPEN"));
            var expectedAddress = curlMask.Hash(message.Root);

            Assert.AreEqual("RRPXQHDJY9BKXC9NGHDCSHRIDYORSUUEPFHXPQVDGSQTVYPCGVIZRWQINOUYFDUXTHFTKHLBOLYLHMKE9", message.Root.Value);
            Assert.AreEqual(expectedAddress.Value, message.Address.Value);
            Assert.AreEqual("OLHRFQPHPPQWTVSZNIZEKFOB9JPWKWQQPUCNLFAVEYCL9QVXRWFTDT9KPIHERRULOOBUKTJZJWKENTPLO", message.NextRoot.Value);

            Assert.AreEqual("OLHRFQPHPPQWTVSZNIZEKFOB9JPWKWQQPUCNLFAVEYCL9QVXRWFTDT9KPIHERRULOOBUKTJZJWKENTPLO", channel.NextRoot.Value);
        }
コード例 #6
0
        public async Task TestRestrictedMamCreationAndDecryption()
        {
            var seed = new Seed("JETCPWLCYRM9XYQMMZIFZLDBZZEWRMRVGWGGNCUH9LFNEHKEMLXAVEOFFVOATCNKVKELNQFAGOVUNWEJI");
            var mask = new CurlMask();

            var iotaRepository = new InMemoryIotaRepository();
            var channelFactory = new MamChannelFactory(CurlMamFactory.Default, CurlMerkleTreeFactory.Default, iotaRepository);
            var channelKey     = new TryteString("NXRZEZIKWGKIYDPVBRKWLYTWLUVSDLDCHVVSVIWDCIUZRAKPJUIABQDZBV9EGTJWUFTIGAUT9STIENCBC");
            var channel        = channelFactory.Create(Mode.Restricted, seed, SecurityLevel.Medium, channelKey);

            var message = channel.CreateMessage(TryteString.FromUtf8String("Hello everyone!"));
            await channel.PublishAsync(message);

            var messageTwo = channel.CreateMessage(TryteString.FromUtf8String("Hello everyone the second!"));
            await channel.PublishAsync(messageTwo);

            var messageThree = channel.CreateMessage(TryteString.FromUtf8String("Hello everyone the third!"));
            await channel.PublishAsync(messageThree);

            var subcriptionFactory = new MamChannelSubscriptionFactory(
                iotaRepository,
                CurlMamParser.Default,
                mask);

            var subscription = subcriptionFactory.Create(message.Root, Mode.Restricted, channelKey);

            var unmaskedMessages = await subscription.FetchAsync();

            Assert.AreEqual("Hello everyone!", unmaskedMessages[0].Message.ToUtf8String());
            Assert.AreEqual(message.NextRoot.Value, unmaskedMessages[0].NextRoot.Value);
            Assert.AreEqual(message.Root.Value, unmaskedMessages[0].Root.Value);
            Assert.AreEqual("Hello everyone the second!", unmaskedMessages[1].Message.ToUtf8String());
            Assert.AreEqual("Hello everyone the third!", unmaskedMessages[2].Message.ToUtf8String());

            var messageFour = channel.CreateMessage(TryteString.FromUtf8String("Hello everyone the fourth!"));
            await channel.PublishAsync(messageFour);

            unmaskedMessages = await subscription.FetchNext();

            Assert.AreEqual(1, unmaskedMessages.Count);
            Assert.AreEqual("Hello everyone the fourth!", unmaskedMessages[0].Message.ToUtf8String());

            var unmaskedSingleMessage = await subscription.FetchSingle(messageTwo.Root);

            Assert.AreEqual("Hello everyone the second!", unmaskedSingleMessage.Message.ToUtf8String());
        }
コード例 #7
0
ファイル: MamFlowTest.cs プロジェクト: kauxam/tangle-.net
        public async Task TestPrivateMamCreationAndDecryption()
        {
            var seed = new Seed("JETCPWLCYRM9XYQMMZIFZLDBZZEWRMRVGWGGNCUH9LFNEHKEMLXAVEOFFVOATCNKVKELNQFAGOVUNWEJI");
            var mask = new CurlMask();

            var iotaRepository = new InMemoryIotaRepository();
            var channelFactory = new MamChannelFactory(CurlMamFactory.Default, CurlMerkleTreeFactory.Default, iotaRepository);
            var channel        = channelFactory.Create(Mode.Private, seed);

            var message = channel.CreateMessage(TryteString.FromUtf8String("Hello everyone!"));
            await channel.PublishAsync(message);

            var messageTwo = channel.CreateMessage(TryteString.FromUtf8String("Hello everyone the second!"));
            await channel.PublishAsync(messageTwo);

            var messageThree = channel.CreateMessage(TryteString.FromUtf8String("Hello everyone the third!"));
            await channel.PublishAsync(messageThree);

            var subcriptionFactory = new MamChannelSubscriptionFactory(iotaRepository, CurlMamParser.Default, mask);
            var subscription       = subcriptionFactory.Create(message.Root, Mode.Private);

            var unmaskedMessages = await subscription.FetchAsync();

            Assert.AreEqual("Hello everyone!", unmaskedMessages[0].Message.ToUtf8String());
            Assert.AreEqual(message.NextRoot.Value, unmaskedMessages[0].NextRoot.Value);
            Assert.AreEqual(message.Root.Value, unmaskedMessages[0].Root.Value);
            Assert.AreEqual("Hello everyone the second!", unmaskedMessages[1].Message.ToUtf8String());
            Assert.AreEqual("Hello everyone the third!", unmaskedMessages[2].Message.ToUtf8String());

            var messageFour = channel.CreateMessage(TryteString.FromUtf8String("Hello everyone the fourth!"));
            await channel.PublishAsync(messageFour);

            unmaskedMessages = await subscription.FetchNext();

            Assert.AreEqual(1, unmaskedMessages.Count);
            Assert.AreEqual("Hello everyone the fourth!", unmaskedMessages[0].Message.ToUtf8String());
        }
コード例 #8
0
ファイル: MamFlowTest.cs プロジェクト: kauxam/tangle-.net
        public async Task TestInvalidMessageOnMamStreamShouldBeIgnored()
        {
            var seed = new Seed("JETCPWLCYRM9XYQMMZIFZLDBZZEWRMRVGWGGNCUH9LFNEHKEMLXAVEOFFVOATCNKVKELNQFAGOVUNWEJI");
            var mask = new CurlMask();

            var iotaRepository = new InMemoryIotaRepository();
            var channelFactory = new MamChannelFactory(CurlMamFactory.Default, CurlMerkleTreeFactory.Default, iotaRepository);
            var channelKey     = new TryteString("NXRZEZIKWGKIYDPVBRKWLYTWLUVSDLDCHVVSVIWDCIUZRAKPJUIABQDZBV9EGTJWUFTIGAUT9STIENCBC");
            var channel        = channelFactory.Create(Mode.Restricted, seed, SecurityLevel.Medium, channelKey);

            var message = channel.CreateMessage(TryteString.FromUtf8String("Hello everyone!"));
            await channel.PublishAsync(message);

            var bundle = new Bundle();

            bundle.AddTransfer(new Transfer
            {
                Address   = message.Address,
                Message   = TryteString.FromUtf8String("I do not belong here and should be ignored!"),
                Tag       = Tag.Empty,
                Timestamp = Timestamp.UnixSecondsTimestamp
            });

            bundle.Finalize();
            bundle.Sign();

            await iotaRepository.SendTrytesAsync(bundle.Transactions, 27, 14);

            var subcriptionFactory = new MamChannelSubscriptionFactory(iotaRepository, CurlMamParser.Default, mask);
            var subscription       = subcriptionFactory.Create(message.Root, Mode.Restricted, channelKey);

            var unmaskedMessages = await subscription.FetchAsync();

            Assert.AreEqual(1, unmaskedMessages.Count);
            Assert.AreEqual("Hello everyone!", unmaskedMessages[0].Message.ToUtf8String());
        }