/// <summary> /// Run the EDHOC protocol /// Command line: EDHOC <New key name> <validate key> URL /// </summary> /// <param name="cmds"></param> static void RunEdhoc(string[] cmds) { if (cmds.Length != 4) { Console.WriteLine("wrong number of arguments"); return; } EdhocInitiator send = new EdhocInitiator(_EdhocValidateKeys[cmds[2]]); byte[] data = send.CreateMessage1(); Request req = NewRequest("POST", new Uri(cmds[3])); req.Payload = data; req.Send(); Response response = req.WaitForResponse(); send.ParseMessage2(response.Payload, _EdhocServerKeys); data = send.CreateMessage3(); req = NewRequest("POST", new Uri(cmds[3])); req.Payload = data; req.Send(); response = req.WaitForResponse(); _OscopKeys[cmds[1]] = send.CreateSecurityContext(); }
public void CreateMessage1_1() { EdhocInitiator e = new EdhocInitiator(keyOctet); byte[] val = e.CreateMessage1(); Assert.That(val, !Is.EqualTo(null)); CBORObject obj = CBORObject.DecodeFromBytes(val); Assert.That(obj.Type, Is.EqualTo(CBORType.Array)); Assert.That(obj.Count, Is.EqualTo(7)); }
public void TestSharedSecret() { Request req; Uri uriHello = new Uri("coap://localhost:" + _serverPort + "/hello"); Uri uri = new Uri("coap://localhost:" + _serverPort + "/" + "edhoc"); CoapClient clientHello = new CoapClient(uriHello); CoapClient client = new CoapClient(uri); // Try and get hello -- should fail because no security setup. CoAP.Response resp = clientHello.Get(); Assert.AreEqual(CoAP.StatusCode.Unauthorized, resp.StatusCode); // Create and send message #1 for PSK EDHOC.EdhocInitiator init = new EdhocInitiator(psk); byte[] msg = init.CreateMessage1(); req = new Request(Method.POST); req.Payload = msg; resp = client.Send(req); Assert.AreEqual(CoAP.StatusCode.Changed, resp.StatusCode); // Process response message KeySet ks = new KeySet(); ks.AddKey(serverSignKey); init.ParseMessage2(resp.Payload, ks); // Post new message msg = init.CreateMessage3(); req = new Request(Method.POST); req.Payload = msg; resp = client.Send(req); Assert.AreEqual(StatusCode.Changed, resp.StatusCode); // Setup my security context. OSCOAP.SecurityContext ctx = init.CreateSecurityContext(); req = new Request(Method.GET); req.URI = uriHello; req.OscoapContext = ctx; resp = clientHello.Send(req); Assert.AreEqual(StatusCode.Content, resp.StatusCode); }