Esempio n. 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);
            }
        }
Esempio n. 2
0
        public unsafe NoiseProtocol(bool initiator, byte *sk, PskRef psk, byte[] publicKey = default,
                                    string id = default, TextWriter @out = default)
        {
            _initiator = initiator;
            _id        = id ?? "[NOISE]";
            _out       = @out;
            var psks = new List <PskRef> {
                psk
            };

            _state    = Protocol.Create(initiator, default, sk, (int)Crypto.EncryptionKeyBytes, publicKey, psks);
Esempio n. 3
0
        public void Can_handshake_on_connect_and_send_encrypted_payload()
        {
            var @out = new XunitDuplexTextWriter(_console, Console.Out);

            unsafe
            {
                using var ckp = GenerateEncryptionKey();
                using var skp = GenerateEncryptionKey();

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

                var sp = new NoiseProtocol(false, skp.PrivateKey, psk1, default, "[SERVER]", @out);
Esempio n. 4
0
        private static List <PskRef> GetPsks(JToken token, string property)
        {
            var tokens = token[property]?.Select(psk => Hex.Decode((string)psk)).ToList();

            if (tokens == default)
            {
                return(new List <PskRef>(0));
            }

            var list = new List <PskRef>(tokens.Count);

            foreach (var buffer in tokens)
            {
                list.Add(PskRef.Create(buffer));
            }
            return(list);
        }
Esempio n. 5
0
        public static void Main(string[] args)
        {
            // Generate static keys for the client and the server.
            using (var clientStatic = KeyPair.Generate())
                using (var serverStatic = KeyPair.Generate())
                {
                    unsafe
                    {
                        var psk1 = PskRef.Create();
                        var psk2 = PskRef.Create(psk1.ptr);

                        // Initialize and run the server.
                        var serverState = protocol.Create(false, s: serverStatic.PrivateKey, sLen: KeyPair.DhLen, psks: Singleton(psk2));
                        _ = Task.Run(() => Server(serverState));

                        // Initialize and run the client.
                        var clientState = protocol.Create(true, s: clientStatic.PrivateKey, sLen: KeyPair.DhLen, rs: serverStatic.PublicKey, psks: Singleton(psk1));
                        var client      = Task.Run(() => Client(clientState));

                        client.GetAwaiter().GetResult();
                    }
                }
        }