public void TestHashing() { var mask = new CurlMask(); var hash = mask.Hash(new TryteString("L9DRGFPYDMGVLH9ZCEWHXNEPC9TQQSA9W9FZVYXLBMJTHJC9HZDONEJMMVJVEMHWCIBLAUYBAUFQOMYSN")); Assert.AreEqual("MMUKJ9EXZHFXVLVQSUFPHAHXPFNMPOZRHAIIMANCQNQRHSPRIN9NTPQKLDRRGJGNRAJTTWKJJBPXYWDGB", hash.Value); }
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); }
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); }
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)); }
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); }
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()); }
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()); }
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()); }