public void HandleClosePipeRequest() { ClosePipeRPC close = new ClosePipeRPC(100); uint requestId = close.RequestID; //create the connection ControlPipe c = new ControlPipe(tunnel); EncryptedPacket packet = new EncryptedPacket(tunnel.ID, 0); packet.RPCs.Add(new CreateAnonymousPipe(PipeType.Duplex.ToString(), 100)); c.HandlePacket(packet); tunnel.PacketInterceptor(p => { Assert.That(p.RPCs.Count > 0); Assert.That(p.RPCs.First.SerializationTag == (byte)RPCType.Ok); OkRPC ok = (OkRPC)p.RPCs.First; Assert.IsTrue(ok.RPCID == requestId); }); tunnel.PipeInterceptor(connection => { Assert.That(connection.ID == 100); }); packet = new EncryptedPacket(tunnel.ID, 0); packet.RPCs.Add(close); c.HandlePacket(packet); }
private void SendOk(UInt32 rpid) { OkRPC ok = new OkRPC(rpid); EncryptedPacket p = new EncryptedPacket(this.mTunnel.ID, this.ID); p.RPCs.Add(ok); this.mTunnel.EncryptAndSendPacket(p); }
public void HandleRekey() { //A rekey cannot happen until a prepare rekey rpc has been sent (note that they can be send together) //todo: add a test to send a prepare rekey and rekey together bool trigger1, trigger2, trigger3; trigger1 = trigger2 = trigger3 = false; KeyPair pair = Sodium.PublicKeyBox.GenerateKeyPair(); PrepareRekey prepareRekey = new PrepareRekey(pair.PublicKey); RekeyNow rekey = new RekeyNow(); tunnel.PacketInterceptor(p => { Assert.That(p.RPCs.Count > 0); Assert.That(p.RPCs.First.SerializationTag == (byte)RPCType.Refuse); Refuse rpc = (Refuse)p.RPCs.First; trigger1 = true; }); ControlPipe c = new ControlPipe(tunnel); EncryptedPacket packet = new EncryptedPacket(tunnel.ID, 0); packet.RPCs.Add(rekey); c.HandlePacket(packet); Assert.IsTrue(trigger1, "Refuse block never called"); tunnel.PacketInterceptor(p => { Assert.That(p.RPCs.Count > 0); Assert.That(p.RPCs.First.SerializationTag == (byte)RPCType.RekeyResponse); RekeyResponse ok = (RekeyResponse)p.RPCs.First; Assert.IsTrue(ok.NextPublicKey.Length == 32); trigger2 = true; }); packet = new EncryptedPacket(tunnel.ID, 0); packet.RPCs.Add(new PrepareRekey(new byte[] { 1, 2, 3 })); c.HandlePacket(packet); Assert.IsTrue(trigger2, "Rekey ack block never called"); tunnel.PacketInterceptor(p => { Assert.That(p.RPCs.Count > 0); Assert.That(p.RPCs.First.SerializationTag == (byte)RPCType.Ok); OkRPC ok = (OkRPC)p.RPCs.First; Assert.IsTrue(ok.RPCID == rekey.RequestID); trigger3 = true; }); packet = new EncryptedPacket(tunnel.ID, 0); packet.RPCs.Add(rekey); c.HandlePacket(packet); Assert.IsTrue(trigger1, "Rekey now block never called"); Assert.IsTrue(trigger3); }