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 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);
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);
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); }
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(); } } }