public void Test_Onions() { var sut = new Onions(); Assert.True(sut.Name.Equals("Onions")); Assert.True(sut.Price.Equals(2.00m)); }
private void Peer_NewMessage(object sender, Message message) { if (ProcessedMessages.Contains(message)) { return; } ProcessedMessages.Add(message); Console.Write($"{Name} received message: "); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine(message); Console.ResetColor(); NewMessage?.Invoke(this, message); if (message.Type == MessageType.PublicKey) { var pubKey = new PubKey(message.GetDataString()); AllPubKeys.Add(pubKey); if (AllPubKeys.Count == RequiredPeerCount) { // every participant (say participant i in a predefined shuffling // order) uses the encryption keys of every participant j > i to create a layered // encryption of her output address. string onion = OnionEncrypt(AllPubKeys, OutputScript.ToString()); Broadcast(new Message(MessageType.Onions, onion)); } } else if (message.Type == MessageType.Onions) { var onions = message.GetDataCollection(); if (onions.Count() == 1) { Onions.Add(onions.Single()); if (Onions.Count == RequiredPeerCount) { if (SecretKey.CanDecrypt(Onions.First())) { var stripped = Decrypt(SecretKey, Onions).ToList(); stripped.Shuffle(); Broadcast(new Message(MessageType.Onions, stripped)); } } } else if (SecretKey.CanDecrypt(onions.First())) { var stripped = Decrypt(SecretKey, onions).ToList(); stripped.Shuffle(); if (NBitcoinHelpers.IsScript(stripped.First())) { Broadcast(new Message(MessageType.ShuffledScripts, stripped)); } else { Broadcast(new Message(MessageType.Onions, stripped)); } } } }