Esempio n. 1
0
        /// <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();
        }
Esempio n. 2
0
        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));
        }
Esempio n. 3
0
        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);
        }