示例#1
0
        public static void ClassSetup(TestContext ctx)
        {
            byte[] cert = Base64.Decode("MIIBHDCBz6ADAgECAhRzRMjlxi8nPr0B6DoN7e4sxwyb6jAFBgMrZXAwGDEWMBQGA1UEAwwNQ09TRSBDQSBUaHJlZTAeFw0xOTA3MDgwMTAyMjBaFw0yNzA5MjQwMTAyMjBaMBYxFDASBgNVBAMMC0NPU0UgRUUgU2l4MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEo0gYfGOYqcwGVra0OEiE0XXST/W4pTJ/HdTXZ7Ek/ycJZZn0jkHNQ9UCP7NJ16LOcZLUofev7OMHxct5DvuaPjAFBgMrZXADQQAqm5No83WC9W7tOkicP9wGu1HSdGCOR0CVjjzHfCfzRQkuSW2tRLBlstxzpqY6yrIuccMifhcrCdMe3fsPPS8G");
            CBORObject objKey = CBORObject.NewMap();
            objKey[CoseKeyKeys.KeyType] = GeneralValues.KeyType_EC;
            objKey[CoseKeyKeys.Algorithm] = AlgorithmValues.ECDSA_256;
            objKey[CoseKeyParameterKeys.EC_Curve] = GeneralValues.P256;
            objKey[CoseKeyParameterKeys.EC_D] = CBORObject.FromObject(Hex.Decode("7D29C4C7CDCBB2209CAD01F3BB4C9009782F66C2E1A6C592DF838A0795A6D87B"));
            objKey[CoseKeyParameterKeys.EC_X] = CBORObject.FromObject(Hex.Decode("A348187C6398A9CC0656B6B4384884D175D24FF5B8A5327F1DD4D767B124FF27"));
            objKey[CoseKeyParameterKeys.EC_Y] = CBORObject.FromObject(Hex.Decode("096599F48E41CD43D5023FB349D7A2CE7192D4A1F7AFECE307C5CB790EFB9A3E"));

            OneKey key = new OneKey(objKey);

            X509Key = new TlsKeyPair(cert, key);

            cert = Hex.Decode("3082011D3081D0A00302010202147344C8E5C62F273EBD01E83A0DEDEE2CC70C9BE9300506032B657030183116301406035504030C0D434F5345204341205468726565301E170D3139303730383031303231395A170D3237303932343031303231395A30173115301306035504030C0C434F534520454520466976653059301306072A8648CE3D020106082A8648CE3D03010703420004E8D9873804129C0A11238675C144CF00A7AF0E1A8ACF54A87BE76B9A0F2DBADF5384966EFD9C05B3DCEB3C074CF32410F033D962620C41F3892C0B94E3955D77300506032B65700341007BB0A5201998E6FC120364B96DD88211DD1FC907888C380E5A186BCD2F6A4CB238853EC22E5537CBCE5C157E59B4AEE71383372345932D0D40260857053FA608");
            objKey = CBORObject.NewMap();
            objKey[CoseKeyKeys.KeyType] = GeneralValues.KeyType_EC;
            objKey[CoseKeyKeys.Algorithm] = AlgorithmValues.ECDSA_256;
            objKey[CoseKeyParameterKeys.EC_Curve] = GeneralValues.P256;
            objKey[CoseKeyParameterKeys.EC_D] = CBORObject.FromObject(Hex.Decode("019F4FD19429DE078B2A013F5218CD64C24FABA1F6F0BE924E628E63BC67A8AC"));
            objKey[CoseKeyParameterKeys.EC_X] = CBORObject.FromObject(Hex.Decode("E8D9873804129C0A11238675C144CF00A7AF0E1A8ACF54A87BE76B9A0F2DBADF"));
            objKey[CoseKeyParameterKeys.EC_Y] = CBORObject.FromObject(Hex.Decode("5384966EFD9C05B3DCEB3C074CF32410F033D962620C41F3892C0B94E3955D77"));

            X509Client = new TlsKeyPair(cert, new OneKey(objKey));
        }
示例#2
0
        private static void SetUserKey(string[] cmds)
        {
            if (cmds.Length < 2 || 3 < cmds.Length)
            {
                Console.WriteLine("Incorrect number of args");
            }
            else
            {
                if (Program._TlsKeys.ContainsKey(cmds[1]))
                {
                    ClientKey = Program._TlsKeys[cmds[1]];
                }
                else
                {
                    Console.WriteLine("Can't find TLS key {0}", cmds[1]);
                }

                if (cmds.Length == 3)
                {
                    switch (cmds[2].ToLower())
                    {
                    case "kid":
                        ClientKeyType = 1;
                        break;

                    case "key":
                        ClientKeyType = 2;
                        break;

                    default:
                        Console.WriteLine("Unrecognized cnf key type");
                        break;
                    }
                }
            }
        }
示例#3
0
 /// <summary>
 /// Create a client only channel and use a given endpoint
 /// </summary>
 /// <param name="tlsKey">Authentication information</param>
 /// <param name="ep">client side endpoint</param>
 public TLSClientChannel(TlsKeyPair tlsKey, System.Net.EndPoint ep)
 {
     _localEndPoint = ep;
     _tlsKey        = tlsKey ?? throw new ArgumentNullException(nameof(tlsKey));
 }
示例#4
0
 /// <summary>
 /// Create a client only channel and use a given point
 /// </summary>
 /// <param name="tlsKey">Authentication information</param>
 /// <param name="port">client side UDP port</param>
 public TLSClientChannel(TlsKeyPair tlsKey, int port)
 {
     _port   = port;
     _tlsKey = tlsKey ?? throw new ArgumentNullException(nameof(tlsKey));
 }
 public void TestRpk()
 {
     TlsKeyPair        tlsKey = new TlsKeyPair(RpkOneKey.PublicKey(), RpkOneKey);
     TLSClientEndPoint ep     = new TLSClientEndPoint(RpkOneKey);
 }
示例#6
0
 public TLSClientEndPoint(TlsKeyPair userKey, System.Net.EndPoint localEndPoint, ICoapConfig config) : this(new TLSClientChannel(userKey, localEndPoint), config)
 {
 }
示例#7
0
 public TLSClientEndPoint(TlsKeyPair userKey, System.Net.EndPoint localEndPoint) : this(userKey, localEndPoint, CoapConfig.Default)
 {
 }
示例#8
0
 public TLSClientEndPoint(TlsKeyPair userKey, int port, ICoapConfig config) : this(new TLSClientChannel(userKey, port), config)
 {
 }
示例#9
0
 public TLSClientEndPoint(TlsKeyPair userKey, ICoapConfig config) : this(userKey, 0, config)
 {
 }
示例#10
0
 public TLSClientEndPoint(TlsKeyPair userKey, int port = 0) : this(userKey, port, CoapConfig.Default)
 {
 }
示例#11
0
 internal TLSClient(TlsSession session, TlsKeyPair tlsKey, KeySet cwtTrustKeys) : base(session, tlsKey, cwtTrustKeys)
 {
 }
示例#12
0
 internal TLSClient(TlsSession session, TlsKeyPair userKey) : base(session, userKey)
 {
 }
示例#13
0
        public static void KdcToken(string[] cmds)
        {
            if (cmds.Length != 7)
            {
                Console.WriteLine("Incorrect argument Count: KdcToken <AS> <Audience> <Scope> <OscoreKeys> <Kdc> <Store>");
                return;
            }

            Request request = new Request(Method.POST)
            {
                URI = new Uri(cmds[1])
            };

            Oauth.Request oRequest = new Oauth.Request(Oauth.Request.GrantType_ClientToken)
            {
                Audience = cmds[2],
                Scope    = CBORObject.FromObject(cmds[3])
            };

            request.Payload       = oRequest.EncodeToBytes();
            request.ContentType   = MediaType.ApplicationAceCbor;
            request.OscoreContext = Program._OscoreKeys[cmds[4]];

            request.Send();
            Response response = request.WaitForResponse();

            if (response.StatusCode != StatusCode.Created)
            {
                Console.WriteLine($"Error with response from the AS - Code is {response.StatusCode}");
                return;
            }

            Oauth.Response oResponse = Oauth.Response.FromCBOR(response.Payload);

            Confirmation cnf = oResponse.Confirmation;

            byte[][] oscoreSalts = new byte[2][];

            request = new Request(Method.POST)
            {
                URI = new Uri(cmds[5])
            };

            CBORObject kdcRequest = CBORObject.NewMap();

            kdcRequest.Add(Oauth_Parameter.Access_Token.Key, oResponse.Token);
            if (cnf.AsCBOR.ContainsKey(CBORObject.FromObject(Confirmation.ConfirmationIds.COSE_OSCORE)))
            {
                oscoreSalts[0] = SecureRandom.GetNextBytes(new SecureRandom(), 8);
                kdcRequest.Add(Oauth_Parameter.CNonce.Key, CBORObject.FromObject(oscoreSalts[0]));
                request.ContentFormat = MediaType.ApplicationAceCbor;
            }

            request.Payload = kdcRequest.EncodeToBytes();


            request.Send();
            response = request.WaitForResponse();

            if (response.StatusCode != StatusCode.Created)
            {
                Console.WriteLine("Failure");
                return;
            }

            Console.WriteLine("Successfully posted to KDC");
            CBORObject cborResponse = CBORObject.DecodeFromBytes(response.Payload);

            GroupData groupData = new GroupData();

            if (cborResponse.ContainsKey(Oauth_Parameter.CNonce.Key))
            {
                groupData.ServerNonce = cborResponse[Oauth_Parameter.CNonce.Key].GetByteString();
            }

            if (cborResponse.ContainsKey("sign_info"))
            {
                groupData.SignInfo = CBORObject.DecodeFromBytes(cborResponse["sign_info"].GetByteString());
            }
            else
            {
                groupData.SignInfo = CBORObject.DecodeFromBytes(new byte[] { 0x83, 0x27, 0x06, 0x82, 0x01, 0x06 });
            }

            if (cborResponse.ContainsKey("pub_key_enc"))
            {
                groupData.PubKeyEnc = cborResponse["pub_key_enc"].GetByteString();
            }

            groupData.SignNonce = cborResponse["SignNonce"].GetByteString();

            if (cnf.AsCBOR.ContainsKey(CBORObject.FromObject(Confirmation.ConfirmationIds.COSE_OSCORE)))
            {
                CBORObject oscoreContext = cnf.AsCBOR[CBORObject.FromObject(Confirmation.ConfirmationIds.COSE_OSCORE)];

                byte[] salt = new byte[0];
                if (oscoreContext.ContainsKey(CBORObject.FromObject(6)))
                {
                    salt = oscoreContext[CBORObject.FromObject(CBORObject.FromObject(6))].GetByteString();
                }
                CBORObject alg = null;
                if (oscoreContext.ContainsKey(CBORObject.FromObject(5)))
                {
                    alg = oscoreContext[CBORObject.FromObject(5)];
                }
                CBORObject kdf = null;
                if (oscoreContext.ContainsKey(CBORObject.FromObject(4)))
                {
                    kdf = oscoreContext[CBORObject.FromObject(4)];
                }
                byte[] keyContext = null;
                if (oscoreContext.ContainsKey(CBORObject.FromObject(7)))
                {
                    keyContext = oscoreContext[CBORObject.FromObject(7)].GetByteString();
                }

                oscoreSalts[1] = cborResponse[Oauth_Parameter.CNonce.Key].GetByteString();

                byte[] newSalt = new byte[salt.Length + oscoreSalts[0].Length + oscoreSalts[1].Length];
                Array.Copy(salt, newSalt, salt.Length);
                Array.Copy(oscoreSalts[0], 0, newSalt, salt.Length, oscoreSalts[0].Length);
                Array.Copy(oscoreSalts[1], 0, newSalt, salt.Length + oscoreSalts[0].Length, oscoreSalts[1].Length);

                SecurityContext oscoapContext = SecurityContext.DeriveContext(
                    oscoreContext[CBORObject.FromObject(1)].GetByteString(), keyContext,
                    oscoreContext[CBORObject.FromObject(2)].GetByteString(),
                    oscoreContext[CBORObject.FromObject(3)].GetByteString(),
                    newSalt, alg, kdf);
                oscoapContext.UserData = groupData;

                Program._OscoreKeys.Add(cmds[6], oscoapContext);
            }
            else if (cnf.AsCBOR.ContainsKey(CBORObject.FromObject(Confirmation.ConfirmationIds.COSE_Key)))
            {
                TlsKeyPair tlsKey = new TlsKeyPair(cnf.Key);
                tlsKey.PrivateKey.UserData = groupData;

                Program._TlsKeys.Add(cmds[5], new TlsKeyPair(cnf.Key));
            }
            else
            {
                Console.WriteLine("Don't know how to get the key");
            }
        }
示例#14
0
 public TLSSession(IPEndPoint ipEndPoint, QueueItem toSend, TlsKeyPair tlsKey)
 {
     _ipEndPoint = ipEndPoint;
     _toSend     = toSend;
     _userKey    = tlsKey;
 }