Example #1
0
        public void Setup()
        {
            _echoServer = new SocketServer(new EchoProtocol(false));
            _echoServer.Start(11000);

            _echoClient = new SocketClient(new EchoProtocol(true));
            _echoClient.Connect("localhost", 11000);

            unsafe
            {
                var ckp = KeyPair.Generate();
                var skp = KeyPair.Generate();

                var psk1 = PskRef.Create();
                var psk2 = PskRef.Create(psk1.ptr);

                var sp = new NoiseProtocol(false, skp.PrivateKey, psk1);
                _noiseServer = new SocketServer(sp);
                _noiseServer.Start(12000);

                var cp = new NoiseProtocol(true, ckp.PrivateKey, psk2, skp.PublicKey);
                _noiseClient = new SocketClient(cp);
                _noiseClient.Connect("localhost", 12000);
            }
        }
        public void ActTwoResponderSide(string actOneValidInput, string expectedHashHex, string expectedOutputHex)
        {
            WithResponderHandshakeInitiatedToKnownLocalKeys();

            var buffer = new ArrayBufferWriter <byte>(50);

            NoiseProtocol.ProcessHandshakeRequest(new ReadOnlySequence <Byte>(actOneValidInput.ToByteArray()), buffer);

            var expectedOutput = expectedOutputHex.ToByteArray();

            Assert.Equal(expectedOutput.Length, buffer.WrittenCount);
            Assert.Equal(expectedOutput, buffer.WrittenSpan.ToArray());
            Assert.Equal(expectedHashHex.ToByteArray(), NoiseProtocol.HandshakeContext.Hash);
        }
        public void ActOneInitiatorOutputFitsLightningNetworkBolt8testVector(string expectedHashHex, string expectedOutputHex)
        {
            WithInitiatorHandshakeInitiatedToKnownLocalAndRemoteKeys();

            var buffer = new ArrayBufferWriter <byte>(50);

            NoiseProtocol.StartNewInitiatorHandshake(Bolt8TestVectorParameters.Responder.PublicKey, buffer);

            var expectedOutput = expectedOutputHex.ToByteArray();

            Assert.Equal(buffer.WrittenCount, expectedOutput.Length);
            Assert.Equal(buffer.WrittenSpan.ToArray(), expectedOutput);
            Assert.Equal(expectedHashHex.ToByteArray(), NoiseProtocol.HandshakeContext.Hash);
        }
        public void ActThreeInitiatorSide(string validInputHex, string expectedHashHex, string expectedOutputHex)
        {
            WithInitiatorHandshakeInitiatedToKnownLocalAndRemoteKeys();

            WithInitiatorActOneCompletedSuccessfully();

            var buffer = new ArrayBufferWriter <byte>();

            NoiseProtocol.ProcessHandshakeRequest(new ReadOnlySequence <Byte>(validInputHex.ToByteArray()), buffer);

            var expectedOutput = expectedOutputHex.ToByteArray();

            Assert.Equal(expectedOutput.Length, buffer.WrittenCount);
            Assert.Equal(expectedHashHex.ToByteArray(), NoiseProtocol.HandshakeContext.Hash);
            Assert.Equal(buffer.WrittenSpan.ToArray(), expectedOutput);
        }
        private void WithInitiatorActOneCompletedSuccessfully()
        {
            IBufferWriter <byte> buffer = new ArrayBufferWriter <byte>(50);

            NoiseProtocol.StartNewInitiatorHandshake(Bolt8TestVectorParameters.Responder.PublicKey, buffer);
        }